← Extractions

Working with RailsEventStore in a Cashflow Management System

Łukasz Reszke's wroclove.rb 2023 talk sharing six real-world stories from applying rails_event_store, event-driven architecture and tactical DDD gradually to Trezy, a cash-flow management app. Key lessons: persist webhooks as technical events, use aggregates as the source of truth, encapsulate business rules, and adopt event sourcing step by step without needing greenfield or micro-services.

Model
claude-opus-4-7
Ingestion
45a13664
Input tokens
642,636
fresh
457,896
cached
173,434
cache write
11,306
Output tokens
14,288
Duration
230.6s
Roundtrips
12
Tool calls
30
Cost
$0.00
Nodes/edges extracted
15 / 49
Read set (nodes/edges)
196 / 2

Nodes (15)

create Ordering Events Blog Post by Rafał resource
kind (empty) → resource
name (empty) → Ordering Events Blog Post by Rafał
slug (empty) → ordering-events-blog-post-by-rafal
attrs (empty) → {"type" => "blog-post"}
description (empty) → Blog post by 'Rapha' (likely Rafał Łasocha of Arkency) recommended by the speaker as the go-to reference when running...
short_description (empty) → Arkency blog post by Rafał on handling no-order-guarantee in event-driven systems.
update Łukasz Reszke person
attrs (empty) → {"employer" => "Arkency", "former_stack" => ".NET", "current_stack" => "Ruby / Rails"}
description Conference speaker. → Ruby developer at Arkency who spoke at wroclove.rb 2023 about applying rails_event_store, event sourcing and event-dr...
short_description Conference speaker. → Arkency Ruby developer; speaker on rails_event_store in production.
update Working with RailsEventStore in Cashflow Management System talk
description Talk at wroclove.rb 2023. → Łukasz Reszke's wroclove.rb 2023 talk walking through six stories from Trezy, a cash-flow management SaaS: (1) proces...
short_description Talk at wroclove.rb 2023. → wroclove.rb 2023 talk: six stories of applying rails_event_store gradually in a legacy Rails startup.
create Trezy project
kind (empty) → project
name (empty) → Trezy
slug (empty) → trezy
attrs (empty) → {"stack" => "Rails + rails_event_store + Sidekiq + PostgreSQL", "status" => "active"}
description (empty) → Cash-flow management application for small businesses. Lets users see all their bank-account balances in one place, a...
short_description (empty) → Cash-flow management SaaS for small businesses, built on Rails.
create Open Banking Provider concept
kind (empty) → concept
name (empty) → Open Banking Provider
slug (empty) → open-banking-provider
attrs (empty) → {"category" => "architecture"}
description (empty) → Third-party integrators that sit between banks and financial applications, sending account balances, transactions and...
short_description (empty) → Third-party service delivering bank-account data to financial apps, typically via webhooks.
create Webhook-as-Technical-Event Pattern concept
kind (empty) → concept
name (empty) → Webhook-as-Technical-Event Pattern
slug (empty) → webhook-as-technical-event-pattern
attrs (empty) → {"category" => "pattern"}
description (empty) → Pattern presented in the talk for handling third-party webhooks: instead of synchronously processing the payload all ...
short_description (empty) → Store incoming webhooks as events in the event store before processing them asynchronously.
create acts_as_paranoid tool
kind (empty) → tool
name (empty) → acts_as_paranoid
slug (empty) → acts_as_paranoid
attrs (empty) → {"category" => "library"}
description (empty) → Ruby gem implementing soft deletion on Active Record models (records are marked deleted rather than removed). Used in...
short_description (empty) → Rails gem implementing soft deletion via a deleted_at column.
create Event-Driven CRUD Hybrid concept
kind (empty) → concept
name (empty) → Event-Driven CRUD Hybrid
slug (empty) → event-driven-crud-hybrid
attrs (empty) → {"category" => "architecture"}
description (empty) → Pragmatic hybrid style coined by the Trezy team (half-jokingly 'all rights reserved'): start from a CRUD Rails codeba...
short_description (empty) → Pragmatic style mixing CRUD with selected event-sourced aggregates and read models.
create Migration Event Pattern concept
kind (empty) → concept
name (empty) → Migration Event Pattern
slug (empty) → migration-event-pattern
attrs (empty) → {"category" => "practice"}
description (empty) → Pattern the Trezy team uses when introducing a new aggregate or read model into an existing code base: backfill the d...
short_description (empty) → Seed new event streams with a dedicated 'migration' event to backfill state.
create Stream as Source of Truth concept
kind (empty) → concept
name (empty) → Stream as Source of Truth
slug (empty) → stream-as-source-of-truth
attrs (empty) → {"category" => "practice"}
description (empty) → Design decision the Trezy team made for selected parts of the system: when an aggregate exists (e.g. BankAccount, Tra...
short_description (empty) → Design rule that an aggregate's event stream is the authoritative state, not the DB table.
create Store webhooks as technical events takeaway
kind (empty) → takeaway
name (empty) → Store webhooks as technical events
slug (empty) → store-webhooks-as-technical-events
attrs (empty) → {"type" => "recommendation"}
description (empty) → Instead of processing webhooks synchronously all the way to the database, persist the payload as a technical event in...
short_description (empty) → Persist third-party webhook payloads as events, then process async.
create All writes must go through the aggregate takeaway
kind (empty) → takeaway
name (empty) → All writes must go through the aggregate
slug (empty) → all-writes-must-go-through-the-aggregate
attrs (empty) → {"type" => "lesson-learned"}
description (empty) → Once an aggregate is introduced as the source of truth for some logic, every feature that modifies that part of the s...
short_description (empty) → If an aggregate owns an invariant, every write path must use it or the stream lies.
create Replay events to reproduce bugs takeaway
kind (empty) → takeaway
name (empty) → Replay events to reproduce bugs
slug (empty) → replay-events-to-reproduce-bugs
attrs (empty) → {"type" => "recommendation"}
description (empty) → Because payloads and domain events are persisted immutably, bugs can be reproduced by replaying the exact event that ...
short_description (empty) → Event sourcing turns bug reproduction into replaying the stored event.
create Adopt event sourcing gradually takeaway
kind (empty) → takeaway
name (empty) → Adopt event sourcing gradually
slug (empty) → adopt-event-sourcing-gradually
attrs (empty) → {"type" => "recommendation"}
description (empty) → Event sourcing doesn't require a greenfield project, micro-services, kubernetes or a second database. The Trezy team ...
short_description (empty) → Start from CRUD and introduce events/aggregates where they add value.
create Don't be afraid of event sourcing takeaway
kind (empty) → takeaway
name (empty) → Don't be afraid of event sourcing
slug (empty) → don-t-be-afraid-of-event-sourcing
attrs (empty) → {"type" => "insight"}
description (empty) → The speaker's closing message: event sourcing turned out to be the easiest of the patterns he explored (DDD, CQRS, ev...
short_description (empty) → Event sourcing is 'just a persistence pattern' — easier than DDD, CQRS or EDA.

Edges (49)

update Łukasz Reszke → authored → Working with RailsEventStore in Cashflow Management System
context (empty) → Delivered this talk as his first time speaking at wroclove.rb.
update Working with RailsEventStore in Cashflow Management System → presented_at → wroclove.rb 2023
context (empty) → Opening talk of wroclove.rb 2023.
create Łukasz Reszke → works_at → Arkency
attrs (empty) → {"role" => "Ruby developer"}
context (empty) → Says he works at Arkency, rescuing legacy Rails projects on a daily basis.
relation (empty) → works_at
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → f8b4b616-ffd6-4eaa-a7b9-fdc07bb2cb27
create Łukasz Reszke → works_on → Trezy
context (empty) → Builds the cash-flow management system described in the six stories.
relation (empty) → works_on
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → f74d806a-1ceb-422d-b964-009f24dc8eef
create Łukasz Reszke → uses → rails_event_store
context (empty) → Uses rails_event_store as the event store library in Trezy.
relation (empty) → uses
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Łukasz Reszke → has_skill → Ruby
attrs (empty) → {"level" => "intermediate"}
context (empty) → Converted from .NET to Ruby two years before the talk and now works on a Rails app.
relation (empty) → has_skill
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → c7f25b33-06c9-460e-aca7-fe993123ebee
create Łukasz Reszke → has_skill → .NET
attrs (empty) → {"level" => "intermediate"}
context (empty) → Former .NET developer; helped into Ruby by Andrzej.
relation (empty) → has_skill
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → 6adabc22-a7e5-4b0d-942a-21d5d22737e1
create Łukasz Reszke → recommends → Ordering Events Blog Post by Rafał
context (empty) → Recommends this blog post to anyone hitting no-order-guarantee issues in event-driven systems.
relation (empty) → recommends
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → d5866fed-e1d7-4a45-a6cb-bcbfdd0be54a
create Łukasz Reszke → recommends → Adopt event sourcing gradually
context (empty) → Closing message encouraging incremental adoption.
relation (empty) → recommends
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → 719f694d-e285-43a4-b62b-4b6524c8e636
create Łukasz Reszke → recommends → Don't be afraid of event sourcing
context (empty) → Closing message of the talk.
relation (empty) → recommends
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → 1224ac7d-8b6f-45e3-8148-5ddbfc317dac
create Working with RailsEventStore in Cashflow Management System → about → Trezy
context (empty) → All six stories come from Trezy.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → f74d806a-1ceb-422d-b964-009f24dc8eef
create Working with RailsEventStore in Cashflow Management System → about → rails_event_store
context (empty) → Explains rails_event_store usage in production.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Working with RailsEventStore in Cashflow Management System → about → Event Sourcing
context (empty) → Event sourcing is the core persistence pattern discussed.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Working with RailsEventStore in Cashflow Management System → about → Event-Driven Architecture
context (empty) → Async processing of webhooks and classification via event handlers.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → efb4cdd4-e26e-438e-8251-79aac4161d04
create Working with RailsEventStore in Cashflow Management System → about → Domain-Driven Design
context (empty) → Uses tactical DDD patterns (aggregates, read models, processes).
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 6e2f88bd-e521-41a3-91d4-aeb5f8fd2486
create Working with RailsEventStore in Cashflow Management System → about → Aggregate Root
context (empty) → Introduces bank-account and transaction-classification aggregates.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 09c37511-f144-42de-a3e8-abae18862f96
create Working with RailsEventStore in Cashflow Management System → about → Process Manager
context (empty) → Three explicit classification processes are modeled as event-sourced processes.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 1b1d68aa-23bc-4410-8af3-f095676d9722
create Working with RailsEventStore in Cashflow Management System → about → Read Model
context (empty) → Shows splitting read model from write model in the classification project.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → d0fcf0df-1ca2-47f0-b431-8dbac005b44d
create Working with RailsEventStore in Cashflow Management System → about → CQRS
context (empty) → Classification project implements 'almost full CQRS' minus a second DB.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 8918002a-9def-4449-a187-e3052bf175b5
create Working with RailsEventStore in Cashflow Management System → about → Webhook-as-Technical-Event Pattern
context (empty) → First story presents this pattern for open-banking webhooks.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 4c598452-3dbf-48fe-963f-923e3eec3b79
create Working with RailsEventStore in Cashflow Management System → about → Event-Driven CRUD Hybrid
context (empty) → Closes with the team's self-coined hybrid style.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → ca33d3d4-2bef-44a9-9ac1-dc7a86b50e7f
create Working with RailsEventStore in Cashflow Management System → about → Migration Event Pattern
context (empty) → Describes backfilling new aggregates/read models via dedicated migration events.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 0d185f0d-3eed-459a-92a5-54472fa33ed7
create Working with RailsEventStore in Cashflow Management System → about → Stream as Source of Truth
context (empty) → Design decision underpinning the aggregate stories.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → f6e07aad-09eb-494d-b98f-e000d7dfb365
create Working with RailsEventStore in Cashflow Management System → about → Open Banking Provider
context (empty) → First and third stories concern integrations with open-banking providers.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 7885cdbe-3a97-4f36-9a28-a3bfdfa2f6ab
create Working with RailsEventStore in Cashflow Management System → about → acts_as_paranoid
context (empty) → Soft deletion via acts_as_paranoid caused bugs that events helped debug.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → 302ebf4e-1f9b-4a41-b0f4-ed14d3bb718f
create Working with RailsEventStore in Cashflow Management System → about → EventStorming
context (empty) → Speaker uses EventStorming notation for aggregate rules.
relation (empty) → about
source_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
target_node_id (empty) → f531d860-d7e6-449c-8289-ffa29995f7d1
create Trezy → uses → rails_event_store
context (empty) → Primary event-store library in the monolith.
relation (empty) → uses
source_node_id (empty) → f74d806a-1ceb-422d-b964-009f24dc8eef
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Trezy → uses → Sidekiq
context (empty) → Runs async event handlers as Sidekiq jobs.
relation (empty) → uses
source_node_id (empty) → f74d806a-1ceb-422d-b964-009f24dc8eef
target_node_id (empty) → 2365c22d-c83e-4553-b865-ec22d0b5b225
create Trezy → uses → PostgreSQL
context (empty) → Single Postgres database backs both the read model and rails_event_store.
relation (empty) → uses
source_node_id (empty) → f74d806a-1ceb-422d-b964-009f24dc8eef
target_node_id (empty) → 46fc2697-69fc-436b-ac82-250ba4370273
create Trezy → uses → acts_as_paranoid
context (empty) → Legacy soft-delete gem still present in the codebase.
relation (empty) → uses
source_node_id (empty) → f74d806a-1ceb-422d-b964-009f24dc8eef
target_node_id (empty) → 302ebf4e-1f9b-4a41-b0f4-ed14d3bb718f
create Trezy → uses → aggregate_root
context (empty) → Bank-account and transaction-classification aggregates include the AggregateRoot module.
relation (empty) → uses
source_node_id (empty) → f74d806a-1ceb-422d-b964-009f24dc8eef
target_node_id (empty) → 570146e3-03be-459c-8ceb-e88dad04ef52
create Store webhooks as technical events → from_talk → Working with RailsEventStore in Cashflow Management System
context (empty) → First-story takeaway.
relation (empty) → from_talk
source_node_id (empty) → 54b4ab69-8633-464f-9ea8-8d304921a3b9
target_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
create Store webhooks as technical events → about → Webhook-as-Technical-Event Pattern
context (empty) → Recommendation expresses this pattern.
relation (empty) → about
source_node_id (empty) → 54b4ab69-8633-464f-9ea8-8d304921a3b9
target_node_id (empty) → 4c598452-3dbf-48fe-963f-923e3eec3b79
create All writes must go through the aggregate → from_talk → Working with RailsEventStore in Cashflow Management System
context (empty) → Lesson from the 'closed bank account with missing events' story.
relation (empty) → from_talk
source_node_id (empty) → ae6d8f8b-f21c-4852-bec9-9269081ad03c
target_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
create All writes must go through the aggregate → about → Aggregate Root
context (empty) → Reinforces aggregate as the single write path.
relation (empty) → about
source_node_id (empty) → ae6d8f8b-f21c-4852-bec9-9269081ad03c
target_node_id (empty) → 09c37511-f144-42de-a3e8-abae18862f96
create Replay events to reproduce bugs → from_talk → Working with RailsEventStore in Cashflow Management System
context (empty) → Used twice to debug and fix customer data.
relation (empty) → from_talk
source_node_id (empty) → 08883587-2dfa-4070-a392-f1ccedfc2e76
target_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
create Replay events to reproduce bugs → about → Event Sourcing
context (empty) → Benefit specific to event-sourced systems.
relation (empty) → about
source_node_id (empty) → 08883587-2dfa-4070-a392-f1ccedfc2e76
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Adopt event sourcing gradually → from_talk → Working with RailsEventStore in Cashflow Management System
context (empty) → Concluding recommendation of the talk.
relation (empty) → from_talk
source_node_id (empty) → 719f694d-e285-43a4-b62b-4b6524c8e636
target_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
create Adopt event sourcing gradually → about → Event Sourcing
context (empty) → Recommends gradual adoption.
relation (empty) → about
source_node_id (empty) → 719f694d-e285-43a4-b62b-4b6524c8e636
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Don't be afraid of event sourcing → from_talk → Working with RailsEventStore in Cashflow Management System
context (empty) → Final slide message.
relation (empty) → from_talk
source_node_id (empty) → 1224ac7d-8b6f-45e3-8148-5ddbfc317dac
target_node_id (empty) → 54901958-e188-4502-b354-d2657accf511
create Don't be afraid of event sourcing → about → Event Sourcing
context (empty) → Addresses perceived complexity of event sourcing.
relation (empty) → about
source_node_id (empty) → 1224ac7d-8b6f-45e3-8148-5ddbfc317dac
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Webhook-as-Technical-Event Pattern → related_to → Event-Driven Architecture
context (empty) → Built on top of async processing via events.
relation (empty) → related_to
source_node_id (empty) → 4c598452-3dbf-48fe-963f-923e3eec3b79
target_node_id (empty) → efb4cdd4-e26e-438e-8251-79aac4161d04
create Event-Driven CRUD Hybrid → related_to → CQRS
context (empty) → Partial adoption of CQRS without a second database.
relation (empty) → related_to
source_node_id (empty) → ca33d3d4-2bef-44a9-9ac1-dc7a86b50e7f
target_node_id (empty) → 8918002a-9def-4449-a187-e3052bf175b5
create Event-Driven CRUD Hybrid → related_to → Event Sourcing
context (empty) → Uses event sourcing selectively where the business prioritizes it.
relation (empty) → related_to
source_node_id (empty) → ca33d3d4-2bef-44a9-9ac1-dc7a86b50e7f
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Migration Event Pattern → related_to → Event Sourcing
context (empty) → Specific migration approach for event-sourced systems.
relation (empty) → related_to
source_node_id (empty) → 0d185f0d-3eed-459a-92a5-54472fa33ed7
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Stream as Source of Truth → related_to → Aggregate Root
context (empty) → Stream belongs to the aggregate that protects invariants.
relation (empty) → related_to
source_node_id (empty) → f6e07aad-09eb-494d-b98f-e000d7dfb365
target_node_id (empty) → 09c37511-f144-42de-a3e8-abae18862f96
create Ordering Events Blog Post by Rafał → about → Event-Driven Architecture
context (empty) → Addresses how to deal with no order guarantee in event-driven systems.
relation (empty) → about
source_node_id (empty) → d5866fed-e1d7-4a45-a6cb-bcbfdd0be54a
target_node_id (empty) → efb4cdd4-e26e-438e-8251-79aac4161d04
create Łukasz Reszke → has_skill → Event Sourcing
attrs (empty) → {"level" => "intermediate"}
context (empty) → Uses event sourcing daily in production on Trezy.
relation (empty) → has_skill
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Łukasz Reszke → has_skill → rails_event_store
attrs (empty) → {"level" => "intermediate"}
context (empty) → Works with rails_event_store daily in Trezy.
relation (empty) → has_skill
source_node_id (empty) → 24a51b96-a038-4d2c-b19a-c5581183e8eb
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8

Read set

196 nodes

tool rails_event_store search_nodes tool Rails Event Store Event Browser search_nodes concept Event Sourcing search_nodes tool Ruby Event Store search_nodes concept Event Store search_nodes talk Applying CQRS & Event Sourcing on Rails applications search_nodes talk Event Sourcing and Actor model in Ruby search_nodes project rails_event_store/ecommerce search_nodes takeaway rails_event_store is the most productive DDD tool in Ruby search_nodes tool Heckle search_nodes tool New Relic search_nodes tool Datadog search_nodes tool AppSignal search_nodes tool Grafana search_nodes tool Codecov search_nodes tool Prometheus search_nodes concept Logux Proxy search_nodes concept Database Indexes search_nodes tool PgBouncer search_nodes tool Citus search_nodes concept EXPLAIN / EXPLAIN ANALYZE search_nodes tool PgHero search_nodes talk Fantastic Databases and Where to Find Them search_nodes resource Postgres for Everything search_nodes talk From PostgreSQL to SQLite in Rails search_nodes concept EventStorming search_nodes company Arkency search_nodes tool Ruby search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes talk Ruby Archaeology search_nodes project Ruby Romania search_nodes tool aggregate_root search_nodes tool Standard RB search_nodes talk Scientific Ruby Lightning Talk search_nodes tool TruffleRuby search_nodes tool Ruby Packer search_nodes person Łukasz Reszke search_nodes+get_node_edges person Adam Okoń search_nodes person Łukasz Szydło search_nodes takeaway Name Things To Find Their Properties search_nodes talk How to Be Top 10% in Ruby Lightning Talk search_nodes tool ChatGPT search_nodes tool left-pad search_nodes concept xkcd Dependency / Nebraska Problem search_nodes tool knapsack_pro search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2018 search_nodes talk Mutation testing workshop wroclove.rb 2019 search_nodes talk Building LLM powered applications in Ruby search_nodes talk International cooperation in IT teams search_nodes talk Working with RailsEventStore in Cashflow Management System search_nodes+get_node_edges takeaway Trailblazer tracing saves thousands of debugging hours search_nodes concept Trailblazer Workflow search_nodes company Transloadit search_nodes concept Data Tokenization search_nodes takeaway Time Travel Superpower search_nodes tool RealtimeBoard search_nodes resource tea White Paper search_nodes person Andrzej Krzywda search_nodes person Andrzej Śliwa search_nodes concept Event-Driven Architecture search_nodes question Immediate benefit of event-driven architecture? search_nodes concept Architecture Drivers search_nodes takeaway Event Sourcing Is Not A Silver Bullet search_nodes concept Onion Architecture search_nodes project Eventide search_nodes concept Hexagonal Architecture search_nodes takeaway Event Sourcing Is A Side Effect Of Pub/Sub search_nodes concept Single-Tenant Architecture search_nodes concept Embrace The Evented Model search_nodes concept destroy_all vs delete_all search_nodes question Is the WHERE-clause leak risk real with acts_as_tenant? search_nodes tool acts_as_tenant search_nodes concept Active Record search_nodes concept Default scope for region preview search_nodes tool activerecord-multi-tenant search_nodes takeaway Avoid Active Record callbacks for media processing search_nodes concept ActiveRecord Encryption search_nodes takeaway Three Ways To Delete User Data In Event-Sourced Systems search_nodes question How does GDPR deletion work if encrypted events are in backups? search_nodes tool Sidekiq search_nodes concept Sidekiq Batches search_nodes question Scaling Sidekiq Elastically search_nodes takeaway Prefer Small Sidekiq Jobs search_nodes concept Sidekiq Middleware search_nodes takeaway Keep Sidekiq Job Parameters Simple search_nodes talk Under The Hood And On The Surface Of Sidekiq search_nodes question Sidekiq And Redis Cluster search_nodes question Application-Level Back Pressure For Sidekiq search_nodes talk Sidekiq Batches Lightning Talk search_nodes concept Command Query Separation search_nodes concept CQRS search_nodes takeaway Use CQRS And Event Sourcing Independently search_nodes concept Commands, Queries, and Events search_nodes takeaway Handlers Must Control Their Dependencies search_nodes concept Entity Coupled To Messaging search_nodes concept Domain as Function from Commands to Events search_nodes takeaway DDD Is More Than Aggregates search_nodes concept Process Manager search_nodes concept Saga / Process Manager search_nodes concept Saga Pattern search_nodes question When is a command considered processed? search_nodes project raise_permanent_job search_nodes question Deduplicating Jobs For The Same Record search_nodes concept Trailblazer Activity search_nodes takeaway Prefer a simple top-to-bottom worker search_nodes resource Implementing Domain-Driven Design search_nodes concept Domain-Driven Design search_nodes concept Aggregate Root Anti-Pattern search_nodes talk Might & Magic of Domain-Driven Design search_nodes takeaway Aggregates Should Not Emit Events search_nodes talk The pillars of Domain Driven Design search_nodes takeaway Contribute to Arkency aggregates repository search_nodes resource Domain-Driven Rails search_nodes concept On-Upload Processing search_nodes tool image_processing gem search_nodes concept On-the-fly Processing search_nodes concept Sometimes Nothing Is Enough search_nodes takeaway Don't reinvent multi-tenancy — use existing gems search_nodes concept Mutation Testing Preconditions search_nodes concept Mutation Testing search_nodes concept Incremental Mutation Testing search_nodes takeaway Start mutation testing incrementally search_nodes takeaway Mutation testing replaces dumb review questions search_nodes concept Selection (Mutant) search_nodes talk Setup and operation of mutation testing in agentic world search_nodes question Should every project use mutation testing? search_nodes tool webpagetest.org search_nodes concept GitHub Self-Hosted Runner search_nodes tool jq search_nodes tool TSort search_nodes project Petri Nets Performance Prediction Gem search_nodes concept tus protocol search_nodes tool acts_as_api search_nodes concept Read Model search_nodes concept Read-Write Split search_nodes takeaway Split Reads From Writes With Projections search_nodes takeaway Read models must not depend on each other search_nodes concept Projection Function search_nodes concept Projector search_nodes question How often should projections be rebuilt? search_nodes concept Entity Projection search_nodes question Meaning of the projection sequence number search_nodes question Projection freshness and snapshots search_nodes concept Logux Time-Shift Ordering search_nodes talk Events events events search_nodes concept Cache Preheating search_nodes question How do you order events across distributed systems? search_nodes tool GraphQL search_nodes talk Write a Blog Lightning Talk search_nodes takeaway Signed On-the-fly URLs search_nodes resource Ironin blog search_nodes question How to migrate legacy data into an event-sourced system? search_nodes takeaway Automate Phantom Migration Rollback search_nodes takeaway Gradual migration via steps search_nodes question How do you deal with event versioning? search_nodes talk Phantom Migrations Gem Lightning Talk search_nodes concept Data Evolution search_nodes question How to handle very large event volumes over time? search_nodes question How do you search across millions of events for top items? search_nodes question Do events store current state, and how does replay perform? search_nodes concept Aggregate Root search_nodes concept Polymorphic Aggregate search_nodes takeaway Elevate Validations Into The Domain search_nodes takeaway Push constraints down to the lowest level search_nodes takeaway Don't Conflate Entity, Handler and Projection search_nodes concept Remote EventStorming Split-Merge Structure search_nodes question How is the event-write kept consistent with external operations? search_nodes takeaway Don't Cram Eventide Into Legacy Apps search_nodes question Asynchronous EventStorming Experience search_nodes question Convincing Developers to Participate in EventStorming search_nodes question Including Unavailable Domain Experts search_nodes tool .NET search_nodes tool IronRuby search_nodes tool TypeScript search_nodes resource awesome-ddd search_nodes tool Electron search_nodes tool GitHub Actions search_nodes takeaway Buy Faster Hardware search_nodes person Michał Bronikowski search_nodes tool PostgreSQL search_nodes concept MVCC Trade-offs in Postgres vs MySQL search_nodes question Projections affecting many streams at once search_nodes concept At-Least-Once Plus Idempotence Recipe search_nodes concept Delivery Semantics search_nodes concept Aggregate-Scoped Sequence Number search_nodes concept Vector Clock search_nodes takeaway Use at-least-once plus idempotence to build self-healing systems search_nodes project Ruby News search_nodes resource Short Ruby Newsletter search_nodes project BBC Sport App search_nodes

2 edges