pattern

Event Sourcing

Storing the full sequence of state-changing events as the system of record, and deriving current state by replaying them.

patternsauditevent-driven

Instead of storing "balance = 40", store "deposited 100", "withdrew 60". Current state is a fold over the event log, usually cached in a projection.

What it genuinely buys: a complete and immutable audit trail, the ability to reconstruct the state of the system at any past instant, and the ability to build a new read model over history that nobody thought of when the events were written. In regulated domains that first property alone can justify it.

What it costs is substantial and routinely underestimated. Events are forever, so schema evolution means versioning and upcasting old events indefinitely. Deleting personal data conflicts directly with an append-only log, which makes GDPR erasure a design problem rather than a delete statement. Debugging requires replaying. Most teams that adopt it want the audit log, and would be better served by an audit log.