← Extractions

Event Sourcing Anti-Patterns & Failures — Nathan Ladd at wroclove.rb 2018

Nathan Ladd's wroclove.rb 2018 talk walks through event-sourcing basics (commands, handlers, projections, events) and then dissects four common anti-patterns: entities coupled to messaging, view-biased event schemas, opaque dependencies (hidden projections and opaque writers), and the aggregate-root-as-god-class pattern. He closes with meta-advice about scrutinizing community thought leaders, treating complexity as contextualized, and spending a week or two on real up-front design before coding.

Model
claude-opus-4-7
Ingestion
43cc404e
Input tokens
226,664
fresh
115,868
cached
96,419
cache write
14,377
Output tokens
15,489
Duration
244.2s
Roundtrips
6
Tool calls
17
Cost
$0.00
Nodes/edges extracted
33 / 51
Read set (nodes/edges)
97 / 36

Nodes (33)

update Event Sourcing Anti Patterns and Failures talk
attrs {"type" => "talk"} {"date" => "2018-03-16", "type" => "talk"}
description Talk at wroclove.rb 2018. Nathan Ladd's wroclove.rb 2018 talk, delivered as the first event-sourcing talk of the conference. Opens with a revie...
short_description Talk at wroclove.rb 2018. Nathan Ladd's wroclove.rb 2018 talk on common event-sourcing anti-patterns and failure modes.
update Nathan Ladd person
attrs (empty) {"role" => "co-principal, Eventide project", "twitter" => "@realntl"}
description Conference speaker. At wroclove.rb 2018 gave a talk critiquing aggregates and their coupling to events, which signifi... Conference speaker, co-principal / co-founder of the Eventide project (a toolkit for event sourcing and autonomous se...
short_description Ruby conference speaker, Eventide co-maintainer. Ruby conference speaker; co-principal of the Eventide project.
create Command Message concept
kind (empty) concept
name (empty) Command Message
slug (empty) command-message
attrs (empty) {"category" => "pattern"}
description (empty) Ladd's generalized name for a web form or any input handled by an MVC controller: a command message. In event-sourced...
short_description (empty) A message expressing intent — a generalized name for a web form or controller input.
create Command Handler concept
kind (empty) concept
name (empty) Command Handler
slug (empty) command-handler
attrs (empty) {"category" => "pattern"}
description (empty) Component that receives a command message, projects the relevant entity, accepts or rejects the command (usually via ...
short_description (empty) Entry-point component that receives a command and decides which event(s) to write.
create Entity Projection concept
kind (empty) concept
name (empty) Entity Projection
slug (empty) entity-projection
attrs (empty) {"category" => "pattern"}
description (empty) In event sourcing, projecting an entity means reading its stream sequentially starting from a blank/empty data struct...
short_description (empty) Folding an event stream from empty state into a single entity representation.
create Entity Coupled To Messaging concept
kind (empty) concept
name (empty) Entity Coupled To Messaging
slug (empty) entity-coupled-to-messaging
attrs (empty) {"category" => "pattern"}
description (empty) First anti-pattern in Ladd's talk. When an entity method takes a command message as a parameter, decodes its attribut...
short_description (empty) Anti-pattern: entities that accept command messages, interpret them, and return events.
create View-Biased Event Schemas concept
kind (empty) concept
name (empty) View-Biased Event Schemas
slug (empty) view-biased-event-schemas
attrs (empty) {"category" => "pattern"}
description (empty) Second anti-pattern. When building materialized views from events, teams are tempted to shove UI-only data (e.g. cate...
short_description (empty) Anti-pattern: shaping events to carry UI/view fields rather than raw facts.
create Opaque Dependencies concept
kind (empty) concept
name (empty) Opaque Dependencies
slug (empty) opaque-dependencies
attrs (empty) {"category" => "pattern"}
description (empty) Third anti-pattern. Dependencies are 'opaque' when the handler can't see or control them. Two flavors discussed: (1) ...
short_description (empty) Anti-pattern: hiding projections, writers or other dependencies the handler should control.
create Aggregate Root Anti-Pattern concept
kind (empty) concept
name (empty) Aggregate Root Anti-Pattern
slug (empty) aggregate-root-anti-pattern
attrs (empty) {"category" => "pattern"}
description (empty) Fourth anti-pattern in Ladd's talk. A class that mixes entity business logic, command handling, and event projection ...
short_description (empty) Anti-pattern: a single class mixing entity, handler, and projection responsibilities.
create Reservation Pattern concept
kind (empty) concept
name (empty) Reservation Pattern
slug (empty) reservation-pattern
attrs (empty) {"category" => "pattern"}
description (empty) Event-sourcing technique Ladd cites for enforcing uniqueness (e.g. of an email address): write a reservation event ke...
short_description (empty) Uniqueness validation in event-sourced systems via a reservation event on the shared key.
create Expected Version concept
kind (empty) concept
name (empty) Expected Version
slug (empty) expected-version
attrs (empty) {"category" => "pattern"}
description (empty) Optimistic concurrency countermeasure when writing to an event store: the write specifies the expected current versio...
short_description (empty) Concurrency control parameter on event-store writes used to detect and reject races.
create Vector Clock concept
kind (empty) concept
name (empty) Vector Clock
slug (empty) vector-clock
attrs (empty) {"category" => "architecture"}
description (empty) Technical mechanism Ladd names for ordering events produced by distributed systems where a simple timestamp is unreli...
short_description (empty) Causal-ordering mechanism for events across distributed systems.
create Entity Caching and Snapshotting concept
kind (empty) concept
name (empty) Entity Caching and Snapshotting
slug (empty) entity-caching-and-snapshotting
attrs (empty) {"category" => "practice"}
description (empty) Because each event has a position exactly one greater than the previous, an entity projected up to position N can be ...
short_description (empty) Performance countermeasures for event-stream replay: versioned entity cache and periodic snapshots.
create Contextualized Complexity concept
kind (empty) concept
name (empty) Contextualized Complexity
slug (empty) contextualized-complexity
attrs (empty) {"category" => "practice"}
description (empty) Ladd's reframing of the complexity objection to moving off monoliths. Yes, partitioning and event sourcing add patter...
short_description (empty) Complexity you add to a system but only deal with a small subset of at any time.
create Immutable Database Raises Mistake Cost takeaway
kind (empty) takeaway
name (empty) Immutable Database Raises Mistake Cost
slug (empty) immutable-database-raises-mistake-cost
attrs (empty) {"type" => "warning"}
description (empty) Because the event store is immutable, correcting bad data is much harder than in a relational database (where you can...
short_description (empty) Mistakes in event-sourced systems are far more expensive than in mutable databases.
create Keep Entities Free Of Messaging takeaway
kind (empty) takeaway
name (empty) Keep Entities Free Of Messaging
slug (empty) keep-entities-free-of-messaging
attrs (empty) {"type" => "recommendation"}
description (empty) Recommendation: entities should contain only core business logic and be readable as a specification of the domain. Th...
short_description (empty) Entities should be pure domain logic, not aware of commands or events.
create Events Record What Occurred, Nothing Else takeaway
kind (empty) takeaway
name (empty) Events Record What Occurred, Nothing Else
slug (empty) events-record-what-occurred-nothing-else
attrs (empty) {"type" => "recommendation"}
description (empty) Don't bend event schemas to accommodate UI needs. Adding UI-derived fields (e.g. a category_id computed from a heuris...
short_description (empty) Never add view-only fields to events to make UI composition easier.
create Handlers Must Control Their Dependencies takeaway
kind (empty) takeaway
name (empty) Handlers Must Control Their Dependencies
slug (empty) handlers-must-control-their-dependencies
attrs (empty) {"type" => "recommendation"}
description (empty) Handlers must be able to control the projection (for caching, snapshotting, or to skip it entirely) and the writer (t...
short_description (empty) Command handlers should own their projection and writer, not delegate to framework.
create Don't Conflate Entity, Handler and Projection takeaway
kind (empty) takeaway
name (empty) Don't Conflate Entity, Handler and Projection
slug (empty) don-t-conflate-entity-handler-and-projection
attrs (empty) {"type" => "recommendation"}
description (empty) Avoid the aggregate-root-as-god-class pattern. Keeping entity, handler, and projection as separate classes preserves ...
short_description (empty) Keep entities, handlers, and projections as separate, independently testable classes.
create Scrutinize Community Thought Leaders takeaway
kind (empty) takeaway
name (empty) Scrutinize Community Thought Leaders
slug (empty) scrutinize-community-thought-leaders
attrs (empty) {"type" => "insight"}
description (empty) Communities have positive connotations and can achieve wonders (Ladd's Amish barn-raising and Texas hurricane example...
short_description (empty) Communities and leaders can suppress critical thinking; hold popular ideas under scrutiny.
create A Week Of Up-Front Design Is Not Waterfall takeaway
kind (empty) takeaway
name (empty) A Week Of Up-Front Design Is Not Waterfall
slug (empty) a-week-of-up-front-design-is-not-waterfall
attrs (empty) {"type" => "recommendation"}
description (empty) 'Measure twice, cut once.' The move from waterfall to agile replaced 6–18 months of up-front design, but the communit...
short_description (empty) Closing the laptop to design a service for a week is agile, not waterfall.
create Tooling Never Forced Your Monolith takeaway
kind (empty) takeaway
name (empty) Tooling Never Forced Your Monolith
slug (empty) tooling-never-forced-your-monolith
attrs (empty) {"type" => "warning"}
description (empty) Teams that move from Rails to event sourcing sometimes build the same god classes they criticised Rails for. Switchin...
short_description (empty) Don't blame Rails (or any tool) for your god classes — and don't expect Elixir to fix them.
create Entity Store tool
kind (empty) tool
name (empty) Entity Store
slug (empty) entity-store
attrs (empty) {"category" => "library"}
description (empty) One of the 30+ libraries in the Eventide project. Provides projection of entities from event streams, along with an e...
short_description (empty) Eventide Ruby library implementing entity projection with cache and snapshotting.
create What is an entity? question
kind (empty) question
name (empty) What is an entity?
slug (empty) what-is-an-entity
attrs (empty) {"answer_summary" => "Primarily a data structure with domain-specific methods; logically, a whole microservice can al...
description (empty) Audience asks whether an entity is an object with attributes or a process. Ladd: usually a data structure with domain...
short_description (empty) Q&A clarifying what Ladd means by 'entity' in event sourcing.
create Is the sufficient-funds check a feature envy smell? question
kind (empty) question
name (empty) Is the sufficient-funds check a feature envy smell?
slug (empty) is-the-sufficient-funds-check-a-feature-envy-smell
attrs (empty) {"answer_summary" => "The conditional belongs in the handler because deciding which event to write is a messaging con...
description (empty) Audience member (citing 'tell don't ask') objects that the handler asks the account if there are sufficient funds, th...
short_description (empty) Q&A on whether handler-side querying of the entity violates 'tell don't ask'.
create What is the biggest challenge with this approach? question
kind (empty) question
name (empty) What is the biggest challenge with this approach?
slug (empty) what-is-the-biggest-challenge-with-this-approach
attrs (empty) {"answer_summary" => "Prototyping speed — event-sourced services never match Rails' sketch-velocity, by design."}
description (empty) Audience asks what Ladd's biggest current challenge is. Answer: you will never prototype as fast as with Rails. In ma...
short_description (empty) Q&A on the biggest day-to-day pain of event-sourced services.
create How is the event-write kept consistent with external operations? question
kind (empty) question
name (empty) How is the event-write kept consistent with external operations?
slug (empty) how-is-the-event-write-kept-consistent-with-external-operations
attrs (empty) {"answer_summary" => "Either the service is authoritative (no external call), or the external call happens in the han...
description (empty) Audience asks how recording 'withdrawn' stays consistent with the actual withdrawal when an external API (e.g. a wire...
short_description (empty) Q&A on transactional integrity between event writes and external side effects.
create How do you order events across distributed systems? question
kind (empty) question
name (empty) How do you order events across distributed systems?
slug (empty) how-do-you-order-events-across-distributed-systems
attrs (empty) {"answer_summary" => "Vector clocks; but teach the underlying ordering problem first."}
description (empty) Audience notes the event 'time' attribute is just metadata and doesn't imply ordering. They ask how events are ordere...
short_description (empty) Q&A on event ordering without relying on wall-clock time.
create Do Rails adopters write handlers instead of controller actions? question
kind (empty) question
name (empty) Do Rails adopters write handlers instead of controller actions?
slug (empty) do-rails-adopters-write-handlers-instead-of-controller-actions
attrs (empty) {"answer_summary" => "Have the controller write a command message to a stream rather than handle it inline; that keep...
description (empty) Audience asks whether Rails adopters end up writing command handlers instead of controller actions. Ladd: one of thei...
short_description (empty) Q&A on how Rails teams integrate Eventide into their MVC.
create How do you deal with event versioning? question
kind (empty) question
name (empty) How do you deal with event versioning?
slug (empty) how-do-you-deal-with-event-versioning
attrs (empty) {"answer_summary" => "Hard problem. In monoliths, version events and branch on read. In microservices, rebuild the se...
description (empty) Audience asks how to handle evolving event schemas. Ladd: it's a difficult situation. In a monolith, versioning is us...
short_description (empty) Q&A on changing event schemas after events have been written.
create Centralised vs per-service event store? question
kind (empty) question
name (empty) Centralised vs per-service event store?
slug (empty) centralised-vs-per-service-event-store
attrs (empty) {"answer_summary" => "A shared physical event store is fine because streams are naturally isolated; split only for op...
description (empty) Audience asks whether Eventide uses a centralised event store. Ladd: the 'one DB per service' rule comes from relatio...
short_description (empty) Q&A on whether each microservice should own a separate event store.
create Do events store current state, and how does replay perform? question
kind (empty) question
name (empty) Do events store current state, and how does replay perform?
slug (empty) do-events-store-current-state-and-how-does-replay-perform
attrs (empty) {"answer_summary" => "Events are raw occurrences; current state is folded. Performance is handled via a version-keyed...
description (empty) Audience asks whether each event stores the latest state or the change, and how performance is affected when state mu...
short_description (empty) Q&A on whether events carry latest state and on projection performance.
create How do you deal with GDPR in an immutable event store? question
kind (empty) question
name (empty) How do you deal with GDPR in an immutable event store?
slug (empty) how-do-you-deal-with-gdpr-in-an-immutable-event-store
attrs (empty) {"answer_summary" => "Model regulatory requirements in the business domain; they aren't a framework concern. Ladd has...
description (empty) Audience asks about GDPR-style data-protection requirements in immutable stores. Ladd quips that in America you can d...
short_description (empty) Q&A on handling regulatory requirements like GDPR with event sourcing.

Edges (51)

update Event Sourcing Anti Patterns and Failurespresented_atwroclove.rb 2018
context (empty) Delivered as the first event-sourcing talk of wroclove.rb 2018.
update Nathan LaddauthoredEvent Sourcing Anti Patterns and Failures
context (empty) Nathan Ladd presented the talk as a co-principal of Eventide.
create Nathan Laddattendedwroclove.rb 2018
context (empty) Attended as a speaker.
relation (empty) attended
source_node_id (empty) c2047c7c-2316-4c38-af4f-1e8a78f80206
target_node_id (empty) 9243ef2c-21bb-4f23-b450-9ecd87882dfe
update Nathan Laddworks_onEventide
attrs {"role" => "co-maintainer"} {"role" => "co-principal"}
context Garofolo names Nathan as co-maintainer of Eventide's Postgres-backed message store. Co-principal / co-founder of the Eventide project.
update Scott Bellworks_onEventide
context Garofolo names Scott Bell as co-maintainer of Eventide's Postgres-backed message store alongside Nathan Ladd. Ladd credits 'my colleague Scott' as co-builder and disabuser of his bad ideas.
create Event Sourcing Anti Patterns and FailuresaboutEvent Sourcing
context (empty) Whole talk is about event sourcing and its anti-patterns.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create Event Sourcing Anti Patterns and FailuresaboutCommand Message
context (empty) Opens by reframing web forms and controller inputs as command messages.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 02772774-712b-4af2-9ec4-e4eafa94cb07
create Event Sourcing Anti Patterns and FailuresaboutCommand Handler
context (empty) Describes MVC controllers as command handlers and argues handlers must own projection and writing.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) e72326d6-a168-47a5-a1f7-dea8b50d49e3
create Event Sourcing Anti Patterns and FailuresaboutEntity Projection
context (empty) Explains projection as folding an event stream into an entity, and warns against hiding it.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 28ae0d67-fcf9-4a6a-adb3-fb01e56cc520
create Event Sourcing Anti Patterns and FailuresaboutEntity Coupled To Messaging
context (empty) First anti-pattern covered.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 464fbf52-5421-4819-b59c-959db0f9d819
create Event Sourcing Anti Patterns and FailuresaboutView-Biased Event Schemas
context (empty) Second anti-pattern covered.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 1879d94d-1505-48d7-88f5-b6d45eca370a
create Event Sourcing Anti Patterns and FailuresaboutOpaque Dependencies
context (empty) Third anti-pattern, covering opaque projections and opaque writers.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) f7438446-2e23-45b0-a0df-81a1a77b29b8
create Event Sourcing Anti Patterns and FailuresaboutAggregate Root Anti-Pattern
context (empty) Fourth anti-pattern — the 'friendly fight' Ladd picks.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) fd357908-6682-403f-9137-5349f516c23d
create Event Sourcing Anti Patterns and FailuresaboutReservation Pattern
context (empty) Cited as a case where no entity is needed, so framework-forced entities are harmful.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) f4122a36-a471-4735-9d10-214ce1cba685
create Event Sourcing Anti Patterns and FailuresaboutExpected Version
context (empty) Used as the key example of why handlers must control their writers.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 7238ed7d-25a7-4b44-bb37-49843b6b2089
create Event Sourcing Anti Patterns and FailuresaboutContextualized Complexity
context (empty) Closing argument that added patterns are contextualized complexity, not global complexity.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) c8f5c168-c804-4d98-be23-8a5f8d51ee71
create Event Sourcing Anti Patterns and FailuresaboutAggregate Root
context (empty) Directly critiques the aggregate-root pattern and its use.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 09c37511-f144-42de-a3e8-abae18862f96
create Event Sourcing Anti Patterns and FailuresaboutEvent Store
context (empty) Discusses writing to the event store, its immutability, and centralised-vs-per-service deployment.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 41e612ae-2c1f-4a3c-8690-d47ac47e0174
create Event Sourcing Anti Patterns and FailuresaboutEntity Store
context (empty) Sketched as the Eventide library providing entity projection with cache and snapshotting.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 111a5c90-99c8-44b7-8e32-b25d2b578053
create Event Sourcing Anti Patterns and FailuresaboutActive Record
context (empty) Uses MVC+ORM as the foil against which event sourcing is contrasted.
relation (empty) about
source_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
target_node_id (empty) 633eeea8-2026-4906-b512-1e239f3db152
create Entity Storerelated_toEventide
context (empty) entity_store is one of the ~30 libraries that make up the Eventide toolkit.
relation (empty) related_to
source_node_id (empty) 111a5c90-99c8-44b7-8e32-b25d2b578053
target_node_id (empty) 702f4d95-01a7-4836-9562-8c14b01a4b73
create Immutable Database Raises Mistake Costfrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Explicit warning motivating avoidance of the anti-patterns.
relation (empty) from_talk
source_node_id (empty) 72063b7a-4126-4a2f-8f06-f06ed38f924a
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Keep Entities Free Of Messagingfrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Recommendation from the first anti-pattern.
relation (empty) from_talk
source_node_id (empty) 2feaa423-a235-428f-9c49-522c9aa8e25d
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Events Record What Occurred, Nothing Elsefrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Recommendation from the second anti-pattern.
relation (empty) from_talk
source_node_id (empty) 68b76301-2620-41f1-9986-d1a4f5ca3553
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Handlers Must Control Their Dependenciesfrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Recommendation from the third anti-pattern.
relation (empty) from_talk
source_node_id (empty) 4db2dafc-effc-4b7f-a2fe-d604256c3130
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Don't Conflate Entity, Handler and Projectionfrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Recommendation from the fourth anti-pattern.
relation (empty) from_talk
source_node_id (empty) 262ec9f9-ecce-45e4-a89e-f911cc32ef8a
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Scrutinize Community Thought Leadersfrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Closing meta-advice section of the talk.
relation (empty) from_talk
source_node_id (empty) 9422601e-5bef-4592-9d34-f0027fc72672
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create A Week Of Up-Front Design Is Not Waterfallfrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Closing 'measure twice, cut once' message.
relation (empty) from_talk
source_node_id (empty) ac2a1281-c415-4af1-b676-f479b63c6570
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Tooling Never Forced Your Monolithfrom_talkEvent Sourcing Anti Patterns and Failures
context (empty) Closing warning against blaming Rails or expecting Elixir to fix it.
relation (empty) from_talk
source_node_id (empty) c1573c68-a934-4eb9-b4ad-03a7f3f88523
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Keep Entities Free Of MessagingaboutEntity Coupled To Messaging
context (empty) Directly addresses the first anti-pattern.
relation (empty) about
source_node_id (empty) 2feaa423-a235-428f-9c49-522c9aa8e25d
target_node_id (empty) 464fbf52-5421-4819-b59c-959db0f9d819
create Events Record What Occurred, Nothing ElseaboutView-Biased Event Schemas
context (empty) Directly addresses the second anti-pattern.
relation (empty) about
source_node_id (empty) 68b76301-2620-41f1-9986-d1a4f5ca3553
target_node_id (empty) 1879d94d-1505-48d7-88f5-b6d45eca370a
create Handlers Must Control Their DependenciesaboutOpaque Dependencies
context (empty) Directly addresses the third anti-pattern.
relation (empty) about
source_node_id (empty) 4db2dafc-effc-4b7f-a2fe-d604256c3130
target_node_id (empty) f7438446-2e23-45b0-a0df-81a1a77b29b8
create Don't Conflate Entity, Handler and ProjectionaboutAggregate Root Anti-Pattern
context (empty) Directly addresses the fourth anti-pattern.
relation (empty) about
source_node_id (empty) 262ec9f9-ecce-45e4-a89e-f911cc32ef8a
target_node_id (empty) fd357908-6682-403f-9137-5349f516c23d
create What is an entity?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) ea4f4111-4363-46b5-86c5-7ca0092364b6
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Is the sufficient-funds check a feature envy smell?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 415b1eca-d359-45ca-aaed-7200ec65bceb
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create What is the biggest challenge with this approach?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 3b6e9374-558e-4321-ab14-4b575b7badf6
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create How is the event-write kept consistent with external operations?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) ec49a735-cc6b-48c8-b95c-344ec8dca4e1
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create How do you order events across distributed systems?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 5fa0d9a9-0f0f-48c1-ae7f-716ed9a83d3a
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Do Rails adopters write handlers instead of controller actions?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 775d9b1d-f988-4f02-842f-4ed0d6b58a93
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create How do you deal with event versioning?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 061e7a74-be24-4db5-a2bb-81c2adb68f7e
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Centralised vs per-service event store?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) c54ca509-5844-48b4-8d53-4652722592bc
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create Do events store current state, and how does replay perform?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 08d12182-f3bf-4a63-a0ee-29ac52b4c5b0
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create How do you deal with GDPR in an immutable event store?asked_atEvent Sourcing Anti Patterns and Failures
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) ca8e147a-3331-498f-953e-1fad3fdf9bd4
target_node_id (empty) 1a847342-76f9-432b-a5f5-82154448650d
create How do you order events across distributed systems?aboutVector Clock
context (empty) Ladd names vector clocks as the technical answer.
relation (empty) about
source_node_id (empty) 5fa0d9a9-0f0f-48c1-ae7f-716ed9a83d3a
target_node_id (empty) d2d2adf5-34ca-4adc-9c3d-a54b6cb4851d
create How do you deal with event versioning?aboutEvent Sourcing
context (empty) Versioning strategies specific to event-sourced systems.
relation (empty) about
source_node_id (empty) 061e7a74-be24-4db5-a2bb-81c2adb68f7e
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create Do events store current state, and how does replay perform?aboutEntity Caching and Snapshotting
context (empty) Answer describes version-keyed entity cache and periodic snapshots shipped by entity_store.
relation (empty) about
source_node_id (empty) 08d12182-f3bf-4a63-a0ee-29ac52b4c5b0
target_node_id (empty) 4301ef2d-36cc-4513-b1be-2eaae118ce74
create Do events store current state, and how does replay perform?aboutEntity Store
context (empty) Answer cites Eventide's entity_store library as providing the cache and snapshotting.
relation (empty) about
source_node_id (empty) 08d12182-f3bf-4a63-a0ee-29ac52b4c5b0
target_node_id (empty) 111a5c90-99c8-44b7-8e32-b25d2b578053
create Centralised vs per-service event store?aboutEvent Store
context (empty) Answer contrasts event-store isolation properties with per-service relational DBs.
relation (empty) about
source_node_id (empty) c54ca509-5844-48b4-8d53-4652722592bc
target_node_id (empty) 41e612ae-2c1f-4a3c-8690-d47ac47e0174
create Do Rails adopters write handlers instead of controller actions?aboutCommand Message
context (empty) Answer recommends having controllers write command messages to streams for portability.
relation (empty) about
source_node_id (empty) 775d9b1d-f988-4f02-842f-4ed0d6b58a93
target_node_id (empty) 02772774-712b-4af2-9ec4-e4eafa94cb07
create Is the sufficient-funds check a feature envy smell?aboutCommand Handler
context (empty) Answer argues the decision belongs in the handler, not the entity.
relation (empty) about
source_node_id (empty) 415b1eca-d359-45ca-aaed-7200ec65bceb
target_node_id (empty) e72326d6-a168-47a5-a1f7-dea8b50d49e3
create What is an entity?related_toEntity Projection
context (empty) Asked to disambiguate 'entity' as used throughout the talk.
relation (empty) related_to
source_node_id (empty) ea4f4111-4363-46b5-86c5-7ca0092364b6
target_node_id (empty) 28ae0d67-fcf9-4a6a-adb3-fb01e56cc520

Read set

97 nodes

concept Event Sourcing search_nodes takeaway Event Sourcing Mind Shift Trade-off search_nodes talk Event Sourcing and Actor model in Ruby search_nodes person Nathan Ladd search_nodes concept Event Store search_nodes takeaway Hiring For Event Sourcing Trade-off search_nodes concept Snapshotting search_nodes takeaway Event Sourcing Enables Distribution search_nodes question How to migrate legacy data into an event-sourced system? search_nodes question How to persist commands in an event-sourced system? search_nodes project Eventide search_nodes talk Event Sourcing Anti Patterns and Failures search_nodes+get_node_edges event wroclove.rb 2018 search_nodes+get_node_edges event wroclove.rb 2019 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2026 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Spice up your life with eql search_nodes talk Development with axioms search_nodes tool aggregate_root search_nodes concept Polymorphic Aggregate search_nodes concept Aggregate Root search_nodes takeaway Contribute to Arkency aggregates repository search_nodes concept Aggregator search_nodes project aggregates repository search_nodes takeaway Group models into folders by entity dependency search_nodes concept Namespace-Based Folder Hierarchy search_nodes concept Saga Pattern search_nodes concept Projector search_nodes concept CQRS search_nodes takeaway Use CQRS And Event Sourcing Independently search_nodes concept Idempotent Projectors and Reactors search_nodes question Can Trailblazer be combined with event sourcing and CQRS? search_nodes question When is a command considered processed? search_nodes concept Commands, Queries, and Events search_nodes concept Events and Commands search_nodes concept Event Handler Error Strategy search_nodes concept Message Store search_nodes concept Command Form search_nodes concept Sometimes Nothing Is Enough search_nodes person Nick Sutterer search_nodes concept Trailblazer Activity search_nodes concept Trailblazer Workflow search_nodes tool Trailblazer search_nodes tool Tyrant search_nodes concept Trailblazer Operation search_nodes tool GraphQL search_nodes tool RealtimeBoard search_nodes person Adam Okoń search_nodes takeaway Time Travel Superpower search_nodes concept Denormalizer / Read Model search_nodes concept Read-Write Split search_nodes talk MVCC for Ruby developers search_nodes concept Embrace The Evented Model search_nodes takeaway Horizontal Scale Superpower search_nodes concept Distributed Monolith search_nodes takeaway Eventual Consistency Trade-off search_nodes takeaway Replay-Based Debugging search_nodes person Scott Bell search_nodes takeaway Recommend Reading The Eventide Project search_nodes tool Faker search_nodes talk Webmock unmocked search_nodes concept Fixtures over Factories search_nodes concept Stubs over Mocks search_nodes tool Cells search_nodes talk Orchestrating video transcoding in ruby search_nodes tool power_assert search_nodes takeaway Prefer fixtures and stubs over factories and mocks search_nodes concept Service Autonomy search_nodes talk Building uls for microservices search_nodes takeaway Bounded Contexts Are Natural Microservice Seams search_nodes takeaway Bounded Contexts Are Not Microservices search_nodes concept Partitioning search_nodes takeaway Don't Bring MVC-CRUD Thinking To Services search_nodes takeaway Break Code Into Small Units Orchestrated By A Process Engine search_nodes takeaway Silver Bullet Anti-Pattern search_nodes takeaway Design Must Be Described Precisely Before It Can Be Improved search_nodes takeaway Avoid complexity before fighting it search_nodes question Does experienced architect's intuition override precise design vocabulary? search_nodes takeaway Design UX Before Technology search_nodes concept Stalling For Time search_nodes concept Architecture Drivers search_nodes takeaway A Week Or Two Of Up-front Analysis Is Still Agile search_nodes takeaway Prefer conventions over custom code search_nodes concept Page Load Time Budget search_nodes question How to do DDD remotely? search_nodes concept Active Record search_nodes concept Domain Model (vs Active Record Model) search_nodes takeaway Split Active Record into write and read objects search_nodes tool acts_as_api search_nodes tool Sequel search_nodes tool Active Storage search_nodes tool Paperclip search_nodes tool Rails 5.2 search_nodes

36 edges