Adding a new column seems trivial until you hit production. Databases are unforgiving. A missing default. A null in the wrong place. A lock that freezes writes longer than your SLA allows. You need a plan before you run ALTER TABLE.
A new column changes more than schema. It changes queries, indexes, and application logic. In PostgreSQL, adding a column with a default can rewrite the whole table. In MySQL, it can trigger full table rebuilds. In high-traffic systems, that means downtime.
To add a new column safely, start with a non-blocking migration. Add the column without defaults or constraints. Let the nulls exist. Backfill data in small batches. Build idempotent scripts so you can resume after failure. Only then apply constraints and set defaults.
Code must evolve with the schema. Feature flags can hide code paths that rely on the new column until the backfill is complete. This keeps your deploys atomic and reversible. Run query plans before and after to check for performance impacts.