Schema changes are simple in theory. In production, they are a test of discipline. A new column must not break queries, indexes, or downstream jobs. Rollouts must be safe and reversible. Your migration system should handle concurrent reads and writes without locking up the database.
Defining a new column starts with precision. Choose the correct data type. Set default values if the column is required. Avoid non-null constraints at creation when dealing with large tables; apply them after backfilling to prevent long locks.
For relational databases, adding a column can trigger a full table rewrite. On massive datasets, this can take minutes or hours. Plan around replication lag and batch the update if needed. In PostgreSQL, certain column additions are metadata-only and complete instantly; others are not. Know the difference before running the change in production.