An expand-and-contract for a column type

A VARCHAR(32) becoming an ENUM, on a table with four hundred writes a second.

  release 1  add status_v2 ENUM, nullable.
             write BOTH. read the old one.
  backfill   batched, nine days, with a lag-aware sleep
  release 2  read status_v2. still write both.
  release 3  stop writing the old column. add NOT NULL.
  release 4  drop the old column.

six weeks. no lock longer than a second at any point.

Four releases for a column type is the honest cost of not being able to take a lock, and every individual step is an operation the pipeline does routinely. The alternative — a four-hour ALTER during a maintenance window — is one step and requires a maintenance window, which this system does not have.