State machine first
Define states (PENDING → AUTHORIZED → SHIPPED → DELIVERED) and allowed transitions. Each transition emits an event. Stored in event log; current state is fold of events. Replayable for debugging.
Advertisement
Idempotency keys everywhere
Order ID + transition type = idempotency key. Re-delivered events deduped at the consumer. Critical: payment service must dedupe; shipping must dedupe. Test by replaying events.
Advertisement
Outbox pattern
Service writes state change + outbox event in same DB transaction. Separate process publishes outbox to Kafka. Atomic state + event publication without 2PC across DB and message broker.