Legacy & migration

3 min read ·

Parallel Run: Compare Two Systems Without Charging Twice

The replacement passes its tests, but nobody knows whether it reproduces every legacy rule. How to compare behaviour without duplicate payments?

The company is replacing an old commission-calculation engine. The new implementation passes all known tests. Yet years of undocumented exceptions live in the legacy system: special rounding, contract rules and rare sequences of events.

Moving every transaction to the replacement overnight is a risk. Parallel Run compares old and new results on the same or equivalent inputs and gives the company evidence before it makes the final switch.

Running in parallel is not doing the business action twice

For a pure calculation, both systems can receive the same inputs and their outputs can be compared. It becomes more complicated when a process changes the outside world: charging money, reserving stock, sending email or confirming a contract.

Those actions cannot simply be performed twice for testing. The replacement may run in shadow mode, calculating an expected result without making the irreversible call. Some external dependencies may need to be stubbed, or outcomes compared after the real process finishes.

One path must be identified as authoritative, and only the appropriate component should commit the final business effect. Otherwise the validation exercise creates a fresh data-integrity problem.

A match is not always proof of correctness

The old calculation may be wrong too. When the new output differs, the reason matters. It may be a bug in the replacement, or it may reveal a legacy exception the business wanted to retire.

Classify discrepancies: genuine regression, intentional rule change, different input data, timing issue or formatting difference. Not every mismatch must block migration automatically, but material differences need an explanation.

Evidence for the final cutover

Compare real classes of transactions: ordinary orders, refunds, partial payments, cancellations and unusual exceptions. A high overall match percentage can hide a serious failure in a rare high-value scenario.

I would agree in advance on acceptable differences, observation windows, investigation ownership and exit criteria. Another important question is what the company should do if shadow comparison reveals that a result already committed by the authoritative system was wrong.

Parallel operation has a cost. Both implementations use resources, may process sensitive data and add operational work. The validation period needs an end condition instead of becoming a permanent architecture.

Not the same as two active production versions

Parallel Run is primarily about validating equivalence or acceptable behavioural differences. Blue-Green Deployment addresses how traffic moves between versions. They can be combined, but having two environments does not by itself compare their outcomes.

Parallel Run is useful when the company needs more than a promise that the replacement should behave like the old system. It buys evidence — provided the comparison does not create new real-world side effects.