The programme lead had a number he liked. Four thousand and something objects. He said it the way you say a fact you have already defended in two steering meetings. When I asked which of them were coming, he pointed at the number again.
I have had that conversation more times than I can count. The number is easy to defend. The hard sentence is which objects are being left behind, said out loud, with a name next to it. Leaving something behind feels like a failure. Writing it down feels like giving the steering committee a stick to hit you with later.
The date slips because of the objects you pretended were in scope.
What Lakebridge will not decide
Databricks Lakebridge is good at the thing it is for. It profiles the estate, converts a lot of the SQL, and helps you reconcile, and we run it rather than replacing it.
What it will not do is decide whether a stored procedure that three teams depend on belongs in wave two or in a folder marked "never." It will not name the report that still points at a view whose owner left last summer. It will not map a Snowflake role hierarchy onto Unity Catalog, or turn a Teradata FastLoad job into an ingestion path.
That residue is the work. On Snowflake it is Tasks, Streams and shares. On Synapse it is the dedicated pool sitting next to Spark and an ADF graph. On Teradata it is BTEQ and macros and primary indexes. The residue list changes with the source. The need to write it down does not.
Two weeks, then a recommendation
We productised those two weeks as the Migration Readiness Sprint. They run on Fabric Airlift. Every object comes out dispositioned as in scope, excluded, or owned by a named person. The exclusions are agreed, so they still hold when someone questions them in month four. There is a dependency map, a wave plan, parity criteria per object type, and a hard-object pilot chosen as the thing most likely to break, then a go or no-go with the reasoning shown.
I used to be uncomfortable ending a paid two weeks with "do not start yet." A licence renewal is a terrible reason to move an estate whose dependencies you cannot draw, and telling a steering committee that in week two is cheaper than telling them in month seven. I am fine with that ending now.
The sentence nobody wants to write
"We are not migrating this."
That sentence is the whole sprint, some days. A table that feeds a process nobody can name. A share whose consumer is a team in another hemisphere who will not join the call. A procedure that encodes a pricing rule the business has been meaning to rewrite since 2019.
If you cannot get someone to put their name next to "leave it," it will show up in wave four as an emergency. Airlift treats the exclusion as part of the ledger, the same way it treats a converted view. Scope that lives only in a steering slide is hope.
I am going to leave medallion layers and lift-and-shift versus rebuild alone here. Those are real choices and they belong after you know what you are moving. The older version of this argument, which lived on our migration post for a year, started with the target architecture. That was the wrong end.
If you already know the source, open that page. If you do not, start at the sprint. Bring the people who will be angry if their object is missing. They are the ones who have to sign the exclusions.