
Architecture before content
The temptation is to lift and shift and fix the structure later, and later rarely comes. Design the hub-site model, the communication and team site split and the global taxonomy first, then map the old estate onto it.
This is also the moment to move permissions to Entra ID group-based access with hub-level sharing controls. Migrating folder-level permissions faithfully just carries the problem across.
Waves, with a real pilot
Pilot on entities that are representative rather than convenient. Validate the tooling on them for content, metadata, permissions and links before committing the schedule. Then run alpha migration, delta cutover, validation and decommission.
Decommissioning matters. A legacy environment left running is a legacy environment people keep using, and your delta grows for as long as it exists.
Budget for broken links
Every migration breaks links: in documents, in emails, in third-party systems pointing at old URLs. LinkFixer Advanced or an equivalent belongs in the budget, and the remediation pass needs scheduling into each wave rather than the end.
Custom code is the other trap. Work directly with site owners to find SPFx solutions and classic sandbox customisations supporting mission-critical processes. They are rarely documented, and business processes often depend on them.
Write runbooks while the wave runs
Write the runbook for each workstream as the wave runs. It is accurate then, and it lets the client’s own team run the next wave with less of you in the room.
Runbooks written after go-live are reconstructed from memory and miss the details that mattered.