There are three main Agile-DevOps approaches to legacy modernization that can reveal operational issues of a modernized application. Each method can also expose what expectations have not been realized even when operational issues aren't present.
Re-hosting a legacy system to a new platform
Re-hosting a legacy system on a new platform without major changes to the system seems to be the easiest option. This approach includes legacy systems that work well in-house and are re-hosted to run in the cloud without issues.
The complexity of dependencies is likely to increase with frequent upgrades and re-patches.
This method is less desirable when operational issues reveal that running the re-hosted legacy system doesn't scale or consume resources more efficiently than on the old platform. Running on a new platform may require major changes to the legacy code on specific resource uses.
Migrating legacy systems to a relational database system
While moving an old application to a relational database system seems like a good legacy modernization technique, the Agile-DevOps approach may reveal operational issues querying the relational database. Such problems include slow query responses, network latency, overloading the server hosting the database, excessive resource consumption and improper partitioning of data.
To minimize operational issues and achieve query optimization, start the Agile-DevOps approach with the incremental iterations of database optimization. This encompasses table normalization and designing indexes to support efficient queries.
Decomposing legacy systems into service-related components
If you're going the legacy-system-decomposition route, a business process improvement plan should be in place before starting the Agile-DevOps approach. The plan helps determine which legacy-system service-related components should be extracted for incorporation into a modernized application, such as Software as a Service.
More on legacy modernization
Five signs it's time for app modernization
What to consider before legacy migration
To make it easier to untangle component dependencies, start with the incremental iterations of decomposition. The complexity of dependencies is likely to increase with frequent upgrades and re-patches.
Once the dependencies are successfully untwisted, the service-related components can be accepted, rejected or combined. The accepted components can be put in a repository for consideration in other legacy modernization projects.
Service components can be rejected if they aren't used anymore, are outdated or result in slow responses. Accepted service components do not always mean that dependencies among these components are acceptable.
Accepted dependencies may require restructuring of accepted service components. Use the Agile-DevOps approach for incremental iterations of component reconstruction. During the iterations, combine dependencies to result in fewer service components. The DevOps iterations of operations can reveal operational issues of an application with accepted service components.
This was first published in February 2014