← 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 NemytchenkoauthoredCounterintuitive Rails pt. 2
context (empty) Ivan Nemytchenko delivered this day-two talk at wroclove.rb 2018.
update Counterintuitive Rails pt. 2presented_atwroclove.rb 2018
context (empty) Delivered on day two of wroclove.rb 2018.
create Counterintuitive Rails pt. 2related_toCounterintuitive 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. 2aboutMutator 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. 2aboutForm 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. 2aboutNull 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. 2aboutBoolean 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. 2aboutState 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. 2aboutScope 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. 2aboutRails 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. 2aboutNamed 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. 2aboutFixtures 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. 2aboutStubs 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. 2aboutminitest
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. 2aboutpower_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. 2aboutflag_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. 2aboutDevise
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. 2aboutRuby 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. 2aboutActive 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. 2aboutHanami
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. 2aboutDomain 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 modelsfrom_talkCounterintuitive 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 authorsfrom_talkCounterintuitive 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 testsfrom_talkCounterintuitive 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 flagsfrom_talkCounterintuitive 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 mocksfrom_talkCounterintuitive 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 NemytchenkorecommendsMutator 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 NemytchenkorecommendsNull 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 NemytchenkorecommendsState 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 Nemytchenkorecommendsminitest
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 Nemytchenkorecommendspower_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 NemytchenkorecommendsFixtures 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 NemytchenkorecommendsStubs 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 NemytchenkorecommendsScope 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 NemytchenkorecommendsForm 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 Staterelated_toState 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 Layerrelated_toActive 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_toNathan 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 Concernrelated_toReform
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 Concernsrelated_toDomain 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