Sumeta — the company behind Bridge
Engineering

What "automatic schema evolution" actually means: a 4×3 matrix

The phrase is used to mean three different things. Sorting them into a matrix is the fastest way to find out whether a vendor's claim survives a schema change in production.

Engineering · 2026-11-03 · Sumeta engineering

"Automatic" is not one behaviour. Additive changes can be applied without a human; renames are ambiguous; destructive changes must not be automatic. A vendor that claims all three are automatic is describing something it should not do.

4
Change classes worth testing
3
Response modes: automatic, confirm, manual
1
Default that must never be automatic: data deletion
Post-change
Backfill decides whether the seam is permanent

Three meanings wearing one phrase

  1. Additive. A new nullable column appears on the target and new rows carry it. This can and should be automatic.
  2. Ambiguous. A rename is indistinguishable from a drop plus an add when read from the log alone. Acting automatically risks either duplicating data or losing it.
  3. Destructive. Dropping a column, narrowing a type, or changing a key. Automating this is how pipelines delete production data at 3am.

Most "fully automatic" claims cover the first and quietly skip the second and third.

The matrix

A policy matrix, not a feature list.
ChangeAutomatic?Correct default behaviourBackfill
Add nullable columnYesCreate on target; propagate new rowsNo
Add column with defaultYesCreate; default applies to new rowsOptional
Rename columnNo — confirmPropose a mapping; wait for a decisionOptional
Drop columnNoRetain target column; stop writingNot applicable
Widen typeYesApply wideningNo
Narrow typeNo — blockBlock until confirmedYes, if re-derived
Change primary keyNoTreat as new lineageYes

The unusual defaults are the ones worth checking in a POC: drop does not delete, narrowing blocks, and rename asks. Each of those is a deliberate refusal to automate something that can lose data.

Why backfill is the hidden question

Evolving a schema answers what happens to the next row. It says nothing about the historical window. If a column was added on Tuesday, every row written before Tuesday lacks it, and a downstream model that assumes completeness will be wrong for weeks.

Post-evolution backfill re-reads the affected range so the seam closes. The constraint is the same as any recovery: it works only if the required log is still retained. A change that happened before your retention horizon must be reconciled from a snapshot instead.

How to test it in an hour

Five actions, one hour, a real answer.
TestActionPass condition
AdditiveAdd a nullable column, insert rowsColumn appears; no stop; no manual step
RenameRename a columnPipeline flags and waits; no duplicate column
DropDrop a columnTarget column retained; no data loss
NarrowReduce varchar lengthPipeline blocks with a clear message
BackfillApprove a change, request backfillHistorical range reconciled

Break a schema on purpose

Run the five tests against a copy of your source and watch what the pipeline actually does.