The migration finished at 03:17. Production was live. The last line in the log read: ALTER TABLE orders ADD COLUMN processed_at TIMESTAMP; A new column. One change. But it carried the weight of every query, every index, every downstream consumer.
Adding a new column is simple until it isn’t. Schema changes touch more than tables. They touch deploy pipelines, application code, and APIs. A careless ADD COLUMN can lock rows, block writes, and trigger slow queries. On high-traffic systems, those seconds matter.
The safest approach is to design the new column with intent. Define its type with precision. Decide whether it should allow NULL values. Set default data carefully. Test in staging with production-scale data, not sample rows. Check indexes. A new column that isn’t indexed but used in WHERE clauses will burn CPU. An unindexed JOIN on the new column will do even worse.