Adding a new column is more than a schema change. It shifts how your system thinks. It alters queries, indexes, and the way your application reads and writes. A well-executed column addition can unlock features, simplify joins, and improve data integrity. Done poorly, it can lock up production under load, misalign types, and cascade bugs across services.
The first decision: nullable or not nullable. Default values keep migrations smooth but can mask design flaws. Non-null constraints force discipline but require careful rollout strategies. For live systems, consider adding the column as nullable first, backfilling data, then tightening constraints after verification.
Data type choice matters. Incorrect types create future migration headaches. Choose integer, varchar, jsonb, or specialized types based on how the column will be used in queries and indexes. Avoid overloading a single column with multiple data purposes — it kills all performance assumptions.
Impact on indexing is often overlooked. Adding an index to a new column can transform query speed but bloats storage. Select indexes based on query frequency. Test with representative load before deployment.