The build was breaking. A schema change had slipped through, and now production needed a new column.
Adding a new column sounds simple. It rarely is. In relational databases, a poorly planned column change can lock tables, cause downtime, or create cascading failure in services depending on that schema. The right approach depends on the database engine, table size, and the workload hitting it at the moment of migration.
In PostgreSQL, adding a nullable column with a default value can rewrite the entire table. To avoid this, create the column without a default, backfill in small batches, then set the default and constraints once the data is populated. In MySQL, the ALTER TABLE command can be instant for some changes with InnoDB’s fast DDL, but only if the new column meets specific conditions, such as being added at the end of the table. Mixing these with incompatible options forces a full copy, which can stall live traffic.