Skip to content

Running the old and new systems in parallel

  • Home
  • Blog
  • Running the old and new systems in parallel
Running the old and new systems in parallel

A parallel run new system operates the old and new platforms at the same time, feeding both the same live work and reconciling their outputs until the new system matches within an agreed tolerance. Only then do you cut over. It is the highest-confidence migration path — and the slowest, most expensive one.

Key Takeaways

  • Parallel run means both systems process identical live work; reconciliation, not time, proves the new one safe.
  • It suits financial, payroll, ERP and booking systems where a wrong record costs real money or breaches a regulation.
  • Shadow mode — the new system reads but does not transact — gives much of the safety at a fraction of the dual-entry cost.
  • Define exit criteria before you start: which records, what variance tolerance, how many clean cycles.
  • Every extra week adds cost, staff confusion and drift; run the shortest window that produces confidence.
  • Big bang cutover wins when rollback is cheap and data volume is small; parallel run wins when it is not.
The stages of a parallel run system migrationA horizontal flow from scoping through shadow run, dual operation, reconciliation and final cutover.How a parallel run reaches cutover1Scope andexit criteriaAgree records,tolerance, cycles2Shadow run(read only)New system ingestslive data, no writes3Dual operationBoth systemsprocess live work4ReconciledailyCompare rows,totals, variances5Cutover andretire oldSwitch users,keep old read-only
The five stages of a parallel run migration, from defining exit criteria through shadow mode, dual operation and daily reconciliation to the final cutover.

What does a parallel run actually involve?

A parallel run migration keeps the legacy system in production while the replacement processes the same transactions. You do not switch users in one move. Both systems receive the same inputs — customer orders, invoices, payroll batches — and you compare their outputs side by side. The new system goes live formally only after enough clean reconciliation cycles pass your exit criteria.

There is a lighter variant called a shadow run or silent parallel. The new system ingests real data and produces outputs, but nothing it writes reaches customers, suppliers or auditors. Staff keep working in the old system. Shadow mode catches mapping errors and calculation differences without the cost of double entry. It is the best first step for almost every migration.

Why does it matter for high-stakes systems?

Synthetic test data misses the mess of real life. A parallel run new system exposes that mess before it becomes a balance sheet error. Duplicate IDs, negative quantities, zero-value invoices, timezone drift, rounding on tax — these surface only when both platforms chew the same live workload and you compare every total.

The mechanism that makes parallel run convincing is reconciliation. You do not trust the new system's screenshots. You query both databases for the same period and diff row counts, sums and spot-checked records. A variance of zero across five consecutive business days is evidence. A variance of a few pence on VAT is a bug you found early, not after the auditors did.

When do you actually need a parallel run — and when do you not?

You need it when a wrong record is expensive, hard to reverse, or legally sensitive: payroll, invoicing, inventory valuation, patient bookings, financial reporting. If the system writes to external parties — banks, tax authorities, payment gateways — the blast radius of a bad cutover is wider, and parallel run buys you a safe exit. If the replacement was chosen well, the build-versus-buy decision is already settled before this point.

You do not need a full parallel run for a marketing site, an internal wiki or a system with low write volume and easy rollback. A big bang cutover with a tested backup is often the right call there. The test is simple: what does one bad record cost, in money and in staff time to fix, versus a month of dual operation?

How does the mechanism work?

The old system stays the system of record for the whole window. A sync process copies data to the new system — incrementally if both databases are live, or by batch if the old system exports nightly files. The new system runs its own calculations, validation and workflows on that copy. Then reconciliation compares the two.

For automated flows, the sync is a script or a queue. For manual processes, staff enter the same work twice, which is where errors and resentment creep in. Wherever possible, automate the feed from old to new before asking anyone to type anything twice. If you must dual-enter, keep the window short and the fields few.

How do you set up a parallel run?

Start from the exit criteria and work backwards; that one habit prevents most failed migrations. The sequence below assumes the new system is built, configured and tested in isolation first — parallel run is not where you discover the login page does not load. If you are building the replacement, a system built to be handed over cleanly shortens the window.

  1. Agree the scope: which record types, which date range, which business units. Exclude anything not needed for confidence.
  2. Define exit criteria in writing: maximum variance per record type (usually zero for money fields), how many consecutive clean days, what happens on a failed reconciliation.
  3. Freeze data model changes on both systems for the window. A field rename mid-run invalidates every comparison.
  4. Build the sync from old to new with idempotent writes, so re-running it does not duplicate records.
  5. Run shadow mode for at least one full business cycle. Fix every variance before anyone switches.
  6. Start dual operation. Reconcile daily with a repeatable query or report, and log every mismatch.
  7. Investigate variances to root cause, not by editing the new system to match. Fix the logic, then re-run the sync.
  8. After the agreed clean cycles, cut over: point users at the new system, make the old one read-only.
  9. Keep the old system queryable for a lookback period (commonly one or two accounting periods), then decommission.

The cutover step is a state-changing move. Treat it as a change with a rollback plan: if reconciliation fails on day three, you stay on the old system and nobody loses data. Never run the cutover command without a tested path back.

Which configuration decisions actually matter?

Reconciliation is only as good as the join keys. If an invoice ID in the old system maps to a different ID in the new one, your comparison reports false mismatches. Agree on a canonical key — usually the legacy ID imported into a field on the new records — before the first sync.

Rounding and timezone handling cause more phantom variances than any other settings. Money fields must round to the same number of decimal places in both systems. Timestamps must be stored in a single timezone, not the server's local time. The moment you compare a rounded total against an unrounded one, you will chase a ghost for an afternoon.

How do you verify the run is actually working?

The verification is the reconciliation report itself. For each day or batch, query both systems for record count, sum of key money fields and a sample of full records. A real check looks like this, run against both databases and compared:

SELECT count(*) AS rows, sum(amount) AS total
FROM invoices
WHERE period = '2026-02';

Rows must match exactly. The sum should match to the penny, or you stop and investigate. See the Postgres aggregate functions documentation for details on count and sum behaviour. Also sample five to ten individual records and eyeball every field the customer or auditor will see. Automated totals catch volume errors; the sample catches presentation errors.

What breaks, and how do you debug it?

The most common failure is drift: the sync falls behind, or a user enters data into the wrong system, and your reconciliation starts comparing different data sets. The first check is the sync timestamp and the row counts. If counts differ, you have a pipeline problem, not a logic problem. Fix the feed, re-sync, re-compare.

The second failure is fatigue. After week three, staff skip the dual entry or the reconciliation becomes a rubber stamp. Variances get "explained" rather than fixed. This is a process failure, and the fix is to shorten the window or automate the comparison. A parallel run that nobody trusts has no value; a run that nobody checks is worse than no run.

What does it cost to keep both systems running?

The cost is mostly people, not licences. Two systems mean two sets of credentials, two sets of user questions, two places where a record might be wrong. Support staff answer "which system am I in?" daily. Finance staff may enter invoices twice. Every extra week of the window compounds that. After cutover, ongoing maintenance shifts to the new stack.

There is also a technical cost: storage for the duplicated data, compute for the sync and reconciliation jobs, and the risk that the legacy system fails during the window because nobody has maintained it properly. If the old database cannot survive another month, a long parallel run is not available to you — plan a big bang with a tested backup instead.

Timeline of a six-week parallel run migrationA timeline showing shadow run, dual operation with daily reconciliation, cutover and read-only retirement.A six-week parallel run, week by weekWeek 1–2Shadow runNew system reads live data,fix mapping errorsWeek 3–6Dual operationBoth systems process live work,reconcile totals every eveningDay 1 of monthCutoverUsers switch, old systembecomes read-only
The six-week timeline for an invoicing migration: two weeks of shadow run, four weeks of dual operation with daily reconciliation, then cutover.

What are the common mistakes to avoid?

Most failures trace back to one of five decisions made before the first sync, not to the technology itself. Each mistake below either lengthens the window or erodes the trust that makes a parallel run worth running at all.

  • No exit criteria — the run drifts for months because "one more week" always feels safer.
  • Skipping shadow mode — you pay full dual-entry cost before basic mapping errors are fixed.
  • Reconciling by eye in a spreadsheet instead of a repeatable query, so the check itself has errors.
  • Letting staff enter into whichever system is open, creating a split-brain data set that cannot be compared.
  • Running both systems until the old licence renews, then discovering you still need it and paying twice.

A realistic scenario: replacing an invoicing system

A services business replaces a ten-year-old invoicing and booking tool with a new application. The old system holds every client, invoice and payment for the current tax year. If the new totals are wrong, the accountant finds out in a quarter, and fixing it means restating records. The team decides on a parallel run new system for one billing cycle.

They import historical invoices, run shadow mode for two weeks, and fix a tax rounding bug that only appeared on pro-rated invoices. Then they dual-run for four weeks, reconciling every invoice total each evening with the query above. Four clean weeks pass, the accountant signs off, and they cut over on the first of the month. The old system stays read-only for sixty days, then is archived. If staff keep reaching for the old screens, that is a separate adoption problem — see what to do when the team will not use the new system.

The whole thing cost roughly six weeks of dual attention from two people. The alternative — one bad invoice total, found late, restated to the tax authority — would have cost more than that in accounting time and trust. That arithmetic is the entire case for the technique.

How does parallel run compare with the alternatives?

Parallel run is one of four viable migration strategies, and it is not the default. The table maps each to the situations where it earns its cost. Pick the lightest strategy that makes the failure acceptable.

StrategyRiskCostWhen it wins
Big bang cutoverHighLowLow write volume, easy rollback, tolerant users
Shadow runMediumLow-mediumNeed real-data proof without dual entry
Phased rolloutMediumMediumMultiple business units or modules, can migrate in slices
Parallel runLowestHighestFinancial, payroll, regulated or irreversible records

Shadow mode is the unsung hero in this table. If you can prove correctness by replaying real data read-only, you often do not need the full dual-operation window at all.

Which migration strategy fits which workloadFour rows mapping each migration strategy to the risk, cost and situation it suits.Which migration strategy appliesBig bangLow write volume, easy rollback, tolerant usersShadow runReal-data proof without dual entryPhased rolloutMultiple units or modules you can migrate in slicesParallel runFinancial, payroll, regulated or irreversible records
How the four migration strategies map to risk, cost and the type of workload each one suits best.

In short

  • Run both systems on the same live work until reconciliation proves the new one safe.
  • Start with shadow mode, define exit criteria, keep the window as short as confidence allows.
  • Automate the sync and the comparison; manual dual entry is where errors and fatigue appear.
  • Pick big bang or phased rollout when the cost of one bad record is lower than the cost of dual operation.

People also search for

Planning a migration and not sure whether a parallel run new system is worth the overhead? Our team can review the old and new systems, define realistic exit criteria and run the reconciliation so you do not inherit a data problem. Contact us to talk through the approach, or see the systems we have built and handed over.

Frequently asked questions

  • A parallel run operates the old and new systems side by side for a defined period, feeding both the same inputs or a mirrored subset of traffic. Teams compare outputs and reconcile records to confirm the replacement behaves like the incumbent before cutting over. It is a verification stage, not the final migration itself.

  • Use a parallel run when the old system holds high-value transactions, compliance obligations, or complex business rules that are costly to get wrong. It suits migrations where you can replay or mirror data and tolerate temporary dual operation. Direct cutover is riskier when regression would stop billing, payroll, or order processing.

  • Run long enough to cover at least one full business cycle that exercises monthly, weekly, and daily processes, such as a month-end close or a payroll period. Many teams use two to four weeks; regulated environments may need longer. End it only when discrepancy rates stay below an agreed threshold over consecutive cycles.

  • You need a stable data extraction or event stream from the source, idempotent or reversible writes, a reconciliation dataset with shared unique identifiers, and monitoring for both environments. Document which system is authoritative for each record type. Confirm rollback procedure before starting, and back up both databases.

  • Reconcile at field level using shared IDs: compare row counts, checksums, and key totals with SQL EXCEPT queries or diff tools. Sample high-risk records and trace them through both pipelines. Watch error rates, latency, and downstream reports. Record every mismatch with the input that caused it so developers can reproduce it.

  • Divergence appears as missed events, duplicate writes, timezone or rounding differences, and stale reference data. Operators may trust the new system too early or keep both authoritative, causing conflicting updates. Alert fatigue can hide real mismatches. Detect early by automating daily reconciliation and treating every mismatch as a defect until root-caused.

  • Choose one system as the writer of record, usually the old one, and forward a copy to the new system using an event queue or CDC stream. Keep consumers idempotent so replays do not duplicate side effects. For batch jobs, mark processed rows in a control table. Dry-run any dual-write change against a staging copy first.

  • You double the attack surface and credential set. Keep the old system patched and restrict its network access to only what the parallel run needs. Rotate service accounts and audit database links between systems. If the old system is end-of-life, isolate it and log all access because vendors stop shipping security fixes.

  • Expect roughly double the infrastructure cost and support load for monitoring, patching, backups, and incident response. Reconciliation scripts and data fixes consume engineering time. Cloud spend scales with duplicated compute and storage, so model it with the vendor calculator before committing. Our team can review the setup via /contact.

  • A canary deployment sends a small percentage of real traffic to the new system with instant rollback, while a shadow or dark launch replays production reads without serving responses. A phased cutover migrates one module or customer segment at a time. These reduce dual-running cost but give less side-by-side coverage than a true parallel run.

0 comments

Be the first to share your thoughts.

Leave a comment

Chat on WhatsApp