Skip to main content
Pixelmatters Logo

Key takeaways

  • Downtime isn't the main risk in a legacy migration. The risk is the period where the old and new systems are both live and nobody can prove they agree.

  • TSB's April 2018 migration moved the data successfully and still locked out a significant proportion of 5.2 million customers, taking until December 2018 to return to normal and costing £48.65m in fines plus £32.7m in redress.

  • The safe sequence is Stripe's four phases: dual writes, move the reads, move the writes, then delete the old path. Every phase is individually reversible.

  • Reconciliation is the deliverable, not the migration. Run both systems on real traffic, compare the answers, and only cut over when the mismatch rate is explained rather than small.

  • AI closed the gap on the mechanical work, not the verification. Google reported 80% of code changes AI-authored in one internal migration and effort down an estimated 50%, and the review still belonged to engineers.

Frequently asked questions

Legacy system migration is moving an older application, its data, or both onto new infrastructure, a new platform or a new architecture, while preserving the behavior the business depends on. It differs from a rewrite in that the existing system's behavior is the specification. Most migrations run incrementally, with the old and new systems live at the same time and traffic moved across in stages.

Usually yes, for the customer-facing path. Running the new implementation alongside the old one, keeping both data stores current with dual writes or change data capture, and moving traffic in reversible slices avoids a maintenance window entirely. What's harder to avoid is a short freeze on a single write path at the moment writes switch over, typically measured in seconds to minutes rather than hours.

Timelines vary too much by system to promise a number, but the shape is consistent: the first slice takes disproportionately long because it builds the machinery, and the rest goes faster once dual writes, reconciliation and rollback exist. Programs that quote a single date for a whole estate are usually quoting the cutover rather than the migration.

The strangler fig pattern, which Martin Fowler described in 2004 and renamed from strangler application in 2019, means building the new system around the edges of the old one and routing functionality across piece by piece until the old system has nothing left to serve. A routing layer sits in front of both and decides which handles each request. Both AWS and Microsoft publish it as reference guidance for incremental migration.

A dual write means the application writes each change to both the old and the new data store, so both stay current during a migration. What goes wrong is partial failure: one write succeeds and the other doesn't, leaving the stores disagreeing. That's why dual writes need idempotent retries and a reconciliation job that finds and repairs drift, rather than being trusted on their own.

Migrate incrementally in nearly all cases where the system is in production and carrying revenue. A full rewrite requires freezing the old system's development or maintaining every change twice, and it defers all value to a single delivery date. Rewrites make sense mainly where the existing behavior is genuinely not worth preserving, which is a much smaller set of systems than it feels like from inside one.

One named person per cutover, with the authority to stop it on the day and no incentive to see it through. In practice that's usually the engineering lead for the slice rather than the program sponsor, because the sponsor is measured on the date. Write the name down before the week of the cutover, along with the specific signal that triggers a revert.

When the old system has served no traffic for a defined period, reconciliation has been clean or fully explained across at least one full business cycle including a month-end, and someone has confirmed nothing reads from it out of band — reporting jobs, exports and integrations are the usual surprises. Then remove the old path in a separate, deliberate change, not as part of the cutover.

Not usually the whole system, but the data layer is often the gate. Retrieval and agent features depend on data being consistent and accessible, and in older systems it typically isn't. That makes restructuring the data a narrower and earlier project than migrating the application, and it's frequently the piece worth moving first.


Tiago Coelho

CTO

As CTO of Pixelmatters, Tiago Coelho leads the engineering organization, wrote the handbook and quality standards it ships against, and is rebuilding delivery around AI. He writes on technology strategy and engineering leadership.

Share this article

Related Insights