Adding a new column should be simple. You define it, run the migration, and deploy. But in production, nothing is simple. Schema changes can lock tables, block writes, and stall critical services. An unplanned alter can multiply into hours of downtime if you miss a dependency or performance bottleneck.
A safe process starts with understanding your database. Check the size of the table. Check active queries. Measure the lock impact. For high-traffic systems, adding a new column should be done in a way that avoids full table rewrites. Use NULL defaults instead of fixed values, and backfill in small, controlled batches.
In PostgreSQL and MySQL, adding a column without a default is often instant. But any default value forces a full table rewrite. That rewrite is where the danger lives—long locks, cache misses, and angry operations channels. The right sequence is: add the column with no default, deploy, then update and backfill in steps.