Skip to main content

Getting Out of a Legacy System

Replacing a 10-year-old system gradually, without a risky switchover

Back to Our Work
Getting Out of a Legacy System
0%
Downtime
-40%
Tech Debt
Elastic
Scalability
Tech Stack
System AuditStrangler Fig PatternDockerAWS

01 / The Problem

A codebase that's grown over ten years carries a lot of decisions whose reasons have long since vanished. Every change starts with detective work - what might this break? - and with no automated tests, the only place a change really gets tested is often the live site. Releases are manual and take two hours, and anyone who's run one knows the stress. The biggest risk isn't a crash, it's that the system becomes too scary to touch - so new features stall and competitors pull ahead.

02 / Our Approach

The idea is simple: never switch off the old system until a new piece is ready to take over. We start with an audit - documenting what exists, what's in the worst shape, and what causes the most painful nights on call. Then we take one clearly-bounded part, such as login or the product catalogue, and rebuild it properly, with tests. Traffic is shifted onto the new version gradually, a little more each week, until the old part can be quietly retired. The business keeps running the entire time.

<SYSTEM_FLOW />

Audit and map the system
Pick a self-contained part
Rebuild it with tests
Shift traffic, retire the old

03 / The Result

There's been no planned downtime and no single risky switchover. Releases that took two hours now take eight minutes and run on their own. The team can ship a new piece to the live site at the end of every week without long debates about whether it's safe - the tests answer that. They spend less time firefighting and more time building things that move the business forward.

Why this matters:

  • The business keeps running throughout - no maintenance windows, no risky switchovers.
  • Releases that took two hours now take eight minutes.
  • Traffic spikes no longer need emergency server prep the night before.
  • Tests make changes safe, so less time goes to firefighting.
  • New developers can actually understand the system - it's documented and tested.

04 / Challenges

The hardest part was uncovering hidden dependencies - indirect links between parts of the system, built up over a decade, that no documentation mentions. We traced what was actually connected by watching how the system behaved and what it queried. The second challenge was human: when there are no tests, every change feels dangerous, so the team had grown cautious. The first few weeks went mostly into writing tests for the existing features - only then did the rebuild gain real momentum.

Facing a similar challenge?

We can apply this same architectural rigor to your project.

Let's Talk