Adding a new column seems simple. In production, it can be dangerous. It changes the shape of the data. It can lock tables, block writes, and slow everything waiting on the change. If the table is large, that lock can last minutes or hours. Every second means users stuck waiting or losing data.
The right way to add a new column depends on the database engine, schema size, and traffic pattern. In Postgres, ALTER TABLE ... ADD COLUMN with a default value rewrites the whole table. In MySQL, online DDL options exist, but require flags and careful planning. In distributed databases, each node must apply the schema update while replicas stay in sync.
Best practice is to add a nullable new column first, without defaults. Populate it gradually with backfill jobs or triggers. Once data is in place, enforce constraints and set defaults if needed. Always run schema changes in a controlled rollout—start in staging, run performance checks, and apply in production during low traffic windows. Use automation to track progress and monitor latency and error rates throughout the migration.