We have tried to make our migration related changes such that they run on both platforms, behind a flag if needed. The idea is that the same commit is running in production on both the old stack and the new stack, as we shift traffic incrementally. This allows feature teams to continue making changes and delivering features to both platforms during the migration. Building and supporting these kind of abstractions certainly slows things down for us, but it keeps the feature teams delivering at about the same rate they were before we started the migration.
We try to take on one migration at a time, because you really never know what you're getting into until you really get in the weeds.