Event Sourcing & CQRS · CQRS and Projections

Eventual Consistency in the UI

Keep users from seeing stale data right after they act.

Create a free account to save this page, take notes and track your progress. Sign in

After a command, the read model may lag by milliseconds or seconds. Techniques: return the new state (or version) from the command and render it directly; read-your-writes by waiting until the projection reaches the returned position (with a short timeout); optimistic UI updates; show "processing" states; or query the write model for the user's own fresh data. Choose per screen based on how jarring staleness would be.

Hiding read-model lag

Technique How Trade-off
Return result from command Command response includes new state Simple; only for the acting user
Wait for projection position Poll read model until checkpoint ≥ event position Small delay; strongly consistent for user
Optimistic UI Update client state immediately Must roll back on failure
Pending state Show 'processing' until confirmed Honest; extra UI states
Read from write model Load aggregate for own data Bypasses read model optimizations
POST /orders → 202 {"order_id": "ord_1", "position": 918273}
GET  /orders/ord_1?min_position=918273
     server waits up to 2 s until order_summaries checkpoint ≥ 918273, then responds

Common pitfalls

  • Redirecting to a list that doesn't show the just-created item.
  • Long blocking waits for projections.
  • Ignoring lag metrics for projections.

Key points

  • Return state or positions from commands
  • Read-your-writes where it matters
  • Monitor projection lag

Further reading: Azure Architecture: CQRS pattern

Practice questions

How can a client read its own write in a CQRS system?

Answer

The command returns the event position; the query asks the read side to wait until its checkpoint reaches that position (with a timeout) before answering.

Which metric should you monitor for every projection?

Answer

Projection lag: the difference between the latest event position (or time) and the projection's checkpoint.

Open in the app to mark lessons complete, take notes and track your progress.

Was this page helpful?