Adding a new column sounds simple. It isn’t. The moment you alter a schema, you change contracts between your code, your data, and every service that touches them. The wrong move here will trigger downtime, migrations that run for hours, and cascading breaks in production.
First, define why the new column exists. Is it temporary for a feature flag? Will it store immutable data, or will it be updated frequently? Lock the purpose before you touch the schema.
Second, choose the correct data type. Storage, indexes, and query plans depend on this choice. A VARCHAR where an INT belongs can slow joins. A BOOL where you need ENUMs will force rewrites. Schema stability starts here.
Third, plan your migration path. In production, never block writes. Use online DDL tools or phased migrations. Create the column as nullable before enforcing constraints. Backfill in batches to avoid load spikes. Only after validation should you add NOT NULL, foreign keys, or indexes.