One change. One line in a migration. Yet the ripple can break queries, slow writes, or lock tables. Adding a new column is simple in code, but dangerous at scale. The wrong approach burns deploy windows and leaves you rolling back at 3 a.m.
A new column means more than an extra field. It changes row width. It shifts indexes. It can force a full table rewrite. On large datasets, this isn’t a theoretical cost — it’s real downtime risk.
Plan the migration. First, check if you can make the new column nullable or give it a default that avoids backfilling every row at once. Use asynchronous jobs to populate data in chunks. Avoid adding indexes until after the column exists and the data is in place. This keeps locks short and reduces contention.