← Extractions

Beyond the Current State: Time Travel to the Rescue! — Armin Pašalić at wroclove.rb 2018

Armin Pašalić, working at Solaris Bank, walks through CQRS and Event Sourcing as tools for crafting resilient software systems. He explains how splitting read and write models, persisting events instead of mutating current state, and projecting state from event streams unlock 'superpowers' like horizontal scale, time travel, total reconstruction, and regulator-pleasing auditability — while also covering trade-offs (mind shift, hiring, eventual consistency) and practical cheats (idempotent projectors/reactors, aggregate-scoped sequence numbers, command UUIDs for deduplication, sagas for external-system reconciliation).

Model
claude-opus-4-7
Ingestion
2344bc8d
Input tokens
684,921
fresh
478,865
cached
185,669
cache write
20,387
Output tokens
20,637
Duration
339.8s
Roundtrips
16
Tool calls
35
Cost
$0.00
Nodes/edges extracted
36 / 50
Read set (nodes/edges)
65 / 17

Nodes (36)

update Beyond the current state Time travel to the rescue! talk
description Talk at wroclove.rb 2018. Armin Pašalić's wroclove.rb 2018 talk introducing CQRS and event sourcing as practical tools for resilient systems. S...
short_description Talk at wroclove.rb 2018. wroclove.rb 2018 talk on CQRS, event sourcing, and the 'superpowers' they unlock.
update Armin Pašalić person
attrs (empty) {"role" => "software engineer"}
description Conference speaker. Software engineer at Solaris Bank in Berlin, working on resilient backend systems. Speaker at wroclove.rb 2018 with '...
short_description Conference speaker. Software engineer at Solaris Bank; speaker on CQRS and event sourcing.
create Solaris Bank company
kind (empty) company
name (empty) Solaris Bank
slug (empty) solaris-bank
attrs (empty) {"industry" => "fintech / banking-as-a-service", "location" => "Germany"}
description (empty) Banking company described by the speaker as 'mostly a tech company with a banking license' — roughly half the staff a...
short_description (empty) Berlin-based banking-as-a-service tech company with a banking license.
update CQRS concept
attrs {"category" => "architecture"} {"category" => "pattern"}
description Architectural pattern separating commands (writes) from queries (reads). In this talk, commands are dispatched throug... Architectural pattern that applies Bertrand Meyer's Command Query Separation principle at the service level, splittin...
short_description Command Query Responsibility Segregation: separating write and read models. Command Query Responsibility Segregation: separating write and read models at service level.
create Command Query Separation concept
kind (empty) concept
name (empty) Command Query Separation
slug (empty) command-query-separation
attrs (empty) {"category" => "principle"}
description (empty) Principle devised by Bertrand Meyer and described in 'Object-Oriented Software Construction' (1988): a method should ...
short_description (empty) Bertrand Meyer's principle that methods either change state or return data, never both.
update Event Sourcing concept
description Persistence approach where aggregate state is reconstructed by replaying past events from an event store. Enables dec... Persistence approach where business-relevant facts ('events') are appended to an immutable event store and aggregate ...
short_description Pattern of persisting state as a sequence of domain events. Pattern of persisting state as an immutable, append-only sequence of domain events.
create Eventual Consistency concept
kind (empty) concept
name (empty) Eventual Consistency
slug (empty) eventual-consistency
attrs (empty) {"category" => "pattern"}
description (empty) Acceptance that in distributed systems updates propagate over time. Pašalić argues the real world is already eventual...
short_description (empty) Property where distributed state converges over time rather than instantly.
create Read/Write Disparity concept
kind (empty) concept
name (empty) Read/Write Disparity
slug (empty) read-write-disparity
attrs (empty) {"category" => "observation"}
description (empty) Empirical asymmetry that motivates separating an application's command and query paths: most applications serve many ...
short_description (empty) Observation that most systems have far more reads than writes (or vice versa).
create Current State concept
kind (empty) concept
name (empty) Current State
slug (empty) current-state
attrs (empty) {"category" => "concept"}
description (empty) Common modelling assumption that an application stores only the latest mutable state. Drawbacks: every mutation forge...
short_description (empty) Single mutable snapshot of system state, contrasted with an event log.
create Event Store concept
kind (empty) concept
name (empty) Event Store
slug (empty) event-store
attrs (empty) {"category" => "architecture"}
description (empty) Persistence layer that only allows append and read operations on immutable events (facts that have already happened)....
short_description (empty) Append-only, read-only persistence of immutable domain events.
create Projector concept
kind (empty) concept
name (empty) Projector
slug (empty) projector
attrs (empty) {"category" => "pattern"}
description (empty) Component triggered by the event store that consumes events and builds a read-model projection (graph DB, in-memory, ...
short_description (empty) Component that projects events into a specific read-model representation.
create Reactor concept
kind (empty) concept
name (empty) Reactor
slug (empty) reactor
attrs (empty) {"category" => "pattern"}
description (empty) Subscriber that reacts to events occurring in the system, sometimes by building state and sometimes by communicating ...
short_description (empty) Event-driven component that performs side effects, often interacting with external systems.
create Saga Pattern concept
kind (empty) concept
name (empty) Saga Pattern
slug (empty) saga-pattern
attrs (empty) {"category" => "pattern"}
description (empty) Pattern (also referred to as a distributed service manager / process manager) used to deal with reactor synchronizati...
short_description (empty) Long-running coordinator that compensates for failures across distributed/external systems.
create Aggregate-Scoped Sequence Number concept
kind (empty) concept
name (empty) Aggregate-Scoped Sequence Number
slug (empty) aggregate-scoped-sequence-number
attrs (empty) {"category" => "practice"}
description (empty) Cheat shared by Pašalić: every event should carry not only a global identifier and global order number but also a seq...
short_description (empty) Per-aggregate sequence number on events, in addition to a global identifier/order.
create Command UUID Deduplication concept
kind (empty) concept
name (empty) Command UUID Deduplication
slug (empty) command-uuid-deduplication
attrs (empty) {"category" => "practice"}
description (empty) Cheat: have commands carry a unique identifier and store it in the metadata of the resulting event. Given a one-to-on...
short_description (empty) Use the originating command's UUID inside event metadata to deduplicate events.
create Idempotent Projectors and Reactors concept
kind (empty) concept
name (empty) Idempotent Projectors and Reactors
slug (empty) idempotent-projectors-and-reactors
attrs (empty) {"category" => "practice"}
description (empty) Cheat / requirement Pašalić considers mandatory: projectors and reactors must be idempotent so replays and at-least-o...
short_description (empty) Requirement that projectors and reactors produce the same outcome on repeat events.
create Snapshotting concept
kind (empty) concept
name (empty) Snapshotting
slug (empty) snapshotting
attrs (empty) {"category" => "practice"}
description (empty) Optimization for event-sourced systems with very large event streams (e.g. advertising domains processing petabytes/d...
short_description (empty) Periodic snapshot of aggregate state to bound replay cost in event sourcing.
create Object-Oriented Software Construction resource
kind (empty) resource
name (empty) Object-Oriented Software Construction
slug (empty) object-oriented-software-construction
attrs (empty) {"type" => "book", "year" => "1988"}
description (empty) Bertrand Meyer's 1988 book in which the Command Query Separation principle is described. Cited by Pašalić as the orig...
short_description (empty) Bertrand Meyer's 1988 book introducing Command Query Separation.
create Bertrand Meyer person
kind (empty) person
name (empty) Bertrand Meyer
slug (empty) bertrand-meyer
description (empty) Computer scientist credited with devising the Command Query Separation principle, described in his 1988 book 'Object-...
short_description (empty) Computer scientist; devised Command Query Separation.
create Greg Young person
kind (empty) person
name (empty) Greg Young
slug (empty) greg-young
description (empty) Software architect credited with coining the term CQRS, first publicly mentioning it on his blog in 2009. Pašalić str...
short_description (empty) Software architect who coined the term CQRS.
create Apache Kafka tool
kind (empty) tool
name (empty) Apache Kafka
slug (empty) apache-kafka
attrs (empty) {"category" => "platform"}
description (empty) Distributed log/streaming platform that some companies use to store events (with log compaction). Pašalić doesn't rec...
short_description (empty) Distributed log/streaming platform sometimes used as an event store.
create Horizontal Scale Superpower takeaway
kind (empty) takeaway
name (empty) Horizontal Scale Superpower
slug (empty) horizontal-scale-superpower
attrs (empty) {"type" => "insight"}
description (empty) By physically splitting the application into command and query parts (CQRS), each side becomes independently scalable...
short_description (empty) Splitting read and write models lets each side scale independently.
create Time Travel Superpower takeaway
kind (empty) takeaway
name (empty) Time Travel Superpower
slug (empty) time-travel-superpower
attrs (empty) {"type" => "insight"}
description (empty) Persisting all business-relevant events forever lets you reconstruct what any projection looked like at any past poin...
short_description (empty) Keeping all events enables temporal queries and projecting any past state.
create Precognition Superpower takeaway
kind (empty) takeaway
name (empty) Precognition Superpower
slug (empty) precognition-superpower
attrs (empty) {"type" => "insight"}
description (empty) With all relevant events kept, new features (e.g. 'email everyone who put items X in their cart and removed them in t...
short_description (empty) New features can be built as if they had existed from day one.
create Total Self-Reconstruction Superpower takeaway
kind (empty) takeaway
name (empty) Total Self-Reconstruction Superpower
slug (empty) total-self-reconstruction-superpower
attrs (empty) {"type" => "insight"}
description (empty) Because events are immutable and append-only, a protected and backed-up event store lets a team fully rebuild the cur...
short_description (empty) With a backed-up event store, current state can be fully rebuilt after disasters.
create Enhanced Charisma With Regulators takeaway
kind (empty) takeaway
name (empty) Enhanced Charisma With Regulators
slug (empty) enhanced-charisma-with-regulators
attrs (empty) {"type" => "insight"}
description (empty) In regulated industries (e.g. banking), describing your architecture as a ledger with projections wins immediate appr...
short_description (empty) Ledger-based event-sourced systems delight regulators in regulated industries.
create Replay-Based Debugging takeaway
kind (empty) takeaway
name (empty) Replay-Based Debugging
slug (empty) replay-based-debugging
attrs (empty) {"type" => "lesson-learned"}
description (empty) Pašalić's team debugged a multi-writer race condition (events from several systems writing to the event store while s...
short_description (empty) Replaying events from a known good state collapses race-condition debugging from days to minutes.
create Simpler Tests Without Updates Or Deletes takeaway
kind (empty) takeaway
name (empty) Simpler Tests Without Updates Or Deletes
slug (empty) simpler-tests-without-updates-or-deletes
attrs (empty) {"type" => "insight"}
description (empty) Because event-sourced systems don't update or delete, tests become simpler and faster. Pašalić can't fully describe t...
short_description (empty) Tests over append-only event-sourced code become simpler and faster.
create Per-Event Backups Via Reactors takeaway
kind (empty) takeaway
name (empty) Per-Event Backups Via Reactors
slug (empty) per-event-backups-via-reactors
attrs (empty) {"type" => "insight"}
description (empty) Building a reactor (with global-identifier tracking) that consumes every event lets the team create per-event redunda...
short_description (empty) A reactor consuming every event provides trivial, redundant backups.
create Event Sourcing Mind Shift Trade-off takeaway
kind (empty) takeaway
name (empty) Event Sourcing Mind Shift Trade-off
slug (empty) event-sourcing-mind-shift-trade-off
attrs (empty) {"type" => "warning"}
description (empty) Major trade-off: getting engineers, especially senior ones, to shift from writing-the-current-state to projecting-sta...
short_description (empty) Shifting senior engineers from current-state to event-projection thinking is hard.
create Hiring For Event Sourcing Trade-off takeaway
kind (empty) takeaway
name (empty) Hiring For Event Sourcing Trade-off
slug (empty) hiring-for-event-sourcing-trade-off
attrs (empty) {"type" => "warning"}
description (empty) Hiring and training engineers in CQRS/event sourcing is hard; finding candidates with prior knowledge is especially r...
short_description (empty) Engineers with prior event-sourcing experience are scarce and hard to hire.
create Eventual Consistency Trade-off takeaway
kind (empty) takeaway
name (empty) Eventual Consistency Trade-off
slug (empty) eventual-consistency-trade-off
attrs (empty) {"type" => "warning"}
description (empty) Even though eventual consistency is helpful, embracing it in practice is hard, particularly when integrating with ext...
short_description (empty) Embracing eventual consistency is hard, especially with legacy and external systems.
create Use CQRS And Event Sourcing Independently takeaway
kind (empty) takeaway
name (empty) Use CQRS And Event Sourcing Independently
slug (empty) use-cqrs-and-event-sourcing-independently
attrs (empty) {"type" => "lesson-learned"}
description (empty) CQRS and event sourcing can be applied independently. CQRS works well on its own. Event sourcing only makes sense if ...
short_description (empty) Apply CQRS or event sourcing where each fits; mixing one half is risky.
create Reuse Command Model Aggregate For Response takeaway
kind (empty) takeaway
name (empty) Reuse Command Model Aggregate For Response
slug (empty) reuse-command-model-aggregate-for-response
attrs (empty) {"type" => "recommendation"}
description (empty) Cheat for legacy systems that expect synchronous responses: instead of going through the command bus and waiting for ...
short_description (empty) Synthesize the response from the command-model aggregate when legacy clients demand immediacy.
create How to persist commands in an event-sourced system? question
kind (empty) question
name (empty) How to persist commands in an event-sourced system?
slug (empty) how-to-persist-commands-in-an-event-sourced-system
attrs (empty) {"answer_summary" => "Pašalić logs commands rather than storing them; Nathan sources them in event IDs. Persist comma...
description (empty) Audience member from an OO/relational background asks whether commands are stored in the database alongside events. P...
short_description (empty) Q&A on whether commands themselves should be stored in the database.
create How to handle very large event volumes over time? question
kind (empty) question
name (empty) How to handle very large event volumes over time?
slug (empty) how-to-handle-very-large-event-volumes-over-time
attrs (empty) {"answer_summary" => "Strategy depends on business value: snapshot at meaningful points (year-end, campaign end), arc...
description (empty) Audience member asks how to deal with millions of events in a write-heavy system — keep them forever, snapshot, or co...
short_description (empty) Q&A on storing millions of events in write-heavy systems and whether to compact or snapshot.

Edges (50)

update Beyond the current state Time travel to the rescue!presented_atwroclove.rb 2018
context (empty) Talk delivered at wroclove.rb 2018.
update Armin PašalićauthoredBeyond the current state Time travel to the rescue!
context (empty) Pašalić is the speaker delivering the talk.
create Armin Pašalićworks_atSolaris Bank
attrs (empty) {"role" => "software engineer"}
context (empty) Speaker introduces himself as working at Solaris Bank.
relation (empty) works_at
source_node_id (empty) e31be018-c957-46cb-8cdf-acbda75d6afb
target_node_id (empty) f75d35e0-1c4a-44e9-927e-8cc1aa45fcc0
create Armin Pašalićattendedwroclove.rb 2018
context (empty) Attended as the speaker.
relation (empty) attended
source_node_id (empty) e31be018-c957-46cb-8cdf-acbda75d6afb
target_node_id (empty) 9243ef2c-21bb-4f23-b450-9ecd87882dfe
create Armin Pašalićhas_skillEvent Sourcing
attrs (empty) {"level" => "expert"}
context (empty) Demonstrates production experience applying event sourcing in a regulated banking context.
relation (empty) has_skill
source_node_id (empty) e31be018-c957-46cb-8cdf-acbda75d6afb
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create Armin Pašalićhas_skillCQRS
attrs (empty) {"level" => "expert"}
context (empty) Talk centers on Pašalić's hands-on use of CQRS in production systems.
relation (empty) has_skill
source_node_id (empty) e31be018-c957-46cb-8cdf-acbda75d6afb
target_node_id (empty) 8918002a-9def-4449-a187-e3052bf175b5
create Armin PašalićrecommendsGreg Young
context (empty) Strongly recommends watching Greg Young's talks on YouTube to learn CQRS and event sourcing.
relation (empty) recommends
source_node_id (empty) e31be018-c957-46cb-8cdf-acbda75d6afb
target_node_id (empty) 45e8eebf-faf5-48d2-a2fe-fb21ff38b80a
create Beyond the current state Time travel to the rescue!aboutCQRS
context (empty) Core architectural concept introduced and motivated in the talk.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 8918002a-9def-4449-a187-e3052bf175b5
create Beyond the current state Time travel to the rescue!aboutEvent Sourcing
context (empty) Core architectural concept introduced and motivated in the talk.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create Beyond the current state Time travel to the rescue!aboutCommand Query Separation
context (empty) Presented as the original Bertrand Meyer principle that CQRS scales to service level.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 1afe91e5-4419-488d-bc7c-27219042bc94
create Beyond the current state Time travel to the rescue!aboutEventual Consistency
context (empty) Discussed as a reality of distributed systems that engineers must embrace.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 5c3f36dd-1500-42b7-af3a-96cf84d66271
create Beyond the current state Time travel to the rescue!aboutRead/Write Disparity
context (empty) Used as the empirical motivation for separating command and query paths.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 5bb50b32-34e2-437f-b0ba-739922dfcd5f
create Beyond the current state Time travel to the rescue!aboutCurrent State
context (empty) Critiqued as forgetful and ill-suited to distributed transactions.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 03573473-ff48-448f-914e-004138407972
create Beyond the current state Time travel to the rescue!aboutEvent Store
context (empty) Described as the append-only persistence at the heart of event sourcing.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 41e612ae-2c1f-4a3c-8690-d47ac47e0174
create Beyond the current state Time travel to the rescue!aboutProjector
context (empty) Explained as the component projecting events into read-model state.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 4c44ae81-e04c-495a-b02f-37c8987e39dc
create Beyond the current state Time travel to the rescue!aboutReactor
context (empty) Introduced as event-driven components reconciling with external systems.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) a5f0bb90-5784-44f8-bdd5-6295dc6d5301
create Beyond the current state Time travel to the rescue!aboutSaga Pattern
context (empty) Recommended for handling reactor synchronization errors with non-idempotent external systems.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) b9cda322-dd18-40b0-84d9-b7e002665b86
create Beyond the current state Time travel to the rescue!aboutSnapshotting
context (empty) Mentioned as an optimization for high-volume event streams.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 0c37afd4-ec51-45d4-976d-ed8c6e0a7321
create Beyond the current state Time travel to the rescue!aboutAggregate-Scoped Sequence Number
context (empty) Shared as a key cheat for keeping multi-writer event streams consistent.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) fff7e41d-ca69-4892-863e-06c1b7650d59
create Beyond the current state Time travel to the rescue!aboutCommand UUID Deduplication
context (empty) Shared as a cheat for deduplicating events derived from commands.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) e5385590-2747-4139-980c-84e25818c64a
create Beyond the current state Time travel to the rescue!aboutIdempotent Projectors and Reactors
context (empty) Stated as a near-mandatory requirement for event-sourced systems.
relation (empty) about
source_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
target_node_id (empty) 509b7d7f-3fe7-4fbd-8e4c-9dd96f752aad
create Bertrand MeyerauthoredObject-Oriented Software Construction
context (empty) Meyer authored the 1988 book describing Command Query Separation.
relation (empty) authored
source_node_id (empty) 6d6fccc7-12d4-44ac-bad7-0e66cc43d42f
target_node_id (empty) b917ab30-674b-452b-bbed-c08fa50a2253
create Object-Oriented Software ConstructionaboutCommand Query Separation
context (empty) Book in which CQS is described.
relation (empty) about
source_node_id (empty) b917ab30-674b-452b-bbed-c08fa50a2253
target_node_id (empty) 1afe91e5-4419-488d-bc7c-27219042bc94
create CQRSrelated_toCommand Query Separation
context (empty) CQRS applies the CQS principle at the service level.
relation (empty) related_to
source_node_id (empty) 8918002a-9def-4449-a187-e3052bf175b5
target_node_id (empty) 1afe91e5-4419-488d-bc7c-27219042bc94
create Greg Youngrelated_toCQRS
context (empty) Greg Young coined the term CQRS, first publicly mentioning it on his blog in 2009.
relation (empty) related_to
source_node_id (empty) 45e8eebf-faf5-48d2-a2fe-fb21ff38b80a
target_node_id (empty) 8918002a-9def-4449-a187-e3052bf175b5
create Event Sourcingrelated_toCQRS
context (empty) Event sourcing implies a CQRS implementation since query state is derived from events.
relation (empty) related_to
source_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
target_node_id (empty) 8918002a-9def-4449-a187-e3052bf175b5
create Event Storerelated_toEvent Sourcing
context (empty) The event store is the persistence backbone of event sourcing.
relation (empty) related_to
source_node_id (empty) 41e612ae-2c1f-4a3c-8690-d47ac47e0174
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create Projectorrelated_toEvent Store
context (empty) Projectors consume events from the event store to build read models.
relation (empty) related_to
source_node_id (empty) 4c44ae81-e04c-495a-b02f-37c8987e39dc
target_node_id (empty) 41e612ae-2c1f-4a3c-8690-d47ac47e0174
create Reactorrelated_toEvent Store
context (empty) Reactors subscribe to events from the event store to perform side effects and integrate with external systems.
relation (empty) related_to
source_node_id (empty) a5f0bb90-5784-44f8-bdd5-6295dc6d5301
target_node_id (empty) 41e612ae-2c1f-4a3c-8690-d47ac47e0174
create Saga Patternrelated_toReactor
context (empty) Sagas address reactor synchronization errors with non-idempotent external systems.
relation (empty) related_to
source_node_id (empty) b9cda322-dd18-40b0-84d9-b7e002665b86
target_node_id (empty) a5f0bb90-5784-44f8-bdd5-6295dc6d5301
create Aggregate-Scoped Sequence Numberrelated_toPostgreSQL
context (empty) Pašalić recommends a store with constraint support such as PostgreSQL to enforce per-aggregate sequence numbers.
relation (empty) related_to
source_node_id (empty) fff7e41d-ca69-4892-863e-06c1b7650d59
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Apache Kafkarelated_toEvent Sourcing
context (empty) Discussed as a possible event store with log compaction; Pašalić does not recommend it for this purpose.
relation (empty) related_to
source_node_id (empty) 1b0879e9-de0e-43d5-bdb0-401ccf75dde0
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create Horizontal Scale Superpowerfrom_talkBeyond the current state Time travel to the rescue!
context (empty) First superpower introduced in the talk.
relation (empty) from_talk
source_node_id (empty) 4e3f4fca-f86e-486a-ad59-1ac79d82c690
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Time Travel Superpowerfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Headline superpower of the talk.
relation (empty) from_talk
source_node_id (empty) 6ab4e07a-c3ef-41b9-9321-d09b8fc2799f
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Precognition Superpowerfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Superpower described as building features as if imagined on day one.
relation (empty) from_talk
source_node_id (empty) 9e044ba1-bd3d-42e3-9301-753b0a67ce63
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Total Self-Reconstruction Superpowerfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Superpower illustrated by the dropped-production-DB story.
relation (empty) from_talk
source_node_id (empty) 0d152006-ec28-47bc-b0a4-30d0d1a568c8
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Enhanced Charisma With Regulatorsfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Final 'superpower' aimed at regulated industries.
relation (empty) from_talk
source_node_id (empty) f65a239e-aca3-417c-94fd-09ee6da2db4a
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Replay-Based Debuggingfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Real-world benefit shared from Pašalić's experience.
relation (empty) from_talk
source_node_id (empty) 026f4818-f433-4e2a-b9a0-ba5f85cee4ea
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Simpler Tests Without Updates Or Deletesfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Benefit highlighted alongside other event-sourcing wins.
relation (empty) from_talk
source_node_id (empty) fd9f8065-52df-4095-9e28-b37d561d962f
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Per-Event Backups Via Reactorsfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Benefit shared as a near-trivial backup strategy.
relation (empty) from_talk
source_node_id (empty) 2cb7a00e-1d3d-483f-be0d-2407b4753ffc
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Event Sourcing Mind Shift Trade-offfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Discussed as one of the most significant trade-offs.
relation (empty) from_talk
source_node_id (empty) eb47840b-7254-4bee-92cf-98d5fc1f12b2
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Hiring For Event Sourcing Trade-offfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Discussed as a hiring/training challenge that makes event sourcing risky for early-stage startups.
relation (empty) from_talk
source_node_id (empty) ee3d98ab-be8f-468d-a9dc-9333fcaa6d4d
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Eventual Consistency Trade-offfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Identified as a trade-off, especially with legacy and external systems.
relation (empty) from_talk
source_node_id (empty) 30f136ff-31b4-49e3-9d64-022a106fbe14
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Use CQRS And Event Sourcing Independentlyfrom_talkBeyond the current state Time travel to the rescue!
context (empty) Lesson learned from a system that used event sourcing without CQRS.
relation (empty) from_talk
source_node_id (empty) 232cc605-94a0-470d-8a49-482ec315c328
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create Reuse Command Model Aggregate For Responsefrom_talkBeyond the current state Time travel to the rescue!
context (empty) Cheat shared for legacy clients that expect synchronous responses.
relation (empty) from_talk
source_node_id (empty) 75bb79a7-7c9f-4a37-be20-65e8fa3983c7
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create How to persist commands in an event-sourced system?asked_atBeyond the current state Time travel to the rescue!
context (empty) Asked during the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) 71ee4cb9-30e7-4c8c-9db5-d175b08f649f
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create How to persist commands in an event-sourced system?aboutEvent Sourcing
context (empty) Question concerns whether commands belong in the event-sourced store.
relation (empty) about
source_node_id (empty) 71ee4cb9-30e7-4c8c-9db5-d175b08f649f
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create How to handle very large event volumes over time?asked_atBeyond the current state Time travel to the rescue!
context (empty) Asked during the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) aa3a508e-b3e4-4e2a-be0b-537b630fbdd9
target_node_id (empty) 6854ba64-a32b-4cd0-8721-72f3fc984f1d
create How to handle very large event volumes over time?aboutSnapshotting
context (empty) Answer revolves around snapshotting and compacting events at business-meaningful points.
relation (empty) about
source_node_id (empty) aa3a508e-b3e4-4e2a-be0b-537b630fbdd9
target_node_id (empty) 0c37afd4-ec51-45d4-976d-ed8c6e0a7321
create How to handle very large event volumes over time?aboutApache Kafka
context (empty) Answer mentions Kafka log compaction as one (not recommended) option.
relation (empty) about
source_node_id (empty) aa3a508e-b3e4-4e2a-be0b-537b630fbdd9
target_node_id (empty) 1b0879e9-de0e-43d5-bdb0-401ccf75dde0

Read set

65 nodes

talk Applying CQRS & Event Sourcing on Rails applications search_nodes talk Event Sourcing Anti Patterns and Failures search_nodes talk Event Sourcing and Actor model in Ruby search_nodes talk The pillars of Domain Driven Design search_nodes concept EventStorming search_nodes talk Adventures in durable execution search_nodes talk Working with RailsEventStore in Cashflow Management System search_nodes talk The good, the bad and the remote — collaborative domain modeling with EventStorming search_nodes concept Command Form search_nodes tool rails_event_store search_nodes concept Event Sourcing search_nodes+get_node_edges concept Mind Map Knowledge Base for Event Sourcing search_nodes talk Introduction To Event Sourcing How To Use It With Ruby search_nodes tool RealtimeBoard search_nodes tool Brotli search_nodes talk Building on Bluesky's AT Protocol with Ruby search_nodes tool Faker search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes tool dry-struct search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes concept Waterfall Analysis search_nodes tool webpagetest.org search_nodes person Adam Okoń search_nodes talk Events events events search_nodes person Julik Tarkhanov search_nodes talk How To Ensure Systems Do What We Want And Take Care Of Themselves search_nodes talk Setup and operation of mutation testing in agentic world search_nodes talk Dealing With A Project's Complexity In A Changing Environment search_nodes talk Building uls for microservices search_nodes 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 2026 search_nodes event wroclove.rb 2025 search_nodes talk Counterintuitive Rails pt. 2 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Counterintuitive Rails pt. 1 search_nodes tool ruby-contracts search_nodes tool Elixir search_nodes talk Multi-region data governance in Rails application search_nodes talk Orchestrating video transcoding in ruby search_nodes talk MVCC for Ruby developers search_nodes concept Cache Preheating search_nodes concept HTTP Caching with ETag and Last-Modified search_nodes talk Doctrine of Useful Objects Separate Fact from Fiction in OOD search_nodes talk Understanding coupling search_nodes person Ivan Nemytchenko search_nodes person Nathan Ladd search_nodes talk Beyond the current state Time travel to the rescue! get_node_edges person Łukasz Szydło search_nodes person Armin Pašalić get_node_edges+search_nodes concept Event Handler Error Strategy search_nodes talk UringMachine — High Performance Concurrency for Ruby Using io_uring search_nodes tool PostgreSQL search_nodes talk From PostgreSQL to SQLite in Rails search_nodes talk Fantastic Databases and Where to Find Them search_nodes talk How (and why) to run SQLite in production search_nodes talk SUPER AIN'T SUPER From OOP To FP and Beyond! search_nodes tool Ruby search_nodes talk Business logic in Ruby search_nodes tool Heroku search_nodes concept Aggregate Root search_nodes talk Kamal is not harder than your PaaS search_nodes

17 edges