One migration, one commit, and the shape of your data shifts. Done well, it unlocks features, speeds queries, and clears a path for growth. Done poorly, it slows every request, breaks dependencies, and forces painful rollbacks.
Adding a new column is not just an ALTER TABLE statement. Before it hits production, you decide type, nullability, indexing, default values, and constraints. Each choice impacts storage, execution plans, and application logic. Ignore these and you invite downtime or corrupt states.
Schema migrations demand control. Start with a clear plan. Create the new column in a non-blocking way. Avoid locking writes for large tables by using online DDL where possible. Set default values carefully—instant backfill on a billion rows can freeze a database. Instead, deploy in phases: add the column empty, populate asynchronously, and then enforce constraints.