Adding a new column sounds simple. It rarely is. On a live system, you deal with locked tables, replication lag, and query timeouts. A bad plan can block writes, slow reads, or take your service down.
The first step is defining the column with the correct data type, nullability, and default values. In PostgreSQL, ALTER TABLE ADD COLUMN is straightforward, but without a default, existing rows will show NULL. With a default, the database rewrites the table, which can be expensive. MySQL behaves differently depending on storage engine and version. Always check the execution plan, not just the syntax.
Backfilling is where performance risk spikes. On large datasets, a full-table update can lock rows for minutes or hours. The safe approach is incremental backfill in batches, coordinated with application code that can handle missing values during the transition period.