The database froze right after the deploy. Queries piled up. Someone had forgotten one thing: the new column.
Adding a new column sounds simple. It is not. On a live production table with millions of rows, a careless migration can lock writes, block reads, and bring down the app. The right approach depends on the database engine, table size, and schema change strategy.
In PostgreSQL, ALTER TABLE ADD COLUMN without a default is instant for most cases; with a non-null default, it rewrites the whole table. Use ADD COLUMN ... DEFAULT ... carefully. In MySQL, adding a column can require a table copy unless you use ALGORITHM=INPLACE where supported. Test these commands on a staging dataset that mirrors real production load.
Plan for indexing. Creating an index on the new column can be more expensive than adding it. Use concurrent index creation in PostgreSQL to avoid blocking writes. In MySQL, consider CREATE INDEX during off-peak hours.