Why Your App Shows Stale Data Even Though the Write Succeeded
System Design

Why Your App Shows Stale Data Even Though the Write Succeeded

Subtitle: The write was fine. The read never promised to see it.

Left column - Why the stale read happens:

3 replicas hold one row Write returns after 2 acks Read is answered by just 1 That 1 may be the node that missed No error - nobody promised it

Right column - The arithmetic that fixes it:

R + W > N closes the window Overlap means one node saw it Any quorum read hits that node Fresh reads cost more latency Choose per read, not per database

The simple difference:

W=2 R=1 N=3 -> stale read allowed W=2 R=2 N=3 -> stale read closed

Use it when - stale is fine:

likes, view counts, feeds Use it when - must be fresh: balances, stock, locks

Reproduce it in 60 seconds:

Pause one replica Write from client A Read from client B at once

Sticky note - Common beginner mistake:

Read-your-writes is not the same guarantee as eventual consistency. Sticky routing only hides the stale read - it never closes the window.