A new column seems simple. Add it, set a default, run the migration. But in high-traffic systems, every operation has cost. Add the wrong type, block writes, or forget the index, and latency spikes. The right approach starts before any ALTER TABLE.
First, decide if the column is necessary. Trace the end-to-end feature requirements. Sometimes a JSON field or separate table avoids a risky migration. If a new column is the right choice, design it with nullability, defaults, and indexing in mind. Avoid defaults that trigger full-table rewrites on massive datasets.
In PostgreSQL, adding a nullable column without a default is fast. Adding a non-nullable column with a default rewrites the table — schedule downtime or use a two-step migration. In MySQL, similar rules apply: separating definition changes from data population reduces lock time. For distributed databases, schema changes must propagate across nodes without breaking consistency.