Adding a new column should be simple. In practice, it can block queries, lock tables, and stall deployments. On large datasets, careless migrations can bring production to a crawl. Every second counts, and every schema change sends ripples through your application.
A new column changes the contract between your database and your code. Any write or read path that touches the table must know about it. Data types must match. Defaults must be correct. Nullability must be intentional. Even the order of execution—DDL before code or code before DDL—can decide if your deploy stays smooth or breaks under load.
For small tables, an ALTER TABLE ADD COLUMN might finish in milliseconds. On terabyte-scale tables, it can take minutes or hours. That’s why many teams lean on online schema change tools or roll out columns in stages: add the column, backfill asynchronously, then swap application logic when fully populated.