What “Legacy” means.
A legacy system is an outdated software application or IT infrastructure still creates value, but struggles with modern technology integration, maintenance challenges, and operational inefficiencies. Characterized by their outdated architecture and stagnation in development, these systems often hinder business innovation and progress, particularly in SMBs.
Our definition during the Stream
When discussing a Legacy, we often think of something “bad.” I want early on in this article to point towards the following thoughts:
When we think of a migration, we think of a process of high effort, which results from the existing value of the Legacy System. We wouldn’t consider migration if the solution wasn’t attractive and worth keeping. So migration isn’t a fix for the solution itself; instead, it shall fix problems like feature stagnation and lack of innovation. Bring back the capability of elevating the business. We need to understand both approaches to decide whether to go with a Legacy Migration or a Greenfield rebuild.
Legacy doesn’t mean everything in the “old” solution is terrible.
By this, it’s essential to understand that the existing application does have a grown Spirit. People liked to and got used to it. It helps pay salaries and brings the company to where it is now.
In literally no case when I was working with Legacy Systems, there was something like a holistic rejection. Instead, people wished for things like:
How can we add new features without breaking things?
How can we reduce costs, both physically and mentally, for maintenance?
How can we get the application to perform well again?
How can we ensure the application is secure?
How can we get into long-term planning again?
Those are just some questions; I hear them regularly. And none of those point to a problem with general acceptance. Users would like to continue using it, but there are issues to solve. We should not forget that a grown application is often deeply rooted in the business processes, which makes the term “Legacy” even more meaningful. We are supposed to take the Legacy and progressively modernize it.
Why do we want to migrate instead of rebuild?
The Legacy systems still create value and possess a Spirit we want to keep. So, we should take a look at what hurts us most. What are the pain points?
Example Scenario:
Monolithic PHP Solution has grown over 15 years. The solution architecture is outdated, data aggregation takes very long, and the application parts get heavily coupled over time, keeping things going.
Problem A: Performance & User Satisfaction
Since the data aggregation is slow and the front end is generated by PHP, the page-loading takes a while, and people complain about “blank screens,” resulting from the response time. In the modern world of web apps, this is a bad thing to have while trying to be competitive.
Problem B: Feature Stagnation
Since the system is heavily and tightly coupled, it’s hard to change something without touching too many things in the system. As a result, the developers are hesitant to update, and update batches tend to be significant. This is a result of overly testing because of anxiety. The fear that something will break and we will further stress the user base, which already has to be patient.
Problem C: Lack of Maintainability
The solution is grown and was created when most developer teams weren’t thinking too much about architecture, practices, and methodologies. Or in easier words, people just wanted to start doing it; long-term wasn’t the issue. Which worked in the first several years, but it started to become problematic in the years after and has become a real problem in recent years. Instead of being able to proceed with new features to add to the outcome of the company, a main portion of the developer’s energy will be spent to keep the system alive, fixing results problems of a poorly laid foundation in the past.
Could we not just rebuild it?
Theoretically, yes, practically not so much. The costs for rebuilding a system are high, and while rebuilding the project in a “Greenfield” approach, we don’t create new value; instead, we need to keep the Legacy and the Greenfield alive simultaneously.
Another alarming factor is that we will most likely lose the spirit of the existing app. It’s a bit of a gamble how users will accept the new solution when it was built by a new team with new ideas. Do you still have the market fit, then? Will the company employees and the customers still love it as they did in the past? Maybe.
But the point of high cost and no value during the Greenfield process in combination with that risk is a bad combination.
Advantages of a Step-By-Step Migration
In a “Brownfield” approach, we keep the Legacy application in place and prepare it for migration. In a new environment, the same team that maintains the Legacy can work on new features.
In our PHP example, the existing team could still work on PHP in the new environment but with a new architecture and a separate front end, or the team could use other languages for that approach.
The critical point is that we want to first migrate features that caused the most pain.
In most Legacy cases, the entire stress has already been mitigated after some migrated features or contexts. Which created a better work environment, better outcomes for the company, and a better user experience. All this while not even halfway through the migration process.
Essential Advantages: A 10 +1 list
👉 Running a Migration Step-By-Step will bring significant advantages over a Greenfield approach.
New value from day one: Migrating in steps allows for immediate implementation of improvements, delivering incremental value to the business right from the start of the migration process.
Early user experience improvement: Step-by-step migration enables quick enhancements to the user interface and overall user experience, leading to early benefits for end users.
Keep reading with a 7-day free trial
Subscribe to snackableCTO to keep reading this post and get 7 days of free access to the full post archives.