← Extractions

Counterintuitive Rails pt. 2 — Ivan Nemytchenko at wroclove.rb 2018

Day-two talk by Ivan Nemytchenko analyzing the audience survey from part 1 and walking through concrete Rails patterns: layered alternatives to callbacks (mutators + services), concern-based form objects, state machines vs boolean flags, null objects replacing 'if current_user' checks, repository-like scope concerns, and a pragmatic testing pyramid favoring controller tests, fixtures, and stubs over aesthetically pleasing RSpec/factories/mocks.

Model
claude-opus-4-7
Ingestion
3e0eafd5
Input tokens
554,104
fresh
467,446
cached
76,304
cache write
10,354
Output tokens
12,806
Duration
198.5s
Roundtrips
6
Tool calls
16
Cost
$0.00
Nodes/edges extracted
19 / 40
Read set (nodes/edges)
471 / 3

Nodes (19)

update Counterintuitive Rails pt. 2 talk
attrs {"type" => "talk"} → {"date" => "2018-03-16", "part" => "2 of 2", "type" => "talk"}
description Talk at wroclove.rb 2018. → Day-two talk at wroclove.rb 2018 by Ivan Nemytchenko, continuing 'Counterintuitive Rails pt. 1'. Opens by reviewing t...
short_description Talk at wroclove.rb 2018. → Ivan Nemytchenko's day-two wroclove.rb 2018 talk mapping Rails abstraction layers.
create Mutator Layer concept
kind (empty) → concept
name (empty) → Mutator Layer
slug (empty) → mutator-layer
attrs (empty) → {"category" => "architecture"}
description (empty) → Ivan Nemytchenko's proposed layer between services and Active Record. A mutator handles a single purpose — creating, ...
short_description (empty) → Rails architectural layer encapsulating atomic creation, edit, and deletion operations.
create Form Object as Model Concern concept
kind (empty) → concept
name (empty) → Form Object as Model Concern
slug (empty) → form-object-as-model-concern
attrs (empty) → {"category" => "pattern"}
description (empty) → Lightweight Rails form-object technique Ivan Nemytchenko demonstrates: create a concern (e.g. ModerationArticleForm) ...
short_description (empty) → Concern-based form object with delegators pretending to be the underlying model.
create Null Object Pattern concept
kind (empty) → concept
name (empty) → Null Object Pattern
slug (empty) → null-object-pattern
attrs (empty) → {"category" => "pattern"}
description (empty) → Pattern Ivan Nemytchenko recommends as the cure for `if current_user` checks scattered across views and controllers. ...
short_description (empty) → Plain object implementing a type's interface with no-op/stub behavior to remove conditionals.
create Boolean Flags as Implicit State concept
kind (empty) → concept
name (empty) → Boolean Flags as Implicit State
slug (empty) → boolean-flags-as-implicit-state
attrs (empty) → {"category" => "practice"}
description (empty) → Anti-pattern where an object's state is encoded across several boolean flags (on_boarded, trial_expired, can_use, sub...
short_description (empty) → Anti-pattern of using many boolean fields to encode object state, causing combinatorial explosion.
create Scope Concerns concept
kind (empty) → concept
name (empty) → Scope Concerns
slug (empty) → scope-concerns
attrs (empty) → {"category" => "practice"}
description (empty) → Ivan Nemytchenko's 'dirty hack' for keeping models lean: scopes are shortcuts for fetching data sets, not domain logi...
short_description (empty) → Extract model scopes into a concern to separate query shortcuts from domain logic.
create Treat models as domain models takeaway
kind (empty) → takeaway
name (empty) → Treat models as domain models
slug (empty) → treat-models-as-domain-models
attrs (empty) → {"type" => "recommendation"}
description (empty) → Ivan Nemytchenko's summary recommendation: models should be treated as domain models. Keep associations, business rul...
short_description (empty) → Keep associations, business rules, state machines, and defaults in models — move the rest out.
create Rails Testing Pyramid (Ivan's version) concept
kind (empty) → concept
name (empty) → Rails Testing Pyramid (Ivan's version)
slug (empty) → rails-testing-pyramid-ivan-s-version
attrs (empty) → {"category" => "methodology"}
description (empty) → Heuristic Ivan Nemytchenko credits to a conversation with Nathan Ladd. Tests can go 'deep' (unit tests covering core ...
short_description (empty) → Question-driven test strategy prioritizing controller tests, then services/mutators, over unit/acceptance extremes.
create Named Routes and I18n Everywhere concept
kind (empty) → concept
name (empty) → Named Routes and I18n Everywhere
slug (empty) → named-routes-and-i18n-everywhere
attrs (empty) → {"category" => "practice"}
description (empty) → Low-hanging Rails practice promoted by Ivan Nemytchenko. Always use named-route helpers (never raw strings) because t...
short_description (empty) → Use named route helpers and i18n for all strings even in single-language apps.
create Fixtures over Factories concept
kind (empty) → concept
name (empty) → Fixtures over Factories
slug (empty) → fixtures-over-factories
attrs (empty) → {"category" => "practice"}
description (empty) → Factories recreate the whole universe for every test, making them slow in large applications with many associations, ...
short_description (empty) → Prefer Rails fixtures to FactoryBot for speed, cross-references, and dev-DB reuse.
create Stubs over Mocks concept
kind (empty) → concept
name (empty) → Stubs over Mocks
slug (empty) → stubs-over-mocks
attrs (empty) → {"category" => "practice"}
description (empty) → Ivan Nemytchenko's test-double guidance. Stubs replace external things (services) so the test can run in isolation. M...
short_description (empty) → Use stubs to replace external collaborators; avoid mocks that couple tests to internal structure.
create minitest tool
kind (empty) → tool
name (empty) → minitest
slug (empty) → minitest
attrs (empty) → {"category" => "library"}
description (empty) → Ruby's standard lightweight testing framework. Recommended in Counterintuitive Rails pt. 2 as a simpler, faster alter...
short_description (empty) → Ruby's built-in lightweight testing framework with low-level semantics.
create power_assert tool
kind (empty) → tool
name (empty) → power_assert
slug (empty) → power_assert
attrs (empty) → {"category" => "library"}
description (empty) → Ruby gem used as a cheap replacement for custom RSpec matchers. Tests are written by wrapping an arbitrary Ruby expre...
short_description (empty) → Ruby assertion library showing rich failure messages from plain Ruby expressions.
create flag_shih_tzu tool
kind (empty) → tool
name (empty) → flag_shih_tzu
slug (empty) → flag_shih_tzu
attrs (empty) → {"category" => "library"}
description (empty) → Ruby gem (transcribed as 'flag sheet') that lets developers define a bunch of boolean flags on an Active Record model...
short_description (empty) → Ruby gem packing multiple boolean flags into a single integer column on a model.
create Devise tool
kind (empty) → tool
name (empty) → Devise
slug (empty) → devise
attrs (empty) → {"category" => "library"}
description (empty) → Popular Rails authentication gem. Has a love-hate reputation: per Ivan Nemytchenko's wroclove.rb 2018 audience survey...
short_description (empty) → Popular Ruby gem providing authentication for Rails applications.
create Stop delegating decisions to popular library authors takeaway
kind (empty) → takeaway
name (empty) → Stop delegating decisions to popular library authors
slug (empty) → stop-delegating-decisions-to-popular-library-authors
attrs (empty) → {"type" => "lesson-learned"}
description (empty) → Central message of Counterintuitive Rails pt. 2: you can't trust anyone on the internet — a gem having 5k GitHub star...
short_description (empty) → Develop your own reasoning instead of trusting 5k-star gems and their READMEs.
create Controller tests as highest-ROI tests takeaway
kind (empty) → takeaway
name (empty) → Controller tests as highest-ROI tests
slug (empty) → controller-tests-as-highest-roi-tests
attrs (empty) → {"type" => "recommendation"}
description (empty) → Practical recommendation from Counterintuitive Rails pt. 2: controller tests are the lowest-hanging fruit — easy to w...
short_description (empty) → Start every new Rails test suite by hitting every controller endpoint.
create Use state machines instead of boolean flags takeaway
kind (empty) → takeaway
name (empty) → Use state machines instead of boolean flags
slug (empty) → use-state-machines-instead-of-boolean-flags
attrs (empty) → {"type" => "recommendation"}
description (empty) → Boolean flags encode state implicitly and explode combinatorially (N flags → 2^N states). If system behavior depends ...
short_description (empty) → When behavior depends on state, make the state explicit via a state machine.
create Prefer fixtures and stubs over factories and mocks takeaway
kind (empty) → takeaway
name (empty) → Prefer fixtures and stubs over factories and mocks
slug (empty) → prefer-fixtures-and-stubs-over-factories-and-mocks
attrs (empty) → {"type" => "recommendation"}
description (empty) → Pragmatic testing tradeoffs recommended in Counterintuitive Rails pt. 2. Fixtures beat factories for speed, cross-ref...
short_description (empty) → Use fixtures for test data and stubs for external collaborators; avoid factories and mocks where possible.

Edges (40)

update Ivan Nemytchenko → authored → Counterintuitive Rails pt. 2
context (empty) → Ivan Nemytchenko delivered this day-two talk at wroclove.rb 2018.
update Counterintuitive Rails pt. 2 → presented_at → wroclove.rb 2018
context (empty) → Delivered on day two of wroclove.rb 2018.
create Counterintuitive Rails pt. 2 → related_to → Counterintuitive Rails pt. 1
context (empty) → Part 2 of a two-part talk; analyzes the survey collected by part 1 and covers its remaining material.
relation (empty) → related_to
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → b8a4884a-2f2b-46c8-b90a-76e2c0b57b80
create Counterintuitive Rails pt. 2 → about → Mutator Layer
context (empty) → Introduces the mutators layer as the home for atomic create/edit/delete operations.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 94a8394a-b926-4dc0-a97f-b88e2acbef27
create Counterintuitive Rails pt. 2 → about → Form Object as Model Concern
context (empty) → Demonstrates a concern-plus-delegators form object that plays well with Rails defaults and nested attributes.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → e334cf47-c3df-41dc-b5fe-364869d11381
create Counterintuitive Rails pt. 2 → about → Null Object Pattern
context (empty) → Proposes Guest-style null objects as the cure for `if current_user` checks in views and controllers.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → d6326df9-ab4e-429e-b7b5-d8fc66ec0b52
create Counterintuitive Rails pt. 2 → about → Boolean Flags as Implicit State
context (empty) → Critiques boolean flags as an implicit-state anti-pattern leading to 2^N combinations.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 3ef0631c-e8ae-43b8-868d-6b5cb58b71af
create Counterintuitive Rails pt. 2 → about → State Machine
context (empty) → Recommends state machines as the explicit alternative to boolean-flag state encoding.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → f12d397b-1144-4c0b-b90d-3fde61472b70
create Counterintuitive Rails pt. 2 → about → Scope Concerns
context (empty) → Recommends moving model scopes into a concern so models stay lean.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 3ab6e477-96f3-4237-8792-0df0932070cc
create Counterintuitive Rails pt. 2 → about → Rails Testing Pyramid (Ivan's version)
context (empty) → Presents a depth-vs-width test strategy credited to a conversation with Nathan Ladd.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 02ae5cfb-7c32-47ff-b0f5-5da3dac0002d
create Counterintuitive Rails pt. 2 → about → Named Routes and I18n Everywhere
context (empty) → Highlights named routes and i18n as low-hanging fruit that amplifies controller-test coverage.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 8a2f015f-0601-40d3-a4d2-4d950448037a
create Counterintuitive Rails pt. 2 → about → Fixtures over Factories
context (empty) → Compares fixtures and factories, recommending fixtures for speed and dev-DB reuse.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 8e541cb5-ec34-4139-afb2-1f2a82738508
create Counterintuitive Rails pt. 2 → about → Stubs over Mocks
context (empty) → Recommends stubs for external collaborators and warns against mocks coupling tests to internal structure.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 6dc3fc23-bfbb-4939-a0e0-1e11a4c5426e
create Counterintuitive Rails pt. 2 → about → minitest
context (empty) → Proposed as a simpler, faster alternative to RSpec.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 6d3b8a3d-e1b5-4eba-ae6f-eaab5ce22211
create Counterintuitive Rails pt. 2 → about → power_assert
context (empty) → Suggested as a cheap replacement for custom RSpec matchers.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → a5491a46-ceb7-46a0-a69f-166631b3e9cb
create Counterintuitive Rails pt. 2 → about → flag_shih_tzu
context (empty) → Cited as the gem that standardizes the boolean-flags-for-state anti-pattern.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → e9a87537-fcb2-4bc4-85c0-26e034a3db2e
create Counterintuitive Rails pt. 2 → about → Devise
context (empty) → Survey result shows a 40/36 love-hate split on Devise among Rails developers.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 9113bde3-534a-47d0-8333-e171c4b55e79
create Counterintuitive Rails pt. 2 → about → Ruby on Rails
context (empty) → Talk is about structuring Rails applications with additional layers.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 7aac705a-0987-49f2-b665-9d4e08a6acee
create Counterintuitive Rails pt. 2 → about → Active Record
context (empty) → Recommends constructor-based defaults instead of callbacks and treating persistence as a detail handled by mutators.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 633eeea8-2026-4906-b512-1e239f3db152
create Counterintuitive Rails pt. 2 → about → Hanami
context (empty) → Mentioned unfavorably for requiring all boilerplate up front, preventing a 'lazy' progression from controller → mutat...
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → 9e549b38-6071-4b4d-88ea-ca5c3d86afa7
create Counterintuitive Rails pt. 2 → about → Domain Model (vs Active Record Model)
context (empty) → Argues models should be treated as domain models with business rules, not persistence containers.
relation (empty) → about
source_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
target_node_id (empty) → eb88dec0-c8aa-4a8f-8b59-91b9df55cbd9
create Treat models as domain models → from_talk → Counterintuitive Rails pt. 2
context (empty) → Core recommendation of the talk.
relation (empty) → from_talk
source_node_id (empty) → 31a602ae-d47a-48ee-b01d-2d88154dd01c
target_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
create Stop delegating decisions to popular library authors → from_talk → Counterintuitive Rails pt. 2
context (empty) → Central meta-message of the talk.
relation (empty) → from_talk
source_node_id (empty) → 2c1e2a90-e39c-413a-a3ff-645eaca77c49
target_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
create Controller tests as highest-ROI tests → from_talk → Counterintuitive Rails pt. 2
context (empty) → Practical testing recommendation delivered in the talk's final third.
relation (empty) → from_talk
source_node_id (empty) → cb69c4cd-a481-413a-afaf-a898d8267459
target_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
create Use state machines instead of boolean flags → from_talk → Counterintuitive Rails pt. 2
context (empty) → Key recommendation from the flags-and-state section.
relation (empty) → from_talk
source_node_id (empty) → 26024097-34a1-49e1-b39d-4d7f857b2383
target_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
create Prefer fixtures and stubs over factories and mocks → from_talk → Counterintuitive Rails pt. 2
context (empty) → Summarizes the test-doubles guidance section.
relation (empty) → from_talk
source_node_id (empty) → 669c7c84-1094-4b5c-b893-f5ab2ea2c509
target_node_id (empty) → c003bf86-a312-4839-b314-24bd84a8f3f4
create Ivan Nemytchenko → recommends → Mutator Layer
context (empty) → Ivan Nemytchenko recommends introducing a mutators layer for atomic persistence operations.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → 94a8394a-b926-4dc0-a97f-b88e2acbef27
create Ivan Nemytchenko → recommends → Null Object Pattern
context (empty) → Ivan Nemytchenko recommends null objects (e.g. Guest) to eliminate current_user conditionals.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → d6326df9-ab4e-429e-b7b5-d8fc66ec0b52
create Ivan Nemytchenko → recommends → State Machine
context (empty) → Ivan Nemytchenko recommends state machines over boolean flags for any state-dependent behavior.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → f12d397b-1144-4c0b-b90d-3fde61472b70
create Ivan Nemytchenko → recommends → minitest
context (empty) → Recommends minitest as a simpler alternative to RSpec.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → 6d3b8a3d-e1b5-4eba-ae6f-eaab5ce22211
create Ivan Nemytchenko → recommends → power_assert
context (empty) → Recommends power_assert as a cheap replacement for RSpec custom matchers.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → a5491a46-ceb7-46a0-a69f-166631b3e9cb
create Ivan Nemytchenko → recommends → Fixtures over Factories
context (empty) → Recommends fixtures over factories for speed and dev-DB reuse.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → 8e541cb5-ec34-4139-afb2-1f2a82738508
create Ivan Nemytchenko → recommends → Stubs over Mocks
context (empty) → Recommends stubs over mocks to keep tests behavior-based rather than structure-based.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → 6dc3fc23-bfbb-4939-a0e0-1e11a4c5426e
create Ivan Nemytchenko → recommends → Scope Concerns
context (empty) → Recommends moving scopes into a concern to keep models focused on domain logic.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → 3ab6e477-96f3-4237-8792-0df0932070cc
create Ivan Nemytchenko → recommends → Form Object as Model Concern
context (empty) → Recommends a minimal concern-based form-object technique that plays nicely with Rails defaults.
relation (empty) → recommends
source_node_id (empty) → 042242c9-ad5a-4afd-a4f3-196eb52fec1d
target_node_id (empty) → e334cf47-c3df-41dc-b5fe-364869d11381
create Boolean Flags as Implicit State → related_to → State Machine
context (empty) → State machines are the explicit alternative to implicit boolean flag states.
relation (empty) → related_to
source_node_id (empty) → 3ef0631c-e8ae-43b8-868d-6b5cb58b71af
target_node_id (empty) → f12d397b-1144-4c0b-b90d-3fde61472b70
create Mutator Layer → related_to → Active Record
context (empty) → Mutators encapsulate Active Record creation/edit/delete so services don't touch persistence directly.
relation (empty) → related_to
source_node_id (empty) → 94a8394a-b926-4dc0-a97f-b88e2acbef27
target_node_id (empty) → 633eeea8-2026-4906-b512-1e239f3db152
create Rails Testing Pyramid (Ivan's version) → related_to → Nathan Ladd
context (empty) → Ivan credits Nathan Ladd with the 'deep vs wide' testing model shared in conversation at the conference.
relation (empty) → related_to
source_node_id (empty) → 02ae5cfb-7c32-47ff-b0f5-5da3dac0002d
target_node_id (empty) → c2047c7c-2316-4c38-af4f-1e8a78f80206
create Form Object as Model Concern → related_to → Reform
context (empty) → Contrasted with heavier form-object libraries that require constructing everything from scratch.
relation (empty) → related_to
source_node_id (empty) → e334cf47-c3df-41dc-b5fe-364869d11381
target_node_id (empty) → cf107a9f-3e8f-4728-b232-8fc100a667f5
create Scope Concerns → related_to → Domain Model (vs Active Record Model)
context (empty) → Scope concerns keep scopes out of the domain model where they don't belong.
relation (empty) → related_to
source_node_id (empty) → 3ab6e477-96f3-4237-8792-0df0932070cc
target_node_id (empty) → eb88dec0-c8aa-4a8f-8b59-91b9df55cbd9

Read set

471 nodes

talk 10 Things You Never Wanted To Know About Reform 3 list_nodes_by_kind talk 18 months of using hotwire and viewcomponent in production list_nodes_by_kind talk Accidentally building a neural network — A Ruby product recommendation journey list_nodes_by_kind talk Adventures in durable execution list_nodes_by_kind talk An Introduction to Test Bench list_nodes_by_kind+search_nodes talk Applying CQRS & Event Sourcing on Rails applications list_nodes_by_kind talk Better WebPerformance with Rails list_nodes_by_kind talk Beyond the current state Time travel to the rescue! list_nodes_by_kind talk Building a Production-Ready AI App: MCP & OAuth on Rails list_nodes_by_kind talk Building Beautiful UIs with Ruby A Rails-Native Approach list_nodes_by_kind talk Building LLM powered applications in Ruby list_nodes_by_kind talk Building on Bluesky's AT Protocol with Ruby list_nodes_by_kind talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web list_nodes_by_kind+search_nodes talk Building uls for microservices list_nodes_by_kind talk Business logic in Ruby list_nodes_by_kind+search_nodes talk Cables! Cables! Cables! list_nodes_by_kind talk Component Driven UI with ViewComponent list_nodes_by_kind talk Counterintuitive Rails pt. 1 list_nodes_by_kind talk Counterintuitive Rails pt. 2 list_nodes_by_kind+get_node_edges talk Data Management With Ruby list_nodes_by_kind talk Dealing With A Project's Complexity In A Changing Environment list_nodes_by_kind talk Debug like a scientist list_nodes_by_kind talk Developer, Programmer, and AI list_nodes_by_kind talk Development with axioms list_nodes_by_kind talk Devise pitfalls and way to tighten security list_nodes_by_kind+search_nodes talk Doctrine of Useful Objects Separate Fact from Fiction in OOD list_nodes_by_kind+search_nodes talk Enterprise Rails Panel list_nodes_by_kind talk Events events events list_nodes_by_kind talk Event Sourcing and Actor model in Ruby list_nodes_by_kind talk Event Sourcing Anti Patterns and Failures list_nodes_by_kind talk Ever shorter feedback loop list_nodes_by_kind talk Extracting logic from templates with Hanami Views list_nodes_by_kind+search_nodes talk FaaS for Ruby Lightning Talk list_nodes_by_kind talk Fantastic Databases and Where to Find Them list_nodes_by_kind talk Fix Production Bugs 20x Faster list_nodes_by_kind talk Forms Are Dead: Building Agentic Workflows in Ruby list_nodes_by_kind talk From open source to IPO list_nodes_by_kind talk From PostgreSQL to SQLite in Rails list_nodes_by_kind talk Gregorian Calendar list_nodes_by_kind talk Grokking FP For The Practicing Rubyist list_nodes_by_kind talk Handling file uploads for modern developer list_nodes_by_kind talk How (and why) to run SQLite in production list_nodes_by_kind talk How I brought LCP down to under 350 ms list_nodes_by_kind talk How To Ensure Systems Do What We Want And Take Care Of Themselves list_nodes_by_kind talk How to hijack list_nodes_by_kind talk How To Package A Rails Engine Generation To Automation list_nodes_by_kind talk How wroclove.rb impacts developers and companies list_nodes_by_kind talk International cooperation in IT teams list_nodes_by_kind talk Introducing Sorbet into your Ruby codebase list_nodes_by_kind talk Introduction To Event Sourcing How To Use It With Ruby list_nodes_by_kind talk Is the monolith a problem list_nodes_by_kind talk It is not so bad, after all list_nodes_by_kind talk JavaScript and Frontend Panel list_nodes_by_kind talk JRuby: Professional-Grade Ruby list_nodes_by_kind talk Kamal is not harder than your PaaS list_nodes_by_kind talk Lightning Talk on Email Leaks and Senior Developer Titles list_nodes_by_kind talk Methods Gem for Ruby Method References list_nodes_by_kind talk Might & Magic of Domain-Driven Design list_nodes_by_kind talk Multi-region data governance in Rails application list_nodes_by_kind+search_nodes talk Mutant on steroids list_nodes_by_kind talk MVCC for Ruby developers list_nodes_by_kind talk My core skill never was the typing list_nodes_by_kind talk Native apps are dead, long live native apps list_nodes_by_kind talk Next Token! list_nodes_by_kind talk Nightmare neighbours caveats of Rails based mutlitenancy list_nodes_by_kind talk No-build Utopia: Modern User Experiences with Rails & Web Standards list_nodes_by_kind talk No 'Pundit' Intended list_nodes_by_kind talk One machine please, make it Turing list_nodes_by_kind talk On the tasteful journey to Yippee list_nodes_by_kind talk Optimistic ul list_nodes_by_kind talk Optimizing performance in Rails apps with GraphQL layer list_nodes_by_kind talk Orchestrating video transcoding in ruby list_nodes_by_kind talk Outdated Browser Detection list_nodes_by_kind talk Performance of Distributed Applications list_nodes_by_kind talk Prevent account sharing list_nodes_by_kind talk Reforging (or rather rebrewing) the support for open-source list_nodes_by_kind talk Removing Code with Breadth-First Search list_nodes_by_kind talk Rewrite with confidence list_nodes_by_kind talk Rubyana Gems and the Ractorous Rubetta Stones! list_nodes_by_kind talk Ruby has literally always had types list_nodes_by_kind talk Ruby on a $4 Computer list_nodes_by_kind talk Ruby Rendezvous Method Call, Proc, and Beyond list_nodes_by_kind talk Scientific Ruby Lightning Talk list_nodes_by_kind talk Securing Rails applications list_nodes_by_kind talk Setup and operation of mutation testing in agentic world list_nodes_by_kind+search_nodes talk Sonic Pi Music Performance list_nodes_by_kind talk Spice up your life with eql list_nodes_by_kind talk SUPER AIN'T SUPER From OOP To FP and Beyond! list_nodes_by_kind talk Testing Randomness list_nodes_by_kind+search_nodes talk The Curse of Service Object list_nodes_by_kind talk The good, the bad and the remote — collaborative domain modeling with EventStorming list_nodes_by_kind talk The pillars of Domain Driven Design list_nodes_by_kind talk Toolbelt of a Seasoned Bug Hunter list_nodes_by_kind talk To Refine or Not to Refine list_nodes_by_kind talk Towards the post framework future list_nodes_by_kind+search_nodes talk Typical DDDomains In Rails Apps list_nodes_by_kind talk Understanding coupling list_nodes_by_kind talk Under The Hood And On The Surface Of Sidekiq list_nodes_by_kind talk UringMachine — High Performance Concurrency for Ruby Using io_uring list_nodes_by_kind talk Webmock unmocked list_nodes_by_kind talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails list_nodes_by_kind talk Working with RailsEventStore in Cashflow Management System list_nodes_by_kind event EmberConf list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event wroclove.rb 2018 list_nodes_by_kind event wroclove.rb 2019 list_nodes_by_kind event wroclove.rb 2022 list_nodes_by_kind event wroclove.rb 2023 list_nodes_by_kind event wroclove.rb 2024 list_nodes_by_kind event wroclove.rb 2025 list_nodes_by_kind event wroclove.rb 2026 list_nodes_by_kind concept Active Record list_nodes_by_kind+search_nodes concept ActiveSupport Core Extensions list_nodes_by_kind concept Aggregate Root list_nodes_by_kind concept Aggregate-Scoped Sequence Number list_nodes_by_kind concept Aggregator list_nodes_by_kind concept Anti-Corruption Layer list_nodes_by_kind concept Application Logic vs Business Logic list_nodes_by_kind concept Architecture Drivers list_nodes_by_kind concept Auto-yielding Fibers list_nodes_by_kind concept Blocking I/O list_nodes_by_kind concept Bouncing Select list_nodes_by_kind concept Bounded Context list_nodes_by_kind concept BPMN list_nodes_by_kind concept Breadth-First Search for Code Removal list_nodes_by_kind concept Cache Preheating list_nodes_by_kind concept Command Form list_nodes_by_kind concept Command Query Separation list_nodes_by_kind concept Commands, Queries, and Events list_nodes_by_kind concept Command UUID Deduplication list_nodes_by_kind concept Context Map list_nodes_by_kind concept Convention over Configuration list_nodes_by_kind concept Conway's Law list_nodes_by_kind concept Core Domain list_nodes_by_kind concept Coupling list_nodes_by_kind concept CQRS list_nodes_by_kind concept CSS-in-JS list_nodes_by_kind concept Current State list_nodes_by_kind+search_nodes concept Cynefin Framework list_nodes_by_kind+search_nodes concept DDD Whirlpool list_nodes_by_kind concept Denormalizer / Read Model list_nodes_by_kind concept Dependency Injection list_nodes_by_kind concept DescendantsTracker list_nodes_by_kind concept Developer vs Programmer list_nodes_by_kind concept Direct Upload to Cloud list_nodes_by_kind concept Distributed Monolith list_nodes_by_kind concept Distributed Systems list_nodes_by_kind concept Domain-Driven Design list_nodes_by_kind concept Domain Model (vs Active Record Model) list_nodes_by_kind concept Domain Storytelling list_nodes_by_kind concept Duck Typing list_nodes_by_kind concept Elixir Pipe Operator list_nodes_by_kind concept Embrace The Evented Model list_nodes_by_kind concept epoll list_nodes_by_kind concept Event-Driven Architecture list_nodes_by_kind concept Event Handler Error Strategy list_nodes_by_kind concept Events and Commands list_nodes_by_kind concept Event Sourcing list_nodes_by_kind concept Event Store list_nodes_by_kind concept EventStorming list_nodes_by_kind concept Eventual Consistency list_nodes_by_kind concept Event Versioning / Upcasting list_nodes_by_kind concept Five Whys list_nodes_by_kind concept Flame Graphs list_nodes_by_kind concept Flat Model Structure list_nodes_by_kind concept Fragment Caching list_nodes_by_kind concept Function as a Service list_nodes_by_kind concept Global Interpreter Lock list_nodes_by_kind concept Hexagonal Architecture list_nodes_by_kind concept HTTP/2 Server Push list_nodes_by_kind concept HTTP Caching with ETag and Last-Modified list_nodes_by_kind concept Ideal Rails System Properties list_nodes_by_kind concept Idempotence list_nodes_by_kind concept Idempotent Projectors and Reactors list_nodes_by_kind concept Image bomb list_nodes_by_kind concept Interface Wrapper for Ruby list_nodes_by_kind concept IO.select list_nodes_by_kind concept JSON API list_nodes_by_kind concept kqueue list_nodes_by_kind concept Magic bytes MIME detection list_nodes_by_kind concept Majestic Monolith list_nodes_by_kind concept Message Store list_nodes_by_kind concept Method References in Ruby list_nodes_by_kind concept Mind Map Knowledge Base for Event Sourcing list_nodes_by_kind concept Monolith as Data Model list_nodes_by_kind concept MVC Modularity Violations list_nodes_by_kind+search_nodes concept Namespace-Based Folder Hierarchy list_nodes_by_kind concept Nested Aggregates list_nodes_by_kind concept Non-blocking I/O list_nodes_by_kind concept ObjectSpace heap dumps list_nodes_by_kind concept On-the-fly Processing list_nodes_by_kind concept On-Upload Processing list_nodes_by_kind concept Orphan Files list_nodes_by_kind concept Page Load Time Budget list_nodes_by_kind concept Partitioning list_nodes_by_kind concept Performance Time Budget list_nodes_by_kind concept Petri Nets list_nodes_by_kind concept Pipeline Operator list_nodes_by_kind concept Plain Old Java Object list_nodes_by_kind+search_nodes concept Policies and Strategies list_nodes_by_kind concept Polymorphic Aggregate list_nodes_by_kind concept Preloading and Prefetching list_nodes_by_kind concept Process Manager list_nodes_by_kind concept Progressive Web Apps list_nodes_by_kind concept Projector list_nodes_by_kind concept Rails Reload-Safe ES Configuration list_nodes_by_kind+search_nodes concept Rails RouteSet clear list_nodes_by_kind concept Railway Oriented Programming list_nodes_by_kind+search_nodes concept Reactive Programming list_nodes_by_kind concept Reactor list_nodes_by_kind concept Read/Write Disparity list_nodes_by_kind concept Read-Write Split list_nodes_by_kind concept Real-time Web Applications list_nodes_by_kind concept Refinements list_nodes_by_kind concept respond_to Anti-Pattern list_nodes_by_kind concept REST Representations list_nodes_by_kind concept Resumable Uploads list_nodes_by_kind concept Ruby memory retention behavior list_nodes_by_kind concept Ruby Module Customization Mechanics list_nodes_by_kind concept Ruby undef_method performance list_nodes_by_kind concept Russian Doll Caching list_nodes_by_kind concept Saga Pattern list_nodes_by_kind+search_nodes concept Saga / Process Manager list_nodes_by_kind concept Senior Developer Title list_nodes_by_kind concept Serverless list_nodes_by_kind concept Service Autonomy list_nodes_by_kind concept Snapshotting list_nodes_by_kind concept Socket Hijacking list_nodes_by_kind concept Sometimes Nothing Is Enough list_nodes_by_kind+search_nodes concept Stalling For Time list_nodes_by_kind+search_nodes concept Stateless Service Object list_nodes_by_kind concept State Machine list_nodes_by_kind+search_nodes concept Static Page Caching via nginx list_nodes_by_kind concept Tacit Knowledge list_nodes_by_kind concept Task-Driven UI list_nodes_by_kind concept TC39 list_nodes_by_kind concept TCP Slow Start list_nodes_by_kind concept Trailblazer Activity list_nodes_by_kind concept Trailblazer Operation list_nodes_by_kind concept Trailblazer Workflow list_nodes_by_kind concept Transpilers list_nodes_by_kind concept tus protocol list_nodes_by_kind concept Ubiquitous Language list_nodes_by_kind concept Unique Per-Site Email Leak Detection list_nodes_by_kind concept Value Object list_nodes_by_kind concept Virtual DOM list_nodes_by_kind concept VNC list_nodes_by_kind concept Waterfall Analysis list_nodes_by_kind concept Weasel Words list_nodes_by_kind concept WebAssembly list_nodes_by_kind concept WebSockets list_nodes_by_kind concept yield_self list_nodes_by_kind concept Zero-Disconnect Deployment list_nodes_by_kind tool Action Cable list_nodes_by_kind tool Active Storage list_nodes_by_kind+search_nodes tool acts_as_api list_nodes_by_kind+search_nodes tool aggregate_root list_nodes_by_kind+search_nodes tool Akamai list_nodes_by_kind tool Amazon S3 list_nodes_by_kind tool Angular list_nodes_by_kind tool Apache HTTP Server list_nodes_by_kind tool Apache Kafka list_nodes_by_kind tool async list_nodes_by_kind tool Babel list_nodes_by_kind tool BME280 list_nodes_by_kind tool Brotli list_nodes_by_kind tool Browserslist list_nodes_by_kind tool C++ list_nodes_by_kind tool CarrierWave list_nodes_by_kind+search_nodes tool Cassandra list_nodes_by_kind tool Cells list_nodes_by_kind+search_nodes tool Celluloid list_nodes_by_kind+search_nodes tool Clojure list_nodes_by_kind tool ClojureScript list_nodes_by_kind tool Crystal list_nodes_by_kind tool Discourse list_nodes_by_kind tool dry-container list_nodes_by_kind tool dry-struct list_nodes_by_kind+search_nodes tool dry-types list_nodes_by_kind tool dry-validation list_nodes_by_kind+search_nodes tool Elasticsearch list_nodes_by_kind tool Electron list_nodes_by_kind tool Elixir list_nodes_by_kind tool Elm list_nodes_by_kind tool Ember.js list_nodes_by_kind+search_nodes tool Erlang list_nodes_by_kind tool ESP32 list_nodes_by_kind tool ESP-IDF list_nodes_by_kind tool EventMachine list_nodes_by_kind+search_nodes tool Faker list_nodes_by_kind+search_nodes tool file (Unix command) list_nodes_by_kind tool find-slow script list_nodes_by_kind tool Flow list_nodes_by_kind tool FreeRTOS list_nodes_by_kind tool git bisect list_nodes_by_kind tool Glimmer list_nodes_by_kind tool Go list_nodes_by_kind tool Grafana list_nodes_by_kind tool GraphQL list_nodes_by_kind tool gRPC list_nodes_by_kind tool Guard list_nodes_by_kind tool gzip list_nodes_by_kind tool Hanami list_nodes_by_kind+search_nodes tool heapy list_nodes_by_kind tool Heroku list_nodes_by_kind tool HTTP/2 list_nodes_by_kind tool ImageMagick list_nodes_by_kind tool image_processing gem list_nodes_by_kind tool interactor list_nodes_by_kind+search_nodes tool Iodine list_nodes_by_kind tool Java list_nodes_by_kind tool JIRA list_nodes_by_kind tool JSON API Resources list_nodes_by_kind+search_nodes tool libvips list_nodes_by_kind tool methods gem list_nodes_by_kind tool mini_magick list_nodes_by_kind+search_nodes tool MinIO list_nodes_by_kind+search_nodes tool MobX list_nodes_by_kind tool mruby list_nodes_by_kind+search_nodes tool Mutant list_nodes_by_kind tool .NET list_nodes_by_kind tool nginx list_nodes_by_kind tool Node.js list_nodes_by_kind tool Opal list_nodes_by_kind tool Outlook list_nodes_by_kind tool Paperclip list_nodes_by_kind+search_nodes tool Perl list_nodes_by_kind tool Phoenix list_nodes_by_kind tool Plezi list_nodes_by_kind+search_nodes tool PostgreSQL list_nodes_by_kind tool Preact list_nodes_by_kind tool Prometheus list_nodes_by_kind tool Protocol Buffers list_nodes_by_kind tool Puma list_nodes_by_kind tool PureScript list_nodes_by_kind tool Rack list_nodes_by_kind+search_nodes tool Rails 5.2 list_nodes_by_kind tool rails_event_store list_nodes_by_kind+search_nodes tool React list_nodes_by_kind tool RealtimeBoard list_nodes_by_kind tool Redis list_nodes_by_kind tool Redmine list_nodes_by_kind tool Refile list_nodes_by_kind tool Reform list_nodes_by_kind+search_nodes tool RSpec list_nodes_by_kind tool Ruby list_nodes_by_kind tool Ruby Browser Detection Gem list_nodes_by_kind tool ruby-contracts list_nodes_by_kind+search_nodes tool Ruby Event Store list_nodes_by_kind+search_nodes tool Ruby on Rails list_nodes_by_kind+search_nodes tool Rust list_nodes_by_kind tool Sequel list_nodes_by_kind tool Shrine list_nodes_by_kind tool Sonic Pi list_nodes_by_kind tool Spring list_nodes_by_kind tool Stimulus list_nodes_by_kind tool Sync Space VR list_nodes_by_kind tool ThingSpeak list_nodes_by_kind tool Trailblazer list_nodes_by_kind tool TypeScript list_nodes_by_kind tool Tyrant list_nodes_by_kind+search_nodes tool Uppy list_nodes_by_kind tool WebP list_nodes_by_kind tool webpagetest.org list_nodes_by_kind tool Wolfram Language list_nodes_by_kind person Aaron Patterson list_nodes_by_kind person Adam Okoń list_nodes_by_kind person Adam Piotrowski list_nodes_by_kind person Adrian Marin list_nodes_by_kind person Agnieszka Małaszkiewicz list_nodes_by_kind person Akira Matsuda list_nodes_by_kind person Alberto Brandolini list_nodes_by_kind person Amelia Walter-Dzikowska list_nodes_by_kind person Andrei Bondarev list_nodes_by_kind person Andrei Kaleshka list_nodes_by_kind person Andrzej Krzywda list_nodes_by_kind person Andrzej Śliwa list_nodes_by_kind person Andy Maleh list_nodes_by_kind person Anita Jaszewska list_nodes_by_kind person Anton Davydov list_nodes_by_kind person Armin Pašalić list_nodes_by_kind person Arturo Herrero list_nodes_by_kind person Ayush Newatia list_nodes_by_kind person Bartosz Blimke list_nodes_by_kind person Bertrand Meyer list_nodes_by_kind person Caio Almeida list_nodes_by_kind person Charles Nutter list_nodes_by_kind person Chikahiro Tokoro list_nodes_by_kind person Claude Lévi-Strauss list_nodes_by_kind person Damir Zekić list_nodes_by_kind person David Halasz list_nodes_by_kind person DHH list_nodes_by_kind person Dimitry Salahutdinov list_nodes_by_kind person Emiliano Della Casa list_nodes_by_kind person Eric Evans list_nodes_by_kind person Erwin Kroon list_nodes_by_kind person Ethan Garofolo list_nodes_by_kind person Greg Molnar list_nodes_by_kind person Greg Young list_nodes_by_kind person Ismael Celis list_nodes_by_kind person Ivan Nemytchenko list_nodes_by_kind person Jakub Rodzik list_nodes_by_kind person Janko Marohnic list_nodes_by_kind person Joel Drapper list_nodes_by_kind person John Gallagher list_nodes_by_kind person Josef Strzibny list_nodes_by_kind person José Valim list_nodes_by_kind person Julik Tarkhanov list_nodes_by_kind person Karol Szuster list_nodes_by_kind person Koichi Sasada list_nodes_by_kind person Krzysztof Hasiński list_nodes_by_kind person Kuba Suder list_nodes_by_kind person Louis Antonopoulos list_nodes_by_kind person Łukasz Reszke list_nodes_by_kind person Łukasz Szydło list_nodes_by_kind person Maciej Rząsa list_nodes_by_kind person Maciek list_nodes_by_kind person Marco Heimeshoff list_nodes_by_kind person Mariusz Gil list_nodes_by_kind person Markus Schirp list_nodes_by_kind person Martin Gamsjaeger list_nodes_by_kind person Mateusz Nowak list_nodes_by_kind person Matthias Verraes list_nodes_by_kind person Matz list_nodes_by_kind person Michal Matyas list_nodes_by_kind person Michał Młoźniak list_nodes_by_kind person Michał Zajączkowski de Mezer list_nodes_by_kind person Miron Marczuk list_nodes_by_kind person Nathan Ladd list_nodes_by_kind person Nick Sutterer list_nodes_by_kind person Nicolò Rebughini list_nodes_by_kind person Norbert Wójtowicz list_nodes_by_kind person Paweł Dąbrowski list_nodes_by_kind person Paweł Pacana list_nodes_by_kind person Paweł Pokrywka list_nodes_by_kind person Paweł Strzałkowski list_nodes_by_kind person Piotr Solnica list_nodes_by_kind person Radoslav Stankov list_nodes_by_kind person Rafał Cymerys list_nodes_by_kind person Rafał Rothenberger list_nodes_by_kind person Ryan Townsend list_nodes_by_kind person Scott Bell list_nodes_by_kind person Scott Bellware list_nodes_by_kind person Scott Wlaschin list_nodes_by_kind person Sebastian Wilgosz list_nodes_by_kind person Sergey Ivanov list_nodes_by_kind person Sergey Sergyenko list_nodes_by_kind person Seth Horsley list_nodes_by_kind person Sharon Rosner list_nodes_by_kind person Shugo Maeda list_nodes_by_kind person Stefan Wintermeyer list_nodes_by_kind person Stephen Margheim list_nodes_by_kind person Stephen Wolfram list_nodes_by_kind person Steve Ballmer list_nodes_by_kind person Szymon Fiedler list_nodes_by_kind person Szymon Kulec list_nodes_by_kind person Tomasz Donarski list_nodes_by_kind person Victor Shepelev list_nodes_by_kind person Vladimir Dementyev list_nodes_by_kind person Wojtek Wrona list_nodes_by_kind person Yaroslav Shmarov list_nodes_by_kind person Yatish Mehta list_nodes_by_kind person Yehuda Katz list_nodes_by_kind takeaway Silver Bullet Anti-Pattern search_nodes takeaway Business logic is mostly about state machines search_nodes project granite search_nodes project monolith framework search_nodes question Should touch on belongs_to be avoided in complex apps? search_nodes resource Rails Architect Master Class search_nodes takeaway Encapsulation Via Function-Style Objects search_nodes question Local storage for tests search_nodes

3 edges