Skip to main content

Strong vs Eventual Consistency

How to decide when stale data is acceptable and when it becomes a product error.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

Track

System Design Interviews - From Basics to Advanced

Step 12 / 19

The problem

Eventual consistency became an excuse for a lot of poorly designed systems.

When the product shows wrong, contradictory, or late information in a critical moment, someone shows up and says “that is eventual consistency.”

Not always.

Sometimes it is just badly invalidated cache, replica lag, or a weak flow hiding behind a nice-sounding term.

Mental model

Before jumping into definitions, think about two simple scenes.

Scene 1:

  • I change my profile photo and open the page right after
  • if I still see the old photo, it feels like the action failed

Scene 2:

  • I like a post and the global counter takes a few seconds to go up
  • that usually does not break the experience

Those two scenes point to the real question:

what strange thing can the user still see after the write?

That is what consistency is about.

Breaking the problem down

What strong consistency means

In plain language:

  • the write was confirmed
  • the next relevant read already sees the new state

This usually makes sense when seeing stale data is too expensive.

Examples:

  • balance
  • credit limit
  • very tight inventory reservation
  • leader election

The gain is predictability.

The cost usually shows up as latency, availability trade-offs, or more coordination complexity.

What eventual consistency means

Also in plain language:

  • the write was accepted
  • but some reads may still see the old value for a while

Eventual does not mean chaos.

It means converge later, not necessarily now.

Reasonable examples:

  • like counters
  • feed updates
  • recommendations
  • ranking

In those cases, a small delay is usually acceptable.

Read-your-own-writes

This guarantee means: if I just wrote data, I can read the result of my own write.

That solves a lot of practical pain.

Even if the rest of the system is still converging, at least the person who performed the action does not see it “disappear.”

In real products, that changes the feeling of trust a lot.

One extra guarantee that prevents weirdness

Another useful idea is monotonic reads.

It prevents the user from seeing time go backward.

If they already saw a newer version, they should not fall back to an older one right after.

Where inconsistencies usually come from

In practice, the problem rarely starts with the abstract term.

It starts with the mechanism:

  • reading from a lagging replica
  • cache that was not invalidated
  • reading from a region different from the write
  • asynchronous pipelines updating different parts of state at different times

That matters because the mitigation changes. Sometimes you need synchronous writes. Sometimes you only need read-your-own-writes for the same user. Sometimes it is enough to make it clear in the product that a counter converges later.

How to decide without turning it into an abstract debate

The most useful question is not:

“which model is more sophisticated?”

It is this:

which anomaly is the business willing to let the user see?

If the answer is “none in this flow,” stronger consistency enters the conversation.

If the answer is “some small delay is acceptable,” eventual consistency may be a good trade-off.

Simple example

Imagine three cases.

  1. The user changes their profile photo and opens the page right after. If they still see the old photo, it feels like an error. Here, read-your-own-writes helps a lot.

  2. The like counter takes a few seconds to update globally. That is usually acceptable. The user may not even notice.

  3. The user makes a transfer and sees the old balance in a critical moment. Here the delay stops being a detail and becomes real risk.

The same system may mix different guarantees depending on the flow.

And that is often more mature than trying to force strong consistency everywhere.

Common mistakes

  • Calling every stale read eventual consistency.
  • Treating eventual consistency as tolerated laziness.
  • Talking about consistency without talking about user impact.
  • Ignoring intermediate guarantees.
  • Discussing the topic only in terms of the database and forgetting cache, replicas, and cross-region reads.

How a senior thinks about it

People with more experience usually move quickly from the abstract definition to the visible anomaly.

The reasoning sounds more like this:

“If the read is late here, what exactly will the user notice? Is that acceptable, annoying, or dangerous?”

That improves the conversation because it connects architecture to product behavior.

Maturity here means not treating strong consistency as a medal and eventual consistency as a hack.

They are tools for different kinds of risk.

What the interviewer wants to see

In interviews, consistency becomes strong when you:

  • explain the difference between strong and eventual in simple language
  • show that you understand the impact of a delayed read
  • know useful intermediate guarantees
  • choose the model based on business effect

Consistency is not a technical trophy. It is a decision about how much surprise your system is allowed to create for the user.

Quick summary

What to keep in your head

Practice checklist

Use this when you answer

You finished this article

Part of the track: System Design Interviews - From Basics to Advanced (12/19)

Next article Idempotency in APIs Previous article CAP Theorem in Practice

Keep exploring

Related articles