When data models evolve, a new column can mean the difference between stale output and a system that adapts without breaking existing code. In relational databases, adding a column seems simple—an ALTER TABLE … ADD COLUMN statement—but in production systems with live traffic, it demands precision. You have to think about locks, data backfills, and the query plans that might change.
A new column should start as nullable. This avoids blocking writes during the migration. Then you can backfill data in small batches to keep performance steady. Adding default values at creation time sounds convenient, but it can cause table rewrites that lock the table and spike CPU. Postpone defaults until after the backfill to reduce risk.
For distributed databases or sharded systems, schema changes require coordination. The new column must be deployed in multiple phases. First, update the schema in a backward-compatible way. Next, update application code to read from and write to the column. Only after the column is fully populated and used should you remove old code paths.