← Extractions

SUPER AIN'T SUPER: Nick Sutterer's Journey from OOP to FP and Trailblazer 2.1

Nick Sutterer's wroclove.rb 2018 talk traces his programming journey from an 8-year-old learning C++ and Perl on a Mac, through early Rails frustrations that led him to write Cells and Reform, to Trailblazer's evolution across versions 1.1, 2.0 and 2.1. Along the way he explains how Ruby's module/super/inheritance mechanics pushed him toward a functional, BPMN-based workflow DSL modeled on Scott Wlaschin's Railway Oriented Programming, now used in production at the German police.

Model
claude-opus-4-7
Ingestion
f691ad9a
Input tokens
259,929
fresh
145,290
cached
98,262
cache write
16,377
Output tokens
12,038
Duration
202.0s
Roundtrips
7
Tool calls
21
Cost
$0.00
Nodes/edges extracted
23 / 44
Read set (nodes/edges)
105 / 7

Nodes (23)

update Nick Sutterer person
attrs (empty) {"employer" => "German Police", "nationality" => "German"}
description Conference speaker. German Ruby framework author and conference speaker. Started programming around age 8 on a Mac, learning C++ from 'Tr...
short_description Conference speaker. Creator of Trailblazer, Cells and Reform; Ruby framework author.
update SUPER AIN'T SUPER From OOP To FP and Beyond! talk
description Talk at wroclove.rb 2018. Nick Sutterer's wroclove.rb 2018 talk walking through his programming life: learning functions in C++ as a child, mov...
short_description Talk at wroclove.rb 2018. Nick Sutterer's wroclove.rb 2018 talk on his journey from OOP to FP via Trailblazer.
create Cells tool
kind (empty) tool
name (empty) Cells
slug (empty) cells
attrs (empty) {"year" => "2008", "category" => "library"}
description (empty) Ruby gem (Nick Sutterer's first) introduced around 2008 to encapsulate view fragments like sidebars into isolated cla...
short_description (empty) Ruby gem encapsulating view fragments as testable component objects.
create Reform tool
kind (empty) tool
name (empty) Reform
slug (empty) reform
attrs (empty) {"category" => "library"}
description (empty) Ruby gem by Nick Sutterer introducing a dedicated form object mapping to a web UI form: declares properties, collecti...
short_description (empty) Ruby gem modeling HTML forms as their own validation-aware objects.
update Trailblazer tool
description Ruby framework authored by Nick Sutterer that provides higher-level architectural building blocks on top of (or along... Ruby framework authored by Nick Sutterer that provides higher-level architectural building blocks on top of (or along...
create Railway Oriented Programming concept
kind (empty) concept
name (empty) Railway Oriented Programming
slug (empty) railway-oriented-programming
attrs (empty) {"category" => "pattern"}
description (empty) Pattern from Scott Wlaschin (F#/.NET community) in which business logic is modeled as two parallel tracks: a successf...
short_description (empty) Two-track workflow pattern where failures jump to an error track.
create Scott Wlaschin person
kind (empty) person
name (empty) Scott Wlaschin
slug (empty) scott-wlaschin
description (empty) F#/.NET community author who formalized Railway Oriented Programming, cited by Nick Sutterer as the inspiration for T...
short_description (empty) F# author behind Railway Oriented Programming.
create Tyrant tool
kind (empty) tool
name (empty) Tyrant
slug (empty) tyrant
attrs (empty) {"category" => "library"}
description (empty) Authentication gem by Nick Sutterer positioned as a replacement for Devise. Ships reusable Trailblazer workflow fragm...
short_description (empty) Trailblazer-based replacement for Devise shipping predefined auth workflows.
create Perl tool
kind (empty) tool
name (empty) Perl
slug (empty) perl
attrs (empty) {"category" => "language"}
description (empty) Programming language Nick Sutterer used after early C++ experiments; he considers his Perl book his actual first prog...
short_description (empty) Dynamic scripting language popular in the late 1990s and 2000s.
create C++ tool
kind (empty) tool
name (empty) C++
slug (empty) c
attrs (empty) {"category" => "language"}
description (empty) Nick Sutterer's earliest programming language, learned as a child from a separate book while following 'Tricks of the...
short_description (empty) Statically-typed systems programming language.
create Tricks of the Mac Game Programming Gurus resource
kind (empty) resource
name (empty) Tricks of the Mac Game Programming Gurus
slug (empty) tricks-of-the-mac-game-programming-gurus
attrs (empty) {"type" => "book"}
description (empty) Game programming book that Nick Sutterer used as his first programming reference, teaching programming on Mac around ...
short_description (empty) Mac game programming book Nick Sutterer read as a child.
create Ruby Module Customization Mechanics concept
kind (empty) concept
name (empty) Ruby Module Customization Mechanics
slug (empty) ruby-module-customization-mechanics
attrs (empty) {"category" => "pattern"}
description (empty) Ruby's out-of-the-box toolkit for customizing objects — inheritance, mix-ins via include/extend, super, and prepend —...
short_description (empty) Using include, extend, prepend and super to customize Ruby objects.
update BPMN concept
description Business Process Model and Notation. Trailblazer 2.1 adopts BPMN conventions to model processes; its 'events' are the... Business Process Model and Notation, originating in the Java/enterprise world. A diagram language of boxes (activitie...
create Trailblazer Operation concept
kind (empty) concept
name (empty) Trailblazer Operation
slug (empty) trailblazer-operation
attrs (empty) {"category" => "pattern"}
description (empty) Trailblazer concept: a callable object (invoked like a function) that delegates to stakeholder objects to perform bus...
short_description (empty) Callable orchestrator object delegating to scoped steps with a result.
create Trailblazer Activity concept
kind (empty) concept
name (empty) Trailblazer Activity
slug (empty) trailblazer-activity
attrs (empty) {"category" => "pattern"}
description (empty) Introduced in Trailblazer 2.1 alongside the existing operation concept. Activities are defined with the same step DSL...
short_description (empty) Trailblazer 2.1 BPMN-style process with multiple end events and nesting.
create Trailblazer Workflow concept
kind (empty) concept
name (empty) Trailblazer Workflow
slug (empty) trailblazer-workflow
attrs (empty) {"category" => "architecture"}
description (empty) Trailblazer 2.1 concept of composing activities into application-wide workflows defined visually. Triggered from e.g....
short_description (empty) Application-wide Trailblazer process modeled visually with suspend/resume events.
create German Police company
kind (empty) company
name (empty) German Police
slug (empty) german-police
attrs (empty) {"industry" => "government"}
description (empty) Nick Sutterer's employer at the time of the talk. Their applications model complex administrative and investigative w...
short_description (empty) German police force running Trailblazer-based workflow applications.
create José Valim person
kind (empty) person
name (empty) José Valim
slug (empty) jose-valim
description (empty) Creator of Elixir. Nick Sutterer mentions discussing workflow abstractions with him; even with Elixir's pipe operator...
short_description (empty) Creator of the Elixir programming language.
create Piotr Solnica person
kind (empty) person
name (empty) Piotr Solnica
slug (empty) piotr-solnica
description (empty) Ruby developer cited by Nick Sutterer as a major inspiration who nudged him toward functional programming.
short_description (empty) Ruby developer known for the dry-rb ecosystem.
update Refinements concept
description Ruby language feature (authored by Shugo Maeda) that allows monkey patches to be activated only in a specific lexical... Ruby language feature (authored by Shugo Maeda) that allows monkey patches to be activated only in a specific lexical...
create Break Code Into Small Units Orchestrated By A Process Engine takeaway
kind (empty) takeaway
name (empty) Break Code Into Small Units Orchestrated By A Process Engine
slug (empty) break-code-into-small-units-orchestrated-by-a-process-engine
attrs (empty) {"type" => "insight"}
description (empty) Nick Sutterer's extracted lesson from 30 years of programming: structure software as small working units of code that...
short_description (empty) Model software as small callable units with inputs/outputs; let a workflow engine compose them.
create Encapsulation Via Function-Style Objects takeaway
kind (empty) takeaway
name (empty) Encapsulation Via Function-Style Objects
slug (empty) encapsulation-via-function-style-objects
attrs (empty) {"type" => "lesson-learned"}
description (empty) Recurring lesson across Cells, Reform and Trailblazer operations: wrap behavior in an object invoked like a function ...
short_description (empty) Hide implementation behind objects called like functions for isolated testing.
create Should the tooling or language change to support these workflows? question
kind (empty) question
name (empty) Should the tooling or language change to support these workflows?
slug (empty) should-the-tooling-or-language-change-to-support-these-workflows
attrs (empty) {"answer_summary" => "Ruby's community makes it worth staying; no other mainstream language has this activity/multi-o...
description (empty) Audience member suggests that since Ruby's inheritance/module/super mechanics didn't help and Nick moved to a functio...
short_description (empty) Audience question on whether a functional language would fit Trailblazer's style better.

Edges (44)

update Nick SuttererauthoredSUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) Sutterer delivered this autobiographical talk at wroclove.rb 2018.
update SUPER AIN'T SUPER From OOP To FP and Beyond!presented_atwroclove.rb 2018
context (empty) Talk given on 2018-03-16 at wroclove.rb.
create Nick Suttererattendedwroclove.rb 2018
context (empty) Present as a speaker at the 2018 edition.
relation (empty) attended
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) 9243ef2c-21bb-4f23-b450-9ecd87882dfe
create Nick Suttererworks_onCells
attrs (empty) {"role" => "author"}
context (empty) Author of the Cells gem, his first Ruby gem, around 2008.
relation (empty) works_on
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) b7a5495c-a699-4085-b621-229cf71852c8
create Nick Suttererworks_onReform
attrs (empty) {"role" => "author"}
context (empty) Author of the Reform form-object gem.
relation (empty) works_on
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) cf107a9f-3e8f-4728-b232-8fc100a667f5
update Nick Suttererworks_onTrailblazer
context Author of Trailblazer; discusses 2.1 with BPMN-style process modeling and upcoming paid gems. Author of Trailblazer; talk narrates the framework's evolution through 1.1, 2.0 and 2.1.
create Nick Suttererworks_onTyrant
attrs (empty) {"role" => "author"}
context (empty) Author of Tyrant, a Trailblazer-based Devise replacement.
relation (empty) works_on
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) 7c4b671b-e55e-45b7-9217-2fd36a32d511
create Nick Suttererworks_atGerman Police
context (empty) Employed at the German police, where Trailblazer 2.1 workflows are used.
relation (empty) works_at
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) 885b5468-e61e-4b0a-ba1e-7252e46fa2cc
create Nick Suttererhas_skillC++
attrs (empty) {"level" => "beginner"}
context (empty) Learned C++ as a child from a separate book alongside Mac game programming materials.
relation (empty) has_skill
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) a4ae6f60-52e5-4262-a674-c64c17968d28
create Nick Suttererhas_skillPerl
context (empty) Credits Perl as the language where he actually learned to program.
relation (empty) has_skill
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) 24830e15-8592-4aa3-bd13-4877721c3a50
create Nick Suttererhas_skillRuby
attrs (empty) {"level" => "expert"}
context (empty) Long-time Ruby developer, though critical of its object customization mechanics.
relation (empty) has_skill
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
create Nick SuttererrecommendsTricks of the Mac Game Programming Gurus
context (empty) Cites it as his first programming book.
relation (empty) recommends
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) b2c637f4-ac88-46c6-a0e3-66a94c5cd178
create Nick Suttererrelated_toPiotr Solnica
context (empty) Names Piotr Solnica as an inspiration who nudged him toward functional programming.
relation (empty) related_to
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) f3428d0c-aaba-45ad-aa88-414d295a3000
create Nick Suttererrelated_toJosé Valim
context (empty) Discussed workflow abstractions with Elixir's creator, concluding Elixir would still need a step-DSL-like construct.
relation (empty) related_to
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) 52d96a4b-fcf2-4fd7-a048-ab5d7306e086
create Nick Suttererrelated_toDHH
context (empty) DHH emailed Sutterer praising Cells and Reform at the time of their release.
relation (empty) related_to
source_node_id (empty) ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) 51ed6191-ce15-4ca5-9eed-d55908e5ab88
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutTrailblazer
context (empty) Core narrative of the talk is Trailblazer's evolution across 1.1, 2.0 and 2.1.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutCells
context (empty) Discussed as Sutterer's first gem that proved the value of encapsulated view components.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) b7a5495c-a699-4085-b621-229cf71852c8
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutReform
context (empty) Discussed as the second gem encapsulating forms as objects with contextual validations.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) cf107a9f-3e8f-4728-b232-8fc100a667f5
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutRailway Oriented Programming
context (empty) Cited as the inspiration for Trailblazer 2.0's two-track step DSL.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 693c5091-066f-4602-a1ce-ff9067e469bd
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutBPMN
context (empty) Trailblazer 2.1's workflow modeling adopts BPMN conventions, activities and events.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 6ec93836-4c13-4f91-a34e-c532055a0454
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutRuby Module Customization Mechanics
context (empty) Talk critiques Ruby's include/extend/super/prepend/refinements as insufficient for workflow customization.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 1a968896-f6eb-40bc-ab5c-7de248469340
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutRefinements
context (empty) Refinements singled out as a feature almost no one uses.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 989bdde8-0413-45db-96f3-32dd0e4a3c11
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutTrailblazer Operation
context (empty) Explains operations as callable orchestrators delegating to scoped steps.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 41fe8d0a-bf5c-4a53-9a3d-2ae1c9c63549
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutTrailblazer Activity
context (empty) Introduces activities as the 2.1 BPMN-style extension of operations.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 820efe90-cabd-4501-a9ba-dbf2269ec94f
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutTrailblazer Workflow
context (empty) Describes application-wide workflows with suspend/resume events at the German police.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 34f10170-f4d9-415f-b81d-92357c9a99fa
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutTyrant
context (empty) Mentioned as a Devise replacement shipping predefined one-time-password signup workflows.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) 7c4b671b-e55e-45b7-9217-2fd36a32d511
create SUPER AIN'T SUPER From OOP To FP and Beyond!aboutScott Wlaschin
context (empty) Credits Scott Wlaschin for the railway metaphor borrowed from the .NET community.
relation (empty) about
source_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) cbce6ed4-4983-46d5-8eb2-3a96e422cd59
update TrailblazerusesBPMN
context Trailblazer 2.1 adopts BPMN conventions for process modeling. Trailblazer 2.1 adopts BPMN conventions and notation for workflows.
create TrailblazerusesRailway Oriented Programming
context (empty) Trailblazer 2.0 step DSL is directly modeled on Scott Wlaschin's Railway Oriented Programming.
relation (empty) uses
source_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
target_node_id (empty) 693c5091-066f-4602-a1ce-ff9067e469bd
create Trailblazer Operationrelated_toTrailblazer
context (empty) Operations are a core Trailblazer concept.
relation (empty) related_to
source_node_id (empty) 41fe8d0a-bf5c-4a53-9a3d-2ae1c9c63549
target_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Trailblazer Activityrelated_toTrailblazer
context (empty) Activities were introduced in Trailblazer 2.1 alongside operations.
relation (empty) related_to
source_node_id (empty) 820efe90-cabd-4501-a9ba-dbf2269ec94f
target_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Trailblazer Workflowrelated_toTrailblazer
context (empty) Workflows are Trailblazer 2.1's application-wide composition mechanism.
relation (empty) related_to
source_node_id (empty) 34f10170-f4d9-415f-b81d-92357c9a99fa
target_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Trailblazer Activityrelated_toBPMN
context (empty) Activities map directly to BPMN boxes, circles and events.
relation (empty) related_to
source_node_id (empty) 820efe90-cabd-4501-a9ba-dbf2269ec94f
target_node_id (empty) 6ec93836-4c13-4f91-a34e-c532055a0454
create Railway Oriented Programmingrelated_toScott Wlaschin
context (empty) Pattern popularized by Scott Wlaschin in the F#/.NET community.
relation (empty) related_to
source_node_id (empty) 693c5091-066f-4602-a1ce-ff9067e469bd
target_node_id (empty) cbce6ed4-4983-46d5-8eb2-3a96e422cd59
create TyrantusesTrailblazer
context (empty) Built on Trailblazer activities/workflows.
relation (empty) uses
source_node_id (empty) 7c4b671b-e55e-45b7-9217-2fd36a32d511
target_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
create German PoliceusesTrailblazer
context (empty) German police applications model workflows using Trailblazer 2.1.
relation (empty) uses
source_node_id (empty) 885b5468-e61e-4b0a-ba1e-7252e46fa2cc
target_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Break Code Into Small Units Orchestrated By A Process Enginefrom_talkSUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) Concluding lesson of the talk.
relation (empty) from_talk
source_node_id (empty) 53dbd4aa-b08e-4f01-842b-dde085b788a2
target_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
create Encapsulation Via Function-Style Objectsfrom_talkSUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) Repeated lesson across Cells, Reform and Trailblazer sections.
relation (empty) from_talk
source_node_id (empty) 86d193f9-cb04-483a-a42c-f82c30311c5b
target_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
create Break Code Into Small Units Orchestrated By A Process EngineaboutTrailblazer
context (empty) Framed as the principle embodied by Trailblazer 2.1.
relation (empty) about
source_node_id (empty) 53dbd4aa-b08e-4f01-842b-dde085b788a2
target_node_id (empty) c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Encapsulation Via Function-Style ObjectsaboutCells
context (empty) Cells was the first concrete instance of this principle.
relation (empty) about
source_node_id (empty) 86d193f9-cb04-483a-a42c-f82c30311c5b
target_node_id (empty) b7a5495c-a699-4085-b621-229cf71852c8
create Encapsulation Via Function-Style ObjectsaboutReform
context (empty) Reform applied the same encapsulation idea to forms.
relation (empty) about
source_node_id (empty) 86d193f9-cb04-483a-a42c-f82c30311c5b
target_node_id (empty) cf107a9f-3e8f-4728-b232-8fc100a667f5
create Should the tooling or language change to support these workflows?asked_atSUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) Asked during the Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) bf554296-a71b-4fee-a5af-b0d518c0adc1
target_node_id (empty) 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
create Should the tooling or language change to support these workflows?aboutElixir
context (empty) Question raises Elixir as a possible alternative; Nick answers via Elixir's pipe operator limits.
relation (empty) about
source_node_id (empty) bf554296-a71b-4fee-a5af-b0d518c0adc1
target_node_id (empty) ea3e988a-8cb9-4418-a809-6f894b77c081
create Should the tooling or language change to support these workflows?aboutRuby
context (empty) Asks whether Ruby is the right language for this style of programming.
relation (empty) about
source_node_id (empty) bf554296-a71b-4fee-a5af-b0d518c0adc1
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee

Read set

105 nodes

person Nick Sutterer search_nodes+get_node_edges tool GraphQL search_nodes tool Trailblazer search_nodes tool RealtimeBoard search_nodes person Adam Okoń search_nodes takeaway Time Travel Superpower search_nodes resource Rocket Real-Time Benchmark search_nodes tool Faker search_nodes question Can Trailblazer be combined with event sourcing and CQRS? search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes tool Ruby on Rails search_nodes talk Towards the post framework future search_nodes tool Ruby search_nodes tool Plezi search_nodes talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes tool Ember.js search_nodes talk Orchestrating video transcoding in ruby search_nodes tool Heroku search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Counterintuitive Rails pt. 2 search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk Component Driven UI with ViewComponent search_nodes talk 18 months of using hotwire and viewcomponent in production search_nodes talk Extracting logic from templates with Hanami Views search_nodes tool JSON API Resources search_nodes talk Methods Gem for Ruby Method References search_nodes talk Business logic in Ruby search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes tool Rails 5.2 search_nodes concept Command Form search_nodes tool dry-validation search_nodes concept Refinements search_nodes tool Active Storage search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes concept Active Record search_nodes talk Event Sourcing and Actor model in Ruby search_nodes concept CQRS search_nodes talk How wroclove.rb impacts developers and companies search_nodes talk The pillars of Domain Driven Design search_nodes talk SUPER AIN'T SUPER From OOP To FP and Beyond! search_nodes+get_node_edges concept Idempotent Projectors and Reactors search_nodes concept Saga Pattern search_nodes takeaway Event Sourcing Mind Shift Trade-off search_nodes talk To Refine or Not to Refine search_nodes resource Object-Oriented Software Construction search_nodes concept BPMN search_nodes concept EventStorming search_nodes concept Process Manager search_nodes talk The good, the bad and the remote — collaborative domain modeling with EventStorming search_nodes concept Breadth-First Search for Code Removal search_nodes concept Waterfall Analysis search_nodes concept Event Sourcing search_nodes takeaway Event Sourcing Enables Distribution search_nodes takeaway Hiring For Event Sourcing Trade-off search_nodes talk Event Sourcing Anti Patterns and Failures search_nodes concept Event Store search_nodes takeaway Use CQRS And Event Sourcing Independently search_nodes concept Snapshotting search_nodes question How to persist commands in an event-sourced system? search_nodes person DHH search_nodes concept Majestic Monolith search_nodes person Julik Tarkhanov search_nodes person Emiliano Della Casa search_nodes question Have you heard of Stimulus? search_nodes concept Reactive Programming search_nodes tool PureScript search_nodes tool Rust search_nodes tool Elixir search_nodes tool Erlang search_nodes tool Go search_nodes tool Phoenix search_nodes tool Elm search_nodes concept Elixir Pipe Operator search_nodes takeaway Sign serverlessforruby.org petition search_nodes talk FaaS for Ruby Lightning Talk search_nodes tool Clojure search_nodes talk Events events events search_nodes talk One machine please, make it Turing search_nodes talk Fix Production Bugs 20x Faster search_nodes talk Building uls for microservices search_nodes talk Devise pitfalls and way to tighten security search_nodes talk Multi-region data governance in Rails application search_nodes talk Securing Rails applications search_nodes tool Action Cable search_nodes talk Building a Production-Ready AI App: MCP & OAuth on Rails search_nodes tool TypeScript search_nodes tool .NET search_nodes concept Pipeline Operator search_nodes concept Function as a Service search_nodes concept Serverless search_nodes question Can parts of Eventide, Rails Event Store and Trailblazer be combined in one project? search_nodes talk The Curse of Service Object search_nodes tool ruby-contracts search_nodes talk Doctrine of Useful Objects Separate Fact from Fiction in OOD search_nodes takeaway Adopt CSS-in-JS for modern component-based frontends search_nodes concept CSS-in-JS search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes

7 edges