Skip to content

Eventual Consistency and UX

In event-driven systems, especially when using CQRS, you often give up immediate consistency in favor of scalability and decoupling.

But that raises an important question:

What does eventual consistency actually mean for the user?

And how do you design user interfaces that deal with it gracefully?

What Eventual Consistency Looks Like

Imagine you've just returned a book at your local library using the online portal.

  • The ReturnBook command succeeds.
  • The corresponding BookReturned event is stored.
  • The system starts updating read models.

But the screen still shows the book as "on loan" – at least for a few seconds.

That's eventual consistency in practice.

The data will update – but not instantly.

Why It Happens

In CQRS and event-driven architectures, updates are typically asynchronous:

  • Commands are processed
  • Events are published
  • Read models subscribe and react

This decoupling makes the system robust and scalable, but introduces short delays between action and visibility.

UX Patterns to Handle It

Eventual consistency is a reality, not a bug. The goal is to make it invisible or intuitive for users. Some strategies:

Show Pending State

Display a visual indicator that an action is being processed:

  • "Returning book…", then update when the projection catches up
  • Optimistic UI updates, followed by confirmation

Reflect User Intent

Instead of showing outdated data, reflect what the user just did:

  • "You returned this book. The loan record will update shortly."

Polling or Subscriptions

Use short polling or websocket-based subscriptions to refresh the UI when the data changes.

Prevent Conflicting Actions

Disable buttons temporarily to prevent conflicting commands while the system is updating.

It's a UX Problem, Not a Data Problem

Most users don't care whether your system is "eventually consistent" – they care about clear feedback and trustworthy interactions.

Design your UI accordingly, and eventual consistency becomes manageable – even invisible.

Next up: Learn how to define and manage consistency boundaries to localize consistency and reduce complexity.