A D2C brand took 35% off its cloud bill
35% off the monthly cloud bill, after the architecture changed rather than before
A pricing change took six weeks — not because the change was hard, but because the regression surface was unknown. A full rewrite had been quoted at eighteen months and cancelled once already.
to make a pricing change, down from roughly six weeks
planned downtime windows across the whole migration — which is what “no big bang” means in practice
of about 40 shadow spreadsheets and Access databases retired, because the system finally did what they compensated for
Figures are as reported by the client over the period named in the body below, and were not independently audited by us.
Working on something like this?
Get an estimateOrder entry and pricing ran on a .NET Framework application first shipped in 2008, integrated with a Java warehouse system nobody had upgraded since. Two of the original developers were still on staff. Neither wanted to touch it, and both were right not to.
A pricing change took six weeks. The change itself took a day. The other five weeks were working out what else the change would break, because there were no tests, and then negotiating a release window with eleven branches who had each been burned before.
Nine candidate seams, scored on change frequency, business risk, and coupling. Two applications came out of that exercise marked for deletion rather than migration — they had users, but the users had workarounds they preferred. Deleting them was the cheapest modernization in the programme.
One entry point, able to send a request to the old code or the new, per route, per flag. Everything afterwards depended on this. Without it, each seam is a cutover; with it, each seam is a toggle.
Highest change frequency, smallest blast radius. The point of going first is not the value of the seam — it is that the approach gets proven on something that matters enough for people to pay attention and is contained enough to reverse. A first seam nobody cares about proves nothing.
In their subscription, inside the change control they are already audited against, using the identity provider their staff already had. A landing zone that sits outside the organisation's existing controls creates a second compliance regime, and the second one always turns out to be somebody's job later.
The schema was shared by everything and understood by nobody in full. Moving it early would have put the hardest, least reversible change first, at the point when the team knew least. It moved once eight of nine seams were reading through code we had written and tested.
Not a closing task. Each seam shipped with the characterisation tests that pinned the old behaviour, the runbook for its failure modes, and a written record of what was decided and what was rejected. That record is what makes seam six cheaper than seam two.
Because the specification for the rewrite did not exist. Seventeen years of behaviour, including the parts that are wrong and the parts that are wrong on purpose for a customer who complained in 2016, live only in the running system. A rewrite has to reproduce all of it and cannot enumerate it, which is why the pattern fails often enough to have a literature.
The seam-by-seam approach does not need the specification. It needs the old system to keep running while each piece is characterised, replaced, and verified against it — which is slower per seam and dramatically faster to a first result. Modernising a legacy system without a big-bang rewrite sets out the full argument.
first seam live; six of nine live by month 14
to make a pricing change, from roughly six weeks
planned downtime windows across the migration
The pricing lead time is the figure the business cares about, and the mechanism is not that the new code is faster to change. It is that the new code has characterisation tests, so the five weeks of working out what else might break became a test run.
Thirty-one of the forty-odd shadow spreadsheets have been retired. That number matters more than it looks: each one was an undocumented, unbacked-up dependency of a 900-person business, and they existed because the system did not do something. They went away when it did.
Seam-by-seam modernization is the right answer more often than a rewrite, but not always, and the exceptions are worth naming.
The capability is cloud solutions for enterprise and the embedded model is IT staffing for enterprise. The engagement shape is cloud and DevOps, continuing as maintenance and support. If you are weighing this against a rewrite or a package, build versus buy and what drives cloud migration cost are the two to read.
If the old system has not shrunk, you are not modernizing it. You are building a second one beside it.
“The first time a seam went live nobody in the branches noticed. That was the point, and it was also the thing I did not believe would happen.”
Tell us what is not working. You will get a scoped estimate and an architecture you own, not a capability deck.
35% off the monthly cloud bill, after the architecture changed rather than before
99.9% service availability across the port-in weekend
89% correct-and-cited on a 400-ticket evaluation set, from 61% at the start