Irrespective of language / platform does anyone ever write 'down' migrations? Do you ever use them?
I've always found they don't pay for themselves in terms of testing and likelihood of being required.
Alternatives are snapshots (depending on if you can afford downtime) and simply writing recovery scripts that aren't tied to individual migrations but rather a deployment. i.e. run script before running any migrations and if it goes wrong run contra script to backout as opposed to cleanup script.
I've always found they don't pay for themselves in terms of testing and likelihood of being required.
Alternatives are snapshots (depending on if you can afford downtime) and simply writing recovery scripts that aren't tied to individual migrations but rather a deployment. i.e. run script before running any migrations and if it goes wrong run contra script to backout as opposed to cleanup script.