Every migration plan has a line item somewhere that says "cutover window." For most systems that is a Saturday night and a status page notice. But a growing class of systems has no acceptable window at all: payment rails, order capture, policy administration, patient records, telecom provisioning — systems where an hour of downtime is measured in revenue, regulatory exposure, or safety. These are also, uncomfortably, the systems most in need of leaving the data center. The good news is that zero-downtime migration is not a dark art. It is a discipline built from a handful of proven patterns — replication, dual running, incremental traffic shifting, and rehearsed rollback — assembled in a strict sequence. The teams that fail rarely fail on technology; they fail by skipping steps the sequence does not allow them to skip.
First, an honest definition of "zero"
"Zero downtime" does not mean zero risk or zero user-visible change — it means no service interruption beyond your error budget, and no data loss, period. Before any tooling decision, three numbers need executive sign-off: the availability target during migration (99.9% during migration is a different project than 99.99%), the recovery time objective if a cutover step goes wrong, and the acceptable data-consistency lag between old and new during the transition. These numbers drive everything — pattern choice, infrastructure spend, and timeline. A team that cannot state them is not running a zero-downtime migration; it is running an ordinary migration and hoping. It is also worth saying which pattern this rules out: the big-bang cutover, where the old system stops and the new one starts. For systems that can't stop, big bang is not a plan — it is a bet with no way to hedge.
The patterns that make it possible
Four patterns do nearly all the work, usually in combination. Change data capture (CDC) replication keeps the target continuously synchronized with the source while the source keeps serving — the foundation everything else stands on. Blue-green deployment runs old and new environments side by side with a fast, reversible switch between them. Canary or percentage-based cutover routes a small, controlled slice of traffic to the new system and grows it only as the metrics stay clean. And dual-write with reconciliation — or its safer sibling, shadow traffic mirroring — sends the same work to both systems so you can compare answers before the new one's answers count. Which combination you choose depends mostly on where state lives: stateless services can ride blue-green and canary alone, while databases and stateful cores need CDC plus a carefully ordered read-then-write cutover.
| Pattern | What it does | Best for | Watch-out |
|---|---|---|---|
| CDC replication | Streams every source change to the target in near real time while the source keeps serving | Databases and stateful cores — the foundation layer | Schema drift, DDL changes, and lag spikes under peak load; monitor lag as a first-class SLO |
| Blue-green | Two full environments; traffic flips via load balancer or DNS, and flips back as fast | Stateless services and app tiers | Doubles infrastructure cost during transition; DNS TTLs make "instant" flips slower than they look |
| Canary / percentage cutover | Routes 1%, then 5%, then 25% of traffic to the new system, gated on metrics | Anything with enough traffic to make small percentages meaningful | Session affinity and cross-system consistency for users split across old and new |
| Shadow traffic / dual-write | Mirrors real production work to the new system and reconciles outputs before they count | Validating correctness under real load — payments, pricing, scoring | Dual-write needs idempotency and careful failure handling; never let shadow writes leak side effects |
The runbook: six phases, no skipped steps
Phase one is baseline: instrument the current system until you can describe normal precisely — latency percentiles, error rates, throughput curves, batch windows — because during cutover, "is the new system healthy?" can only be answered against "what did healthy look like?" Phase two is replicate: stand up the target, start CDC, and let it run for weeks, not days, through at least one month-end or peak cycle. Phase three is mirror: shadow production reads and (where safe) writes, and reconcile relentlessly — every mismatch is either a bug found early or a false alarm you now understand. Phase four is cut over reads: move read traffic incrementally to the target while writes still land on the source; most consistency surprises show up here, cheaply. Phase five is cut over writes: the shortest and most rehearsed phase — freeze schema changes, drain in-flight work, flip writes behind a feature flag or router, verify replication has reversed direction, and watch the dashboards you built in phase one. Phase six is decommission — but only after the reverse-replication path has run long enough that rollback remains possible for an agreed period. The old system is your insurance policy; cancel it last.
Rollback is a feature you build, not a hope you keep
The defining property of a professional zero-downtime migration is that every phase has a tested way back. That means reverse replication configured and exercised before write cutover, not after; feature flags and routing rules that can shift traffic back in seconds without a deploy; runbooks with named owners and rehearsed timings — including a full game-day where the team actually executes the rollback under realistic conditions; and explicit go/no-go gates with pre-agreed metrics, so the 2 a.m. decision is a checklist, not a debate. Teams skip rollback rehearsal because it feels like planning for failure. It is the opposite: rollback confidence is what lets you cut over aggressively. The team that knows it can reverse in ninety seconds moves faster at every gate than the team that secretly suspects it cannot reverse at all.
| Failure mode | What it looks like | The countermeasure |
|---|---|---|
| Unreplicated dependencies | The database moved, but a cron job, sequence generator, or file drop still points at the old world | Dependency inventory before phase one — every consumer, producer, and side channel, however small |
| Replication lag at peak | CDC keeps up all week, then falls minutes behind during month-end — exactly when you cut over | Replicate through at least one full peak cycle; treat lag as an SLO with alerts, not a graph nobody watches |
| Split-brain writes | Both systems accept writes for the same entity during a messy cutover; reconciliation becomes forensics | Single write authority at every moment, enforced by the router — never by convention |
| Untested rollback | The rollback plan exists as a document; under pressure it turns out to need a deploy and a DBA who is asleep | Game-day the rollback before write cutover; if it hasn't been executed, it doesn't exist |
| Performance cliff on the target | The new platform is "faster" on average but misses the p99 the old system quietly guaranteed | Baseline percentiles, not averages; shadow traffic at full production volume before reads move |
The boring migration is the successful one
A zero-downtime migration done well is anticlimactic. The write cutover takes minutes, the dashboards stay green, and most of the organization finds out it happened from a summary email. That boredom is purchased weeks earlier — in the baseline nobody wanted to fund, the reconciliation reports nobody enjoyed reading, and the rollback rehearsal that felt paranoid at the time. The sequence is the strategy: replicate before you mirror, mirror before you move reads, move reads before writes, and keep the way back open until the new system has earned the right to stand alone. Systems that can't stop can still move. They just can't be moved carelessly.
Facing a migration with no maintenance window?
Apptad's platform engineers have moved always-on databases, integration hubs, and core business systems to the cloud without stopping them — CDC replication, phased cutovers, and rollback plans that have actually been rehearsed. Let's talk about your sequence.
Talk to Apptad →Explore Capabilities


