Adding a new column sounds simple. In production, it is not. It changes contracts between services, alters query plans, and impacts live traffic. The wrong move can trigger downtime, corrupted data, or silent failures that surface weeks later.
Before adding a new column, confirm the intent. Is it storing new data, splitting existing fields, or supporting a future feature? Define the name, type, constraints, indexing, and default values. Avoid nullable columns unless they serve a clear purpose. Every nullable field invites complexity in application code and joins.
Migrations need to be planned, versioned, and reversible. In PostgreSQL, adding a column without a default is fast because it only updates the metadata. Adding a column with a default on a large table rewrites the table, blocking writes until completion. In MySQL, even metadata changes can trigger a full table copy depending on the storage engine. Test the migration size and duration on a clone of production data before running it live.