With those constraints in mind, we were able to provide an Agile framework that ensures business continuity, continuously prepares the business for a sunset of the legacy stack and drives an integration with the new system. By providing “good enough” solutions, we minimise maintenance costs.
- Build: this team leverages the Client’s needs of new functionalities with the existing solution using Agile mind-set. They extend the legacy system by adding new functionalities and technical solutions that support business growth. The team helps the Client with their backlog management in accordance with the Client’s calendar.
- Run: this team uses Kanban to resolve all incoming issues. Full incident management is in place. Ticket management is based on P1 to P4 priority and SLAs are managed in accordance with the customer requirements. The team provides proactive and reactive support in their daily work. This means that on the top of the typical reactive support tasks, they also proactively perform preventive management with regular system health checks and database monitoring.
The legacy stack is a complex environment with multiple exceptions and loops. It also communicates with a mainframe, therefore every change we make has to be carefully planned and considered, so it establishes smooth business operations without causing errors.
To prepare the legacy system for a sunset, every change we make in key components is also an integration with the strategic solution. We gradually shift away from the legacy system, so that more and more information is processed by the new solution.
We integrate new components in the legacy system with the new system in three ways:
- An end user keeps using the legacy solution.
- The new and the old systems work in parallel until the legacy functionality can be switched off.
To address it, we make sure that:
- Only the Run team has access to the live code. This way, we are sure that the live code is changed only by people who know its complexity and dependencies by heart, therefore they will not introduce changes that might cause errors.
- 4-eye check for all development.
- Performing code reviews. Everything that the Build team creates, gets a review before it is uploaded.
- 24/7 support.
Integration maintenance requires a specific approach as well. Integrating two environments that are running in parallel, shrinks the maintenance window. The more integration we introduce, the more interdependencies we have to check, and the smaller the maintenance window gets. To enable smooth legacy sunset and to ensure consistency between the two systems until the legacy solution is obsolete, we routinely run operability testing and apply domino effects prevention techniques. Additionally, keeping the domain knowledge was challenging in such a setup. The induction process is long (e.g. six months), and it is problematic to replace people with domain knowledge. To address that, we have applied a following setup:
- We make it possible for our people to work with new technologies and to develop themselves. This does not affect our Client’s capacity.
- We encourage our people to rotate between Run and Build teams.
- We make sure our teams understand how important their work is to the Client.
- We also offer financial bonuses instead of the typical time in lieu solutions.