Cloud migration projects rarely slip because a cloud service didn't work as advertised. They slip because of a dependency nobody wrote down — a script that runs on a cron job on a server that also happens to host something else, a firewall rule someone added three years ago for a reason nobody remembers.

A migration plan is only as good as the discovery phase that produced it, and the discovery phase is only as good as the willingness to go look at what's actually running, not what the architecture diagram from two years ago says is running.

Budgeting real time for discovery — including interviews with whoever's been keeping a system alive informally — consistently pays for itself later in the timeline.