Skip to content
CH 01Case filethe migration that couldn't lose a record

The Migration

A monolithic Drupal 7 application, years past its build, millions of nodes deep — rebuilt as Drupal 10 while the site kept publishing.

Client
An enterprise Drupal estate, unnamed by agreement — the work was agency-side; the engineering was Dane's, as sole technical lead
Role
Sole technical lead: architecture, migration paths, deployments
Stack
Drupal 7 → Drupal 10 · custom migrate paths · Behat
Outcome
Millions of nodes on modern Drupal, every data relationship intact, cutover measured in minutes
CH 02The numberswhat intact actually means
Millions
of nodes moved
D7 → D10
monolith to modern, one estate
0
records lost — counts reconciled every run

Drupal 7 to modern Drupal is not an update — it's a re-platforming wearing an update's name. Field storage changed, entity references changed, the theme layer changed completely. What survives is the data, and only if the migration treats the data as the entire point.

The client's estate had years of accumulated content models: nested references, field collections, editorial workflows encoded in the structure itself. The rebuild was the easy half. Moving the history without breaking a single relationship was the job.

CH 03Decision logthe calls that made it boring

Custom migration paths over the migrate UI defaults

Millions of nodes with deep entity-reference webs — the default paths flatten what the business logic depends on. Hand-built migrations preserve the relationships the defaults discard.

Counts as the contract

Every entity type reconciled source-to-destination, every run. A migration that "looks done" and a migration whose numbers match are different claims; only one survives an audit.

Increments against a live site

The site kept publishing through the whole migration. Delta runs picked up new content; the cutover window was measured in minutes, not weekends.

Behat tests standardized across the shop

An untested migration is a rumor. The test suite became the agency standard afterward — the migration paid for its own guardrails.

Facing the same trip?

The Drupal upgrade assessment(from $2,500) maps your version of this journey module by module — and the Peace of Mind program keeps the destination from ever becoming a departure point again.