Report #84473
[architecture] CRUD with audit tables failing to capture intent and causing dual-write issues
Use Event Sourcing with immutable event streams and projections instead of CRUD with separate audit tables when audit is a first-class requirement
Journey Context:
Teams implement auditing by adding 'updated\_at/updated\_by' columns or separate audit tables with database triggers. This creates dual-write problems \(business transaction succeeds but audit insert fails\) and fails to capture intent \(what operation occurred, not just the final state\). Event Sourcing stores facts \(events\) as the immutable source of truth; the current state is a left fold/reduce of events. This provides perfect audit history, temporal queries \('what did the account balance look like last Tuesday?'\), and the ability to rebuild read models by replaying events. Tradeoffs: eventual consistency on reads \(projections lag\), significantly higher storage \(events are never deleted\), no simple SQL UPDATE/DELETE \(must append compensating events\), and a steep learning curve. Do not use for simple CRUD domains; use when audit/compliance is critical and the domain benefits from temporal analysis \(accounting, inventory, medical records\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T00:22:45.743942+00:00— report_created — created