Engineering

Modernising Legacy Enterprise Systems: A Practical Playbook

By Antonie Geerts · Published · 9 min read

Modernise legacy enterprise systems incrementally: assess what the system actually does and who depends on it, stabilise the riskiest components first, then replace it piece by piece behind stable interfaces using a strangler-fig approach — reserving full rewrites for the rare cases where the platform is genuinely beyond incremental rescue.

Why big-bang rewrites fail — and why they stay tempting

Every engineer who inherits a legacy system feels the pull of the clean rewrite: freeze the old platform, build its replacement properly, switch over in one triumphant weekend. The industry's collective experience of this plan is grim. Rewrites take longer than estimated because the old system's true scope lives in twenty years of edge cases nobody documented; the business cannot actually freeze requirements for the duration; and the switchover concentrates all risk into a single event with no graceful retreat.

The temptation persists because rewrites are emotionally simpler — new code, no archaeology, no compromises. But a legacy system that runs the business is not a liability to be discarded; it is a working specification, the only complete record of what the business actually requires, encoded in the one form that is guaranteed accurate: running code. The playbook that follows treats it that way. We have applied versions of it to platforms we inherited from failed vendors — Pixreview was rebuilt end-to-end while continuing to serve customers in multiple countries — and to enterprise systems whose users never noticed the engine being replaced beneath them.

Assess before you touch anything

Modernisation decisions made before honest assessment are guesses with budgets attached. Spend the first weeks building a real picture:

  • System inventory — components, integrations, scheduled jobs, and the undocumented spreadsheet-and-email workflows that have grown around the system's gaps.
  • Dependency map — who and what actually consumes the system: users, downstream systems, reports, regulators.
  • Risk ranking — which components are fragile, unpatched, unsupported or dependent on people near retirement; this ordering, not architectural taste, drives sequencing.
  • Data reality check — where the authoritative data lives, how dirty it is, and what implicit business rules are enforced only by the old code.
  • Value mapping — which capabilities the business genuinely uses versus features preserved by habit; modernisation is the one chance to shed dead weight.
  • Constraint register — compliance obligations, contractual uptime, integration windows and budget rhythm, which shape what any plan is allowed to look like.

The strangler-fig approach in practice

The pattern that reliably works is incremental replacement behind stable interfaces — the strangler fig. Put a facade in front of the legacy system: an API layer, a routing proxy, or simply a disciplined boundary in the code. Then replace capabilities one at a time behind that facade, routing each piece of traffic to the new implementation as it proves itself, until one day the old system is handling nothing and can be retired without ceremony. Each step is small, reversible and independently valuable — the exact opposite of the big-bang risk profile.

Sequencing is where judgement earns its keep. Start with a slice that is genuinely useful but forgiving: high enough value to justify the plumbing, low enough blast radius that early mistakes teach rather than punish. Fragile, high-risk components identified in assessment usually come next — stabilising them buys calm for the rest of the programme. Run old and new in parallel where correctness matters, comparing outputs on live traffic before cutting over. And resist the urge to 'improve' business logic mid-migration: replicate first, verify equivalence, then improve, because doing both at once makes every discrepancy an argument about intent.

Data is the hard part — plan it that way

Application code gets the attention, but data migration is where modernisation programmes actually bleed. Legacy databases accumulate decades of quiet horror: duplicate customer records, meaning-laden magic values, fields repurposed three times, and business rules enforced nowhere except a stored procedure written by someone who left in 2011. Budget real engineering effort for data profiling, cleansing and reconciliation — as a first-class workstream with its own owner, not a checklist item for the final month.

Two practices make it survivable. First, migrate data continuously rather than in one terminal weekend: build pipelines that sync legacy data into the new model throughout the programme, so migration is rehearsed hundreds of times before it matters and cutover becomes a non-event. Second, reconcile obsessively — automated comparisons between old and new systems on the numbers the business actually watches, because trust in the new platform is won or lost on whether its reports match the old ones to the decimal. When they legitimately should not match (because a bug was fixed), document why before finance discovers the difference on their own.

Modernisation is an operating model, not a project

The technical playbook fails without the right governance around it. Modernisation programmes run for quarters or years, which means they must ship visible value continuously to survive budget cycles — a programme that promises everything at the end will be cancelled in the middle. Structure the roadmap so every quarter retires a real risk or delivers a capability someone asked for, and demo working software weekly; momentum is a governance tool, and the weekly demo is how a distributed senior team keeps stakeholders confident across borders.

Team shape matters too. Modernisation rewards senior engineers with archaeological patience — people who read old code with respect rather than contempt — working in a compact team with direct access to the business people who remember why things are the way they are. It is unglamorous work with compounding payoff, and it suits the economics of Asia-Pacific delivery unusually well: the same budget that funds a partial onshore team funds a complete senior one, including the QA and reconciliation effort that this work genuinely demands. Cloud replatforming — typically onto managed services like Cloud Run and managed SQL — usually rides along with the same programme, so the modernised system lands on infrastructure that no longer needs weekend heroics to operate.

When a rewrite is actually the right call

Intellectual honesty requires the exception: sometimes incremental replacement is the wrong answer. A rewrite deserves consideration when the legacy platform is small enough to fully understand (weeks of reading, not years); when the technology is truly dead — unsupported runtimes, unhirable skills, vendors gone; when the business model has diverged so far that the old system's shape actively misleads; or when the system is so entangled that no stable facade can be drawn around any part of it. Even then, the discipline holds: run the rewrite as a sequence of shippable stages with the old system alive as a fallback, and migrate users in cohorts rather than all at once.

The honest test we apply before recommending either path: can we draw a boundary inside this system behind which replacement can happen safely? If yes — and it almost always is — strangle, do not rewrite. If genuinely no, rewrite with humility and staged delivery. What is never right is the third option most enterprises silently choose: doing nothing while the risk compounds, until the modernisation happens anyway — unplanned, at the worst possible moment, priced by an outage instead of a roadmap.

Related services

Keep reading

Put this guidance to work

Talk it through with the team that wrote it — no obligation, no hard sell.

Arrange a Conversation