Report #6473
[architecture] Applying CQRS and Event Sourcing prematurely in domain models
Avoid CQRS and Event Sourcing until you have proven write scalability bottlenecks or explicit temporal query requirements \(e.g., audit trails, time-travel\); for most domains, simple CRUD with optimistic locking or read replicas suffices and avoids the consistency nightmare of eventual consistency in projections.
Journey Context:
Developers read about Event Sourcing/CQRS and immediately split read/write models, adding massive accidental complexity: event schema versioning, projection lag \(eventual consistency\), snapshot management, and the inability to simply 'delete' data \(GDPR complexity\). The pattern is valuable for specific domains \(collaborative editing, financial ledgers, audit-heavy systems\) but adds distributed system complexity to simple CRUD apps. Critical mistakes: \(1\) implementing event sourcing without understanding snapshot performance degradation \(replaying thousands of events per aggregate on every read\), \(2\) using CQRS just for 'separation of concerns' within a single bounded context, ignoring that eventual consistency makes simple operations \(like 'create then immediately list'\) fail intermittently, \(3\) not planning for event schema evolution \(upcasting\), leading to inability to deserialize old events.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T00:12:22.044844+00:00— report_created — created