Engineering · Legacy Modernization

It still works.
It just can't grow.

Legacy does not mean broken. It means the system does its job and can no longer be changed safely — so every new requirement takes longer than the last, until eventually the answer is no.

migration · phase 2 of 4
Legacy
60% traffic
New
40% traffic
✓ Read-only mirror ✓ Write dual Route by feature Decommission
Both systems live throughout. No cutover weekend.

Quick answer

What is legacy modernization, and how is it done safely?

Legacy modernization is the process of replacing or restructuring software that still performs its function but can no longer be changed safely, extended affordably, or operated on supported infrastructure. The safe approach is incremental rather than a single replacement: the new system is built alongside the old one, traffic and functionality are moved across in defined stages, and both run in parallel until the last piece has transferred. This is frequently called the strangler pattern. It costs more in engineering time than a single cutover and dramatically less in risk, because at every stage there is a working system and a reversible step. Big-bang replacements fail in ways that stop the business rather than inconvenience it.

Also calledstrangler pattern, incremental migration
Relatedsystems integration, custom software
The problem

The risk isn't the old
system. It's how it's replaced.

Most migration failures are not about the code. They are about the sequence.

Failure 01

The cutover weekend

Everything moves at once. The rollback plan exists on paper and has never been executed, and the discovery happens while the business is stopped.

Failure 02

The unsupported dependency

The system runs on a version that stopped receiving security patches. It works perfectly until the day a published vulnerability makes it a liability.

Failure 03

The knowledge that left

The person who understood it has gone. There is no documentation, no test suite, and no safe way to establish what any change will break.

What's included

Four deliverables, not a feature list.

Behaviour captured before anything moves, so the migration reproduces what actually happens, not what the documentation claims.

01

Behaviour capture

What the system actually does, established from the running system rather than from documentation, including the behaviour nobody intended but everyone depends on.

02

Migration sequence

Which capability moves first, with each stage independently reversible and both systems running throughout.

03

The new system, built in stages

Server-rendered, typed, access-controlled and tested, receiving traffic progressively rather than all at once.

04

Data migration with verification

Records moved with reconciliation, so you can demonstrate that nothing was lost rather than assume it.

The engagement

Five steps, in this
order, every time.

Every stage is reversible. Nothing moves until the previous stage has been proven.

  1. 1

    Understand

    Establish real behaviour from the running system, including the accidents everyone now relies on.

  2. 2

    Sequence

    Choose what moves first. Each stage must be independently reversible.

  3. 3

    Mirror

    Run the new system alongside, read-only at first, and compare its output against the old one.

  4. 4

    Shift

    Move traffic progressively by feature or by user group. Reverse instantly if something is wrong.

  5. 5

    Retire

    Decommission the legacy system only when nothing routes to it, with data reconciled and archived.

11

Engineering rules in the Standard, each with a verification method.

2

Classified Critical: verified restorable backups and server-rendered discoverable content.

4

Typical migration phases: mirror, dual write, route, decommission.

Why a backup only counts once it has been restored.

Migration is the moment an untested backup becomes catastrophic rather than theoretical. Rule ENG-01 classifies backups as Critical and requires an actual restore into a separate environment before the rule can pass, because a backup that has never been read is an assumption rather than a safeguard. The failures we have been called in to address were rarely absent backups; they were backups that existed, ran nightly, appeared healthy in a dashboard, and could not be restored. Before any migration begins, the restore is performed and timed, so the recovery position is known rather than believed.

Source: The Qawex Standard v1.0, rule ENG-01 · /standard/engineering/
Questions

Answers, not brochures.

Can the business keep running during migration?

Yes, and that is the point of the incremental approach. Both systems run in parallel, traffic moves across in stages, and each stage is reversible. There is no weekend where the business is stopped and no moment where the only path is forward.

How long does a migration take?

Longer than a single replacement and with far less risk. The duration depends on how much behaviour the legacy system encodes and how much of it is documented, which is usually less than expected. The understanding phase produces a realistic sequence before any commitment.

What if we do not know what the old system does?

That is the normal starting position, and it is what the understanding phase is for. Behaviour is established from the running system, from data, and from the people who use it daily rather than from documentation that no longer matches. Undocumented behaviour that people depend on is treated as a requirement.

Do we have to replace everything?

Frequently not. Some legacy systems are best left running with an integration layer in front of them, particularly where they are stable and the pressure is coming from what surrounds them. The assessment reports honestly which parts genuinely need to move and which do not.

What happens to our historical data?

It is migrated with reconciliation, so you can demonstrate that record counts and values match rather than assume it. Data past its retention period is disposed of according to a defined schedule rather than carried forward, because migrating everything without a retention decision usually creates a compliance liability.

qawex · next step

Find out what the old system actually does.

The understanding phase establishes real behaviour and produces a reversible migration sequence before any commitment.

Scroll to Top