Conceptly
← All Concepts
πŸ“œ

Event Sourcing

DataA model that stores events rather than only current state

Event Sourcing records the sequence of state-changing events rather than repeatedly overwriting a current-state row. The current state is reconstructed from that event history, and alternative read models can be built from the same stream.

β–ΆArchitecture Diagram

πŸ“Š Data Flow

Dashed line animations indicate the flow direction of data or requests

Why do you need it?

CRUD storage tells you the latest value but often hides how it got there. That makes auditability, replay, debugging, and alternate projections harder in domains where the sequence of change matters. Event Sourcing exists for cases where history is part of the business truth, not just an implementation detail.

Why did this approach emerge?

As event streaming matured and audit-heavy domains demanded better history, append-only event logs became more attractive as a first-class system record. The appeal grew strongest where replay, temporal reasoning, and traceability mattered more than simple current-state storage.

How does it work inside?

Commands are validated by an aggregate, new events are appended to an event store, and projectors turn those events into read-friendly views. The write model focuses on producing valid state transitions, while the read side focuses on projection and query shape.

Boundaries & Distinctions

CQRS separates read and write models; Event Sourcing changes the persistence model of the write side itself. You can use CQRS without Event Sourcing. For straightforward CRUD domains, event versioning and replay concerns can be unnecessary overhead.

When should you use it?

Event Sourcing is a strong fit for ledgers, workflow-heavy domains, contract state machines, and other systems where the history of change has business value. It is much less compelling when the latest state is all anyone needs and replay complexity brings little benefit.

Domains that need full audit historySystems that must reconstruct how current state was reachedWorkflows where change order itself mattersPlatforms that want multiple read models from the same stream