Skip to main content

Modernising legacy systems without bringing the business to a halt

Modernising legacy systems without bringing the business to a halt

There is usually a moment when someone says out loud that the system really needs replacing. Rarely during a strategy session. More often on a Tuesday afternoon, after a small change turned out to take three weeks again. Or after the accounting integration went down without warning and nobody could say why.

That system is seldom just old technology. It processes orders, holds customer data, drives the planning and connects processes that nobody can fully draw on a whiteboard any more. Which is exactly why “let us rebuild it” is a risky answer. And so is “let us leave it alone”, once the pain becomes structural.

What follows is the approach that works best in practice: first understand what the system does for the business, then work out where the real risk sits, and only after that decide which technology fits. That order sounds obvious. In actual projects it gets reversed surprisingly often.

Old is not the same as bad

A legacy system can run steadily for years and contain functionality that matches the way people work almost perfectly. The trouble starts when changes become too expensive or too slow, when integrations wobble with every update, when security patches fall behind, or when the knowledge sits with one employee or one external supplier.

That is the point where a full rebuild starts to look attractive. The risk of it gets underestimated with remarkable consistency. In a system that has grown for ten years, a lot of business logic hides in exceptions, workarounds and manual steps. That logic is almost never written down in full; it lives in the heads of the people using it every day. Replace everything at once and you meet those exceptions after go live, which is the most expensive place to find them.

Modernising in phases is the safer bet for most organisations. You keep what demonstrably works, tackle the biggest bottlenecks first, and the business keeps running in the meantime. Which route fits each part depends on its technical condition, on what the company wants from it, and on how much the system can still be changed at all.

The step by step approach

1. Map business value and technical condition side by side

Start with more than a list of applications. Which processes stop if this system is unavailable for a day? Which departments use it? What revenue, service agreements or internal deadlines depend on it? Write down who owns the process and who works with the system daily. Those are rarely the same people.

Then put the technical reality on paper: languages and versions, database, server environment, licences, test coverage, documentation and known security issues. Spend most of your attention on the dependencies. External APIs, accounting software, the payment provider, the warehouse system, email services, and the spreadsheets people use to plug the gaps. That is where the surprises live.

None of this has to become a hundred page report. You need something you can prioritise with: what is business critical, what is fragile, and where does most of the time disappear?

2. Pick the problem before you pick the solution

“The system is outdated” is not an objective you can work with. Be specific about the result you need. Maybe order processing has to get faster. Maybe the customer portal has to handle twice the number of users. Maybe a supplier is retiring an API version next year and that integration simply has to be replaced before the deadline.

Make the goals measurable: lower processing time per order, fewer manual corrections, higher availability, a new integration that takes days instead of weeks. Without those numbers, modernisation quietly turns into a technical project that nobody can afterwards explain the value of.

Involve end users early, not at the acceptance test. They know which screens are awkward, but more importantly they know which apparently trivial feature half the team uses every day. An analysis without that knowledge produces a plan that makes sense on paper and meets resistance on the floor.

3. Choose a route per component, not one route for everything

Not every part deserves the same treatment. Four routes come up most often, usually alongside each other within the same programme:

  • Rehosting. The application moves to better managed hosting largely unchanged. It delivers stability and easier operations quickly, but it does nothing about messy code or clumsy processes.
  • Replatforming. You renew the technical foundation, for example the database, the container environment or the hosting configuration, without rebuilding the application.
  • Refactoring. Parts of the code and architecture get reworked. It takes more time, but it makes every change after that faster and safer.
  • Replacing. One function gets rebuilt or swapped for off the shelf software. This works well when the underlying process has become simpler, or has just changed.

Note the difference with the full rebuild described earlier. Here you replace a bounded component whose behaviour you understand, while everything else keeps running. That is a completely different risk profile from moving the whole system in one go.

The best choice is rarely the most fashionable one. A stable core application can stay exactly where it is if you put reliable integrations, proper management and a modern interface around it. The other way round, there is little point in patching an unmaintainable codebase just because it cost a lot of money once.

4. Build a roadmap of small, usable deliveries

Cut the work into pieces that deliver something on their own. A fragile integration. Login and authorisation. A report that is currently assembled by hand. A module that generates a lot of retyping. For the first one, pick something big enough to make a difference and small enough that a setback does not stall the whole project.

Plan for more than development hours. Analysis, testing, data checks, acceptance, communication and aftercare take real time too. A schedule that only counts build hours is almost never right.

Put a decision point at the end of each phase. Did this approach deliver what we expected? Have the risks turned out to be manageable? Is the next step still the logical one? That is how you keep budget and direction under control, including when it turns out something has to change.

5. Decouple where you can, without breaking the operation

One of the most effective moves is reducing direct dependencies. As long as four systems write straight into the same database, every change is nerve racking. A clear API or integration layer makes components replaceable and considerably easier to manage.

That does not mean you need microservices right away. For a mid sized company, a well documented API, a reliable message flow or one central integration layer is often enough. The technology has to match the size of the organisation and the knowledge available to run it. Building something nobody will be able to maintain is simply a new legacy problem in the making.

Pay particular attention to error handling. Integrations fail on time outs, changed fields or an outage at a third party. Make sure transactions are traceable, failed messages can be reprocessed, and someone in the office can see what went wrong without guessing.

6. Treat data as a project of its own

Migrating data is not an export and an import. Old systems are full of duplicate records, empty mandatory fields, inconsistent date formats and exceptions that once had a perfectly good reason. Move all of that across unchecked and the problem simply comes with it.

Agree up front which data the daily operation needs, what has to be kept only for reporting or legal retention, and what can be archived. Run trial migrations and compare counts, totals and a handful of critical records. Let users check customers or orders they recognise; they will spot something wrong within a minute.

Deal with privacy and access rights at the same time. A new system should not only be faster, it should also make it clearer who is allowed to see, change and export which data.

7. Test against real work and roll out in a controlled way

Green tests do not prove the organisation can keep working. So test with scenarios from real life: an order with a return and a partial payment, an invoice correction, a customer with special pricing, an integration that drops out halfway. Those are exactly the cases a demo never covers.

For critical processes it pays to run in parallel for a while. Old and new both handle the same data for an agreed period, so differences show up before you switch over completely. It takes extra attention, and it is a lot cheaper than a round of corrections afterwards.

Finally, agree a fallback plan before you go live. Who decides during an incident? What data gets restored, and up to which point? What do you tell staff and customers? A plan like that does not make problems impossible, but it saves you panic and hours of downtime.

After go live, the real work is management

Whether the investment holds its value is decided in the years that follow. Monitor performance, error messages, capacity and security updates. Record who owns which application, integration and piece of infrastructure. Without those agreements you will be back in the same position in four years, only with newer technology.

If you do not have a large internal technical team, it helps to keep development, hosting and management close together. When the people who know the application can also see the servers and the incidents, an outage gets investigated instead of forwarded. At LJPc that responsibility deliberately sits with one party, precisely to avoid the finger pointing between suppliers.

The first step is usually smaller than people expect. Pick one process that is demonstrably slow or fragile, map the dependencies around it, and improve that part in a controlled way. Small in scope, but noticeable to the people doing the work. And after that you will have a much better idea of what the rest will cost.

Stay up to date with recent developments! Subscribe and receive our newsletter Signing up...