Event Sourcing: When It Helped, When It Hurt

Six months with event sourcing on an order management system — audit trail wins, operational complexity costs.

Event sourcing came up during a design review for our order system. We needed complete audit trails and the ability to replay state for debugging.

What Worked

  • Audit trail: Every state change is immutable and timestamped
  • Debugging: Replay events to reproduce any historical state
  • Temporal queries: “What did this order look like at 3 PM yesterday?”

What Hurt

  • Projection lag: Read models 100-500ms behind writes
  • Schema evolution: Event versioning is hard. We spent 3 sprints on migration strategy
  • Team onboarding: Steep learning curve for developers used to CRUD

Decision

We kept event sourcing for the order aggregate only. Everything else stays traditional CRUD with audit logs. Pragmatic polyglot persistence.

Recommendation

Use event sourcing when:

  • Audit requirements are regulatory, not nice-to-have
  • You need temporal queries on core domain objects
  • Team has experience with CQRS/ES patterns

Skip it when:

  • Simple CRUD with audit columns suffices
  • Team is small and moving fast
  • Read latency requirements are strict

event-sourcing , architecture , cqrs · PostgreSQL , .NET

More in Distributed Systems