Adding a new column sounds simple. In production, it is not. Schema changes can lock writes, slow queries, and break migrations. The risk grows with scale. A blocked migration in a critical service can cost uptime, revenue, and trust.
Plan every new column change as you would a release. First, decide if it belongs in the existing schema or a new table. Consider index impact. Avoid defaults that force a full table rewrite. Use NULL where possible to defer expensive updates.
Run migrations in small, non-blocking steps. For large datasets, backfill data in batches. Use feature flags to gate reads and writes to the new column until it is ready. Test migrations against a realistic replica of production, not just local dev.