Example
Instead of storing balance = 1500, store events: AccountCreated(0), MoneyDeposited(2000), MoneyWithdrawn(500). Balance = 0 + 2000 − 500 = 1500.
Advantages
- Full audit trail: always know why the state is what it is, not just what it is
- Can restore state to any point in time
- New read models are built by replaying existing events
Challenges
- The event store grows indefinitely — snapshots are needed
- Complex event schema evolution (versioning)
- High implementation complexity