When you add a new column, you introduce a permanent shift in how your database stores and serves data. The right design choice here saves terabytes over time. The wrong one adds unseen costs and technical debt. It is more than typing ALTER TABLE; it’s about defining type, constraints, default values, indexes, and nullability with intent.
Plan for backward compatibility. Code that assumes the column doesn’t exist will run alongside code that writes to it. In distributed systems or rolling deployments, there is no instant sync. You must handle null states, differing schema versions, and migrations running mid-request.
Choose column types that fit the data domain exactly. A TEXT where VARCHAR(64) is enough wastes memory and cache efficiency. A TIMESTAMP WITH TIME ZONE avoids broken time math across services. Add indices only where the query path demands it—indexes speed reads but slow writes.