Systems Post-Mortem · 30 September 2026
The Migration Passed. The Website Failed.
Why imported row counts cannot prove that content relationships survived a migration.
Illustrative scenario. Records, events and arithmetic are constructed examples, not findings about a named organisation.
The migration report reads: 48,216 records imported. Zero errors. On the course page, the entry-requirements field is empty. The requirements exist in the new CMS. Nothing connects them to the course.
The acceptance spreadsheet is green. The applicant opens another tab.
The migration team was contracted to move records. Faculties own the content. Editors own the pages. Another supplier owns search. Each boundary has a scope, a delivery date and a person authorised to sign.
After years of reorganisations, course closures and exceptions negotiated between departments that do not share a budget, the team has moved the estate without losing its documents, preserved the published text and kept the service available throughout the change.
They protected the source material.
You know what happens when someone calls this a communication problem. A workshop appears. Department heads nominate representatives. The people who can explain the missing relationships receive another meeting invitation.
An organisational chart cannot tell a migration script which requirements belong to which course. Neither can a new interface. The operators are right to distrust a remedy that creates minutes but no mapping.
Assume 8,000 pages require six minutes of relationship checking each. That is 800 hours for one pass. A second pass brings the total to 1,600 hours before anyone corrects the failures.
At an illustrative loaded cost of A$90 per hour, those checks consume A$144,000. The calculation describes a scenario, not a measured client loss.
The import took an evening.
The acceptance method has transferred the work from a machine-readable contract to a review queue. Each reviewer must reconstruct a connection that the migration was never required to preserve.
The legacy vendor offers a credible defendant. Its export kept links inside HTML, mixed reusable facts with page copy and omitted relationships stored by an extension. The new team inherited years of decisions it did not make.
The source really was deficient. The contract really did divide responsibility. A supplier can satisfy its import specification while the institution loses a usable service.
The paperwork supports everyone.
No.
You accepted a row count as proof that the site still worked.
Migration acceptance must follow an entity through its dependencies: course, requirements, application route and responsible owner. A missing relationship needs an explicit exception and a release decision, not a green cell inherited from successful insertion.
The editors praised for knowing where everything belongs are performing the joins that the model never recorded.
The records arrived. The service did not.
We look for content estates with this exact structural failure mode.
If your migration report shows zero errors while pages have lost their dependencies, send the acceptance checklist and one affected page URL to sd@scfco.co.
Simon
OPERATOR
blahblahblah.digital // scfco.co