
"It still works, why touch it" is the reason most legacy systems survive years past the point they should have been rebuilt. The problem is that "still works" and "still cheap to run" are different claims, and the gap between them is where the real cost of a legacy system actually lives.
A rebuild has a number attached to it — a quote, a timeline, a budget line someone has to approve. The cost of keeping a legacy system running rarely gets calculated with the same rigor, because it's spread across a dozen smaller line items instead of one big one:
None of these show up as a single number on a P&L. That's exactly why "it still works" survives as a justification long after it's stopped being true in any meaningful commercial sense.
A legitimate rebuild decision compares two real numbers, not a gut feeling:
Cost of rebuild = development cost + migration risk (data migration, downtime, retraining) + the opportunity cost of the team's time while it happens.
Cost of staying = the ongoing maintenance burden above, projected forward for the period the system would otherwise need to keep running, plus the compounding cost of every year the gap between "what the business needs" and "what the system can do" gets wider.
When the second number, honestly totaled, exceeds the first — including the parts that don't have an obvious invoice attached — the rebuild isn't really optional anymore, it's just been unbudgeted.
A full rewrite is rarely the right first move. It concentrates all the risk into one long project with no partial value delivered until the very end, and legacy rewrites have a well-earned reputation for running over time and over budget precisely because of that all-or-nothing structure.
A phased approach — modernizing the highest-cost or highest-risk components first, running old and new in parallel, and migrating incrementally — delivers value earlier, de-risks the process, and gives you real signal on whether the new architecture is working before the entire budget is committed to it.
The right time to rebuild isn't when the system finally breaks. It's when the honest total of engineering time, hiring difficulty, integration debt, and missed opportunity — added up, not eyeballed — costs more than the rebuild would. Most organizations cross that line well before they act on it.