Adding a new column should be simple. In reality, it can block writes, lock tables, and cause downtime if done without care. On high-traffic systems, the wrong approach can freeze production.
First, know your engine. In MySQL, ALTER TABLE rewrites the table by default. For large datasets, use ALTER TABLE ... ALGORITHM=INPLACE or tools like pt-online-schema-change. In PostgreSQL, adding a new column with a default value rewrites the whole table, but adding it without a default is instant. You can backfill in small batches to avoid locks.
Always profile disk space before adding a column. A single wide column type in a billion-row table can consume gigabytes instantly. Where possible, make nullable columns without defaults, then populate later.
Use versioned migrations. Never deploy schema changes directly on live production without testing against a copy of real data. Monitor replication lag, especially if you have read replicas. Schema changes can saturate replication channels.