Adding a new column sounds simple. In practice, it’s one of the riskiest schema changes you can ship. Databases under heavy read and write loads can stall or lock if the migration isn’t planned. Even a well-tuned index can’t save you from a blocking alter table on a massive dataset.
The safest path starts with defining the new column and its nullability. If nulls are allowed, you can often create the column instantly in modern relational systems without rewriting entire tables. If it’s non-null with a default, test carefully—some engines rewrite all rows to set that default, causing downtime.
For large tables, break the migration into two steps. First, add the nullable column without defaults. Then backfill data in controlled batches to avoid locking and replication lag. Once populated, alter the column to enforce constraints. This keeps your application online while the change rolls out.