Consistency Models Explained: Strong vs Eventual (and In Between)
Consistency is a spectrum, not a switch. Strong vs eventual consistency in plain English, the useful middle guarantees (read-your-writes, monotonic reads, causal), why strong costs latency and availability, and how to choose per feature.
🔵 Fundamentals · Fresher-friendly → 🔴 goes deep
The CAP theorem told us we sometimes trade consistency for availability. But "consistency" isn't a single on/off switch — it's a whole spectrum of guarantees, from "always perfectly up to date" to "correct… eventually." Knowing this spectrum lets you say precisely what your system promises, and it's a favourite senior interview topic. Let's walk it from strongest to weakest, in plain English.
Strong consistency
Strong consistency means every read returns the most recent write, always. The instant a write succeeds, everyone everywhere sees it. It's the model humans naturally expect — like a single notebook only one person writes in at a time.
Cost: to guarantee this across many machines, the system must coordinate on every operation (wait for nodes to agree), which adds latency and reduces availability during network trouble. Use it where correctness is non-negotiable: bank balances, inventory counts, "is this seat booked?"
Eventual consistency
🟠 Eventual consistency makes a weaker promise: if writes stop, all copies will eventually converge to the same value — but for a short window, different readers might see different (stale) versions. No coordination on every read means it's fast and highly available.
The classic example: you change your profile photo, but a friend still sees the old one for a few seconds. Nobody's harmed, and the system stayed fast and always-on. Perfect for likes, view counts, feeds, DNS, and product catalogs — anywhere "a few seconds behind" is fine.
The spectrum
The useful guarantees in the middle
🔴 Between the extremes are targeted promises that fix specific annoyances of pure eventual consistency — you'll sound sharp knowing these by name:
| Model | Promise | Fixes |
|---|---|---|
| Read-your-writes | You always see your own latest change | "I saved it but it's not there!" |
| Monotonic reads | You never see data go backwards in time | Refresh shows newer, then older |
| Causal | Cause is seen before effect | A reply appears before its message |
These matter because pure eventual consistency can produce genuinely weird user experiences — a comment reply showing up before the comment it answers. Causal consistency prevents exactly that, without paying full strong-consistency cost.
Why not always pick strong?
🟠 Because strong consistency isn't free — it costs latency and availability. Every strongly-consistent operation needs machines to coordinate and agree (often via consensus like Raft/Paxos), which is slower and can stall during network partitions. This is the everyday trade the PACELC model highlights: even with no failure, you trade latency for consistency. So the engineering move is: use the strongest model each feature needs, and no stronger.
How to choose, feature by feature
The senior habit is to decide per piece of data, not per system:
- Money, inventory, bookings → strong. A wrong answer is unacceptable.
- Your own edits (profile, settings) → at least read-your-writes, so you always see your change.
- Likes, views, feeds, catalogs → eventual. Speed and availability beat perfect freshness.
- Chat / threaded comments → causal, so replies never precede their cause.
In an interview: "The order total must be strongly consistent, but the 'X people are viewing this' badge can be eventually consistent — I won't pay coordination cost for a vanity number." That precision is the whole point.
The takeaway
Consistency isn't strong-or-nothing. It's a dial. Turn it up where correctness matters, down where speed and availability matter — and be able to name exactly which promise each part of your system makes. Do that and you're reasoning about distributed data like a senior engineer.
What to read next
- Consistent Hashing — distributing data across nodes cleanly
- Consensus: Raft & Paxos — how nodes agree for strong consistency
- The CAP Theorem — the trade-off this spectrum lives on
- ← The complete System Design guide (hub)
Frequently Asked Questions
What is the difference between strong and eventual consistency?
Strong consistency means every read returns the most recent write, always — easy to reason about but slower and less available because nodes must coordinate. Eventual consistency means copies converge to the same value eventually, so reads can be briefly stale, in exchange for speed and high availability.
What is read-your-writes consistency?
Read-your-writes guarantees you always see your own latest change, even in an otherwise eventually-consistent system. It fixes the confusing case where a user saves something and then does not see it because their read hit a replica that had not received the write yet.
When should you use strong vs eventual consistency?
Use strong consistency where a wrong answer is unacceptable — money, inventory, bookings. Use eventual consistency where being a few seconds stale is fine — likes, view counts, feeds, catalogs. Decide per feature and use the strongest model each one truly needs, and no stronger.