The build was green. The release was ready. Then the schema changed, and the team needed a new column.
Adding a new column sounds simple. In production, it is often a sharp edge. The wrong migration locks the table. The wrong defaults slow every write. A missing backfill breaks the app in the dark hours before launch.
A new column triggers questions: Should it be nullable? Should it have a default? Should the migration run online? How will it affect indexes? Will queries need to be updated in every service that touches the table? An experienced team treats these as risk points, not afterthoughts.
In modern relational databases like PostgreSQL or MySQL, adding a column can be instant in certain scenarios, but not all. Adding a column with a non-null default forces a full table rewrite. On large datasets, this can block traffic for minutes or hours. The safer approach is to add the new column as nullable with no default, update the data in batches, then apply constraints once backfill completes.