Stackbook Logo
← Back to System Architectures

Eventual Consistency Strategies

Eventual consistency means: "Given enough time without new updates, all replicas will eventually converge to the same state."

5 min read

Eventual consistency means: "Given enough time without new updates, all replicas will eventually converge to the same state."

When Eventual Consistency Is the Right Choice

Choose eventual consistency when:

  • Availability is more important than immediate consistency
  • The business can tolerate stale data for a period
  • The cost of strong consistency is too high (performance, complexity)
  • Merging conflicting updates is feasible

Don't choose eventual consistency when:

  • Financial transactions where incorrect balances are unacceptable
  • Healthcare data where stale information can cause harm
  • Real-time multiplayer games where state must be consistent
  • Any scenario where the cost of inconsistency exceeds the cost of availability

Conflict Resolution Strategies

Strategy 1: Last-Write-Wins (LWW)

The most recent write wins. Requires timestamps.

Pros: Simple to implement, easy to understand Cons: Can lose updates if timestamps aren't synchronized. Not suitable for concurrent writes at similar times.

Use when: Updates are infrequent, or timestamp synchronization is reliable.

Strategy 2: Conflict-Free Replicated Data Types (CRDTs)

Mathematical structures that guarantee convergence without conflicts.

Pros: No conflicts by design, automatic merging, strong theoretical guarantees Cons: Can be complex to implement, may have overhead, not all data types have CRDT equivalents

Common CRDT types:

  • G-Counter: Growth counter (only increment)
  • G-Set: Growth set (only add elements)
  • LWW-Element-Set: Last-wins element set
  • PN-Counter: Positive/negative counter (supports increment and decrement)
  • 2P-Set: PN-Set with add and remove

Use when: Collaborative editing, distributed counters, state synchronization where conflicts are frequent.

Strategy 3: Operational Transformation (OT)

Common in collaborative editing (Google Docs, Figma).

How it works: Transformations are applied in order, ensuring convergence despite reordering.

Pros: Great for collaborative editing, well-understood for text Cons: Complex to implement correctly, not suitable for all data types

Use when: Collaborative document editing, real-time collaborative applications.

Strategy 4: Application-Level Conflict Resolution

Define business logic for conflict resolution.

Examples:

  • Shopping cart: Add both items, cart contains both
  • User preferences: Merge preferences, user wins over default
  • Configuration settings: Most recent admin win, with audit trail

Pros: Business-specific, makes sense for the domain Cons: Must be implemented for each application, no universal solution

Use when: No CRDT applies, business logic defines conflict resolution.

Strategy 5: Version Vectors

Track causality between updates. Know which updates preceded which.

How it works: Each replica maintains a vector of timestamps from other replicas. When updates arrive, check vector to determine if concurrent or sequential.

Pros: Can detect conflicts, enables more sophisticated resolution Cons: Overhead of maintaining vectors, more complex than LWW

Use when: You need to know causality, not just converge to a state.

Trade-Offs by Strategy

| Strategy | Conflict Handling | Complexity | Suitability | |----------|------------------|------------|-------------| | LWW | Simple (latest wins) | Low | Simple systems, timestamp-synced | | CRDTs | None (by design) | Medium-High | Collaborative apps, counters, sets | | OT | Good for text | High | Collaborative editing | | App-Level | Business-defined | Medium | Domain-specific, varies | | Version Vectors | Detect conflicts | Medium | When causality matters |

Practical Implementation Patterns

Users see slightly stale data with explicit consent.

Implementation:

  • Display "Data last updated X minutes ago"
  • Provide a "Refresh" button for fresh data
  • Use for: Dashboards, analytics, non-critical information

Pros: Users understand the staleness, explicit about it Cons: Still stale, requires UI design for disclosure

Pattern 2: Read Repair

Background process that fixes inconsistencies when reads occur.

Implementation:

  • On read, compare replicas
  • If inconsistent, write the latest version to all replicas
  • Log the repair for audit

Pros: transparently fixes inconsistencies, keeps data fresh over time Cons: Read latency increases during repair, may not converge perfectly

Pattern 3: Session-Based Consistency

Different consistency guarantees for different sessions.

Implementation:

  • Critical operations (payment, profile changes): Strong consistency
  • Non-critical operations (feed, recommendations): Eventual consistency
  • User-specific settings: Per-user consistency

Pros: Balances consistency and availability based on operation importance Cons: More complex to implement, requires operation classification

Pattern 3: Quorum Reads/Writes

Require majority of replicas to agree.

Write quorum: Write to W out of N replicas (W > N/2 for strong consistency) Read quorum: Read from R out of N replicas, where R + W > N

Pros: Stronger consistency than pure eventual, still available during partitions Cons: Write latency (must contact multiple replicas), still not strong consistency under all partitions

The Honest Truth

Eventual consistency is not "weak consistency." It's a deliberate choice with specific trade-offs. When chosen intentionally with understanding of the consequences, it can be the right decision. When assumed unintentionally, it leads to bugs and user dissatisfaction.

The key is consciousness: know you're choosing eventual consistency, know the trade-offs, have a strategy for conflicts, and communicate the staleness to users when appropriate.

Published June 1, 2026 · 12 min read