Adding a new column to a database should be simple, but mistakes here can cause outages, data loss, or silent corruption. The cost is high because schema changes touch running systems in real time. You need speed, safety, and a path to roll back.
A new column changes the shape of your data. Even if it starts as NULL or with a default value, it affects queries, indexes, and application code. If you add it in production, every replica and client must agree on the schema. Mismatches can trigger errors or fail silent.
Best practice is to deploy a new column in stages. First, add the column in a non-blocking way. In PostgreSQL, that means avoiding locks that block writes. In MySQL, it may require using ALGORITHM=INPLACE or tools like pt-online-schema-change. For high-traffic services, test the migration on a replica before touching production.
After deployment, backfill data in controlled batches. Avoid loading all rows in one transaction. This keeps load steady and replication healthy. Once data is complete, roll out application changes that read or write the new column. Doing this in separate deploys reduces risk.