← Extractions

Building UIs for Microservices — Ethan Garofolo at wroclove.rb 2019

Ethan Garofolo's wroclove.rb 2019 talk reframes microservices around autonomous services communicating via asynchronous commands and events, and walks through UI patterns (ignore, stall-for-time, task-driven with deferred validation) for working with eventually-consistent systems. He argues teams fail because they try to map MVC-CRUD mental models onto service architectures instead of first deciding what experience to deliver to users.

Model
claude-opus-4-7
Ingestion
72b66aa6
Input tokens
294,999
fresh
183,351
cached
101,781
cache write
9,867
Output tokens
13,201
Duration
213.3s
Roundtrips
8
Tool calls
22
Cost
$0.00
Nodes/edges extracted
28 / 46
Read set (nodes/edges)
106 / 2

Nodes (28)

create Aggregator concept
kind (empty) → concept
name (empty) → Aggregator
slug (empty) → aggregator
attrs (empty) → {"category" => "pattern"}
description (empty) → Component that subscribes to the linear list of events and shapes them into materialized views / read models suitable...
short_description (empty) → Component that shapes event streams into read models / materialized views.
update Building uls for microservices talk
description Talk at wroclove.rb 2019. → Ethan Garofolo's wroclove.rb 2019 talk on the UI implications of microservices. Framed as a 'questions talk' rather t...
short_description Talk at wroclove.rb 2019. → Ethan Garofolo's wroclove.rb 2019 talk on UI implications of microservices.
update Ethan Garofolo person
attrs (empty) → {"location" => "Western United States"}
description Conference speaker. → Conference speaker based in the western United States. Started web development with a popular Ruby web framework but ...
short_description Conference speaker. → Microservices practitioner and author writing a Pragmatic Bookshelf book on microservices.
create Monolith as Data Model concept
kind (empty) → concept
name (empty) → Monolith as Data Model
slug (empty) → monolith-as-data-model
attrs (empty) → {"category" => "architecture"}
description (empty) → Garofolo's definition: a monolith is not a deployment strategy or a single repository — it is a data model in which m...
short_description (empty) → Defining a monolith as a single data model cramming many unrelated domains together.
create Distributed Monolith concept
kind (empty) → concept
name (empty) → Distributed Monolith
slug (empty) → distributed-monolith
attrs (empty) → {"category" => "architecture"}
description (empty) → Anti-pattern in which a monolithic data model is extracted into separate services/servers connected by HTTP, leaving ...
short_description (empty) → Anti-pattern: splitting a monolithic data model across HTTP without changing access patterns.
create Service Autonomy concept
kind (empty) → concept
name (empty) → Service Autonomy
slug (empty) → service-autonomy
attrs (empty) → {"category" => "pattern"}
description (empty) → Garofolo's central definition of what makes something a service. Autonomy requirements: (1) no one asks a service for...
short_description (empty) → A service has no GET API, no external dependencies, and is oblivious to other system parts.
create Events and Commands concept
kind (empty) → concept
name (empty) → Events and Commands
slug (empty) → events-and-commands
attrs (empty) → {"category" => "pattern"}
description (empty) → Services communicate via asynchronous messages in two flavors. Events are past-tense JSON messages with a type (e.g. ...
short_description (empty) → Async message types: past-tense events (facts) and imperative commands (intent).
create Message Store concept
kind (empty) → concept
name (empty) → Message Store
slug (empty) → message-store
attrs (empty) → {"category" => "architecture"}
description (empty) → A database specialized for storing and retrieving events and commands that services publish and consume in a pub/sub ...
short_description (empty) → Database optimized for storing and retrieving commands and events.
create Scott Bell person
kind (empty) → person
name (empty) → Scott Bell
slug (empty) → scott-bell
description (empty) → Co-maintainer of the Eventide project's Postgres-backed message store alongside Nathan Ladd.
short_description (empty) → Co-maintainer of the Eventide message store alongside Nathan Ladd.
create Task-Driven UI concept
kind (empty) → concept
name (empty) → Task-Driven UI
slug (empty) → task-driven-ui
attrs (empty) → {"category" => "pattern"}
description (empty) → UI style in which the software encodes specific tasks the user performs, rather than showing one giant form containin...
short_description (empty) → UI approach presenting small process-aware forms instead of a giant edit-everything form.
create Sometimes Nothing Is Enough concept
kind (empty) → concept
name (empty) → Sometimes Nothing Is Enough
slug (empty) → sometimes-nothing-is-enough
attrs (empty) → {"category" => "pattern"}
description (empty) → UI pattern for eventually-consistent systems: when users don't expect real-time feedback (analytics, view counts, etc...
short_description (empty) → UI pattern: don't wait for async processing when real-time feedback isn't required.
create Stalling For Time concept
kind (empty) → concept
name (empty) → Stalling For Time
slug (empty) → stalling-for-time
attrs (empty) → {"category" => "pattern"}
description (empty) → UI pattern for eventually-consistent systems: give the user a credible static confirmation page while background proc...
short_description (empty) → UI pattern: hide async background work behind a plausible static confirmation screen.
create Embrace The Evented Model concept
kind (empty) → concept
name (empty) → Embrace The Evented Model
slug (empty) → embrace-the-evented-model
attrs (empty) → {"category" => "pattern"}
description (empty) → UI pattern for eventually-consistent systems: instead of synchronously rejecting invalid input, accept the command, r...
short_description (empty) → UI pattern: record bad input as an event and show tailored read-model views per audience.
update Ubiquitous Language concept
description A language deliberately designed so the same terms are used in spoken discussion, written documentation, tests, and s... → Domain-driven design concept Garofolo invokes to motivate defining common terms (monolith, service, events, commands)...
short_description Designed shared language used by domain experts and code within one bounded context. → DDD term for a shared vocabulary between domain experts and developers.
create Event Store (project) project
kind (empty) → project
name (empty) → Event Store (project)
slug (empty) → event-store-project
attrs (empty) → {"status" => "active", "license" => "open-source"}
description (empty) → Event store project associated with Greg Young, cited by Garofolo as an example of a message store for event-sourced ...
short_description (empty) → Greg Young's event store project for event-sourced systems.
create Pragmatic Bookshelf company
kind (empty) → company
name (empty) → Pragmatic Bookshelf
slug (empty) → pragmatic-bookshelf
attrs (empty) → {"industry" => "publishing"}
description (empty) → Technical publisher for which Ethan Garofolo is writing a book about microservices.
short_description (empty) → Technical publisher of programming and software-engineering books.
update Node.js tool
description JavaScript runtime for backend work. Panel's take: Node.js is not the primary backend option at many companies and fa... → JavaScript runtime for backend work. Panel's take: Node.js is not the primary backend option at many companies and fa...
create Aaron Patterson person
kind (empty) → person
name (empty) → Aaron Patterson
slug (empty) → aaron-patterson
description (empty) → Ruby and Rails core contributor cited by Garofolo for the line 'microservices are great for turning method calls into...
short_description (empty) → Prominent Ruby/Rails core contributor known for humor and technical depth.
create Claude Lévi-Strauss person
kind (empty) → person
name (empty) → Claude Lévi-Strauss
slug (empty) → claude-levi-strauss
description (empty) → French philosopher/anthropologist quoted by Garofolo: 'the scientist is not a person who gives the right answers; the...
short_description (empty) → French anthropologist and philosopher quoted on questions vs answers in science.
update Andrzej Śliwa person
description Berlin-based Ruby developer who was working at a fintech startup (securitization of loans) and departing to Zencargo ... → Arkency-affiliated Ruby developer who speaks on CQRS and event sourcing with Rails Event Store. Cited by Garofolo as ...
short_description Ruby developer specializing in DDD, event sourcing, CQRS and functional programming. → Arkency developer, speaker on CQRS/Event Sourcing with Rails.
create Design UX Before Technology takeaway
kind (empty) → takeaway
name (empty) → Design UX Before Technology
slug (empty) → design-ux-before-technology
attrs (empty) → {"type" => "recommendation"}
description (empty) → Garofolo's core recommendation: set aside all technology choices and work with your business team and UX experts to d...
short_description (empty) → Decide the user experience with business/UX before choosing the tech, especially for services.
create Don't Bring MVC-CRUD Thinking To Services takeaway
kind (empty) → takeaway
name (empty) → Don't Bring MVC-CRUD Thinking To Services
slug (empty) → don-t-bring-mvc-crud-thinking-to-services
attrs (empty) → {"type" => "warning"}
description (empty) → Warning: if you bring MVC-CRUD mental models (immediate response for every request, form-over-row editing, DB-level v...
short_description (empty) → Service architectures collapse when the mental model stays MVC-CRUD.
create Elevate Validations Into The Domain takeaway
kind (empty) → takeaway
name (empty) → Elevate Validations Into The Domain
slug (empty) → elevate-validations-into-the-domain
attrs (empty) → {"type" => "insight"}
description (empty) → Validation is not a persistence concern — it is part of the core domain model. Pulling validations out of ActiveRecor...
short_description (empty) → Treat validation as core domain logic in a service, not a persistence concern.
create A Week Or Two Of Up-front Analysis Is Still Agile takeaway
kind (empty) → takeaway
name (empty) → A Week Or Two Of Up-front Analysis Is Still Agile
slug (empty) → a-week-or-two-of-up-front-analysis-is-still-agile
attrs (empty) → {"type" => "recommendation"}
description (empty) → Event-based service systems require up-front analysis — not nine-month waterfall, but a week or two of figuring out w...
short_description (empty) → Event-based systems need real up-front analysis; one-to-two weeks is not waterfall.
create Recommend Reading The Eventide Project takeaway
kind (empty) → takeaway
name (empty) → Recommend Reading The Eventide Project
slug (empty) → recommend-reading-the-eventide-project
attrs (empty) → {"type" => "recommendation"}
description (empty) → Garofolo recommends reading the Eventide project's documentation as fantastic material that will inform your thinking...
short_description (empty) → Garofolo recommends reading Eventide's docs even if you don't use it day-to-day.
create When is a command considered processed? question
kind (empty) → question
name (empty) → When is a command considered processed?
slug (empty) → when-is-a-command-considered-processed
attrs (empty) → {"answer_summary" => "When the responsible service has produced the event in response to the command — aggregators ob...
description (empty) → Audience asks when a command should be considered processed. Garofolo: when the service has produced the correspondin...
short_description (empty) → Q&A on when to treat a command as processed in an event-driven system.
create Does per-field validation blow up UI complexity? question
kind (empty) → question
name (empty) → Does per-field validation blow up UI complexity?
slug (empty) → does-per-field-validation-blow-up-ui-complexity
attrs (empty) → {"answer_summary" => "You aren't forced to validate every field this way, but pairing the approach with task-driven U...
description (empty) → Audience worries that validating each field via events (label, description, etc.) would require many new forms and UI...
short_description (empty) → Q&A on whether accepting invalid events and validating per-field increases UI complexity.
create How to migrate legacy data into an event-sourced system? question
kind (empty) → question
name (empty) → How to migrate legacy data into an event-sourced system?
slug (empty) → how-to-migrate-legacy-data-into-an-event-sourced-system
attrs (empty) → {"answer_summary" => "Build the new domain model first, then seed new streams with 'legacy imported' events. The orig...
description (empty) → Audience member (commercial real-estate company) asks how to handle migrating data from decades-old legacy systems wh...
short_description (empty) → Q&A on importing legacy database data as the starting events of new streams.

Edges (46)

update Ethan Garofolo → authored → Building uls for microservices
context (empty) → Garofolo delivered this talk at wroclove.rb 2019.
update Building uls for microservices → presented_at → wroclove.rb 2019
context (empty) → Talk delivered at the 2019 edition of wroclove.rb.
create Ethan Garofolo → works_on → Pragmatic Bookshelf
attrs (empty) → {"role" => "author"}
context (empty) → Writing a book about microservices for the Pragmatic Bookshelf.
relation (empty) → works_on
source_node_id (empty) → 7d9dc5f0-e9bf-42cb-bbb7-a0e11d1f3009
target_node_id (empty) → 159b3fdf-6b4e-4ad4-a2c3-d5cd4e0f507a
create Ethan Garofolo → uses → Node.js
context (empty) → Makes his living programming in Node.js.
relation (empty) → uses
source_node_id (empty) → 7d9dc5f0-e9bf-42cb-bbb7-a0e11d1f3009
target_node_id (empty) → 9aeec77e-7dee-4054-85fe-541434a0d272
create Ethan Garofolo → recommends → Recommend Reading The Eventide Project
context (empty) → Closes the talk recommending the Eventide project's docs as reading material.
relation (empty) → recommends
source_node_id (empty) → 7d9dc5f0-e9bf-42cb-bbb7-a0e11d1f3009
target_node_id (empty) → 1ebf56e0-a73d-4401-8421-8f73fac6307c
create Building uls for microservices → about → Monolith as Data Model
context (empty) → Redefines a monolith as a data model rather than a deployment unit.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → ff7269c2-94b0-4600-9af2-5e686e72aae7
create Building uls for microservices → about → Distributed Monolith
context (empty) → Warns that extracting a monolith over HTTP without changing access patterns yields a distributed monolith.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → a3f89459-620c-477b-8cc5-8f0ea99f603e
create Building uls for microservices → about → Service Autonomy
context (empty) → Centers the definition of a service on autonomy.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → cbcd7061-ffc0-4a24-993e-4076c6dc9c3a
create Building uls for microservices → about → Events and Commands
context (empty) → Explains past-tense events and imperative commands as the two message flavors between services.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 772380ce-dd09-4d23-bda6-1acfbec76487
create Building uls for microservices → about → Message Store
context (empty) → Introduces message stores as the pub/sub transport for events and commands.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 6e525311-fbf8-49e7-8017-7bf53f6ce02b
create Building uls for microservices → about → Aggregator
context (empty) → Describes aggregators shaping event streams into read models.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 6ab520d9-ba0d-4b3c-8c63-2f12ee658205
create Building uls for microservices → about → Sometimes Nothing Is Enough
context (empty) → Presents the 'don't wait' UI pattern with a YouTube-style view count example.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 3ba414af-5e88-4df4-b61e-2f8fd225b22c
create Building uls for microservices → about → Stalling For Time
context (empty) → Presents the swan-metaphor UI pattern using email confirmation/registration as an example.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 9c58a4df-ce80-4c60-ba10-4829e2cc50de
create Building uls for microservices → about → Embrace The Evented Model
context (empty) → Presents the accept-bad-input + per-audience-view UI pattern using the video name example.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 384b32bf-c76b-424f-8a2b-a8d7ea90170e
create Building uls for microservices → about → Task-Driven UI
context (empty) → Advocates task-driven UIs instead of giant edit-everything forms.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → e778f635-8b61-4ac0-944d-4a45e8d3e957
create Building uls for microservices → about → CQRS
context (empty) → References the CQRS pattern when explaining how aggregators shape different views per audience.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 8918002a-9def-4449-a187-e3052bf175b5
create Building uls for microservices → about → Event Sourcing
context (empty) → Discusses events literally becoming the state of the system.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5
create Building uls for microservices → about → Ubiquitous Language
context (empty) → Invokes DDD's ubiquitous-language idea to justify defining shared terms up front.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 143ce1ce-e02c-4efb-abeb-ad39d8cdc0d6
create Building uls for microservices → about → Eventide
context (empty) → Cites Eventide and its Postgres-backed message store as an example implementation.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 702f4d95-01a7-4836-9562-8c14b01a4b73
create Building uls for microservices → about → rails_event_store
context (empty) → Cites Rails Event Store (Arkency / Andrzej) as an example message store.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Building uls for microservices → about → Event Store (project)
context (empty) → Cites Greg Young's Event Store project as an example message store.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 4cef42c8-83ec-420d-b2ce-fb9b51f0711c
create Building uls for microservices → about → Aaron Patterson
context (empty) → Quotes Aaron Patterson's 'distributed computing problems' line to skewer the distributed monolith.
relation (empty) → about
source_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
target_node_id (empty) → 81cd828d-cc7c-4022-982a-cd5690dfd1e0
create Distributed Monolith → related_to → Monolith as Data Model
context (empty) → A distributed monolith is a monolithic data model extracted over HTTP without changing access patterns.
relation (empty) → related_to
source_node_id (empty) → a3f89459-620c-477b-8cc5-8f0ea99f603e
target_node_id (empty) → ff7269c2-94b0-4600-9af2-5e686e72aae7
create Eventide → related_to → Message Store
context (empty) → Eventide ships a Postgres-backed message store implementation.
relation (empty) → related_to
source_node_id (empty) → 702f4d95-01a7-4836-9562-8c14b01a4b73
target_node_id (empty) → 6e525311-fbf8-49e7-8017-7bf53f6ce02b
create rails_event_store → related_to → Message Store
context (empty) → Rails Event Store is given as an example of a message store implementation.
relation (empty) → related_to
source_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
target_node_id (empty) → 6e525311-fbf8-49e7-8017-7bf53f6ce02b
create Event Store (project) → related_to → Message Store
context (empty) → Greg Young's Event Store project is given as a canonical message store implementation.
relation (empty) → related_to
source_node_id (empty) → 4cef42c8-83ec-420d-b2ce-fb9b51f0711c
target_node_id (empty) → 6e525311-fbf8-49e7-8017-7bf53f6ce02b
create Greg Young → works_on → Event Store (project)
attrs (empty) → {"role" => "author"}
context (empty) → Garofolo attributes the Event Store project to Greg Young.
relation (empty) → works_on
source_node_id (empty) → 45e8eebf-faf5-48d2-a2fe-fb21ff38b80a
target_node_id (empty) → 4cef42c8-83ec-420d-b2ce-fb9b51f0711c
update Nathan Ladd → works_on → Eventide
attrs {"role" => "co-author/maintainer"} → {"role" => "co-maintainer"}
context Co-author and maintainer of Eventide; mentions maintaining 30+ gems. → Garofolo names Nathan as co-maintainer of Eventide's Postgres-backed message store.
create Scott Bell → works_on → Eventide
attrs (empty) → {"role" => "co-maintainer"}
context (empty) → Garofolo names Scott Bell as co-maintainer of Eventide's Postgres-backed message store alongside Nathan Ladd.
relation (empty) → works_on
source_node_id (empty) → 1a9bf14a-9bd6-4ad1-b80f-5484b342dd14
target_node_id (empty) → 702f4d95-01a7-4836-9562-8c14b01a4b73
update Andrzej Śliwa → works_on → rails_event_store
attrs {"role" => "contributor"} → {"role" => "maintainer"}
context Contributing to rails_event_store via Arkency; some of the team's patterns merged upstream. → Garofolo credits 'Andre and the folks at Arkency' with maintaining Rails Event Store.
create Andrzej Śliwa → works_at → Arkency
context (empty) → Garofolo associates Andrzej with the Arkency team maintaining Rails Event Store.
relation (empty) → works_at
source_node_id (empty) → 85da3fcc-bd29-47c7-a138-fa1708770fc9
target_node_id (empty) → f8b4b616-ffd6-4eaa-a7b9-fdc07bb2cb27
create Arkency → works_on → rails_event_store
context (empty) → Arkency maintains Rails Event Store.
relation (empty) → works_on
source_node_id (empty) → f8b4b616-ffd6-4eaa-a7b9-fdc07bb2cb27
target_node_id (empty) → 9e5cb718-6f86-4937-9b4c-eb77da3aede8
create Design UX Before Technology → from_talk → Building uls for microservices
context (empty) → Closing recommendation of the talk.
relation (empty) → from_talk
source_node_id (empty) → 74ad8129-32d1-49bb-9568-e2fce099a09c
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create Don't Bring MVC-CRUD Thinking To Services → from_talk → Building uls for microservices
context (empty) → Core warning of the talk, illustrated by the zebra/texture-map metaphor.
relation (empty) → from_talk
source_node_id (empty) → af2ee74a-7a08-4555-91ea-a7140638bb11
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create Elevate Validations Into The Domain → from_talk → Building uls for microservices
context (empty) → Extracted from the embrace-the-evented-model section on validations.
relation (empty) → from_talk
source_node_id (empty) → 646f2753-a844-4118-a53d-d2c3e4305485
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create A Week Or Two Of Up-front Analysis Is Still Agile → from_talk → Building uls for microservices
context (empty) → Stated before the video-upload validation example.
relation (empty) → from_talk
source_node_id (empty) → f2b6c2f8-68cd-46e1-adc2-c4be085dd598
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create Recommend Reading The Eventide Project → from_talk → Building uls for microservices
context (empty) → Closing recommendation of the talk.
relation (empty) → from_talk
source_node_id (empty) → 1ebf56e0-a73d-4401-8421-8f73fac6307c
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create Design UX Before Technology → about → Task-Driven UI
context (empty) → Designing UX first is what motivates task-driven UIs over form-over-row.
relation (empty) → about
source_node_id (empty) → 74ad8129-32d1-49bb-9568-e2fce099a09c
target_node_id (empty) → e778f635-8b61-4ac0-944d-4a45e8d3e957
create Don't Bring MVC-CRUD Thinking To Services → about → Distributed Monolith
context (empty) → MVC-CRUD mindset applied to services produces the distributed monolith anti-pattern.
relation (empty) → about
source_node_id (empty) → af2ee74a-7a08-4555-91ea-a7140638bb11
target_node_id (empty) → a3f89459-620c-477b-8cc5-8f0ea99f603e
create Elevate Validations Into The Domain → about → Embrace The Evented Model
context (empty) → Elevating validations into services is what enables the embrace-the-evented-model UI pattern.
relation (empty) → about
source_node_id (empty) → 646f2753-a844-4118-a53d-d2c3e4305485
target_node_id (empty) → 384b32bf-c76b-424f-8a2b-a8d7ea90170e
create When is a command considered processed? → asked_at → Building uls for microservices
context (empty) → Asked in Q&A after the talk.
relation (empty) → asked_at
source_node_id (empty) → ef69bee7-a0ea-466f-bd04-555b70e8fbf1
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create Does per-field validation blow up UI complexity? → asked_at → Building uls for microservices
context (empty) → Asked in Q&A after the talk.
relation (empty) → asked_at
source_node_id (empty) → e2aec8d6-1f80-4b8f-a3ee-60b7fd3eda5a
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create How to migrate legacy data into an event-sourced system? → asked_at → Building uls for microservices
context (empty) → Asked in Q&A after the talk by an attendee from a commercial real-estate company.
relation (empty) → asked_at
source_node_id (empty) → 09eec5de-c53d-45ca-9417-9a1a68ac7168
target_node_id (empty) → 4957b705-a43b-4b5d-bb69-728db69b1b86
create When is a command considered processed? → about → Events and Commands
context (empty) → Clarifies the processing semantics of commands vs resulting events.
relation (empty) → about
source_node_id (empty) → ef69bee7-a0ea-466f-bd04-555b70e8fbf1
target_node_id (empty) → 772380ce-dd09-4d23-bda6-1acfbec76487
create Does per-field validation blow up UI complexity? → about → Task-Driven UI
context (empty) → Garofolo answers by appealing to task-driven UIs as the complexity mitigation.
relation (empty) → about
source_node_id (empty) → e2aec8d6-1f80-4b8f-a3ee-60b7fd3eda5a
target_node_id (empty) → e778f635-8b61-4ac0-944d-4a45e8d3e957
create How to migrate legacy data into an event-sourced system? → about → Event Sourcing
context (empty) → Question is about seeding new event streams with legacy data.
relation (empty) → about
source_node_id (empty) → 09eec5de-c53d-45ca-9417-9a1a68ac7168
target_node_id (empty) → 687c9da2-de87-4fb2-a758-c7498f394fd5

Read set

106 nodes

talk Building uls for microservices search_nodes+get_node_edges talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes takeaway Bounded Contexts Are Not Microservices search_nodes takeaway Bounded Contexts Are Natural Microservice Seams search_nodes talk Component Driven UI with ViewComponent search_nodes concept Reactive Programming search_nodes takeaway Stop Building Web Apps, Build Software search_nodes takeaway Adopt CSS-in-JS for modern component-based frontends search_nodes question Distributed or majestic monolith? search_nodes tool Grafana search_nodes concept Event Sourcing search_nodes takeaway Use CQRS And Event Sourcing Independently search_nodes talk Applying CQRS & Event Sourcing on Rails applications search_nodes takeaway Event Sourcing Enables Distribution search_nodes question Can Trailblazer be combined with event sourcing and CQRS? search_nodes talk Event Sourcing Anti Patterns and Failures search_nodes question How to persist commands in an event-sourced system? search_nodes takeaway Hiring For Event Sourcing Trade-off search_nodes concept Snapshotting search_nodes takeaway Event Sourcing Mind Shift Trade-off search_nodes event wroclove.rb 2019 search_nodes talk Building LLM powered applications in Ruby search_nodes event wroclove.rb 2018 search_nodes talk To Refine or Not to Refine search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes talk Business logic in Ruby search_nodes talk Orchestrating video transcoding in ruby search_nodes talk Methods Gem for Ruby Method References search_nodes talk Introducing Sorbet into your Ruby codebase search_nodes talk Towards the post framework future search_nodes person Ethan Garofolo search_nodes concept Event Store search_nodes project Eventide search_nodes tool Ruby Event Store search_nodes question Can parts of Eventide, Rails Event Store and Trailblazer be combined in one project? search_nodes tool rails_event_store search_nodes concept Idempotent Projectors and Reactors search_nodes concept Command UUID Deduplication search_nodes talk Working with RailsEventStore in Cashflow Management System search_nodes talk Event Sourcing and Actor model in Ruby search_nodes company Arkency search_nodes takeaway Silver Bullet Anti-Pattern search_nodes concept Majestic Monolith search_nodes project monolith framework search_nodes takeaway Risks of DDD: Hierarchy, Perfectionism, Constraints search_nodes concept CQRS search_nodes talk Is the monolith a problem search_nodes takeaway Eventual Consistency Trade-off search_nodes concept Command Form search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes tool RealtimeBoard search_nodes concept Trailblazer Workflow search_nodes concept Waterfall Analysis search_nodes concept Commands, Queries, and Events search_nodes question Does experienced architect's intuition override precise design vocabulary? search_nodes concept Performance Time Budget search_nodes concept EventStorming search_nodes takeaway Replay-Based Debugging search_nodes person Greg Young search_nodes person Nathan Ladd search_nodes talk Events events events search_nodes person Adam Okoń search_nodes resource Rocket Real-Time Benchmark search_nodes tool Faker search_nodes person Julik Tarkhanov search_nodes tool GraphQL search_nodes takeaway Time Travel Superpower search_nodes resource Domain-Driven Design: Patterns, Principles and Practices search_nodes resource Implementing Domain-Driven Design search_nodes resource Introducing EventStorming search_nodes concept Hexagonal Architecture search_nodes concept Partitioning search_nodes tool Node.js search_nodes tool Babel search_nodes tool Electron search_nodes tool TypeScript search_nodes tool PureScript search_nodes tool nginx search_nodes takeaway Sign serverlessforruby.org petition search_nodes tool Iodine search_nodes concept WebAssembly search_nodes tool Redis search_nodes takeaway Action Cable Crowded-Channel Trade-off search_nodes project AnyCable search_nodes concept WebSockets search_nodes concept Saga Pattern search_nodes concept Event Handler Error Strategy search_nodes tool git bisect search_nodes concept Architecture Drivers search_nodes concept Event-Driven Architecture search_nodes takeaway Break Code Into Small Units Orchestrated By A Process Engine search_nodes concept DDD Whirlpool search_nodes concept Railway Oriented Programming search_nodes talk Adventures in durable execution search_nodes concept Domain Storytelling search_nodes concept Function as a Service search_nodes concept Dependency Injection search_nodes resource Drive search_nodes tool Sync Space VR search_nodes concept Denormalizer / Read Model search_nodes talk MVCC for Ruby developers search_nodes takeaway Horizontal Scale Superpower search_nodes tool PostgreSQL search_nodes talk Building on Bluesky's AT Protocol with Ruby search_nodes question How to handle very large event volumes over time? search_nodes talk From PostgreSQL to SQLite in Rails search_nodes

2 edges