Goal
Move data from the old system to the new one completely, correctly and lawfully — rehearsed several times before the real day, always with a way back.
Inputs → outputs
Inputs
- Source systems and data to migrate (from discovery)
- New system ERD and schema migrations
- Copy of source data (anonymised where needed)
Deliverables
- Migration plan and field mapping
- Migration scripts + rehearsal logs
- Reconciliation report signed by business users
- Cutover and roll-back plan
Teams & roles
- Data & AIowns mapping, scripts, rehearsals
- Business Analysis (BA)business rules for transformation
- Engineering (FE · BE · Mobile)writes and tunes scripts
- Quality Assurance (QA/QC)reconciliation, sampling
- DevOps / SREcutover plan, backups, roll-back
- Application Security (AppSec)protects personal data in transit
- Client (Product Owner / sponsor)data owner, signs off reconciliation
RACI matrix
R — does the work · A — accountable, final sign-off (exactly one A per activity) · C — consulted before · I — informed after.
| Activity | BA | PM | Dev | QA | Sec | Ops | Data | Client |
|---|---|---|---|---|---|---|---|---|
| Source data inventory & quality assessment | R | · | · | · | · | · | A | C |
| Field mapping & transformation rules | R | · | · | · | · | · | A | C |
| Migration scripts & rehearsals | · | · | R | · | C | · | A | · |
| Reconciliation & sign-off | · | · | · | R | · | · | R | A |
| Cutover & roll-back plan | · | C | · | · | · | A | R | C |
BA = Business Analysis (BA); PM = Project Management / Scrum Master; Dev = Engineering (FE · BE · Mobile); QA = Quality Assurance (QA/QC); Sec = Application Security (AppSec); Ops = DevOps / SRE; Data = Data & AI; Client = Client (Product Owner / sponsor)
Quality gate
At least one full rehearsal reconciles; cutover and roll-back plan approved.
Entry criteria
- ERD and schema stable for the migrated scope
- Access to a copy of the source data
- Client data owner appointed
Exit criteria
- Mapping covers 100% of in-scope fields
- At least one full rehearsal with matching counts and checksums
- Remaining data issues accepted by the client in writing
- Cutover time measured and fits the maintenance window
- Roll-back plan tested
Activities
- 1.Inventory source data: tables, volume, quality, owners, personal data
- 2.Build the field mapping, cleansing and transformation rules, duplicate / missing handling
- 3.Write re-runnable (idempotent) migration scripts with per-batch logs
- 4.Rehearse on a data copy at least twice and time it
- 5.Reconcile: record counts, checksums, random samples checked by business users
- 6.Plan the cutover: data freeze, step order, go / roll-back decision points
Checklist
Tick to self-review — 0/6. Ticks stay in this browser only and are not sent anywhere.
Document templates
Markdown (.md) files: open in any editor, or paste into Word / Google Docs. Each states its purpose, who fills it in and when.
Client involvement
- Name a data owner
- Decide which data to keep and which to drop
- Check reconciliation samples and ensure a lawful basis for moving personal data
Tools
- pg_dump / pg_restore
- SQL · Node.js · Python script
- Google Sheets (bảng ánh xạ)
- CSV / Excel
Reference standards
- DAMA-DMBOK2 (DAMA International)
- Data management body of knowledge: quality, integration, migration
- ISO/IEC 25012:2008
- Data quality model: accuracy, completeness, consistency, currency…
- Luật Bảo vệ dữ liệu cá nhân 2025 (91/2025/QH15) và Nghị định 356/2025/NĐ-CP
- Moving personal data to a new system is "processing" — it needs a lawful basis and purpose
Common pitfalls
- Migrating on go-live day without a rehearsal
- Counting records without checking content
- Copying into new tables without retiring the old ones → duplicates in two places
- Using real, non-anonymised data on developer machines
Real example
cuongthai.com, 25 Aug 2026: merging the blog into a new articles table copied the content but left the old table in place, so the same slug existed in both and both URLs returned 200. The code said it "could not" happen; the data said it did. Since then post-migration reconciliation is done with real queries and requests, never inferred from code.
Where to learn
Subjects and courses on cuongthai.com that teach this stage’s work.