← Extractions

How To Ensure Systems Do What We Want And Take Care Of Themselves — wroclove.rb 2022

Michał Zajączkowski de Mezer's wroclove.rb 2022 talk on designing self-healing components via the 'at-least-once + idempotence' recipe. Covers delivery semantics, retry strategies with backoff, and protocol-level idempotence using optimistic locking and idempotency keys for HTTP GET/DELETE/PUT/POST patterns. Q&A explores race conditions on retry, third-party APIs without idempotency keys, and sharding as a CAP-theorem response.

Model
claude-opus-4-7
Ingestion
d4cd6ec9
Input tokens
191,460
fresh
96,348
cached
83,349
cache write
11,763
Output tokens
11,125
Duration
176.1s
Roundtrips
6
Tool calls
14
Cost
$0.00
Nodes/edges extracted
23 / 38
Read set (nodes/edges)
72 / 22

Nodes (23)

create Michał Bronikowski person
kind (empty) → person
name (empty) → Michał Bronikowski
slug (empty) → michal-bronikowski
description (empty) → Community member thanked at the opening of the talk for contacting the speaker and arranging the invitation to give t...
short_description (empty) → wroclove.rb community member who invited the speaker.
update Michał Zajączkowski de Mezer person
attrs (empty) → {"role" => "back-end engineer"}
description Conference speaker. → Back-end engineer working at Nagarro. Speaker at wroclove.rb 2022 with a language-agnostic talk (no Ruby code) on des...
short_description Conference speaker. → Back-end engineer at Nagarro; speaker on distributed-systems reliability.
create Nagarro company
kind (empty) → company
name (empty) → Nagarro
slug (empty) → nagarro
attrs (empty) → {"industry" => "IT services"}
description (empty) → IT services company where Michał Zajączkowski de Mezer works as a back-end engineer. Transcribed as 'naguro' in the t...
short_description (empty) → IT services and consulting company.
update How To Ensure Systems Do What We Want And Take Care Of Themselves talk
attrs {"type" => "talk"} → {"date" => "2022-03-11", "type" => "talk"}
description Talk at wroclove.rb 2022. → Michał Zajączkowski de Mezer's wroclove.rb 2022 talk. Language-agnostic with no code — a message-passing abstraction ...
short_description Talk at wroclove.rb 2022. → wroclove.rb 2022 language-agnostic talk on at-least-once + idempotence for self-healing systems.
create At-Least-Once Plus Idempotence Recipe concept
kind (empty) → concept
name (empty) → At-Least-Once Plus Idempotence Recipe
slug (empty) → at-least-once-plus-idempotence-recipe
attrs (empty) → {"category" => "pattern"}
description (empty) → The talk's central recipe for building self-healing systems. The sender guarantees at-least-once delivery via retries...
short_description (empty) → Reliability recipe: combine at-least-once delivery with idempotent receivers to achieve exactly-once effect.
create Delivery Semantics concept
kind (empty) → concept
name (empty) → Delivery Semantics
slug (empty) → delivery-semantics
attrs (empty) → {"category" => "pattern"}
description (empty) → Three processing guarantees / delivery semantics. At-most-once: trigger an action once and never retry — risk is the ...
short_description (empty) → Modes of execution: at-most-once, at-least-once, exactly-once.
create Exponential Backoff concept
kind (empty) → concept
name (empty) → Exponential Backoff
slug (empty) → exponential-backoff
attrs (empty) → {"category" => "pattern"}
description (empty) → Popular backoff strategy for retries. Instead of dense constant retries (which risk killing an already-overloaded rec...
short_description (empty) → Retry strategy where wait between attempts grows exponentially.
create Expected vs Unexpected Errors concept
kind (empty) → concept
name (empty) → Expected vs Unexpected Errors
slug (empty) → expected-vs-unexpected-errors
attrs (empty) → {"category" => "practice"}
description (empty) → Errors fall into two buckets: expected ones (known error bodies from a third party you've learned to handle) and unex...
short_description (empty) → Distinction between known/handled errors and novel ones, for alerting purposes.
create Protocol Thinking concept
kind (empty) → concept
name (empty) → Protocol Thinking
slug (empty) → protocol-thinking
attrs (empty) → {"category" => "methodology"}
description (empty) → Discipline of moving past happy-path thinking when designing the application-level protocols components use to commun...
short_description (empty) → Designing application protocols by reasoning about every failure point, not the happy path.
create Optimistic Locking concept
kind (empty) → concept
name (empty) → Optimistic Locking
slug (empty) → optimistic-locking
attrs (empty) → {"category" => "pattern"}
description (empty) → Solution to the lost-update / mid-air-collision race condition that arises when multiple senders can change the same ...
short_description (empty) → Concurrency control using a version parameter to detect and reject stale updates.
create Lost Update Problem concept
kind (empty) → concept
name (empty) → Lost Update Problem
slug (empty) → lost-update-problem
attrs (empty) → {"category" => "pattern"}
description (empty) → Race condition, also called mid-air collision, that occurs when two senders read the same state, make independent dec...
short_description (empty) → Race condition where concurrent writes overwrite each other's changes.
create Idempotency Key concept
kind (empty) → concept
name (empty) → Idempotency Key
slug (empty) → idempotency-key
attrs (empty) → {"category" => "pattern"}
description (empty) → Convention for making POST-style creation idempotent. The sender generates (or retrieves) a unique token representing...
short_description (empty) → Unique client-generated token that lets a receiver detect and ignore duplicate create requests.
create Find-or-Create Pattern concept
kind (empty) → concept
name (empty) → Find-or-Create Pattern
slug (empty) → find-or-create-pattern
attrs (empty) → {"category" => "pattern"}
description (empty) → Fallback pattern when a third-party API supports neither idempotency keys nor sender-chosen IDs: before creating, que...
short_description (empty) → Read-check-write fallback for creation without idempotency-key support.
create HTTP Method Idempotence concept
kind (empty) → concept
name (empty) → HTTP Method Idempotence
slug (empty) → http-method-idempotence
attrs (empty) → {"category" => "pattern"}
description (empty) → Analysis of HTTP verbs through a protocol-thinking lens. GET (read): idempotent — retries are always safe because no ...
short_description (empty) → Which HTTP verbs are idempotent and under what assumptions.
create Sharding concept
kind (empty) → concept
name (empty) → Sharding
slug (empty) → sharding
attrs (empty) → {"category" => "architecture"}
description (empty) → Scale-out technique in which data is divided across partitions using a deterministic function (e.g. a hash of the ent...
short_description (empty) → Partitioning data/requests across nodes by a deterministic hash to scale writes.
create Use at-least-once plus idempotence to build self-healing systems takeaway
kind (empty) → takeaway
name (empty) → Use at-least-once plus idempotence to build self-healing systems
slug (empty) → use-at-least-once-plus-idempotence-to-build-self-healing-systems
attrs (empty) → {"type" => "recommendation"}
description (empty) → The one-slide takeaway of the talk: if you remember only one thing, use the recipe 'at-least-once + idempotence' at e...
short_description (empty) → Combine at-least-once delivery with idempotent receivers so systems resume and self-heal.
create Don't kill dependencies — use backoff takeaway
kind (empty) → takeaway
name (empty) → Don't kill dependencies — use backoff
slug (empty) → don-t-kill-dependencies-use-backoff
attrs (empty) → {"type" => "warning"}
description (empty) → Every retry reserves CPU and memory on the receiver. If the receiver is already close to out-of-memory, aggressive co...
short_description (empty) → Retries without backoff can push an already-struggling receiver over the edge.
create Don't kill your team — alert only on unexpected errors takeaway
kind (empty) → takeaway
name (empty) → Don't kill your team — alert only on unexpected errors
slug (empty) → don-t-kill-your-team-alert-only-on-unexpected-errors
attrs (empty) → {"type" => "recommendation"}
description (empty) → Flooding error-monitoring tools (Rollbar, Sentry) with expected third-party exceptions burns developer cycles for no ...
short_description (empty) → Only page the team on unexpected errors; use metrics/alarms for the expected ones.
create Tune retry duration to the actor takeaway
kind (empty) → takeaway
name (empty) → Tune retry duration to the actor
slug (empty) → tune-retry-duration-to-the-actor
attrs (empty) → {"type" => "recommendation"}
description (empty) → Decide how long to retry based on who initiated the communication. For human users, UX beats durability — retry one t...
short_description (empty) → Humans want fast feedback; machines should retry for days so systems self-heal.
create Negotiate for idempotency-key support takeaway
kind (empty) → takeaway
name (empty) → Negotiate for idempotency-key support
slug (empty) → negotiate-for-idempotency-key-support
attrs (empty) → {"type" => "recommendation"}
description (empty) → When integrating with a third party that supports neither idempotency keys nor find-or-create nor sender-chosen IDs, ...
short_description (empty) → If a third-party API lacks idempotency support, negotiate the feature or switch providers.
create How should POST retries handle changed source-of-truth state? question
kind (empty) → question
name (empty) → How should POST retries handle changed source-of-truth state?
slug (empty) → how-should-post-retries-handle-changed-source-of-truth-state
attrs (empty) → {"answer_summary" => "Apply optimistic locking with a version parameter; receiver compares the incoming version and a...
description (empty) → Audience question: when a POST depends on some entity that may have been updated between the initial attempt and the ...
short_description (empty) → On retry, should the sender re-POST with updated parameters from the meanwhile-changed entity?
create Handling third-party APIs without idempotency keys question
kind (empty) → question
name (empty) → Handling third-party APIs without idempotency keys
slug (empty) → handling-third-party-apis-without-idempotency-keys
attrs (empty) → {"answer_summary" => "PUT with a sender-chosen UUID if supported; otherwise negotiate with the provider or switch API...
description (empty) → Audience question: when a third-party API doesn't support idempotency keys and the find-or-create technique is imprac...
short_description (empty) → How to guarantee single creation when neither idempotency keys nor efficient find-or-create exist?
create Scaling receivers vs implementing idempotency question
kind (empty) → question
name (empty) → Scaling receivers vs implementing idempotency
slug (empty) → scaling-receivers-vs-implementing-idempotency
attrs (empty) → {"answer_summary" => "Yes — it's the CAP theorem at work. Solve the partitioning dimension with sharding: route each ...
description (empty) → Audience observation: race conditions happen under load, which pushes receivers to scale out, which makes the atomic/...
short_description (empty) → Does scaling receivers under race-condition load make idempotency harder to implement?

Edges (38)

update Michał Zajączkowski de Mezer → authored → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Single-speaker presentation delivered at wroclove.rb 2022.
update How To Ensure Systems Do What We Want And Take Care Of Themselves → presented_at → wroclove.rb 2022
context (empty) → Talk delivered at wroclove.rb 2022 on 2022-03-11.
create Michał Zajączkowski de Mezer → works_at → Nagarro
attrs (empty) → {"role" => "back-end engineer"}
context (empty) → Speaker introduces himself as a back-end engineer at Nagarro.
relation (empty) → works_at
source_node_id (empty) → a91c84e8-bda1-4056-b7ad-7b890e00deb8
target_node_id (empty) → 43724f5d-e9d2-461f-8b4d-09b26d1f3229
create Michał Zajączkowski de Mezer → attended → wroclove.rb 2022
context (empty) → Speaker at the conference.
relation (empty) → attended
source_node_id (empty) → a91c84e8-bda1-4056-b7ad-7b890e00deb8
target_node_id (empty) → cfc5cfd3-25a6-46c2-8b5d-626986c71c24
create Michał Bronikowski → attended → wroclove.rb 2022
context (empty) → Thanked at the talk opening for contacting the speaker and arranging the invitation.
relation (empty) → attended
source_node_id (empty) → 7149f222-3e48-472a-b6b6-1aaa816b52a5
target_node_id (empty) → cfc5cfd3-25a6-46c2-8b5d-626986c71c24
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → At-Least-Once Plus Idempotence Recipe
context (empty) → Recipe is the central thesis of the talk.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → f3ef76bf-36a3-4bb8-9ad0-bc35e98acb77
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Delivery Semantics
context (empty) → Introduces at-most-once, at-least-once, and exactly-once as the framing vocabulary.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 23085687-ab63-4b69-a5c2-e58d4ad8d82c
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Exponential Backoff
context (empty) → Recommended default backoff strategy for retries.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 229931b7-1b40-4443-9005-423213546dd2
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Expected vs Unexpected Errors
context (empty) → Argues for splitting error reporting into expected (metrics/alarms) vs unexpected (team alerts).
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → ff3b59a3-99cd-4725-afa8-a1c4f199da02
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Protocol Thinking
context (empty) → The discipline used to exercise HTTP verbs against failure scenarios.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → decbdaba-f2c1-466b-bccc-69ee211fdc30
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Idempotence
context (empty) → Second half of the talk is dedicated to idempotence at the protocol level.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 9ed80710-b8d8-494f-977f-be1931496d4d
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → HTTP Method Idempotence
context (empty) → Walks through GET, DELETE, PUT, POST under the protocol-thinking lens.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 75ee2374-b8d5-412f-94ce-6a4b6d5c8063
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Optimistic Locking
context (empty) → Presented as the protocol-level solution to lost-update races on PUT/DELETE.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 5604d211-a088-4be3-803e-7edb75bbd440
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Lost Update Problem
context (empty) → Race condition motivating optimistic locking.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 2843ef10-b63b-47c7-846b-b0c1ac118596
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Idempotency Key
context (empty) → Convention for making POST creation idempotent.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 4016c0bc-92a7-4c51-8596-2af7bcc2fe42
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Find-or-Create Pattern
context (empty) → Fallback when a third-party API lacks idempotency-key support.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 2c0e5c23-17c1-4f20-a5f2-f50006e97cac
create How To Ensure Systems Do What We Want And Take Care Of Themselves → about → Sharding
context (empty) → Raised in Q&A as the CAP-theorem answer to race-load scaling.
relation (empty) → about
source_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
target_node_id (empty) → 550fff04-b19a-403d-83f1-430622dfc07c
create Idempotency Key → related_to → Idempotence
context (empty) → An implementation mechanism for idempotent POST-style creation.
relation (empty) → related_to
source_node_id (empty) → 4016c0bc-92a7-4c51-8596-2af7bcc2fe42
target_node_id (empty) → 9ed80710-b8d8-494f-977f-be1931496d4d
create Optimistic Locking → related_to → Lost Update Problem
context (empty) → Optimistic locking is the prescribed solution to the lost-update race.
relation (empty) → related_to
source_node_id (empty) → 5604d211-a088-4be3-803e-7edb75bbd440
target_node_id (empty) → 2843ef10-b63b-47c7-846b-b0c1ac118596
create Find-or-Create Pattern → related_to → Idempotency Key
context (empty) → Find-or-create is the fallback used when idempotency keys are not available.
relation (empty) → related_to
source_node_id (empty) → 2c0e5c23-17c1-4f20-a5f2-f50006e97cac
target_node_id (empty) → 4016c0bc-92a7-4c51-8596-2af7bcc2fe42
create HTTP Method Idempotence → related_to → Protocol Thinking
context (empty) → The HTTP-verb analysis is the worked example of protocol thinking in the talk.
relation (empty) → related_to
source_node_id (empty) → 75ee2374-b8d5-412f-94ce-6a4b6d5c8063
target_node_id (empty) → decbdaba-f2c1-466b-bccc-69ee211fdc30
create Use at-least-once plus idempotence to build self-healing systems → from_talk → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Single 'remember-this-one-thing' takeaway of the presentation.
relation (empty) → from_talk
source_node_id (empty) → 1ee8cd4e-75b8-4aa3-92e1-4dcc3ff265c7
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create Use at-least-once plus idempotence to build self-healing systems → about → At-Least-Once Plus Idempotence Recipe
context (empty) → The takeaway is the recipe itself.
relation (empty) → about
source_node_id (empty) → 1ee8cd4e-75b8-4aa3-92e1-4dcc3ff265c7
target_node_id (empty) → f3ef76bf-36a3-4bb8-9ad0-bc35e98acb77
create Don't kill dependencies — use backoff → from_talk → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Advice given in the retry section.
relation (empty) → from_talk
source_node_id (empty) → 07f2a0e7-824c-45bc-b62f-75a087a358b2
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create Don't kill dependencies — use backoff → about → Exponential Backoff
context (empty) → Endorses exponential backoff as the mechanism.
relation (empty) → about
source_node_id (empty) → 07f2a0e7-824c-45bc-b62f-75a087a358b2
target_node_id (empty) → 229931b7-1b40-4443-9005-423213546dd2
create Don't kill your team — alert only on unexpected errors → from_talk → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Advice given in the error-reporting section.
relation (empty) → from_talk
source_node_id (empty) → 13b4bd4c-01a3-4658-ac93-4cf0b93d1e0c
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create Don't kill your team — alert only on unexpected errors → about → Expected vs Unexpected Errors
context (empty) → Directly builds on the expected/unexpected distinction.
relation (empty) → about
source_node_id (empty) → 13b4bd4c-01a3-4658-ac93-4cf0b93d1e0c
target_node_id (empty) → ff3b59a3-99cd-4725-afa8-a1c4f199da02
create Tune retry duration to the actor → from_talk → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Guidance on when to stop retrying based on human vs machine senders.
relation (empty) → from_talk
source_node_id (empty) → cb53734a-23f1-4ac5-9cb1-98fef36ac064
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create Negotiate for idempotency-key support → from_talk → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Advice for integrating with third parties lacking idempotency support.
relation (empty) → from_talk
source_node_id (empty) → c9a21ceb-e82a-47a4-9d3c-d347aed1f20e
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create Negotiate for idempotency-key support → about → Idempotency Key
context (empty) → Recommends lobbying providers to support the pattern.
relation (empty) → about
source_node_id (empty) → c9a21ceb-e82a-47a4-9d3c-d347aed1f20e
target_node_id (empty) → 4016c0bc-92a7-4c51-8596-2af7bcc2fe42
create How should POST retries handle changed source-of-truth state? → asked_at → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → First audience question in the Q&A.
relation (empty) → asked_at
source_node_id (empty) → aaeb7956-95e8-4a85-9edc-b4025041d154
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create How should POST retries handle changed source-of-truth state? → about → Optimistic Locking
context (empty) → Answer applies optimistic locking (version 0) to POST retries.
relation (empty) → about
source_node_id (empty) → aaeb7956-95e8-4a85-9edc-b4025041d154
target_node_id (empty) → 5604d211-a088-4be3-803e-7edb75bbd440
create Handling third-party APIs without idempotency keys → asked_at → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Second audience question in the Q&A.
relation (empty) → asked_at
source_node_id (empty) → 8b0b049e-c8fa-4174-9586-099db1e03030
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create Handling third-party APIs without idempotency keys → about → Idempotency Key
context (empty) → Topic is what to do when the third party does not support idempotency keys.
relation (empty) → about
source_node_id (empty) → 8b0b049e-c8fa-4174-9586-099db1e03030
target_node_id (empty) → 4016c0bc-92a7-4c51-8596-2af7bcc2fe42
create Handling third-party APIs without idempotency keys → about → Find-or-Create Pattern
context (empty) → Asker notes the find-or-create fallback is impractical at scale.
relation (empty) → about
source_node_id (empty) → 8b0b049e-c8fa-4174-9586-099db1e03030
target_node_id (empty) → 2c0e5c23-17c1-4f20-a5f2-f50006e97cac
create Scaling receivers vs implementing idempotency → asked_at → How To Ensure Systems Do What We Want And Take Care Of Themselves
context (empty) → Third audience question in the Q&A.
relation (empty) → asked_at
source_node_id (empty) → f5caf6f1-6d0a-41c8-9412-9237e1792b7f
target_node_id (empty) → cb83248a-f372-4223-bf22-c7f7c8157443
create Scaling receivers vs implementing idempotency → about → Sharding
context (empty) → Answer proposes sharding by hash function as the CAP-theorem response.
relation (empty) → about
source_node_id (empty) → f5caf6f1-6d0a-41c8-9412-9237e1792b7f
target_node_id (empty) → 550fff04-b19a-403d-83f1-430622dfc07c
create Scaling receivers vs implementing idempotency → about → Idempotence
context (empty) → Question is about the tension between scaling and implementing idempotency.
relation (empty) → about
source_node_id (empty) → f5caf6f1-6d0a-41c8-9412-9237e1792b7f
target_node_id (empty) → 9ed80710-b8d8-494f-977f-be1931496d4d

Read set

72 nodes

concept Idempotence search_nodes concept Reservation Pattern search_nodes concept Idempotent Projectors and Reactors search_nodes concept Entity Caching and Snapshotting search_nodes takeaway Eventual Consistency Trade-off search_nodes talk Adventures in durable execution search_nodes question How do you order events across distributed systems? search_nodes concept Aggregate-Scoped Sequence Number search_nodes takeaway Immutable Database Raises Mistake Cost search_nodes concept Event Store search_nodes event wroclove.rb 2022 search_nodes+get_node_edges event wroclove.rb 2023 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Data Management With Ruby search_nodes talk Fantastic Databases and Where to Find Them search_nodes person Michał Zajączkowski de Mezer search_nodes project Ruby Romania search_nodes tool Ruby search_nodes resource Short Ruby Newsletter search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes tool TruffleRuby search_nodes person Adam Okoń search_nodes talk Scientific Ruby Lightning Talk search_nodes person Akira Matsuda search_nodes tool RubyGems search_nodes concept Optimistic UI search_nodes talk Optimistic ul search_nodes concept Last-Write-Wins search_nodes concept Expected Version search_nodes concept Atomic Commit search_nodes takeaway Use Logux for optimistic UI with Rails search_nodes concept Resumable Uploads search_nodes concept Stalling For Time search_nodes resource Rocket Real-Time Benchmark search_nodes takeaway Replay-Based Debugging search_nodes takeaway Per-Event Backups Via Reactors search_nodes concept Saga Pattern search_nodes concept tus protocol search_nodes concept Sometimes Nothing Is Enough search_nodes concept Horizontal Sharding search_nodes takeaway Horizontal Scale Superpower search_nodes question Cross-tenant aggregation with row-level multi-tenancy search_nodes concept Eventual Consistency search_nodes concept Database-Level Partitioning search_nodes concept Schema-Level Partitioning search_nodes concept CQRS search_nodes concept Distributed Monolith search_nodes takeaway Signed On-the-fly URLs search_nodes concept Command UUID Deduplication search_nodes concept Distributed Systems search_nodes concept HTTP Caching with ETag and Last-Modified search_nodes takeaway Build APIs with immutability, EDN, context-free, flat search_nodes concept Context-Free Identifiers search_nodes talk How To Ensure Systems Do What We Want And Take Care Of Themselves get_node_edges company Red Hat search_nodes company Microsoft search_nodes company OVH search_nodes concept TCP Slow Start search_nodes takeaway Action Cable Crowded-Channel Trade-off search_nodes concept Bouncing Select search_nodes concept Command Message search_nodes concept Entity Coupled To Messaging search_nodes concept Commands, Queries, and Events search_nodes talk Message Bus Decoupling Lightning Talk search_nodes concept Events and Commands search_nodes tool Erlang search_nodes question When is a command considered processed? search_nodes

22 edges