Adding a new column should be simple. In practice, it can stall deployments, block teams, and break production if handled carelessly. Schema changes touch live data. They can trigger locks, cause downtime, or require expensive migrations. For teams moving fast, the wrong migration strategy turns a routine update into an outage.
A new column impacts more than just the shape of the table. Indexing, constraints, and defaults all affect storage and performance. Adding a column with a default value can rewrite every row. On high-traffic systems, this can lock writes or slow queries. Without careful planning, a single ALTER TABLE can ripple across the application stack.
Zero-downtime migrations require deliberate steps. First, add the column without a default or NOT NULL constraint. Then backfill data in small batches, monitoring load and transaction times. Once the data is complete, add constraints in a separate, low-impact migration. This pattern allows production systems to keep serving traffic while evolving the schema.