Report #10826
[architecture] Choosing between Event Sourcing vs CRUD with Audit Log for temporal data and history
Use CRUD with temporal tables \(system-versioned tables\) or append-only audit tables unless you need to rebuild read models from history or have complex event-driven workflows requiring event replay. Event Sourcing adds prohibitive complexity \(event schema versioning, snapshot management, eventual consistency debugging\) and should only be adopted when the business domain requires time-traveling state reconstruction or event publishing to external bounded contexts.
Journey Context:
Developers often choose Event Sourcing for 'auditability' or 'temporal queries,' but this is massive overkill. CRUD with PostgreSQL temporal tables \(using periods and system versioning\) or SQL Server temporal tables gives you point-in-time queries without the operational nightmare of event stores. Event Sourcing is correct when you need to publish events to external systems and those events are the source of truth \(e.g., inventory reservations, financial ledgers\), but wrong for simple 'who changed this field' auditing. Common failure modes: event schema evolution \(you can't change past events, only add migrations\), massive growth of event store size, inability to delete data for GDPR \(events are immutable\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T11:45:37.547438+00:00— report_created — created