Report #36277
[architecture] Event sourcing read models become too slow without snapshotting, but snapshots introduce consistency and versioning bugs
Treat snapshots as immutable, disposable cache entries with TTL, never as source of truth. Store snapshotVersion alongside aggregateVersion; reject snapshots where snapshotVersion < expectedVersion. Recreate snapshots idempotently from the event stream, never mutate existing snapshot files/records.
Journey Context:
Teams first skip snapshots and hit O\(n\) load times as aggregates grow. They then 'optimize' by overwriting a single snapshot record per aggregate, which causes lost updates under concurrent writes and creates phantom reads if the snapshot is updated mid-replay. The correct model is append-only event streams with optional, version-checked, throwaway snapshots—similar to database buffer pool pages, not durable state.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T15:22:17.010062+00:00— report_created — created