Adding a new column to a database table looks simple. It is not. Schema changes touch production systems, deployment pipelines, and performance. A misplaced ALTER TABLE can lock rows for minutes, block writes, or even take services down. This is why the way you add a new column matters.
The safest path starts with defining the column in a way that avoids table rewrites. In PostgreSQL, add nullable columns without defaults first. This is fast. Backfill the data in batches to reduce load. Once backfilled, set the default and constraint in a separate step. MySQL and other engines have their own nuances, but the principle is the same: small operations, staged changes.
Backward compatibility is critical. Deploy code that can work with and without the column before running the migration. This lets you roll forward without downtime. For distributed systems, make sure each service is aware of the schema version it supports.
Indexing a new column is another trap. Large indexes can block table access or bloat storage. Create indexes concurrently when supported. Verify index usage in query plans before relying on it.