Report #83396
[architecture] When to separate read and write models in complex domains
Use CQRS only when you have distinct read/write access patterns AND complex domain logic \(DDD aggregates\) requiring audit trails; avoid if you don't need event sourcing or temporal queries, as dual models add consistency headaches.
Journey Context:
Developers apply CQRS to simple CRUD apps because they heard it 'scales reads,' but they end up with accidental complexity \(dual data models, eventual consistency bugs, data synchronization nightmares\). CQRS is justified when: \(1\) domain logic is complex requiring DDD aggregates with invariants, \(2\) read models need heavy denormalization \(e.g., search indexes, graph queries\) that would destroy write performance, \(3\) you need audit trails/event sourcing anyway. The event sourcing part is often conflated with CQRS but they're orthogonal; you can have CQRS with relational read models updated by triggers. Common failure mode is trying to keep read models 'immediately consistent' via distributed transactions instead of accepting eventual consistency and designing for stale data. Another pitfall is projecting all events to all read models causing unnecessary coupling; read models should subscribe to specific event types.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T22:33:44.978909+00:00— report_created — created