Adding a new column sounds simple, but at scale, it’s a precision move. Schema migrations can lock tables, block writes, and drag read performance into the ground. In production, a blocking migration can turn a release into an outage. That’s why modern systems treat a new column as part of a controlled rollout, not a casual change.
Best practice is to use non-blocking schema migrations. On PostgreSQL, that means adding nullable columns without default values, then backfilling in small batches. In MySQL, tools like pt-online-schema-change or gh-ost can create a shadow table and sync data while the system stays live. For distributed databases, the strategy depends on replication settings and consistency guarantees, but the goal is the same: no downtime, no surprises.
A new column also means a code change. Deploy the schema first, then roll out application support for the column in a separate release. This avoids bad writes and keeps old code compatible until the migration is fully complete. Write migrations as idempotent scripts so they can be rerun if needed. Track them in version control. Keep them documented.