The scariest sentence I hear from a client planning a legacy system migration is "we're going live over the weekend." That plan assumes every part of a complex cutover works correctly on the first try, under time pressure, with no fallback if it doesn't. I've never seen that assumption hold, and I've stopped agreeing to build toward it.

A legacy system migration does not require picking a date to flip a switch and hoping. The better approach, the one I use on every migration project regardless of industry, is to run the old and new systems side by side and move one workflow at a time, verifying each move before touching the next. It's slower to announce and much faster to actually finish, because you're not spending months recovering from a failed big-bang cutover.

Why the big-bang cutover fails so often

A full replacement done in one weekend concentrates every possible failure into a single high-pressure window: data migration bugs, integration mismatches, user confusion, and edge cases nobody thought to test, all arriving at once, with the business expected to be fully operational on Monday morning regardless.

When something breaks in that scenario, and something usually does, you're debugging a live production incident under maximum pressure with the old system already decommissioned. There's no calm fallback. That's not a technology problem, it's a risk management problem, and it's avoidable by construction, not by trying harder during the cutover weekend.

The strangler approach in plain terms

The pattern engineers call the "strangler" approach is simple once you drop the jargon: wrap the old system instead of replacing it outright, then peel off one function at a time, verifying each one against the old system before it takes over for real.

Concretely, for a legacy system migration:

  1. Put a thin layer in front of the old system that can route requests either to the old system or the new one, workflow by workflow.
  2. Pick the single lowest-risk, highest-visibility workflow first. Something small enough to fail safely but visible enough that success builds confidence across the team.
  3. Build that one workflow in the new system, and run it in parallel with the old one for a defined period, comparing outputs on real data, not test data.
  4. Cut over that one workflow once the outputs match consistently, while everything else still runs on the old system untouched.
  5. Repeat for the next workflow, using what you learned. Each migrated workflow makes the next one faster and lower-risk, because the team now trusts the new system's foundations.

By the time you reach the last few workflows, the old system has shrunk to a small, well-understood remainder, and retiring it is almost anticlimactic instead of the terrifying finale everyone feared at the start.

Running old and new in parallel

Parallel running is the part clients most often want to skip, because it feels like double the work. It isn't. It's insurance, and it's cheap insurance compared to the cost of an incident in production with real customer data and no fallback.

In practice, parallel running means:

  • The new system processes the same transaction the old system does, for a defined workflow, for a defined window, typically two to four weeks depending on transaction volume and how much variety the data contains.
  • Outputs are compared automatically wherever possible: same invoice total, same inventory count, same customer record. Discrepancies get investigated immediately, not at month end.
  • The old system remains the system of record until the comparison period shows the new system is consistently correct, not just usually correct.

This is exactly the pattern that let a multifinance firm digitize collections and cut losses without a single missed payment cycle during the transition. Collections is not a process you can afford to get wrong for even one billing cycle, and parallel running is what made a full migration possible without that risk.

The cardinal rule

Never schedule a weekend where everything must go right. If your migration plan has a single date where the old system goes off, the new system goes on, and there's no path back, that plan has a single point of failure built into its own schedule. Rewrite the plan before you touch the code.

The rollback path deserves the same design attention as the forward path. For every workflow you migrate, know in advance exactly how you'd route back to the old system if something goes wrong post-cutover, and keep that path live and tested for at least one full business cycle after cutover, not just during testing.

What this costs you and what it saves

A parallel, workflow-by-workflow legacy system migration takes longer in calendar time than a big-bang cutover, often by a factor of two or three depending on how many workflows the old system carries. That's the honest trade-off, and it's worth naming rather than hiding it in a project plan that quietly assumes everything goes perfectly.

What it buys you: no single day where the whole business is at risk, a rollback path at every stage, and a team that gets progressively more confident instead of progressively more exhausted. Compare that to the hidden cost of legacy systems you're carrying today, quiet, compounding, largely invisible, versus a migration risk that's loud, visible, and concentrated into one weekend. The parallel approach trades a slow bleed for a controlled, staged fix instead of a gamble.

The takeaway

If someone is proposing a single cutover weekend for your legacy system migration, ask what happens if the new system fails on workflow three of twelve at 11pm on Saturday. If there's no good answer, the plan isn't ready. Wrap the old system, move one workflow at a time, run both in parallel long enough to trust the comparison, and keep a rollback path alive at every stage. It's a less dramatic story to tell the board, and a much better one to actually live through.