Adding a new column is one of the most common schema changes. It can be small but critical: a feature flag, a computed value, a new index target. The difference between a smooth migration and an outage comes down to how you design, deploy, and backfill it.
Start by defining the column with precise types. Use explicit names that match your data model and avoid nullable columns unless essential. Null handling can often affect query plans and add complexity.
For large tables, consider adding the column in two phases. First, create it without constraints or defaults to make the DDL commit fast. Then run an asynchronous job to backfill values. This avoids long locks and blocking writes in production.
Remember that adding an indexed column is more expensive than adding a plain column. Build the index after backfilling, or use concurrent indexing where supported. For writes to remain live, choose tooling that understands transactional migrations.