Somewhere in your office there is probably a system everyone complains about. It is slow, it only runs on one aging PC, the vendor disappeared years ago, and exactly one senior staff member knows its quirks. It is also, inconveniently, the thing that runs your business. Every invoice, every stock movement, every payroll run flows through it.
That combination is what makes legacy system modernization one of the highest-stakes decisions a business owner faces. The instinct is understandable: the old thing is embarrassing, so throw it away and build a modern replacement. But the fact that the old system runs the business is precisely what makes replacing it in one move so dangerous. The graveyard of failed IT projects is full of confident rewrites.
Having sat on both sides of this decision, as the engineer doing the migration and as the person advising owners on whether to fund it, here is how I think about the choice.
Why the Old System Is Harder to Replace Than It Looks
A legacy system is never just its code. After ten years in production it has silently accumulated three things:
- Undocumented business rules. That weird rounding on invoices exists because of a tax dispute in 2014. The three-day delay on certain approvals exists because of a fraud case nobody talks about. None of this is written down anywhere except the code, if you're lucky. This is also the strongest argument for writing things down while people still remember, which I covered in Documentation Is the Cheapest Insurance You Can Buy.
- Data with history in it. Years of transactions, customer records, and edge cases, in a structure the new system will not share. Data migration is routinely half the pain of any replacement and almost always underestimated.
- Human workflows shaped around it. Staff have muscle memory, workarounds, and side spreadsheets that quietly patch the system's gaps. A new system breaks all of them on day one.
A rewrite has to reproduce all three, mostly by rediscovering them the hard way, in production, while the business keeps running.
The Risk Math of the Big-Bang Rewrite
The big-bang approach sounds clean: build the new system in parallel, then switch over one weekend. In practice it carries a brutal risk profile.
For 12 to 18 months you pay for the new build while the business gets zero benefit, because value only arrives at the final cutover. Meanwhile the old system does not stand still; the business keeps changing, so the rewrite chases a moving target, and every change now has to be made twice or deferred. Then cutover day arrives, and every undiscovered gap surfaces at once, under full production load, with no fallback except rolling back the entire project.
Roughly speaking, the big bang concentrates all project risk into a single event, after all the money is spent. If it fails, you have spent hundreds of millions of rupiah and own two systems: the old one you still depend on and the new one nobody trusts. I have seen a mid-size company attempt exactly this with its core order-processing system: 14 months of build, a chaotic cutover week, a rollback, and a quiet return to the old system. The write-off was north of Rp 600 million, but the worse cost was that the organization refused to touch modernization again for years.
The Gradual Alternative, in Plain Terms
The approach that usually wins for SMEs has an ugly engineering name, the strangler fig pattern, but a simple idea: build new pieces around the old core, and move functions over one at a time, retiring the old system slice by slice.
Concretely, it looks like this:
- Put a layer in front. New screens, apps, or integrations talk to a thin layer that routes requests either to the old system or to new components. Users and other systems stop depending on the legacy internals directly.
- Pick one bounded function with high pain and manageable entanglement. Reporting is a classic first slice: copy the data out on a schedule and build modern reports beside the old system, touching nothing critical.
- Move it, run it, verify it. The new piece goes live for that one function. For a transition period you can even run old and new in parallel and compare outputs.
- Repeat. Customer-facing ordering next, then inventory, then invoicing. Each slice is a small project with its own budget, its own go-live, and its own rollback plan.
- One day the old core does so little you can switch it off. Often quietly, without a cutover weekend at all.
The risk math flips completely. Instead of one giant bet at the end, you place a series of small bets, each delivering value on its own within two or three months. A failed slice costs you that slice, not the program. The business rules get rediscovered gradually, one function at a time, while the old system is still there to check against. And you can pause after any slice if cash gets tight, keeping everything already delivered.
When Full Replacement Is Actually Right
Gradual migration usually wins, not always. Replacement outright is the better call when:
- The system is small and shallow. A simple tool with limited data and two users does not need a migration strategy. Just replace it.
- A mature off-the-shelf product covers you. If your legacy system does what standard accounting or POS software now does well, migrate data into the proven product rather than building anything. The earlier reporting-and-parallel-run discipline still applies.
- The platform is literally dying. Hardware that cannot be replaced, an OS past end of life with compliance exposure, a database no one can license anymore. A hard deadline changes the math, though even then you can often stage the transition.
- Nobody can touch the old code at all. If the system is so opaque that even wrapping it in an integration layer is infeasible, gradual options shrink. This is rare, and worth a second opinion before you accept it, because "our vendor says it's impossible" sometimes means "your vendor prefers a rebuild contract." The warning signs look a lot like the ones in Tech Vendor Red Flags to Catch Before You Sign.
A useful rule of thumb: the more transactions, integrations, and undocumented years a system has, the more the odds favor gradual. The smaller and more standard the function, the more they favor replacement with something off the shelf.
Questions to Ask Before You Sign Anything
Whichever path you lean toward, put these to your team or vendor:
- What is the first slice, and what value does it deliver on its own within 90 days?
- What is the rollback plan for each go-live, and has it been tested?
- How will data be migrated and verified, and who owns reconciling the differences?
- If we stop the program halfway, what do we keep?
- Who is documenting the business rules we uncover along the way?
A vendor who answers these crisply is planning a migration. A vendor who answers with a single grand cutover date is planning a bet with your money.
The Practical Takeaway
The old system's ugliness is not the emergency. The emergency is concentration of risk: one fragile system, one person who understands it, one big cutover that could take the business down with it. Gradual modernization attacks the risk directly, converts one terrifying project into a sequence of boring ones, and starts paying back in months instead of years. Default to the strangler approach, reserve the big bang for small or standard systems, and be deeply suspicious of anyone whose plan has a single dramatic weekend in it.