Jacqui Read: A Guide to Events in Software Architecture

Distinguish commands, streams, event sourcing and event design without confusing similar terms.

JRJacqui ReadSpeaker
Channel
GOTO Conferences
Published
Aug 25, 2026
Video
37:58
Read
4 min
Original
English
Open on YouTube
Scroll to read and the video shrinks to the bottom-right corner. Captions follow your reading language.
Reading languageAvailable in 2 languages
You're reading the original English.
SUMMARY

In 30 seconds

At GOTO Copenhagen 2025, Jacqui Read surveys event-related concepts and their tradeoffs. She compares logs and queues, explains EventStorming and event sourcing, and offers guidance on event boundaries and payload size.

  1. 1Events versus commandsA command requests action; an event records something that happened.
  2. 2Logs versus queuesConsumers of logs track offsets, while queues distribute messages to competing consumers.
  3. 3EventStormingCollaborative mapping reveals events, knowledge and bounded-context transitions.
  4. 4Event sourcing and tombstonesEvent sourcing retains changes; tombstone meanings depend on the system.
  5. 5Choose event granularityBalance payload size against consumer callbacks and coupling.

Takeaways

  1. A command requests action; an event records something that happened.
  2. Consumers of logs track offsets, while queues distribute messages to competing consumers.
  3. Collaborative mapping reveals events, knowledge and bounded-context transitions.
  4. Event sourcing retains changes; tombstone meanings depend on the system.
  5. Balance payload size against consumer callbacks and coupling.
FULL TEXT

Read the edited text by chapter

Transcript only
01

What is an event?

Read distinguishes facts, commands, messages and handlers.

I want to disambiguate the many uses of “event” in software: commands, streams, event-driven architecture, EventStorming, event sourcing and several kinds of event. Similar names do not necessarily mean the concepts are interchangeable.

An event represents something that has happened. The time of the occurrence matters, and the event records a fact rather than asking another component to perform an action. Existing software has used event objects for decades, including in graphical interfaces.

An event can carry information about a change, such as a changed preference. What it contains affects consumers: if they depend on the producer’s internal representation, changes to that representation can create coupling.

A command asks a known recipient to do something, with an expectation of action. An event publishes a fact that has already occurred; the publisher need not know who will react. Messages are the broader category that can include both.

For example, creating, starting and completing a work item can be expressed as commands and corresponding past-tense events. Distinguishing a request from a fact makes it easier to reason about what has actually happened.

Terminology around listeners and handlers varies. A listener waits for an event type and triggers callback code; some people call the callback the handler, while others use “handler” for the whole mechanism.

02

Streaming and event-driven architecture

Logs, queues and brokers have different behaviors and tradeoffs.

Event streaming handles continuous flows of data and can support near-real-time processing rather than waiting for a batch. Producers such as services or devices publish events; consumers subscribe to the information they need.

A message log stores entries with offsets. Consumers track their progress so they can resume after a failure. A consumer may replay records it already processed, so the processing design must account for idempotency; a new consumer may also choose a particular starting window.

A queue has different semantics in the example: one or more competing consumers take messages, and an acknowledged message is no longer available on that queue. If processing is not acknowledged, it can become available again for another consumer.

In a command-driven network, services may know and call one another directly. An event-driven architecture can instead use a broker for publication and subscription, reducing some direct dependencies. The broker itself still needs to be designed for the required reliability and throughput.

That indirection has a cost: a diagram showing only services and a broker may hide who ultimately consumes data. In a distributed system, following downstream dependencies and predicting the effects of a change can become difficult.

03

EventStorming

Collaborative mapping exposes knowledge and domain boundaries.

EventStorming brings business and technical participants together to map events, actors, systems, opportunities and trouble spots. The point is to uncover knowledge held by different people and understand what happens next, rather than assume that all of it is documented.

Pivotal events can reveal transitions between bounded contexts. Teams may disagree over terminology at those boundaries because the same information is understood through different domain models; identifying the boundary helps make translation explicit.

A big-picture EventStorming session is broad discovery with many participants. Process modeling narrows the group to design or redesign a workflow, while software-design sessions focus further on technical and user-experience decisions.

04

Event sourcing and tombstones

The talk discusses historical state, storage and context-specific markers.

Event sourcing stores changes as events rather than only the latest state. Replaying those changes can reconstruct a past state, much as a version history helps inspect earlier versions. A conventional state store may need separate logs or backups to recover the same history.

She describes using streams for entities or aggregates and splitting long-running streams at useful business boundaries. The appropriate boundary depends on write volume and domain needs; a cache or projection can make current-state reads faster.

An event store can be a specialized database or a general database with supporting software. Events represent past facts and are generally not edited in place. The speaker mentions encryption and deleting keys as one possible privacy technique; whether that meets a particular legal obligation depends on the implementation and applicable requirements.

A tombstone generally marks that data is no longer present, but its exact meaning depends on the system. She contrasts marking a stream for deletion, filling a sequence gap and signaling completion in a retry pattern; the same word is used for different purposes.

In the retry example, an event that cannot yet be processed is redirected, and subsequent related events are also held for retry so they do not overtake it. A completion marker helps the main flow know when the redirected work has finished.

05

Domain, integration and granularity

Read explains boundaries and how much data an event should carry.

Domain events describe meaningful occurrences within a domain or bounded context; integration events communicate across boundaries. The speaker urges teams to design events as deliberately as APIs and consider the models shared between producers and consumers.

Event granularity involves a tradeoff. A small notification may require a consumer to call the producer for more data, adding coupling and latency; an oversized event may distribute irrelevant information and create other dependencies.

Her advice is to make events as small as possible but as large as necessary for consumers to act without immediately calling the producer back. The right size depends on the workflow and its consumers, not a universal payload template.

The talk closes by reviewing the terminology and pointing to further learning resources. Understanding the distinctions helps teams choose the appropriate pattern rather than assuming all event-related techniques solve the same problem.

More from this channel

3 slides39:12EN
GOTO Conferences· Oct 28, 2026Cate Huston: How Rigour Supports AI-Assisted Development VelocityCate Huston · TwillA two-person team’s experience with release gates, automated checks, prioritization and the cost of shipping faster.AI engineering leadershipSoftware engineeringAI agents
4 slides22:33EN
GOTO Conferences· Oct 26, 2026William Schor: From Unit Tests to Synthetic Canaries at NetflixWilliam Schor · NetflixHow generated workloads and production-like infrastructure help test a distributed key-value service.Software engineering
5 slides34:11EN
GOTO Conferences· Oct 23, 2026Anatoliy Bilenko and Alberto Carretero: Making Database Protocols Reliable with Formal Methods and AIAnatoliy Bilenko, Alberto Carretero · CanonicalCanonical’s database engineers connect executable specifications, model-based tests, failure exploration, and reconstructed execution histories—and explain why none of these techniques proves a real system correct on its own.Developer workflows & testingCode review & verificationObservability & reliability+2
28:15EN
GOTO Conferences· Oct 22, 2026Steve Poole on Open-Source Security and AI’s Maintenance ChallengeOlimpiu Pop, Steve PooleWhy faster vulnerability discovery increases pressure on maintainers, dependency users and upgrade processes.Software engineeringAI security
5 slides46:36EN
GOTO Conferences· Oct 21, 2026Don Syme: Building Agentic Automation Around Human CollaborationDon Syme · GitHubContinuous AI, repository workflows and the guardrails needed for unattended software maintenance.Agent orchestrationSoftware engineeringCoding agents
28:23EN
GOTO Conferences· Oct 19, 2026Learning Ash: Declarative Elixir Apps, Testing and ExtensibilityChristian Alexander, Rebecca Le, Zach DanielRebecca Le and Zach Daniel explain how their book and the framework evolved together.Software engineering