qualitylab

Change coupling · Blast radius

Reject an incompatible schema at registration, not at consumption

unmeasured/cost to adopt: low/active

Enforcing a declared compatibility mode when a schema version is registered moves a producer-consumer break from the moment of consumption, distributed across every downstream reader, to the moment of change, localised to one author.

Do this firstCheck the data is fit before you consume it

The same move as expand-and-contract, applied to a message topic instead of a table, and with the check mechanised.

Two limits are stated plainly in the mechanism’s own documentation and are worth carrying over. It verifies structure, not semantics: a field that keeps its type and reverses its meaning passes. And it coordinates nothing about deployment order, so a registered-compatible change can still break a rollout if producers and consumers move in the wrong sequence.

Treat it as the cheap half of the problem. It removes the class of break a machine can see, which leaves you arguing only about the ones it cannot.

The decoy

Pairwise compatibility with the previous version. A chain of changes that are each compatible with their immediate predecessor can be jointly incompatible with a consumer two versions back — which is why transitive modes exist and why the non-transitive default is the one that bites.

Evidence

What would settle it

How often incompatible-schema incidents actually occur, and what share registration-time enforcement prevents. The mechanism is documented only by its vendor and no adoption or effectiveness numbers appear to have been published by anyone.

Last reviewed 2026-08-19.