Zero-Downtime Postgres Migrations: The Expand-and-Contract Playbook
Most migration outages I've seen weren't caused by a bad idea. They were caused by a perfectly reasonable ALTER TABLE that grabbed a lock at 2 PM on a Tuesday and sat there while every request queued

