“It is not the strongest or the most intelligent who will survive but those who can best manage change”
– Charles Darwin
Not a day goes by, when I don’t come across a customer or prospect sharing with me their struggles in maintaining legacy applications. With the breathtaking advances in technologies and application development frameworks, what might have appeared as a genuinely valid choice even a decade ago, is proving to be a legacy burden now. Applications built using Delphi, Progress, or sometimes even older mainframe based technology frameworks are some of the common modernization challenges that we encounter. Whether it is moving to Cloud/SaaS model, or reengineering for mobile, or moving to a micro services architecture, the business case for modernization of legacy applications is very strong, and the ROI is proven.
What surprises me is the fact that even technically adept and innovative companies are unsure about how to handle modernization, and in a pressure to focus on the current business needs, tend to continuously put it on the back burner. Unfortunately, this tendency to procrastinate, and ‘let’s deal with it later’ kind of approach can have serious, and often disastrous business consequences. In this blog, I will attempt to present a broad overview of the challenges, and suggest a pragmatic approach to handle modernization of legacy applications.
Typical pain points:Some of the frequently encountered pain points in dealing with legacy applications can be grouped as follows:
- Lack of flexibility and scalability due to a rigid architecture
- Difficulty in integrating with current modular, and flexible IT architectures
- Piled up technology debt and lack of platform support
- Expensive to maintain
- Shrinking employee expertise, and difficulty in recruiting new people with skills in legacy technologies
Challenges: While the nature of pain points associated with legacy applications could vary from business to business, some of the typical challenges or constraints that prevent or delay modernization efforts are as follows:
- Undocumented code
- Inability to refactor old code
- Lack of capacity and expertise in new/emerging technologies
- Pressure to support existing customers
Whatever may be the nature of pain points and challenges, businesses must adopt a strategic, and systematic approach towards application modernization as outlined below:
a) Assessment and Modernization roadmap: The first step in any modernization exercise is a thorough appraisal and assessment of the IT/Technology landscape to:
- Identifying the current pain points
- Map current (As Is) and target (To Be) state of the application/IT systems
- Analyze the current application and code performance
- Paint target state architecture and modernization options
- Assess resource requirements, and impact analysi
- Suggest modernization options, risk mitigation strategies, and create a roadmap with priorities
b) Modernization Options: Once a thorough assessment of the current technology landscape is made, an appropriate decision must be taken on the optimum modernization option, based on various factors including complexity, risk, business need, timeframe, and cost. The typical application modernization options could be:
- i) Refactoring, where the internal code is improved, while keeping the external behavior unchanged. Usually in a refactoring exercise, the focus is on simplifying the code to make it more maintainable, and this usually tends to be a low-risk option.
- ii) Reengineering, where parts of the existing system or application will be reused, while other parts will be added, or substantially modified to create a more robust and easier to maintain application. This could typically involve a major redesign of the application architecture, tends to be more expensive than refactoring, and carries a higher risk than refactoring.
- iii) New Development, is perhaps the most radical, high-risk, and expensive modernization option. If the effort involved and complexity in transforming the legacy application to a target state is far more than what is entailed in building a new application, and when the potential rewards outweigh the potential costs and risks, then this could be the preferred modernization option.
Irrespective of the modernization option, one should consider the following key aspects in the design and development of the target-state application:
- Adopt a modular approach for ease of development and maintenance
- Think in terms of APIs to make integrations and interoperability easier
- Create an API layer to facilitate seamless communication
- Think ahead, and irrespective of the nature of deployment think Cloud first and provide for a multi-tenant model, which is becoming an absolute necessity
- Break monolithic blocks into fine grained components
- Focus on reuse
- Create scalable, and flexible Data, business, technology, and information architectures with a future, platform usage perspective
c) Resources and Implementation Partners: In most of the cases, availability of skilled resources and their capacity is the biggest factor that determines the pace, and success of any modernization exercise. After an objective assessment of the technology landscape is made, based on which a modernization option is selected, one should evaluate if the needed skills and capacity to execute are available internally. If not, it would be prudent to work with a strategic partner that has proven expertise in application modernization, and who is familiar with the current and target technology landscape.
d) Execution Strategies: As is the case with any transformation exercise, strategic planning, disciplined execution, risk mitigation, and rigorous monitoring are critical for the success of any application modernization initiatives. While there is no silver bullet for success, in my experience the following execution strategies have proven to be of great value:
- i) Right skill and capacity buildup
- ii) Addressing architectural changes early on
- iii) Low risk pilots to test the validity of modernization strategy
- iv) Focus on incremental delivery of value, instead of a big bang approach
- v) Introduce the change seamlessly and minimize impact
- vi) Migration strategy for all functionally critical components
To sum up, it is futile to struggle with legacy frameworks, and delay taking the difficult, but necessary decisions on modernization. The risks of inaction and delay could be catastrophic, and the potential rewards are too obvious to ignore. It’s never too late to embrace change!