SOFTWARE DELIVERY
When to rewrite, and when not to
Rewrites are chosen for how the code feels to work in, and justified afterwards with business reasons.
SERVICE 03
Product engineering, web and mobile builds, and modernisation of systems that still work but have become expensive to change. Delivered with your engineers, and handed over properly.
THE PROBLEM
Most software projects that go badly were not badly built. They were scoped to a wish list, estimated against a best case, and specified far enough in advance that half the assumptions had expired by the time anyone wrote code.
The counter is unglamorous: ship something narrow and real early, find out what was wrong about the plan while it is still cheap, and keep the architecture simple enough to change when you do.
WHO IT IS FOR
The roadmap is agreed and there is nobody free to build it.
Mobile, real-time, or a domain nobody on the team has shipped before.
It works, and every change takes three times longer than it should.
You need a real version in front of real users, not a prototype that cannot survive them.
WHAT IT INCLUDES
Not every engagement covers all of it. The shape depends on what you are deciding.
Cutting the wish list to a first version that is worth shipping on its own.
Decisions sized for your team, written down with the trade-offs that drove them.
Increments you can use, in your repo, reviewed by your engineers.
Strangling the parts that hurt rather than rewriting the parts that do not.
Tests, documentation and pairing, so your team owns it before we leave.
THE FRAMEWORK
What the software is for, judged by what changes for the user when it works.
The smallest version that is genuinely useful. Everything else is version two.
Architecture chosen for the team that will maintain it, not the one that built it.
Something real every couple of weeks, used by someone outside the project.
Documentation, tests and a team that can take the next change alone.
ILLUSTRATIVE EXAMPLE
A constructed example to show the shape of the work, not a client case study.
Find out which parts actually change often. Usually it is a small fraction of the code.
Put a seam around one of those parts and move it out, leaving the rest alone.
Run old and new side by side until the new one is boring.
Repeat for the next painful area, stopping when changes stop hurting.
Leave the remaining legacy in place. Rewriting working code that nobody edits is spending for its own sake.
RELATED READING
SOFTWARE DELIVERY
Rewrites are chosen for how the code feels to work in, and justified afterwards with business reasons.
CLOUD AND INFRASTRUCTURE
Before the architecture conversation, check the settings. A surprising share of production pain is a default nobody changed.
WORKING TOGETHER
The brief determines the outcome more than the firm does. Bring the problem, not the solution.
QUESTIONS
Refactor far more often than instinct suggests. Rewrites throw away years of accumulated edge-case handling that nobody documented, and they tend to take two to three times the original estimate. Incremental replacement is slower in theory and faster in practice.
For a well-scoped phase, usually yes. For a project defined as a long feature list, a fixed price would be a guess with a confident number on it, which helps nobody. We would rather scope a first phase properly and price that.
You do, from the first commit, in your repository. There is no arrangement here where the code lives somewhere you cannot reach it.
A narrow version that ships beats a complete one that is still being specified.