Analyze with AI
Get AI-powered insights from this Mad Devs article:
A migration job has finished. The source and target are available, the pipeline reports no critical errors, and headline record counts look reasonable. That still does not answer the decision that matters: can the business safely make the target system authoritative?
Transfer success does not prove that transformations are correct, relationships still work, business totals reconcile, or changes made after the initial load reached the target. It also says nothing about whether the team can validate the final run inside the cutover window or reverse it safely. This guide turns data migration testing into a documented go/no-go decision. For migration fundamentals and strategy options, see the Mad Devs data migration glossary.
Key takeaways
- Successful data transfer is not the same as a successful migration.
- Matching row counts provide limited evidence of completeness; they do not prove accuracy, integrity, or correct transformation.
- Validation depth should follow risk and business requirements.
- Applications and downstream processes must work with migrated data—not merely connect.
- Changes after the initial load require explicit reconciliation.
- Agree acceptance criteria, thresholds, owners, and approval rights before the final run.
- A rollback document is not evidence that rollback will work; exercise the recovery path within project constraints.
- The go/no-go record should connect every critical control to an expected result, actual result, evidence, owner, and status.
What data migration testing needs to prove
Data migration testing should produce enough evidence to answer five questions:
- Did everything required arrive? The expected population is present, while approved exclusions remain excluded.
- Is it correct? Critical values match the source or the approved transformation rule.
- Is it internally consistent? Keys, relationships, references, and constraints still support valid use of the data.
- Can the business use it? Critical workflows, reports, APIs, exports, and downstream processes return expected results.
- Can we safely make the target authoritative? The final synchronization, validation, approval, and recovery plan fit the cutover conditions.
This is the purpose of data migration validation: not to accumulate passed test cases, but to reduce the uncertainty behind a release decision. Snowflake describes validation as verifying that target data matches the original source before cutover (Snowflake documentation).
The required evidence will differ between, for example, an archival store and an order platform. Start with what the target must preserve and what a wrong result could affect. Only then choose comparison methods and test depth.
Start with the source baseline
A target cannot be reconciled against an undefined source. Before comparing systems, establish a source baseline that states:
- the migration scope and expected populations;
- the authoritative system or field for each in-scope domain;
- known source defects and how each will be handled;
- the snapshot time or cutoff point;
- records deliberately excluded from the migration;
- approved mapping, cleansing, normalization, and calculation rules;
- the owners authorized to resolve data questions.
Do not treat the source as automatically correct. A duplicate customer, invalid reference, or stale status may already exist there. If the migration is supposed to preserve such a value, record that decision. If it is supposed to correct it, define the expected target result. Otherwise, the same difference may be reported as a migration defect by QA and as intended cleansing by the data team.
Make the baseline reproducible: retain the query or extraction version, parameters, timezone, source timestamp, and filters behind each control total. For changing sources, separate the initial-load baseline from the delta scope.
Validate more than record counts
Matching counts are useful, but they answer a narrow question: whether two defined populations contain the same number of rows. They do not prove that these are the same rows, that values are correct, or that transformations behaved as intended. SAP’s migration guidance explicitly recommends checking column data and transformation results in addition to row counts, especially when data types, structures, or values changed (SAP HANA Cloud Migration Guide).
A risk-based data migration test plan should cover four layers.
Completeness
Reconcile populations at levels that can reveal localized loss: by entity type, date range, tenant, status, region, or another meaningful partition. Verify required records and mandatory fields, not only a global total. A global source-target difference of zero can conceal one missing population and an equal number of unexpected duplicates.
Accuracy
Compare stable identifiers and values that could materially change a workflow: dates, amounts, statuses, units, ownership fields, or calculations. Use full comparisons where practical; document sampling and cover boundary values, nulls, unusual formats, and high-risk records.
Integrity
Check that required relationships and references remain valid. Orphan detection, uniqueness checks, constraint validation, and parent-child population comparisons can reveal data that loaded successfully but cannot be used correctly. Include relationships implemented in application logic even when the target database does not enforce them as foreign keys.
Transformations
Test the expected result of each approved rule: mappings, normalized values, merged or split fields, conversions, defaults, cleansing, and calculations. Test both ordinary and edge inputs. “Transformation job completed” proves execution, not correctness.
For critical transformations, retain a trace from source input through the rule version to the target result.
Reconcile business outcomes, not only tables
Database-level equality does not automatically prove business-level correctness. A migration can preserve every row yet change a financial total because of rounding, currency handling, status mapping, or a join that no longer reflects the same relationship.
Define business control values with the people who own the affected process. Depending on the system, these might include:
- balances or financial totals by an agreed period and currency;
- order or invoice counts by lifecycle state;
- active subscriptions at the cutoff point;
- inventory totals by location;
- operational aggregates used for staffing or fulfillment;
- results of reports used for management or regulatory decisions.
These are examples, not a universal list. The right controls are outputs whose unexpected change would cause the business to reject the migration.
For every control, define the calculation, population, time, tolerance, and owner. Run equivalent calculations against source and target. When schemas differ, compare business meaning, including the same inclusion rules, currency basis, time boundary, and treatment of nulls or reversals.
This is where data migration reconciliation becomes decision evidence: it connects technical data movement to the outcomes stakeholders expect the new system to preserve.
Test applications and integrations on migrated data
Correct-looking data can still fail its consumers. A report can filter a remapped status incorrectly, an API can serialize a date differently, or a background job can hit a relationship no comparison query exercises.
Run representative high-risk flows against migrated data, including whichever of the following actually depend on it:
- user-facing application journeys;
- critical reports and dashboards;
- APIs and partner integrations;
- scheduled and background processes;
- exports and downstream analytics;
- permission and ownership checks.
Verify the outcome, not merely availability. An endpoint returning 200 OK is weak evidence if its payload contains the wrong customer status. A report rendering without an error is insufficient if its totals differ from the approved control value.
SAP likewise recommends functional or regression testing of client applications, solutions, and integrations after migration, with expected behavior and results as the standard—not just successful connectivity (SAP HANA Cloud Migration Guide). When migration accompanies API, data-model, or architecture changes, Mad Devs’ Backend Development service can support the related implementation and testing safeguards.
Validate changes after the initial load
If the source remains active after the initial load, that load begins a moving-target period. The team must prove that the synchronization mechanism handles the full change set before the target becomes authoritative.
Test inserts, updates, deletes, late-arriving changes, retries, and duplicate handling. Include multiple changes to the same record and changes that cross the cutoff boundary. Reconcile the delta by a defined sequence or time range, not by an informal statement that “sync completed.”
Be precise about time semantics. Establish which event or log position defines inclusion when timestamps, clocks, or transaction boundaries differ. For change data capture, retain the checkpoint or offset with the evidence.
Also test idempotency where retries are possible. Replaying a batch or event should not create duplicate business effects unless duplication is explicitly part of the source state. The final validation should show that every in-scope change is applied once in business terms—even if the underlying delivery provides a different technical guarantee.
Define cutover acceptance criteria before the final run
“No major issues” is not an acceptance criterion. It leaves severity, tolerance, ownership, and decision rights open to negotiation when the cutover clock is already running.
Define these elements in the data migration test plan before the final migration:
- failures that automatically block cutover;
- permitted discrepancies and their numeric or rule-based thresholds;
- exceptions that require explicit acceptance;
- owners for technical, data, and business decisions;
- the evidence required for each control;
- the approval sequence and deadline;
- conditions that trigger rollback rather than continued investigation.
A threshold should follow the risk of the control, not convenience. Zero tolerance may be appropriate for missing active accounts or broken identifiers, while an approved difference may be valid for excluded historical records. Document the reason. Do not invent one universal percentage for all migrations.
Use a control record with five fields: expected result, actual result, evidence, owner, and status. Add an exception reference when actual and expected differ. This prevents a dashboard full of green checks from hiding an unresolved discrepancy in a critical population.
Track validation time, discrepancy-investigation time, unresolved blocking exceptions, and the percentage of critical controls with retained evidence. These measure the decision process, not a universal definition of migration quality.
Migration cutover evidence matrix
The following matrix is a Mad Devs editorial framework, not an external industry standard. Use it to ask what each check actually proves and what result should stop the cutover.
| Area | Weak evidence | Stronger evidence | Example cutover blocker |
|---|---|---|---|
| Completeness | Counts look similar | Defined source and target populations reconcile by meaningful segments | Required records are missing |
| Accuracy | A sample looks correct | Critical values match the source or approved rules across the agreed scope | Material values differ |
| Integrity | Tables loaded | Required relationships, references, and uniqueness rules remain valid | Broken relationships prevent correct use |
| Transformation | The job succeeded | Expected results are verified against versioned mapping and calculation rules | A business rule was applied incorrectly |
| Business outputs | Queries run | Critical totals, reports, and operational outcomes reconcile | A business result changes unexpectedly |
| Integrations | The endpoint responds | Required downstream workflows complete with correct data | A consumer receives or acts on incorrect data |
| Incremental changes | Synchronization completed | Inserts, updates, deletes, and retries reconcile against a defined delta scope | Changes are missing or duplicated |
| Rollback | A rollback document exists | The recovery path has been exercised under relevant project conditions | Safe reversal has not been demonstrated |
| Approval | Tests were executed | Required technical and business owners accept the recorded evidence | Required sign-off is missing |
The matrix also helps expose overclaiming. “Row count matches” can support one completeness control. It cannot, by itself, support the conclusion “the migration is correct.”
Rehearse validation inside the cutover window
A cutover rehearsal should time more than extraction and loading. Measure validation execution, evidence collection, discrepancy investigation, owner review, approval, and the rollback decision. A technically complete migration is not operationally ready if the team needs six hours to assemble evidence in a two-hour decision window.
Use representative volume and the same control queries, roles, dependencies, and communication path intended for production. Record which checks can run in parallel, which depend on a finalized load, and which require a business owner. Confirm that evidence is accessible to decision-makers without granting last-minute production access.
Rehearsal results should change the runbook. Automate slow comparisons, pre-stage dashboards, narrow expensive checks using risk, or adjust the window. Do not simply assume the production run will be faster. The practical question is: can the team gather enough evidence to make the go/no-go decision within the available window?
Treat rollback as part of readiness
Rollback readiness depends on how the system will behave, not on the existence of a document. Define the last point at which reversal is possible, what new writes can occur after cutover, and how those writes would be preserved or reconciled if the business returns to the source.
Test the feasible recovery path for the project. That may involve restoring a snapshot, reversing routing, replaying queued changes, or reconciling writes created in the target. Verify system state after recovery, including application behavior and downstream effects. A database restoration alone may not reverse messages already sent, payments initiated, or data exported.
Name the person authorized to make the rollback decision and give them observable triggers. Also define when rollback becomes riskier than fixing forward. A documented rollback path should not be treated as a proven rollback path.
Who should sign off on migrated data?
Sign-off should follow the type of claim being made:
- Technical owners confirm pipeline execution, infrastructure state, synchronization checkpoints, and technical recovery readiness.
- QA and data owners confirm that agreed controls ran, discrepancies were investigated, and evidence supports the acceptance criteria.
- Business or process owners confirm that business totals, rules, and operational outcomes still represent the real process correctly.
No single role should silently accept every risk. A database engineer can prove that a transformation follows its specification but may not be authorized to decide that an unexplained balance difference is immaterial. Conversely, a business owner needs technical evidence rather than a request to approve a pipeline they cannot inspect.
Testing should therefore end with a decision packet: control results, unresolved exceptions, risk assessments, approvals, synchronization status, and the time at which the evidence was valid. This matches the broader Mad Devs Quality Assurance and Software Testing approach of connecting requirements, testing, release criteria, and reporting.
Data migration cutover checklist
Before approving production cutover, confirm:
- Migration scope and authoritative sources are clearly defined.
- Known source issues, approved corrections, and exclusions are documented.
- Expected populations reconcile across meaningful segments.
- Critical values are validated against source data or approved rules.
- Transformations are checked with ordinary, boundary, and exception inputs.
- Required relationships, references, and constraints remain intact.
- Business control values reconcile under equivalent calculation rules.
- Required applications, reports, APIs, and downstream integrations work with migrated data.
- Inserts, updates, deletes, late changes, and retries after the initial load are validated.
- Unresolved discrepancies have evidence, impact, owner, and disposition.
- Blocking criteria and acceptable differences were defined before the final run.
- Validation, investigation, approval, and rollback decisions fit the cutover window.
- The rollback path was exercised under relevant project conditions.
- Required technical, data, QA, and business owners approved the result.
- The evidence and final decision are retained and timestamped.
The migration is ready for cutover when the evidence supports the specific business and technical claims the target must satisfy—not when the pipeline merely stops reporting errors. A disciplined go/no-go record makes that distinction visible, reviewable, and defensible.
QUALITY ASSURANCE & MIGRATION VALIDATION A successful migration job does not prove your data is ready for production. Mad Devs can help define migration acceptance criteria, validate critical data and business workflows, and identify the gaps that should be resolved before production cutover. Discuss migration testing → |







