Fork me on GitHub

That's what we do too, unless there's a specific reason we can't. Sometimes we have to do two migrations: one that is compatible with both old and new code, then do the code deployment, then do a second migration that backfills data or does cleanup or whatever. Since we can automate our migrations as well as our code deployments, that's pretty easy. And of course in dev/CI it doesn't really matter since you can run all the migrations first and then run the tests on the new code.