There are many organizational initiatives with respect to modernizing legacy applications. So how do you go about doing that? Before we answer that question it is useful to think about the characteristics of legacy systems. They tend to be tightly coupled in a variety of ways (mixing process logic with business rules and presentation logic with connectivity etc.). Additionally, they could support both real-time and batch operations for critical business processes. They also tend to support a plethora of downstream processes that have embedded in them various assumptions about data format, file layouts, data semantics, interface behavior, and error handling. Not to mention the variety of interfaces that external applications use to interact with a legacy application.
So we are back to the original question of modernizing legacy apps. There are a variety of design strategies to undertake when refactoring these applications:
- Eliminate/reduce tight coupling among legacy systems by placing a layer of abstraction between them. This in turn can be pursued in many ways - using reliable messaging, or using a service mediation layer, or using a business process orchestration layer
- Prevent point to point integrations between service consumers and legacy service providers. Without a mediation layer that shields consumers you will be having a tough time decommissioning legacy capabilities.
- Refactor functionality iteratively bit by bit. Migrate functional logic from the legacy system and determine how best to refactor it and place it in your target architecture/platform. Maybe you want to create a family of web service capabilities wrapping legacy programs, extract business rules and place them in a rules engine, and remove user interface screens and host them from an application server.
- Stop making any significant enhancements to legacy systems and invest in your target platform only. If possible, you can implement business requirements by refactoring legacy capabilities instead of enhancing the legacy system only.
- Re-route data operations against strategic data sources and update legacy systems using asynchronous messaging. This will enable your target data source be the definitive system of record and legacy stores consume data from the master source. This is useful when you want to improve data quality as well - you may not be able to put in business rules preventing bad data from entering your legacy systems. Instead you can focus on improving quality in the strategic source and mandating legacy stores to accept the right quality of data.













These seem like great strategies, Vijay. Was just reading how some software suppliers, like Pitney Bowes Business Insight, have now integrated their data quality, data governance and data integration solutions on a single platform that interfaces with leading ERP and CRM systems. Seems like its all coming together.