Adding a new column looks simple, but the wrong choices mutate over time. The schema shifts. Queries slow. Deploys stall. The fix is not just “ALTER TABLE.” It is planning for live traffic, migrations without downtime, and edge cases that only appear at scale.
Start with the definition. Decide if the new column is nullable, defaulted, or populated through a backfill. Choose the correct data type. Every byte matters when multiplied across millions of rows. Use constraints only when they protect integrity without locking writes.
For relational databases, create the new column in a lightweight migration. Do not backfill inline. Use small, batched updates or background jobs to populate values. Monitor for lock contention. Test against production-like data.