Why modernization projects stall
The usual failure is scope. A team commits to a full replatform, disappears for nine months, and re-emerges with something that handles the easy 80% of cases and none of the exceptions the business actually cares about. Meanwhile the legacy platform kept changing, so the two have drifted and the cutover keeps slipping.
The alternative is to migrate in vertical slices. Pick one domain, take it all the way through to a consumer someone uses daily, and run it beside the old pipeline until the numbers reconcile. You get a working reference implementation in weeks, every subsequent domain is cheaper than the last, and there is never a single terrifying cutover weekend.
It also front-loads the unpleasant discoveries. The undocumented business logic buried in a stored procedure, the source that silently changed its timezone convention in 2021 — these surface in week four on one domain, not in month eight across all of them.