The new column changed everything. One schema migration, one deploy, and the shape of the data shifted in ways the system had never seen before. The app stayed online, but the code was now living in a different world.
Adding a new column is the simplest kind of database evolution and also one of the most dangerous. It looks harmless: a few words in an ALTER TABLE statement. But it touches the core of how queries run, how indexes behave, and how application logic interprets results. In production, the wrong approach can lock tables, stall writes, and break services that assume an old schema.
The right process is deliberate. Start by defining the new column with a NULL default if possible. This avoids full table rewrites during migration. Create it as non-indexed first to prevent blocking locks. When adding indexes, build them concurrently so reads and writes continue without interruption. If the column has constraints, apply them in separate transactions to keep migrations fast.