When a temporary column becomes permanent debt

Most schemas we meet contain a column that was meant to live for a sprint. It arrives as legacy_status_code or new_price_flag, typed as nullable text, and then survives three product renames. The danger is not the column itself; it is that every new feature quietly depends on its odd values.

During a refactor engagement we ask teams to list every column whose name apologizes for itself. Those names become candidates for the first migration stage: either promote the meaning into a proper typed field, or delete the column after a dual-read period. The work is unglamorous, but it is the difference between a planned cutover and a surprise null that only appears on Thursday night promotions.

If your slow-query log is clean yet feature work still feels risky, start the conversation with naming debt rather than indexes. Indexes fix speed; temporary columns block courage.