On this page

Approach 1: The Thin Event (Only an ID)

Approach 2: The Fat Event (Full Details)

Which Approach Is Better?

Best Practices for Event Content

Wrapping Up

Grokking Events in System Design: What They Are and What to Include

Image
Arslan Ahmad
Confused about what an event is in system design? Learn how to design meaningful event payloads, avoid tight coupling, and build scalable event-driven architecture for modern backend systems.
Image

Approach 1: The Thin Event (Only an ID)

Approach 2: The Fat Event (Full Details)

Which Approach Is Better?

Best Practices for Event Content

Wrapping Up

This post demystifies events in event-driven microservices architecture, comparing thin vs. fat event payloads and sharing tips to keep your systems loosely coupled.

Imagine your microservices don’t call each other directly, but instead broadcast messages about things that happen.

That’s the idea behind event-driven architecture (EDA).

One service emits an event (a message that “something happened”), and other services interested in that event can react to it asynchronously. This decouples services and helps systems scale.

But it raises a key question: what information should an event carry?

For example, an OrderPlaced event in an e-commerce app could prompt the shipping service to pack the order and the notification service to email a confirmation – all triggered by one event without direct calls between services.

So, what goes inside an event like OrderPlaced?

Should it just contain an order ID, or include all the details of the order (items, prices, customer info, etc.)?

In practice, system designers typically choose one of two approaches:

Approach 1: The Thin Event (Only an ID)

Keep events minimal.

Our OrderPlaced event might include only an order ID (say { order_id: 1234 }).

Any service that receives this event and needs more data would then call back to the Order Service to fetch those details.

This makes the event lightweight, but thin events have drawbacks:

  • Coupling via lookups: Every consumer must contact the Order Service for details. Your “decoupled” microservices become indirectly coupled since they all rely on the Order Service for info.

  • Extra network calls: If multiple services get the event, each one calls the Order Service for data. That’s a lot of duplicate traffic. These calls add latency and can overwhelm the Order Service under load.

In short, a thin event saves on message size, but shifts complexity (and load) onto the consumers and the source service.

Approach 2: The Fat Event (Full Details)

Alternatively, make events self-contained.

A “fat” event carries the details so listeners don’t need to ask anyone else.

Our OrderPlaced event would then include not just the order ID, but everything a subscriber might need – item details, prices, customer info, shipping address, etc.

Detailed events have benefits:

  • Looser coupling: Consumers don’t need to call the Order Service; they can act independently with the data in the event.

  • Fewer calls: No matter how many services receive the event, it’s one broadcast message. There’s no flurry of follow-up requests, meaning less chatter and lower latency overall.

However, fat events come with trade-offs:

  • Bigger messages: Each event is larger. Message brokers (Kafka, RabbitMQ) have size limits, and hefty events use more bandwidth. Be mindful of event size.

  • Schema evolution: More fields mean a tighter schema contract with consumers. If you change the event format later, you could break consumers. Plan for versioning to maintain compatibility.

  • Data duplication: A detailed event duplicates data from the source service (often an acceptable cost for decoupling).

Which Approach Is Better?

Engineers often favor fatter events because they reduce dependencies and chatter between services.

If information will be useful to consumers (and isn’t huge or sensitive), include it in the event.

Thin events can work for simple notifications, but usually they just shift complexity elsewhere.

Best Practices for Event Content

Regardless of approach, a few best practices apply:

  • Standardize your events: Use a consistent structure (type, timestamp, IDs, etc.) for all events, and manage schema versions so you can update events without breaking subscribers.

  • Keep events focused: Include the data consumers truly need so they don’t have to make extra calls. Don’t overload events with info nobody uses – find the sweet spot where an event is informative but not bloated.

Wrapping Up

Events are the backbone of EDA, and designing their content well is key to effective microservice communication.

In general, rich events lead to more decoupled and efficient services, while overly sparse ones create hidden dependencies and extra work.

The goal is to include enough data that other services can do their job without extra calls, but not so much that events become unwieldy.

Design your events with that balance in mind – always ask “Will a consumer need this?”

If yes, include it.

With the right context in each event, your microservices can work together in harmony.

System Design Fundamentals

What our users say

Tonya Sims

DesignGurus.io "Grokking the Coding Interview". One of the best resources I’ve found for learning the major patterns behind solving coding problems.

Steven Zhang

Just wanted to say thanks for your Grokking the system design interview resource (https://lnkd.in/g4Wii9r7) - it helped me immensely when I was interviewing from Tableau (very little system design exp) and helped me land 18 FAANG+ jobs!

KAUSHIK JONNADULA

Thanks for a great resource! You guys are a lifesaver. I struggled a lot in design interviews, and this course gave me an organized process to handle a design problem. Please keep adding more questions.

More From Designgurus
Substack logo

Designgurus on Substack

Deep dives, systems design teardowns, and interview tactics delivered daily.

Read on Substack
Annual Subscription
Get instant access to all current and upcoming courses for one year.

Access to 50+ courses

New content added monthly

Certificate of completion

$29.08

/month

Billed Annually

Recommended Course
Grokking the Object Oriented Design Interview

Grokking the Object Oriented Design Interview

58,682+ students

3.9

Learn how to prepare for object oriented design interviews and practice common object oriented design interview questions. Master low level design interview.

View Course
Join our Newsletter

Get the latest system design articles and interview tips delivered to your inbox.

Read More

Large-Scale System Design Questions: How to Design Systems at Scale

Arslan Ahmad

Arslan Ahmad

Amazon System Design Interview: 5 Sample Questions & How to Solve Them

Arslan Ahmad

Arslan Ahmad

What Happens When You Type a URL? (Step-by-Step Explanation)

Arslan Ahmad

Arslan Ahmad

10 Common Microservices Anti-Patterns

Arslan Ahmad

Arslan Ahmad

Image
One-Stop Portal For Tech Interviews.
Copyright © 2026 Design Gurus, LLC. All rights reserved.