Why replicas, queues and distributed services temporarily disagree
coreintermediateEventual consistency is the property that, given enough time with no new writes, every copy of a piece of data across a distributed system will converge to the same value — but at any given moment before that, different parts of the system can legitimately disagree about the current state. This disagreement is not a bug; it is the direct, structural consequence of propagation taking real time across a network. A replica has not yet applied the primary's latest write (see replication lag), a queue consumer has not yet processed the latest message, and two services that each cache the same entity independently can each be looking at a snapshot from a different moment.
Think of it as
It is like several people reading the same rapidly-updating scoreboard from different distances and different delays. Someone standing right at the scoreboard sees a point scored the instant it happens. Someone watching a live TV broadcast sees it a few seconds later, after the broadcast delay. Someone checking a sports app that refreshes every 30 seconds sees it even later still. All three are looking at the "same" scoreboard and are all telling the truth about what they see — they simply have not all received the update yet, and each will eventually agree once enough time passes without new points being scored.
What we're doing: Show three different components of one system legitimately disagreeing about a single user's display name at the same real-world instant.
- 4
- This is the one authoritative value at this instant — everything after this line is a copy that has not yet caught up.
- 17
- This is the guarantee actually being kept — every component DID converge, it just took very different amounts of time to get there.
Why this works: This is the concrete, quantified version of "eventually consistent" — three real components, three genuinely different staleness windows, all correctly converging by the end, which is exactly what distinguishes eventual consistency from a system that simply never agrees.
Treating "eventually consistent" as a vague promise instead of measuring the actual staleness window
Wrong
Better
What you see: A feature built on the assumption that "eventual" means "basically instant" breaks in production the first time real load pushes the actual staleness window from milliseconds to multiple seconds or minutes — because nobody had measured what "eventual" really meant for this specific system under real conditions, only assumed it was short.
Why: "Eventually consistent" is a guarantee about convergence, not a guarantee about speed — the actual staleness window is a measurable, monitorable quantity that varies by component and load, and a design that treats it as an unknowable vague delay cannot make an informed decision about which workflows can tolerate it and which cannot.
- Primary → Primary: commits "Alexandra" (t=0.000s)
- Primary → Read replica: still shows "Alex" (t=0.050s)
- Primary → Search index: still shows "Alex" (t=0.200s)
- Primary → Recommendation cache: still shows "Alex" (up to t=5:00)
Three sources of temporary disagreement, and the mechanism behind each
Remember: Distributed components disagree temporarily because propagation — replication, queue processing, cache refresh — takes real time, not because anything is broken. "Eventual" means the system provably converges once writes stop; the actual staleness window is a measurable, component-specific quantity worth tracking explicitly, not a vague unknowable delay.
See also: choosing consistency per workflow · explicit status for async completion · replication lag

