← Extractions

Applying CQRS & Event Sourcing on Rails applications — Andrzej Śliwa at wroclove.rb 2018

Andrzej Śliwa walks through a Rails + rails_event_store implementation of CQRS and event sourcing, covering EventStorming with business experts, bounded contexts, dry-struct command forms, aggregates, sagas, event versioning/upcasting, denormalizers/read models, error-handling strategies, and learning via mind maps. Q&A covers infrastructure maintenance cost, boilerplate/generators, and convincing product managers via EventStorming.

Model
claude-opus-4-7
Ingestion
d7b5c497
Input tokens
104,417
fresh
45,017
cached
59,400
Output tokens
6,171
Duration
83.0s
Roundtrips
4
Tool calls
11
Cost
$0.00
Nodes/edges extracted
44 / 62
Read set (nodes/edges)
69 / 32

Nodes (44)

update Andrzej Śliwa person
description Berlin-based Ruby developer working at a fintech startup and departing to Zencargo. Interested in domain-driven desig... → Berlin-based Ruby developer who was working at a fintech startup (securitization of loans) and departing to Zencargo ...
update Applying CQRS & Event Sourcing on Rails applications talk
description Talk at wroclove.rb 2018. → Andrzej Śliwa's wroclove.rb 2018 talk presenting a round-trip tour of applying CQRS and event sourcing on Rails. Cove...
short_description Talk at wroclove.rb 2018. → Talk at wroclove.rb 2018 on building event-sourced Rails apps with rails_event_store.
update wroclove.rb 2018 event
description Single-track, non-profit Ruby conference. → Single-track, non-profit Ruby conference held 2018-03-16 in Wrocław, Poland.
create Zencargo company
kind (empty) → company
name (empty) → Zencargo
slug (empty) → zencargo
attrs (empty) → {"industry" => "logistics"}
description (empty) → Company that Andrzej Śliwa mentioned joining after his Berlin fintech role.
short_description (empty) → Logistics/digital freight forwarding company.
create Arkency company
kind (empty) → company
name (empty) → Arkency
slug (empty) → arkency
attrs (empty) → {"industry" => "software consultancy"}
description (empty) → Ruby consultancy that maintains rails_event_store and related gems. Granted the speaker direct slack access and commi...
short_description (empty) → Ruby consultancy, maintainers of rails_event_store.
create rails_event_store tool
kind (empty) → tool
name (empty) → rails_event_store
slug (empty) → rails_event_store
attrs (empty) → {"category" => "library"}
description (empty) → Open-source Rails event store maintained by Arkency. Used by the speaker as the platform for event sourcing: good doc...
short_description (empty) → Ruby gem providing an event store and event-driven infrastructure for Rails.
create dry-types tool
kind (empty) → tool
name (empty) → dry-types
slug (empty) → dry-types
attrs (empty) → {"category" => "library"}
description (empty) → Library from the dry-rb family used to describe domain types, value objects, union types and custom constructors (e.g...
short_description (empty) → Ruby library for static-like type definitions and constraints.
create dry-struct tool
kind (empty) → tool
name (empty) → dry-struct
slug (empty) → dry-struct
attrs (empty) → {"category" => "library"}
description (empty) → Used to represent commands and events with strict schemas. Events are strict (all fields required) so missing informa...
short_description (empty) → Ruby library for typed struct definitions built on dry-types.
create dry-validation tool
kind (empty) → tool
name (empty) → dry-validation
slug (empty) → dry-validation
attrs (empty) → {"category" => "library"}
description (empty) → Previously used for validations on commands. The team is slowly moving away from it because it is strongly opinionate...
short_description (empty) → Ruby validation library from the dry-rb family.
create ruby-contracts tool
kind (empty) → tool
name (empty) → ruby-contracts
slug (empty) → ruby-contracts
attrs (empty) → {"category" => "library"}
description (empty) → Used to verify infrastructure code contracts and to implement simple pattern matching (e.g. an event 'new' method sup...
short_description (empty) → Ruby contracts library with runtime type checks and pattern matching.
create RealtimeBoard tool
kind (empty) → tool
name (empty) → RealtimeBoard
slug (empty) → realtimeboard
attrs (empty) → {"category" => "service"}
description (empty) → Online whiteboard (later known as Miro) the team uses for EventStorming sessions, allowing multiple participants to w...
short_description (empty) → Collaborative online whiteboard used for remote EventStorming.
create Ruby on Rails tool
kind (empty) → tool
name (empty) → Ruby on Rails
slug (empty) → ruby-on-rails
attrs (empty) → {"category" => "framework"}
description (empty) → The framework on top of which the event-sourced architecture described in the talk is built.
short_description (empty) → Server-side web application framework written in Ruby.
create PostgreSQL tool
kind (empty) → tool
name (empty) → PostgreSQL
slug (empty) → postgresql
attrs (empty) → {"category" => "service"}
description (empty) → Mentioned as a possible read-model store alongside alternatives like Elasticsearch or Cassandra.
short_description (empty) → Open-source relational database.
create Elasticsearch tool
kind (empty) → tool
name (empty) → Elasticsearch
slug (empty) → elasticsearch
attrs (empty) → {"category" => "service"}
description (empty) → Mentioned as a read-store optimized for search use cases when building denormalized view models.
short_description (empty) → Distributed search and analytics engine.
create Cassandra tool
kind (empty) → tool
name (empty) → Cassandra
slug (empty) → cassandra
attrs (empty) → {"category" => "service"}
description (empty) → Mentioned as an alternative read-store for specific query needs in a CQRS architecture.
short_description (empty) → Distributed wide-column NoSQL database.
create RSpec tool
kind (empty) → tool
name (empty) → RSpec
slug (empty) → rspec
attrs (empty) → {"category" => "library"}
description (empty) → Used by the speaker to describe use cases and verify assumptions while implementing the command form and other infras...
short_description (empty) → Ruby behavior-driven testing framework.
create EventStorming concept
description Workshop format invented by Alberto Brandolini in which business experts and developers place colored sticky notes on... → Workshop format invented by Alberto Brandolini in which business experts and developers place colored sticky notes on...
create Domain-Driven Design concept
kind (empty) → concept
name (empty) → Domain-Driven Design
slug (empty) → domain-driven-design
attrs (empty) → {"category" => "methodology"}
description (empty) → Approach originating in Eric Evans' work, further elaborated by multiple books. The speaker emphasizes DDD requires c...
short_description (empty) → Approach to modeling software around the business domain using a ubiquitous language.
create Event Sourcing concept
kind (empty) → concept
name (empty) → Event Sourcing
slug (empty) → event-sourcing
attrs (empty) → {"category" => "pattern"}
description (empty) → Persistence approach where aggregate state is reconstructed by replaying past events from an event store. Enables dec...
short_description (empty) → Pattern of persisting state as a sequence of domain events.
create CQRS concept
kind (empty) → concept
name (empty) → CQRS
slug (empty) → cqrs
attrs (empty) → {"category" => "architecture"}
description (empty) → Architectural pattern separating commands (writes) from queries (reads). In this talk, commands are dispatched throug...
short_description (empty) → Command Query Responsibility Segregation: separating write and read models.
create Bounded Context concept
kind (empty) → concept
name (empty) → Bounded Context
slug (empty) → bounded-context
attrs (empty) → {"category" => "pattern"}
description (empty) → Encapsulation boundary around domain logic ensuring each concept has a unique meaning inside it. E.g., B2B and B2C cu...
short_description (empty) → DDD boundary within which a model has a single, unambiguous meaning.
create Aggregate Root concept
kind (empty) → concept
name (empty) → Aggregate Root
slug (empty) → aggregate-root
attrs (empty) → {"category" => "pattern"}
description (empty) → Main object defining transaction/consistency boundaries and the public contract for a tree of related objects. In eve...
short_description (empty) → DDD object serving as the consistency and public-contract entry point of an object tree.
create Saga / Process Manager concept
kind (empty) → concept
name (empty) → Saga / Process Manager
slug (empty) → saga-process-manager
attrs (empty) → {"category" => "pattern"}
description (empty) → Pattern for coordinating work across aggregates. Sagas model long-running processes (e.g., purchase verification); pr...
short_description (empty) → Long-running coordinator of multiple aggregates to achieve a business goal.
create Command Form concept
description Pattern developed on top of rails_event_store: a form object behaving like an ActiveModel form that wraps nested dry-... → Pattern developed on top of rails_event_store: a form object behaving like an ActiveModel form that wraps nested dry-...
create Denormalizer / Read Model concept
kind (empty) → concept
name (empty) → Denormalizer / Read Model
slug (empty) → denormalizer-read-model
attrs (empty) → {"category" => "pattern"}
description (empty) → Event handlers that subscribe to published events and project them into read-optimized storage (ActiveRecord, Elastic...
short_description (empty) → Event subscriber that builds query-optimized views from domain events.
create Event Versioning / Upcasting concept
kind (empty) → concept
name (empty) → Event Versioning / Upcasting
slug (empty) → event-versioning-upcasting
attrs (empty) → {"category" => "pattern"}
description (empty) → Technique to evolve event schemas over time: events carry a version number and callbacks that upcast older versions. ...
short_description (empty) → Evolving persisted events by migrating to newer versions on read.
create Nested Aggregates concept
kind (empty) → concept
name (empty) → Nested Aggregates
slug (empty) → nested-aggregates
attrs (empty) → {"category" => "pattern"}
description (empty) → An experimental approach to splitting growing aggregates by nesting aggregate roots. The speaker is not satisfied wit...
short_description (empty) → Aggregate root containing other aggregates to manage complexity.
create Policies and Strategies concept
kind (empty) → concept
name (empty) → Policies and Strategies
slug (empty) → policies-and-strategies
attrs (empty) → {"category" => "pattern"}
description (empty) → Pattern for moving business constraints out of aggregates into standalone objects (policies/strategies) that can be u...
short_description (empty) → Extracted business rules testable without the aggregate.
create Interface Wrapper for Ruby concept
kind (empty) → concept
name (empty) → Interface Wrapper for Ruby
slug (empty) → interface-wrapper-for-ruby
attrs (empty) → {"category" => "pattern"}
description (empty) → Custom helper the speaker built to simulate interfaces in Ruby: define a module listing methods, mark objects as impl...
short_description (empty) → Module-based wrapper exposing only specified methods as a Ruby 'interface'.
create Mind Map Knowledge Base for Event Sourcing concept
kind (empty) → concept
name (empty) → Mind Map Knowledge Base for Event Sourcing
slug (empty) → mind-map-knowledge-base-for-event-sourcing
attrs (empty) → {"category" => "practice"}
description (empty) → The speaker's approach to learning event sourcing: maintain a mind map linking use cases, patterns, blog posts, books...
short_description (empty) → Personal mind map aggregating event-sourcing patterns, use cases, and sources.
create Introducing EventStorming resource
kind (empty) → resource
name (empty) → Introducing EventStorming
slug (empty) → introducing-eventstorming
attrs (empty) → {"type" => "book", "author" => "Alberto Brandolini"}
description (empty) → Book recommended by the speaker as the primary reference for learning EventStorming, alongside Brandolini's talks on ...
short_description (empty) → Book by Alberto Brandolini on the EventStorming workshop technique.
create Domain-Driven Rails resource
kind (empty) → resource
name (empty) → Domain-Driven Rails
slug (empty) → domain-driven-rails
attrs (empty) → {"type" => "book"}
description (empty) → Book mentioned as a DDD reference that was 'forgotten yesterday'; recommended alongside the canonical DDD literature.
short_description (empty) → Arkency book on applying DDD in Rails applications.
create Alberto Brandolini person
kind (empty) → person
name (empty) → Alberto Brandolini
slug (empty) → alberto-brandolini
description (empty) → Author of Introducing EventStorming and creator of the EventStorming workshop technique. The speaker recommends watch...
short_description (empty) → Creator of EventStorming; DDD practitioner and author.
create Invite business experts into EventStorming sessions takeaway
kind (empty) → takeaway
name (empty) → Invite business experts into EventStorming sessions
slug (empty) → invite-business-experts-into-eventstorming-sessions
attrs (empty) → {"type" => "recommendation"}
description (empty) → You cannot do DDD without real cooperation from the business side. Use simple tools (sticky notes, colored pens, big ...
short_description (empty) → DDD only works when business collaborates directly via simple tools like sticky notes.
create Prefer policies/strategies over nested aggregates takeaway
kind (empty) → takeaway
name (empty) → Prefer policies/strategies over nested aggregates
slug (empty) → prefer-policies-strategies-over-nested-aggregates
attrs (empty) → {"type" => "recommendation"}
description (empty) → When aggregates grow too big, extracting business constraints into policy/strategy objects that can be tested without...
short_description (empty) → Extract growing aggregate logic into testable policies instead of nesting aggregates.
create Put data-input validations on the command form, not the command takeaway
kind (empty) → takeaway
name (empty) → Put data-input validations on the command form, not the command
slug (empty) → put-data-input-validations-on-the-command-form-not-the-command
attrs (empty) → {"type" => "recommendation"}
description (empty) → Command-form validations are data-input validations tied to the view; they should not be conflated with business-logi...
short_description (empty) → Input validations belong to the view layer, not domain commands.
create Avoid fetching external/view state inside event upcasters takeaway
kind (empty) → takeaway
name (empty) → Avoid fetching external/view state inside event upcasters
slug (empty) → avoid-fetching-external-view-state-inside-event-upcasters
attrs (empty) → {"type" => "warning"}
description (empty) → Upcasters that rely on view models break when those views are refreshed or rebuilt; keep upcasting logic pure with re...
short_description (empty) → Event upcasting must not depend on view models that can be rebuilt.
create Standardized building blocks onboard new developers faster takeaway
kind (empty) → takeaway
name (empty) → Standardized building blocks onboard new developers faster
slug (empty) → standardized-building-blocks-onboard-new-developers-faster
attrs (empty) → {"type" => "insight"}
description (empty) → Having a consistent architecture of commands, command handlers, events, event handlers, and denormalizers let a newly...
short_description (empty) → Well-defined command/handler/event patterns simplify onboarding despite boilerplate.
create Use EventStorming to align co-founders and onboard stakeholders takeaway
kind (empty) → takeaway
name (empty) → Use EventStorming to align co-founders and onboard stakeholders
slug (empty) → use-eventstorming-to-align-co-founders-and-onboard-stakeholders
attrs (empty) → {"type" => "lesson-learned"}
description (empty) → At the speaker's fintech startup, EventStorming revealed that two co-founders had different visions of the business, ...
short_description (empty) → EventStorming surfaces disagreements and becomes a living onboarding artifact.
create How much time does maintaining the event-sourcing infrastructure take? question
kind (empty) → question
name (empty) → How much time does maintaining the event-sourcing infrastructure take?
slug (empty) → how-much-time-does-maintaining-the-event-sourcing-infrastructure-take
attrs (empty) → {"answer_summary" => "Built incrementally as needed; pair programming plus RSpec-driven use cases kept it tractable (...
description (empty) → Audience member asks what percentage of time is spent maintaining the custom infrastructure code and whether it is 'd...
short_description (empty) → Audience question about time invested in custom event-sourcing plumbing.
create How do you handle boilerplate of commands/handlers/events — scaffolding generators? question
kind (empty) → question
name (empty) → How do you handle boilerplate of commands/handlers/events — scaffolding generators?
slug (empty) → how-do-you-handle-boilerplate-of-commands-handlers-events-scaffolding-generators
attrs (empty) → {"answer_summary" => "No generators; standardization of building blocks keeps code simple and makes onboarding new de...
description (empty) → Audience member asks whether the speaker uses Rails-style generators/scaffolding to reduce boilerplate from adding co...
short_description (empty) → Audience question about boilerplate growth and code generation.
create How to convince a product manager at a medium-sized startup to invest in event sourcing? question
kind (empty) → question
name (empty) → How to convince a product manager at a medium-sized startup to invest in event sourcing?
slug (empty) → how-to-convince-a-product-manager-at-a-medium-sized-startup-to-invest-in-event-sourcing
attrs (empty) → {"answer_summary" => "Show business value through EventStorming: reveals disagreements, aligns stakeholders, doubles ...
description (empty) → Audience member asks how to convince product management in a medium-sized startup to allocate resources to event sour...
short_description (empty) → Audience question about getting buy-in for event sourcing.
create Event Handler Error Strategy concept
description Configurable strategy layered on rails_event_store so that an error in one denormalizer/handler doesn't stop other su... → Configurable strategy layered on rails_event_store so that an error in one denormalizer/handler doesn't stop other su...
create Rails Reload-Safe ES Configuration concept
kind (empty) → concept
name (empty) → Rails Reload-Safe ES Configuration
slug (empty) → rails-reload-safe-es-configuration
attrs (empty) → {"category" => "practice"}
description (empty) → When using rails_event_store in a Rails app, reload! will re-register event and command handlers, causing multiple su...
short_description (empty) → Configuration pattern preventing duplicate event subscriptions across Rails reloads.

Edges (62)

update Andrzej Śliwa → authored → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Speaker and author of the talk.
update Applying CQRS & Event Sourcing on Rails applications → presented_at → wroclove.rb 2018
context (empty) → Talk delivered at wroclove.rb 2018.
create Andrzej Śliwa → works_at → Zencargo
attrs {"role" => "joining"} → {"role" => "developer"}
context Speaker mentions being on departure to Zencargo. → Mentioned he was departing to Zencargo at the time of the talk.
create Andrzej Śliwa → has_skill → CQRS
attrs (empty) → {"level" => "expert"}
context (empty) → Talk subject; speaker architected a CQRS system.
relation (empty) → has_skill
source_node_id (empty) → 85da3fcc-bd29-47c7-a138-fa1708770fc9
target_node_id (empty) → 8918002a-9def-4449-a187-e3052bf175b5
create Andrzej Śliwa → uses → rails_event_store
context (empty) → Builds the fintech product on rails_event_store and contributes to it.
relation (empty) → uses
source_node_id (empty) → 85da3fcc-bd29-47c7-a138-fa1708770fc9
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Andrzej Śliwa → recommends → Domain-Driven Rails
context (empty) → Points to this book as a DDD reference that was overlooked the prior day.
relation (empty) → recommends
source_node_id (empty) → 85da3fcc-bd29-47c7-a138-fa1708770fc9
target_node_id (empty) → bea568ed-0956-4dbb-b35c-a84a960a2ee1
create Applying CQRS & Event Sourcing on Rails applications → about → Event Sourcing
context (empty) → Core subject of the talk.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Applying CQRS & Event Sourcing on Rails applications → about → CQRS
context (empty) → Core subject of the talk.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → 8918002a-9def-4449-a187-e3052bf175b5
create Applying CQRS & Event Sourcing on Rails applications → about → Domain-Driven Design
context Discusses DDD context alongside event sourcing. → Positions CQRS/ES work within DDD.
create Applying CQRS & Event Sourcing on Rails applications → about → EventStorming
context (empty) → Opens with EventStorming as the cornerstone of collaborative DDD.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → f531d860-d7e6-449c-8289-ffa29995f7d1
create Applying CQRS & Event Sourcing on Rails applications → about → Bounded Context
context Explains bounded context as the border for unique meaning. → Defines bounded context as the border for unique meaning (e.g., B2B vs B2C customers).
create Applying CQRS & Event Sourcing on Rails applications → about → Aggregate Root
context Large portion discusses aggregate roots in event sourcing. → Large portion discusses aggregate roots in event sourcing including command vs event-callback methods.
create Applying CQRS & Event Sourcing on Rails applications → about → Saga / Process Manager
context Describes implementing sagas as aggregate-root-like objects. → Implements sagas as aggregate-root-like objects with their own events.
create Applying CQRS & Event Sourcing on Rails applications → about → Command Form
context (empty) → Details the command form pattern built on dry-struct.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → bf5ae0e9-371d-4f77-962d-142ef2b676aa
create Applying CQRS & Event Sourcing on Rails applications → about → Event Versioning / Upcasting
context Explains versioning events and event class mapping. → Explains versioning events, upcasting callbacks, and event-class name mapping.
create Applying CQRS & Event Sourcing on Rails applications → about → Nested Aggregates
context Discusses and critiques nested aggregate roots. → Discusses experimental nested aggregates and why the speaker is dissatisfied.
create Applying CQRS & Event Sourcing on Rails applications → about → Policies and Strategies
context Recommends extracting logic to policies/strategies. → Recommends extracting logic into policies/strategies over nesting aggregates.
create Applying CQRS & Event Sourcing on Rails applications → about → Interface Wrapper for Ruby
context Presents a custom interface wrapper for Ruby objects. → Presents a module-based interface wrapper to scope aggregate public contracts.
create Applying CQRS & Event Sourcing on Rails applications → about → Event Handler Error Strategy
context Describes configurable error-handling strategy for event subscribers. → Describes configurable error handling for event subscribers.
create Applying CQRS & Event Sourcing on Rails applications → about → Mind Map Knowledge Base for Event Sourcing
context (empty) → Shares the personal mind map used to learn event sourcing.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → f22ed976-2500-4a42-b442-cd1b7f9c7b95
create Applying CQRS & Event Sourcing on Rails applications → about → rails_event_store
context (empty) → Entire architecture is built on top of rails_event_store.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Applying CQRS & Event Sourcing on Rails applications → about → dry-types
context (empty) → Used to define domain types and value objects.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → 6669b526-7545-407c-993f-4580e69ae743
create Applying CQRS & Event Sourcing on Rails applications → about → dry-struct
context (empty) → Used for commands and events with schema/strict modes.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → 8afe9d20-c096-418e-80db-a3002004df0f
create Applying CQRS & Event Sourcing on Rails applications → about → dry-validation
context (empty) → Previously used for validations; team is moving away from it.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → d0742e31-8ece-450c-8f38-801e65d09036
create Applying CQRS & Event Sourcing on Rails applications → about → ruby-contracts
context (empty) → Used for contracts and pattern matching in infrastructure code.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → d0d491a7-6128-459a-936d-2c2cb60c7915
create rails_event_store → related_to → Arkency
context (empty) → rails_event_store is maintained by Arkency and other contributors.
relation (empty) → related_to
source_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
target_node_id (empty) → f8b4b616-ffd6-4eaa-a7b9-fdc07bb2cb27
create rails_event_store → related_to → Ruby on Rails
context (empty) → rails_event_store targets Ruby on Rails applications.
relation (empty) → related_to
source_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
target_node_id (empty) → 7aac705a-0987-49f2-b665-9d4e08a6acee
create dry-struct → related_to → dry-types
context (empty) → dry-struct is built on dry-types.
relation (empty) → related_to
source_node_id (empty) → 8afe9d20-c096-418e-80db-a3002004df0f
target_node_id (empty) → 6669b526-7545-407c-993f-4580e69ae743
create Alberto Brandolini → authored → Introducing EventStorming
context Brandolini wrote the EventStorming book. → Author of the book.
create Alberto Brandolini → related_to → EventStorming
context (empty) → Creator of the EventStorming technique.
relation (empty) → related_to
source_node_id (empty) → bdbfabf7-feeb-4cfe-a40d-191dca70e0ec
target_node_id (empty) → f531d860-d7e6-449c-8289-ffa29995f7d1
create Invite business experts into EventStorming sessions → from_talk → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Takeaway drawn from the talk's opening section on EventStorming.
relation (empty) → from_talk
source_node_id (empty) → 33e6b8ba-faba-4fbb-b897-5ece5bcc792c
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create Invite business experts into EventStorming sessions → about → EventStorming
context (empty) → Advice is about running EventStorming effectively.
relation (empty) → about
source_node_id (empty) → 33e6b8ba-faba-4fbb-b897-5ece5bcc792c
target_node_id (empty) → f531d860-d7e6-449c-8289-ffa29995f7d1
create Applying CQRS & Event Sourcing on Rails applications → about → Denormalizer / Read Model
context Covers event handlers and read models for CQRS. → Covers event handlers/denormalizers projecting into read models and queries.
create Prefer policies/strategies over nested aggregates → from_talk → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Speaker recommends this after discussing nested aggregates.
relation (empty) → from_talk
source_node_id (empty) → 1354bfc2-5bb9-4d16-90fb-3dd5b855828d
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create Prefer policies/strategies over nested aggregates → about → Policies and Strategies
context (empty) → Concerns extraction of logic into policies and strategies.
relation (empty) → about
source_node_id (empty) → 1354bfc2-5bb9-4d16-90fb-3dd5b855828d
target_node_id (empty) → 17f0be90-7a48-43ea-a440-1ca29502c36e
create Prefer policies/strategies over nested aggregates → about → Nested Aggregates
context (empty) → Advises against using nested aggregates as the primary solution.
relation (empty) → about
source_node_id (empty) → 1354bfc2-5bb9-4d16-90fb-3dd5b855828d
target_node_id (empty) → 5840ddf2-8562-442e-8976-92f4cafec762
create Put data-input validations on the command form, not the command → from_talk → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Design decision shared during the command-form section.
relation (empty) → from_talk
source_node_id (empty) → f3675817-720c-4a63-842b-38543d656516
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create Put data-input validations on the command form, not the command → about → Command Form
context (empty) → Clarifies where validation logic belongs in the command-form pattern.
relation (empty) → about
source_node_id (empty) → f3675817-720c-4a63-842b-38543d656516
target_node_id (empty) → bf5ae0e9-371d-4f77-962d-142ef2b676aa
create Avoid fetching external/view state inside event upcasters → from_talk → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Warning raised in the event versioning section.
relation (empty) → from_talk
source_node_id (empty) → 13e0500a-6e3c-479f-9f03-05e9bcb78020
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create Avoid fetching external/view state inside event upcasters → about → Event Versioning / Upcasting
context (empty) → Rule about implementing event upcasters safely.
relation (empty) → about
source_node_id (empty) → 13e0500a-6e3c-479f-9f03-05e9bcb78020
target_node_id (empty) → 3f7e2d06-2544-46d2-878e-dcfb69b15f41
create Standardized building blocks onboard new developers faster → from_talk → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Drawn from Q&A about boilerplate and onboarding.
relation (empty) → from_talk
source_node_id (empty) → efd6e617-834c-4a1e-817e-462895bf0918
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create Use EventStorming to align co-founders and onboard stakeholders → from_talk → Applying CQRS & Event Sourcing on Rails applications
context (empty) → From Q&A answer about convincing product managers.
relation (empty) → from_talk
source_node_id (empty) → 537693cc-78cc-4053-a5aa-61b116ce5d13
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create Use EventStorming to align co-founders and onboard stakeholders → about → EventStorming
context (empty) → Story illustrates benefits of EventStorming with stakeholders.
relation (empty) → about
source_node_id (empty) → 537693cc-78cc-4053-a5aa-61b116ce5d13
target_node_id (empty) → f531d860-d7e6-449c-8289-ffa29995f7d1
create How much time does maintaining the event-sourcing infrastructure take? → asked_at → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Asked during Q&A of this talk.
relation (empty) → asked_at
source_node_id (empty) → 5dd088ff-61cd-4da2-8858-dfff940cd201
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create How much time does maintaining the event-sourcing infrastructure take? → about → rails_event_store
context (empty) → Concerns maintenance of the custom plumbing around rails_event_store.
relation (empty) → about
source_node_id (empty) → 5dd088ff-61cd-4da2-8858-dfff940cd201
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create How do you handle boilerplate of commands/handlers/events — scaffolding generators? → asked_at → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Asked during Q&A of this talk.
relation (empty) → asked_at
source_node_id (empty) → 7da30487-4b1f-4480-ac62-3f36f568190f
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create How do you handle boilerplate of commands/handlers/events — scaffolding generators? → about → CQRS
context (empty) → Question concerns boilerplate in a CQRS architecture.
relation (empty) → about
source_node_id (empty) → 7da30487-4b1f-4480-ac62-3f36f568190f
target_node_id (empty) → 8918002a-9def-4449-a187-e3052bf175b5
create How to convince a product manager at a medium-sized startup to invest in event sourcing? → asked_at → Applying CQRS & Event Sourcing on Rails applications
context (empty) → Asked during Q&A of this talk.
relation (empty) → asked_at
source_node_id (empty) → a711f6bf-6948-40c3-90f8-bf73fdd986e1
target_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
create How to convince a product manager at a medium-sized startup to invest in event sourcing? → about → Event Sourcing
context (empty) → Concerns organizational adoption of event sourcing.
relation (empty) → about
source_node_id (empty) → a711f6bf-6948-40c3-90f8-bf73fdd986e1
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Applying CQRS & Event Sourcing on Rails applications → about → Rails Reload-Safe ES Configuration
context (empty) → Covers configuration needed so Rails reload! doesn't duplicate subscriptions.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → b88373ed-d321-49d7-8e3c-e86382e4704b
create Applying CQRS & Event Sourcing on Rails applications → about → RealtimeBoard
context Mentioned as the tool used for remote EventStorming sessions. → Mentioned as the whiteboard used for remote EventStorming.
create Applying CQRS & Event Sourcing on Rails applications → about → Introducing EventStorming
context (empty) → Recommends Brandolini's book for learning EventStorming.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → 3eba1d1d-8917-4a38-91c1-77dad0f41209
create Applying CQRS & Event Sourcing on Rails applications → about → Domain-Driven Rails
context (empty) → Mentioned as a DDD reference book to read.
relation (empty) → about
source_node_id (empty) → 333f91ee-229a-4c05-b476-01c7488e8d80
target_node_id (empty) → bea568ed-0956-4dbb-b35c-a84a960a2ee1
create Andrzej Śliwa → works_on → rails_event_store
context Contributes pull requests to the gem with direct commit access from Arkency. → Contributing to rails_event_store via Arkency; some of the team's patterns merged upstream.
create Andrzej Śliwa → related_to → Arkency
context (empty) → Granted slack access and commit rights as a rails_event_store contributor.
relation (empty) → related_to
source_node_id (empty) → 85da3fcc-bd29-47c7-a138-fa1708770fc9
target_node_id (empty) → f8b4b616-ffd6-4eaa-a7b9-fdc07bb2cb27
create Andrzej Śliwa → has_skill → Event Sourcing
context Speaker has been practicing and teaching event sourcing. → Speaker demonstrates production experience applying event sourcing in Rails.
create Andrzej Śliwa → has_skill → Domain-Driven Design
context Speaker states interest and experience in DDD over many years. → Speaker applies DDD with business stakeholders at his fintech.
create Andrzej Śliwa → recommends → Introducing EventStorming
context Recommends Brandolini's book for learning EventStorming. → Tells audience to read Brandolini's book for EventStorming.
create Andrzej Śliwa → recommends → EventStorming
context Calls EventStorming the most important part of doing DDD in a company. → Promotes EventStorming as the most important part of doing DDD.
create Andrzej Śliwa → recommends → rails_event_store
context (empty) → Explains choice of platform: good docs, active maintenance, welcoming contributor process.
relation (empty) → recommends
source_node_id (empty) → 85da3fcc-bd29-47c7-a138-fa1708770fc9
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Andrzej Śliwa → uses → RealtimeBoard
context (empty) → Team uses RealtimeBoard for remote EventStorming sessions.
relation (empty) → uses
source_node_id (empty) → 85da3fcc-bd29-47c7-a138-fa1708770fc9
target_node_id (empty) → 7f1b2c99-31ff-4bbd-ae18-b1b682f173ce
create Alberto Brandolini → works_on → EventStorming
attrs (empty) → {"role" => "creator"}
context (empty) → Creator of the EventStorming technique.
relation (empty) → works_on
source_node_id (empty) → bdbfabf7-feeb-4cfe-a40d-191dca70e0ec
target_node_id (empty) → f531d860-d7e6-449c-8289-ffa29995f7d1

Read set

69 nodes

talk Applying CQRS & Event Sourcing on Rails applications search_nodes+get_node_edges talk Event Sourcing and Actor model in Ruby search_nodes talk Event Sourcing Anti Patterns and Failures search_nodes talk Introduction To Event Sourcing How To Use It With Ruby search_nodes talk Working with RailsEventStore in Cashflow Management System search_nodes talk MVCC for Ruby developers search_nodes person Ismael Celis search_nodes talk Business logic in Ruby search_nodes talk Typical DDDomains In Rails Apps search_nodes talk The good, the bad and the remote — collaborative domain modeling with EventStorming search_nodes talk UringMachine — High Performance Concurrency for Ruby Using io_uring search_nodes talk Orchestrating video transcoding in ruby search_nodes talk Events events events search_nodes talk The pillars of Domain Driven Design search_nodes talk Might & Magic of Domain-Driven Design search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes talk Introducing Sorbet into your Ruby codebase search_nodes talk Building on Bluesky's AT Protocol with Ruby search_nodes talk Building LLM powered applications in Ruby search_nodes person Adam Okoń search_nodes talk An Introduction to Test Bench search_nodes talk Multi-region data governance in Rails application search_nodes event wroclove.rb 2018 search_nodes 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 2026 search_nodes event wroclove.rb 2025 search_nodes talk Counterintuitive Rails pt. 2 search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk Adventures in durable execution search_nodes talk Building uls for microservices search_nodes person Julik Tarkhanov search_nodes person Emiliano Della Casa search_nodes talk Nightmare neighbours caveats of Rails based mutlitenancy search_nodes person Andrzej Śliwa search_nodes talk Ruby Rendezvous Method Call, Proc, and Beyond search_nodes talk Grokking FP For The Practicing Rubyist search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web search_nodes talk From PostgreSQL to SQLite in Rails search_nodes talk Securing Rails applications search_nodes talk Fantastic Databases and Where to Find Them search_nodes tool rails_event_store search_nodes concept Event Sourcing search_nodes concept Mind Map Knowledge Base for Event Sourcing search_nodes company Arkency search_nodes concept Domain-Driven Design search_nodes concept EventStorming search_nodes resource Domain-Driven Rails search_nodes concept CQRS search_nodes person Łukasz Szydło search_nodes person Adam Piotrowski search_nodes person Mariusz Gil search_nodes talk No 'Pundit' Intended search_nodes person Agnieszka Małaszkiewicz search_nodes person Mateusz Nowak search_nodes person Andrzej Krzywda search_nodes talk One machine please, make it Turing search_nodes tool dry-struct search_nodes tool dry-types search_nodes tool dry-validation search_nodes tool ruby-contracts search_nodes person Alberto Brandolini search_nodes tool RealtimeBoard search_nodes company Zencargo search_nodes resource Introducing EventStorming search_nodes

32 edges