flowchart TB
t1["T-7d · Dry run in staging<br/><i>full rehearsal, timed</i><br/>owner: Delivery"]
t2["T-1d · Freeze changes · verify backups<br/>confirm rota and bridge<br/>owner: Ops"]
t3["T-0 00:00 · Enable read-only on legacy<br/>owner: Ops"]
t4["T-0 00:15 · Final delta migration<br/><i>est 90 min · checkpoint at 60</i><br/>owner: Data"]
t5["T-0 01:45 · Reconcile counts + checksums<br/>owner: Data"]
g1{"T-0 02:15 · GO / NO-GO<br/><i>criteria: 100% row match,<br/>0 critical defects, all owners present</i>"}
t6["T-0 02:30 · Repoint DNS + feature flag<br/><i>TTL pre-lowered to 60s</i><br/>owner: Platform"]
t7["T-0 02:45 · Smoke suite + 10 manual journeys<br/>owner: QA"]
g2{"T-0 03:30 · Accept or roll back"}
t8["T-0 03:30 · Open to 10% traffic<br/>owner: Platform"]
t9["T-0 06:00 · 100% traffic<br/>owner: Platform"]
t10["T+24h · Hypercare ends<br/>legacy kept read-only 30d"]
rb(["ROLLBACK · revert DNS<br/>re-enable legacy writes<br/><i>est 20 min</i>"])
pnr["POINT OF NO RETURN<br/><i>after first write to new system<br/>rollback needs reverse migration</i>"]
t1 --> t2 --> t3 --> t4 --> t5 --> g1
g1 -->|"no-go"| rb
g1 -->|"go"| t6 --> t7 --> g2
g2 -->|"roll back"| rb
g2 -->|"accept"| t8 --> t9 --> t10
t8 -.-> pnr
Planning Artifact
Cutover Plan
The hour-by-hour sequence of go-live, with owners, checkpoints, the rollback decision point and the moment rollback stops being possible.
Zero-Downtime Migration
Build