Skip to content
About
Main content

Coordination avoidance

When can coordination be avoided altogether, and how do you restate an invariant so it can be?

CALM (Consistency As Logical Monotonicity) states the ceiling:

Coordination is required exactly at non-monotonicity: uniqueness constraints, sequential identifiers, thresholds and budgets, aggregation with a cutoff, anything shaped like "only if nothing else has happened."

That converts the design question from which protocol? to which invariant forced this? Three standard moves:

  1. Sequential IDs become UUIDs. The coordination vanishes.
  2. A uniqueness constraint becomes a partition-local one by making ownership of the key space explicit.
  3. A global budget becomes escrow. Pre-allocate 100 units per node; only the transfer between nodes coordinates. Worked example: a promotion of 1,000 discount codes across 10 nodes. Give each node 100 codes. A node sells 100 codes with no communication. Only when node 3 runs out does it ask node 7 for 20 of its remaining codes: one message, not 1,000.

Each is "the right algebra removes the coordinator" applied one level up: not commuting the operation, but restating the invariant so that commutativity becomes available. It is also the theorem form of the thing this mechanism is arranged around: the cheapest round trip is the one your data model made unnecessary, and the expensive machinery in this article is what you buy when you cannot arrange that.