For years, commercial software providers have delivered turnkey software applications to their customers that address a focused set of business requirements. These applications implement a robust set of business functions that capture and promote industry-wide best practices and provide an affordable alternative to custom software development.
However, licensees of these software packages frequently need to address functional gaps between what the software provider delivers and what their unique business requirements demand. Closing these gaps requires the licensee to either customize the software solution or wait for future product enhancements to arrive. Most choose to customize the package to address fundamental product gaps and to implement new features that are competitive differentiators.
While this implementation approach appears to be a cost-effective and timely way to implement complex software functionality, it does introduce something commonly referred to as the “upgrade dilemma”-the situation that arises when the cost of upgrading a solution to the newest release exceeds the cost of starting over from scratch.
One of the important value propositions in acquiring commercial software is that the vendor provides functional enhancements to the application through subsequent releases. Upgrading a customized software application often requires tedious retrofitting of customizations to the newest release and comprehensive regression testing of the entire software package-even for minor upgrades. Many customers choose to defer the upgrade process due to these costs, but this exacerbates the problem because the deployed version of the software becomes more difficult to upgrade in the future.
Metaprogramming to the Rescue
Metaprogramming to the rescue
The primary reason why upgrading customized software is so costly is because of the techniques employed to perform the customization. In most cases, software is customized by altering the underlying source code of a commercial package or by changing the parameters that define a model-driven software product. Both approaches involve changing aspects of the code or data structure provided by the vendor. Any changes made to software assets provided by a commercial vendor make upgrades more complex, riskier and more expensive.
Metaprogramming describes the technique of using one software program to alter the behavior of another-either at compile time or at run-time. The benefits attained through metaprogramming are traditionally described in terms of higher productivity and reduced testing. However, metaprogramming techniques also provide the benefit of isolating customizations and ensuring a more cost-effective upgrade path.
Adopting metaprogramming as a vendor-supported approach for software customization benefits both the vendor and customer. From the vendor’s perspective, releasing selective source code is always a concern, even when necessary to allow customers more control over their customizations. Metaprogramming techniques mitigate this need, yet still provide customers the flexibility to customize the software in a controlled manner.
From the customer’s perspective, the approach gives them the ability to make wholesale modifications to the application, while retaining a straightforward and cost-effective upgrade path-crucial for ensuring the long-term TCO benefit of adopting vendor-supplied software.
Bill Hyman is Senior Solutions Consultant at S1 Enterprise. Bill has over 20 years of experience in business management and technology. Before joining S1, Bill spent more than 10 years with Fidelity National Information Services. Before Fidelity, Bill was Managing Consultant and Practice Lead for Ballantyne Consulting Group, where he managed the company’s software development practice. Throughout his career, Bill has led implementation projects for many large financial institutions, including some of the country’s largest banks. Bill is a graduate of Clemson University, with a degree in Industrial Management with an emphasis in Computer Information Systems. He can be reached at firstname.lastname@example.org.