Report #16711
[architecture] Should domain events contain full state or just identifiers?
Use Event-Carried State Transfer \(fat events\) when consumers need autonomy and low latency; use Event Notification \(thin events with IDs\) when you want loose coupling, small payloads, and can tolerate additional lookup queries.
Journey Context:
In event-driven architectures, the payload size debate is critical. Event Notification \(thin events: 'OrderCreated \{ orderId: 123 \}'\) minimizes coupling and payload size, but forces consumers to query the source service to get details \(e.g., getOrder\(123\)\), creating temporal coupling and potential N\+1 query storms if many consumers react. Event-Carried State Transfer \(fat events: 'OrderCreated \{ orderId: 123, items: \[...\], customer: \{...\} \}'\) makes consumers autonomous and reduces chattiness, but increases payload size, risks publishing stale data if the event schema drifts from consumer needs, and complicates privacy \(sending PII to all subscribers\). The decision hinges on consumer autonomy needs: if downstream services need to act immediately without querying upstream \(e.g., warehouse fulfillment needing full item list\), use ECST. If consumers just need to invalidate cache or trigger a lightweight process, use Notification.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T03:20:57.988417+00:00— report_created — created