Skip to main content

Strong vs Eventual Consistency Explained

· 4 min read
Free system design course

Every write to a replicated system eventually has to answer one question: does the caller wait for every copy to agree before we call it done, or do we acknowledge fast and let the copies catch up on their own time?

Strong consistency: every read sees the latest write

Under strong consistency, a write isn't acknowledged until enough replicas confirm they have it, and a read afterward is guaranteed to reflect it — there's no window where a client could read stale data right after a confirmed write. This is the C side of the CAP theorem: strong consistency is what a CP system chooses to preserve, typically at the cost of added write latency (waiting on replicas) or reduced availability (if enough replicas can't be reached, the write has to fail rather than risk an inconsistent read later).

Eventual consistency: fast ack, catch up later

Under eventual consistency, a write is acknowledged as soon as it lands somewhere — often just one node — and the update propagates to other replicas afterward, typically via mechanisms like Change Data Capture. In the meantime, a read against a replica that hasn't caught up yet can return stale data. What "eventual" actually promises is narrower than it sounds: if no new writes happen, all replicas will converge to the same value — it just doesn't say when.

System Design Lab

Where weaker guarantees are chosen on purpose

A social media like counter is the canonical case for choosing eventual consistency deliberately, not out of laziness: if a "like" briefly shows 4,201 instead of 4,202 on one replica for a few hundred milliseconds, nobody is harmed and almost nobody notices. What that system gets in exchange is much lower write latency and much higher availability, since it never has to stall a write waiting on every replica to agree.

Where strong consistency earns its cost

A bank balance is the opposite case. If a withdrawal is confirmed but a concurrent read against a stale replica shows funds that were already spent, that's not a rounding error — it's a double-spend risk. Inventory counts for a limited item during a flash sale have the same shape: sell the same last unit twice because two replicas disagreed briefly, and you've made a promise you can't keep. These are exactly the cases where paying strong consistency's latency cost is the correct trade, not an overcautious one.

It's a spectrum, not a binary switch

Real systems usually don't pick one extreme globally. Read-your-own-writes consistency guarantees a client always sees its own recent write, even if other clients might briefly see something older — a common middle ground for user-facing apps. Quorum-based systems tune this directly with numbers: with N replicas, requiring W nodes to acknowledge a write and R nodes to agree on a read, setting W + R > N guarantees every read overlaps with the most recent write, letting you dial consistency and latency against each other rather than choosing one extreme for the whole system.

Why this matters in an interview

Naming "we chose eventual consistency" is incomplete without naming why the specific data can tolerate it — and just as importantly, naming which parts of the same system can't. A well-designed system frequently uses both: eventual consistency for a feed or a counter, strong consistency for the parts that touch money or inventory, exactly as the CAP theorem framing would predict once you look at each piece of data individually instead of the system as a whole.

Go deeper

The full lesson expands on quorum tuning and read-your-own-writes with more worked examples:

👉 Read the full Strong vs Eventual Consistency lesson — part of the free System Design Lab course.