@janpio if you're rethinking migrations, here's a question about best practise.
How would someone do a deploy? You don't want to migrate while still running the old code, because it could crash. On the other hand, you don't want to deploy new code and migrate after that, because of the same reason 🙂
I thought about one possible solution. Imagine if there's a pre-deploy migration where it would do all the non-destructive migration step such as adding tables/column. And then there's a post-deploy migration step where it would delete old columns, copy date from an old column to a new one (in case you have renamed a column) etc