Adding a new column is one of the most common database schema changes. It looks simple. It isn’t. Every new column changes the contract between your code and your data. Migrations can break deployments, desync replicas, or trigger downtime if not planned.
First, decide if the column is nullable, has a default, or must be backfilled. Adding a non-null column without a default will fail unless every existing row has a value. For large tables, backfills can lock writes or cause load spikes. Break work into stages: add the nullable column, backfill in batches, then enforce constraints.
Ensure the application code is forward-compatible. Deploy code that can read and write without depending on the new column before the migration runs. In distributed systems, deploy in phases to avoid mismatched assumptions between services.