Before you start
Protect the current working path.
- Name one migration owner and one business approver.
- Freeze unrelated feature work during the migration window.
- Keep the current service and billing active until the acceptance checks pass.
- Use synthetic records for rehearsals; handle production exports under the applicable privacy and retention rules.
Step 01
Inventory the running system
A code repository is not the whole application. Record every component that must continue working.
- Domain and DNS
- Source code and build settings
- Database and authentication
- Uploaded files and object storage
- Email, scheduled jobs, webhooks, secrets, and external connectors
Stop if a production component has no known owner, export path, or replacement decision.
Step 02
Capture a recoverable source state
Create independent copies before changing schemas, credentials, or routing.
- Export data in a documented usable format
- Copy uploaded files with counts or checksums
- Tag the deployed code version
- Record environment variables without placing secrets in the guide
- Test at least one restore away from production
Step 03
Build the target in parallel
Keep the current service available while the new setup proves it can run the complete workload.
- Use client-owned production accounts where possible
- Match required regions and data handling
- Recreate identity, email, jobs, and callbacks
- Document differences rather than silently accepting missing capability
Step 04
Rehearse data and file movement
Measure the real transfer time, transformation work, and data-loss window before cutover.
- Record start and end timestamps
- Compare record and file counts
- Verify permissions with at least two synthetic tenants
- Repeat or script any manual transformation that could be missed
Do not schedule cutover while reconciliation has unexplained missing or duplicate records.
Step 05
Run acceptance and recovery checks
A fast homepage is not proof that the business workflow or rollback works.
- Sign in and sign out
- Read and change an authorised record
- Upload and download a file
- Send a transactional email
- Run a scheduled or background task
- Restore code, data, and files through the target path
Step 06
Cut over with a written rollback trigger
Decide in advance which failures justify returning traffic to the old service.
- Lower DNS TTL early when applicable
- Choose a final data-sync method
- Record who can change routing
- Define the maximum acceptable outage and data-loss window
- Keep a timestamped cutover log
Step 07
Observe, accept, then retire
Cancellation is the final step after the new setup has handled real work and ownership is clear.
- Monitor the critical paths during the agreed window
- Confirm billing and alerts
- Obtain business-owner acceptance
- Archive required exports and evidence
- Cancel the old service only after rollback is no longer required
Acceptance record
Do not close the old path until these statements are true.
- The target passed the same critical paths used to accept the old service.
- Code, records, files, configuration, and ownership each have a recovery or replacement path.
- The old service remains available until the named approver accepts the new one.
- Unresolved dependencies and expected recurring work are written down.
Help improve this decision
Did this answer your question?
Tell us what is missing
Leave the unresolved part in your own words.
We review recurring purchase and operating questions. Do not include passwords, API keys, private code, or customer data.