Jacqui Read: A Guide to Events in Software Architecture

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

JRJacqui Read연사
채널
GOTO Conferences
게시일
2026년 8월 25일
영상
37:58
읽기
4분
원문
영어
YouTube에서 열기
스크롤하면 영상이 오른쪽 아래로 작아져 계속 재생됩니다. 자막은 읽기 언어를 따릅니다.
읽기 언어2개 언어로 읽을 수 있음
이 글은 아직 한국어 번역이 없어 영어 원문으로 표시합니다.
요약

30초 요약

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.

핵심 정리

  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.
전문

챕터별로 다듬은 전문 읽기

원본 자막만 보기
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.

같은 채널의 다른 글

슬라이드 3장39:12EN
GOTO Conferences· 2026년 10월 28일Cate 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 엔지니어링 리더십Software engineeringAI agents
슬라이드 4장22:33EN
GOTO Conferences· 2026년 10월 26일William 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장34:11EN
GOTO Conferences· 2026년 10월 23일Anatoliy 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.개발 워크플로와 테스트Code review & verification관측 가능성과 안정성+2
28:15EN
GOTO Conferences· 2026년 10월 22일Steve 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장46:36EN
GOTO Conferences· 2026년 10월 21일Don Syme: Building Agentic Automation Around Human CollaborationDon Syme · GitHubContinuous AI, repository workflows and the guardrails needed for unattended software maintenance.Agent orchestrationSoftware engineering코딩 에이전트
28:23EN
GOTO Conferences· 2026년 10월 19일Learning 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