So you want to build an event driven system

Abstract

EDA is fundamentally a communication pattern, a way of modelling the integration between systems.

Event storming can be used to design clean and maintainable event-driven software, to support rapidly evolving businesses.

To adopt EDA, you must embrace eventual consistency.

Sparse event vs fat events (event carried state transfer)? It depends. Use RFC between teams to evolve your events.

A tip: add event metadata:

{
  "metadata": {
    "eventType": "OrderCreated",
    "version": "v1",
    "eventId": "d009812c-cfd3-427b-97d1-21d66d370736",
    "eventDate": "2025-01-02",
    "traceParent": "trace-id-from-producing-system",
    "parentSpan": "parent-span-from-producing-system"
  },
  "data": {
    "orderId": "123",
    "orderNumber": "ORD456"
  }
}

You can use the outbox pattern for a resilient system.

Try CQRS for a separation between the read and the write.