Report #85432
[architecture] When to separate read and write models in complex domain applications
Apply CQRS only when: \(1\) domain complexity justifies separate models \(DDD aggregates\), \(2\) read/write scaling requirements diverge significantly \(e.g., 1000:1 read ratio\), \(3\) eventual consistency \(seconds\) is acceptable, and \(4\) you need to optimize queries across bounded contexts without joins. Keep data in sync via domain events and materialized views.
Journey Context:
Common anti-pattern is applying CQRS to simple CRUD apps, creating accidental complexity \(two data models, sync lag, dual writes\). CQRS shines in collaborative domains \(e.g., Uber's trip handling\) where write model enforces invariants \(small aggregate\) and read model is heavily denormalized for fast queries \(Elasticsearch, Redis\). Usually paired with Event Sourcing but can use traditional DBs. The cost: eventual consistency means reads lag writes; handle via UI patterns \(optimistic updates, progress tracking\). Don't use for financial transactions requiring immediate consistency across views or simple query patterns that SQL handles fine.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T01:58:59.294596+00:00— report_created — created