Adding a new column seems small, but it is the kind of change that can break production if not handled with care. Schema updates are not isolated; they ripple through queries, indexes, APIs, and the code that consumes them. The table definition shifts, and every JOIN, SELECT, and INSERT touching it needs to adapt.
Choosing how to add a new column depends on your database. In PostgreSQL and MySQL, ALTER TABLE ADD COLUMN is straightforward, but in high-traffic systems, locking becomes the concern. Adding a column with a default in PostgreSQL rewrites the entire table before version 11. In MySQL, adding certain types of columns may trigger a full table copy. Identify whether your database engine can add the column instantly or if you need an online migration.
For zero-downtime migrations, create the new column as nullable first. Deploy code that can write to both the old and new schema. Use backfill jobs to populate the new column. Then shift reads. This sequence prevents missing data, avoids long locks, and makes rollback safe.
Adding indexes to the new column is another decision point. Skip it until after the backfill to avoid slowing the write path during migration. Consider whether the column will be part of a primary key, unique constraint, or heavily queried filter.