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 consensus protocol? to which invariant forced this? Three standard moves:
- Sequential IDs become UUIDs. The coordination vanishes.
- A uniqueness constraint becomes a partition-local one by making ownership of the key space explicit.
- 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.