top of page
MicrosoftTeams-image (177)_edited.png

Event-Driven Architecture: Event Sourcing, Event Storming, and More

  • Colm Greene
  • Jul 16, 2025
  • 4 min read

In the modern software landscape, where scalability, responsiveness, and modularity are non-negotiable, Event-Driven Architecture (EDA) has emerged as a powerful paradigm for designing software systems. EDA flips the traditional request/response model on its head by placing events at the centre of the design, allowing components to react to changes in state rather than actively querying for them.


This post explores key concepts in EDA, including event sourcing, event storming, and how these practices contribute to building robust, decoupled, and scalable software systems.



What Is Event-Driven Architecture 

Event-Driven Architecture is a software design pattern in which the flow of the program is determined by events, discrete pieces of information indicating that “something happened.”


Instead of tightly coupling components through direct calls (e.g., APIs), components in an event-driven system emit events when state changes and react to events of interest. This creates a loosely coupled system where components don't need to know about each other’s implementation details.


Core Concepts


  1. Events – Immutable messages that describe something that has happened (e.g., "OrderPlaced", "PaymentProcessed").

  2. Producers – Components or services that emit events.

  3. Consumers – Components or services that listen to and process events.

  4. Event Bus or Broker – Middleware (like Kafka, RabbitMQ, or SNS) that routes events from producers to consumers.



Event Sourcing: Persisting Change, Not State

Event Sourcing is a pattern often used within EDA to handle persistence. Instead of storing the current state of an entity (like a customer’s account balance), you store a sequence of events that represent all state changes from inception to the current point in time.


Why Use Event Sourcing?


  • Auditability – You have a complete historical log of what happened and when.

  • Debuggability – Replay events to reproduce bugs or regenerate state.

  • Scalability – Append-only storage plays well with distributed systems.

  • Flexibility – You can build multiple projections or views of your data, tailored to different consumers or queries.


Example


Instead of storing a customer record like:


"customerId": 123,  

"balance": 100

}


You store events like:


{   

"customerId": 123,    

"type": "AccountCreated",    

"timestamp": "2025-06-01T10:00:00Z" 

},

  {   

"customerId": 123,    

"type": "DepositMade",    

"amount": 25,    

"timestamp": "2025-06-01T10:05:00Z" 

}, 

{   

"customerId": 123,

"type": "DepositMade",

"amount": 75,

"timestamp": "2025-06-15T21:53:00Z"

}

]


The current balance is derived by replaying all relevant events. This makes your application resilient and transparent.



Event Storming: Designing Systems Collaboratively

Event Storming is a workshop-based modelling technique created by Alberto Brandolini. It helps teams explore and design complex business domains by focusing on domain events, business-relevant events like "InvoiceSent" or "ShipmentDelivered".


Unlike traditional UML or Entity-Relationship diagrams, event storming uses a more organic, sticky-note-based approach that encourages real-time collaboration between developers, product owners, and domain experts. It also helps define the ubiquitous language of the domain, so all collaborators have the same understanding when using specific business terms.


How It Works


  1. Start with Events – Capture domain events using orange sticky notes (e.g., "PaymentConfirmed").

  2. Add Commands – Identify what user actions or system processes trigger those events.

  3. Add Aggregates and Policies – Explore which domain entities are involved and what rules govern their behaviour.

  4. Define and Refine Bounded Contexts – Gradually organize the domain into manageable parts, aligned with DDD principles.


Benefits


  • Shared understanding – Aligns technical and non-technical stakeholders.

  • Faster modelling – Allows for rapid exploration and iteration.

  • Clarity – Uncovers domain complexities early in the design phase.


Event storming isn’t about drawing boxes and lines — it’s about identifying the actual business flows, highlighting the major pain points and defining priorities. And it helps build that ubiquitous language between tech and business.



Real-World Use Cases


  • Microservices – Event-driven communication allows services to remain loosely coupled and independently deployable.

  • E-commerce – Tracking events like cart updates, purchases, shipments, and returns becomes more manageable.

  • IoT systems – Devices emit events that backend systems process asynchronously.

  • Banking & Finance – Event sourcing ensures accurate transaction histories and regulatory compliance.


Challenges to Watch For


  1. Eventual Consistency – Consumers may not process events instantly, leading to temporary state mismatches.

  2. Event Schema Evolution – Changes in event formats over time can break consumers unless carefully managed (e.g., via versioning or schema registries).

  3. Increased Complexity – Debugging and monitoring become harder in asynchronous, decoupled systems.

  4. Idempotency – Consumers must handle repeated delivery of events without duplicating actions.


Best Practices


  • Use unique identifiers and timestamps on all events.

  • Make events immutable and descriptive, not just signals like “UpdateEvent” but context-rich like “CustomerEmailChanged.”

  • Embrace idempotent handlers to safely reprocess events.

  • Incorporate observability tools to trace event flows and detect bottlenecks.



Conclusion

Event-Driven Architecture, when implemented thoughtfully, offers a powerful toolkit for building systems that are scalable, flexible, and resilient. Event sourcing lets you preserve a complete, auditable history of state changes, while event storming empowers teams to collaboratively model business domains in a tangible, human-centric way.


Like all architectural styles, EDA isn’t a silver bullet. It comes with complexity, and it requires cultural as well as technical shifts. But for many modern applications, especially those leaning toward microservices or reactive design, it can be a game-changer.


Think in events, speak in events, and build systems that react instead of request.

 
 
bottom of page