The big rewrite is an appealing story. The old system is a mess, the team is frustrated, and a clean slate feels like the only way forward. So a programme is funded, the old system is frozen, and two years later the new one is half-built and the business is running on a platform nobody is allowed to touch.

Why it fails

The old system encodes years of decisions, including the ones nobody documented. A rewrite team discovers them one at a time, in production, usually as bugs. Meanwhile the business keeps changing, so the target moves while the team builds.

There is also a knowledge problem. The people who understand the existing system are rarely the ones building the replacement, and they are usually fully occupied keeping the lights on.

The alternative: replace it in slices

We favour incremental replacement. Put a stable interface in front of the existing system, then replace one capability behind it at a time. Each slice ships, is measured, and either stays or is rolled back. The business never stops, and the team learns the domain as it goes.

  • Start where the pain is highest and the coupling is lowest.
  • Write tests around the old behaviour first so you can prove the new slice matches it.
  • Keep the old path live until the new one has run in production through a full cycle.
  • Retire the old component only when nothing calls it, not when the calendar says so.

It takes discipline

Incremental replacement is harder to explain on a slide than a rewrite. There is no dramatic launch, and progress is measured in capabilities migrated rather than a completion percentage. But it is the approach we have seen succeed, repeatedly, in systems where a rewrite would have been a gamble with the business itself.

Written by

Grace Namutebi

Chief Technology Officer, Oasis Hive Limited

Ask a question