A new column is not just extra storage. It is a contract between code, database, and every query that touches it. Adding it means more than writing ALTER TABLE ADD COLUMN. It means planning for indexes, default values, nullability, constraints, and the cost of updates on massive datasets.
In relational databases, a new column can trigger locks. On large tables, blocking writes and reads can cascade into downtime. Strategies like backfilling in batches, adding nullable columns first, and deploying in multiple steps reduce risk.
Performance deserves equal attention. A new indexed column can improve query speed or slow inserts. Storing JSON in a new column creates flexibility but sacrifices strict type enforcement. With time-series data, carefully chosen column types can cut storage and speed aggregation.
Schema evolution must align with application code. Deploying the column before code references it ensures backward compatibility. Feature flags can bridge the gap between schema change and feature release. Testing on production-like data is the only way to know the real impact.