Adding a new column sounds simple. In practice, it can be complex. Schema changes touch running systems, migrations hit large datasets, and even a small mistake can cascade into broken deployments.
The first step is to define the column exactly: name, type, nullability, default value. This must be consistent across development, staging, and production. Next, write the migration, but avoid locking large tables in ways that freeze reads or writes. Many modern databases can add a column instantly if it allows NULL values without a default, but adding a column with a default may still rewrite the table.
Plan the deployment to keep services online. If the column is optional, deploy the code that writes to it after it exists. If it’s required, deploy code that reads from it only after data is backfilled. This avoids race conditions and system errors in mixed-schema states.