The migration halted. Someone had pushed a new column into the database schema, and every dependent service held its breath.
A new column is never just a piece of extra data. It is structure, contract, and responsibility. Adding one changes queries, indexes, and sometimes the shape of entire APIs. In SQL, a ALTER TABLE ... ADD COLUMN is deceptively simple. In production, it can trigger locks, schema changes, and cascading effects across microservices.
Best practice is clear: define the new column with precision. Set a default value if it is required by legacy code. Mark it NULL only when you know every client can handle a missing value. Choose the smallest data type that fits both current and future requirements to reduce storage and improve performance.
Before creating a new column in PostgreSQL, MySQL, or any relational database, profile the table size. On large tables, an ADD COLUMN with a default value can rewrite all rows, increasing migration time. In high-traffic systems, use lazy backfills: add the nullable column first, write update jobs to populate it in batches, then enforce constraints and defaults later.