Modernisation

Five Patterns We See in Every Legacy Audit

Not the same technologies, not the same industries: the same five patterns. What every legacy audit surfaces, and what each one tells you about what comes next.

Modernisation · · Stefan Amann

The same patterns, every time

Every legacy audit surfaces the same patterns. Not the same technologies, not the same industries: the same patterns. We have done enough of these, across manufacturers, operators and regulated businesses in the UAE and the wider MENA region, to know where to look before we open the code. The technologies differ wildly. The shapes underneath them barely change.

That is good news, because a recurring pattern is a diagnosable one. None of what follows is unfixable. But all of it has to be named first, and naming it is precisely the work that organisations skip, because each of these patterns is, in part, a thing nobody wanted to say out loud.

Pattern 01: the untouchable module

Every audit surfaces at least one component nobody will touch. Not because it is especially complex, but because the context that made it make sense is gone. The instruction gets passed down verbally: “Don’t change that service, it’ll break something.” Ask what, exactly, and nobody knows.

An untouchable module is not a technical fact, it is an information loss. The code still runs; what has been lost is the reasons. Until those reasons are recovered, every change near it is made in fear, and fear is expensive: it slows every release that goes anywhere near the danger zone.

Pattern 02: the integration layer that became the system

It was built to connect two systems, temporarily. Now everything routes through it. It has acquired its own bugs, its own undocumented rules, its own deployment schedule. It was never meant to be permanent, and now it cannot be removed.

This is the most common way a system grows a hidden centre of gravity. The integration layer ends up holding business logic nobody decided to put there, which is exactly why durable systems integration depends on explicit contracts rather than a layer that quietly accretes meaning. When the connective tissue becomes load-bearing, every other modernisation decision has to route around it.

Pattern 03: the parallel-build stalemate

A new system is built alongside the old one. The migration window keeps moving. Both systems become load-bearing, and neither is trusted completely. “The cutover is six months away”, and it has been six months away for two years.

The parallel-build stalemate is rarely an engineering failure. The new system often works. What stalls is the decision to switch the old one off, because that decision carries career risk and no schedule removes it. Recognising the stalemate as a decision problem rather than a build problem is the first step to ending it.

Pattern 04: the documentation gap

The people who built the system are gone. What they knew left with them. What remains is tickets, code comments, and tribal knowledge held by one engineer who is, of course, planning to leave. What is missing is not facts. It is reasons. You can usually work out what the system does by reading it. You cannot read why a decision was made, what it was protecting against, or which of its quirks are load-bearing.

This is why a serious audit is partly knowledge elicitation: the most valuable artefact it produces is often the recovered reasoning, not the diagram.

Pattern 05: the fear-driven roadmap

The most expensive pattern of the five. Modernisation plans get built around what the team is afraid to change, not around what the business actually needs. Scope is defined by risk avoidance. The outcome is a plan that diligently changes everything except the things that matter, because the things that matter are the scary ones.

Risk-avoidance roadmaps are some of the most expensive plans organisations build, precisely because they look responsible. They burn real budget delivering motion while the actual constraint goes untouched. A roadmap should be shaped by where the business is constrained, not by where the team is comfortable.

These are fixable, but only after you name them

That is the throughline. None of these patterns is exotic, and none is beyond repair. What they have in common is that each one is, at root, something the organisation knows but has not said: the module everyone avoids, the layer that quietly became the system, the cutover nobody will commit to, the reasons that walked out the door, the fear driving the plan. Diagnosis is not the part that takes courage. Naming it is.

If your organisation is running a legacy audit (or knows it should be), talk to TrueForge about what we typically find in the first two weeks, and what each pattern tells us about what comes next.

If this maps to a system you own, we can talk it through.

Modernisation is a conversation before it's a project.