Adding a new column should be simple. In practice, it can sink deployments, stall teams, and break production. The smallest schema change ripples across systems, forcing you to think about backwards compatibility, data backfills, query performance, and downtime windows.
A new column in a relational database impacts storage, indexes, ORM mappings, API contracts, and analytics pipelines. Adding it in a live environment means you also have to manage concurrency, locks, and transactional integrity. On large tables, even an ALTER TABLE can lock up writes, push replication lag, and trigger cascading failures across services.
Best practice is to roll out the new column in phases. First, add the column as nullable with no default to reduce lock time. Second, deploy code that writes to both the old and new columns. Third, run a background job to backfill historical data in small batches. Finally, shift reads to the new column and remove the old field when safe.