← Extractions

Discipline Doesn't Scale — Markus Schirp at wroclove.rb 2026

Markus Schirp presents a mental model of three thresholds (ecosystem, automation, contribution) as dots thrown at a dartboard, arguing that discipline doesn't scale and only automation narrows the dangerous gap where bugs reach production. He frames LLMs as amplifiers that simply throw more dots, making Ruby's low ecosystem threshold especially costly and calling for more investment in tooling like Mutant, Sorbet/RBS, and property-based testing.

Model
claude-opus-4-7
Ingestion
cf6c59e9
Input tokens
970,809
fresh
259,606
cached
643,895
cache write
67,308
Output tokens
17,189
Duration
321.9s
Roundtrips
16
Tool calls
30
Cost
$0.00
Nodes/edges extracted
19 / 44
Read set (nodes/edges)
188 / 2

Nodes (19)

create Discipline Doesn't Scale talk
kind (empty) talk
name (empty) Discipline Doesn't Scale
slug (empty) discipline-doesn-t-scale
attrs (empty) {"date" => "2026-04-17", "type" => "talk"}
description (empty) Markus Schirp's wroclove.rb 2026 conference talk, delivered with an assistant (Katie) physically throwing darts at a ...
short_description (empty) Markus Schirp's wroclove.rb 2026 talk on contribution thresholds and why LLMs demand stronger automation.
create Katie person
kind (empty) person
name (empty) Katie
slug (empty) katie
description (empty) Speaker's assistant at Markus Schirp's wroclove.rb 2026 talk. Physically threw darts at the slide to generate the liv...
short_description (empty) Assistant who threw darts on stage during Schirp's Discipline Doesn't Scale talk.
create Ecosystem Threshold concept
kind (empty) concept
name (empty) Ecosystem Threshold
slug (empty) ecosystem-threshold
attrs (empty) {"category" => "architecture"}
description (empty) First of Schirp's three thresholds. The baseline guarantees you get 'batteries-included' from your chosen language: i...
short_description (empty) Baseline contribution quality enforced automatically by the base language and standard library.
create Automation Threshold concept
kind (empty) concept
name (empty) Automation Threshold
slug (empty) automation-threshold
attrs (empty) {"category" => "practice"}
description (empty) Schirp's second threshold: all the tooling layered above the ecosystem — TDD, DDD, linters, mutation testing, type sy...
short_description (empty) Level of quality enforced by tests, linters, type checks and CI on top of the base language.
create Contribution Threshold concept
kind (empty) concept
name (empty) Contribution Threshold
slug (empty) contribution-threshold
attrs (empty) {"category" => "architecture"}
description (empty) Schirp's third threshold and the goal. A dart crossing this line represents a change whose merge is net positive for ...
short_description (empty) The bar above which merging a change actually helps the company.
create Contribution Threshold Model concept
kind (empty) concept
name (empty) Contribution Threshold Model
slug (empty) contribution-threshold-model
attrs (empty) {"category" => "methodology"}
description (empty) Schirp's dartboard mental model: every contribution is a dart whose landing position is classified by three vertical ...
short_description (empty) Mental model classifying every contribution as a dart against ecosystem/automation/contribution thresholds.
create Haskell tool
kind (empty) tool
name (empty) Haskell
slug (empty) haskell
attrs (empty) {"category" => "language"}
description (empty) Statically-typed, purely functional programming language with a sophisticated type system cited by Schirp as the cano...
short_description (empty) Statically-typed purely functional language with a sophisticated type system.
create Property-Based Testing concept
kind (empty) concept
name (empty) Property-Based Testing
slug (empty) property-based-testing
attrs (empty) {"category" => "practice"}
description (empty) Testing technique where developers declare invariants the code must satisfy (e.g. 'reversing a list preserves its len...
short_description (empty) Testing by declaring invariants and generating random inputs to find counter-examples.
create Discipline Doesn't Scale (Takeaway) takeaway
kind (empty) takeaway
name (empty) Discipline Doesn't Scale (Takeaway)
slug (empty) discipline-doesn-t-scale-takeaway
attrs (empty) {"type" => "insight"}
description (empty) Schirp's headline lesson: discipline matters but doesn't scale. Three developers will screw up occasionally; 5,000 de...
short_description (empty) At any team size, discipline statistically fails; only automation reliably enforces quality.
create LLMs Amplify Existing Patterns takeaway
kind (empty) takeaway
name (empty) LLMs Amplify Existing Patterns
slug (empty) llms-amplify-existing-patterns
attrs (empty) {"type" => "insight"}
description (empty) LLMs are not specifically worse than humans at contributing code — in Schirp's model they're just a mechanism that th...
short_description (empty) LLMs aren't especially bad developers; they just throw many more darts past your automation.
create Ratios Not Absolutes takeaway
kind (empty) takeaway
name (empty) Ratios Not Absolutes
slug (empty) ratios-not-absolutes
attrs (empty) {"type" => "insight"}
description (empty) Small teams have fewer darts total; big teams have more. What matters for product quality is the ratio between red-zo...
short_description (empty) Think in ratios of red to green contributions, not absolute counts.
create Culture Is a Second-Order Effect takeaway
kind (empty) takeaway
name (empty) Culture Is a Second-Order Effect
slug (empty) culture-is-a-second-order-effect
attrs (empty) {"type" => "recommendation"}
description (empty) Schirp's position on where to invest: culture is just an encoding of discipline, and therefore fails for the same rea...
short_description (empty) Fix the deterministic automation layer before investing in culture; culture is encoded discipline.
create Harden Ruby Production Systems takeaway
kind (empty) takeaway
name (empty) Harden Ruby Production Systems
slug (empty) harden-ruby-production-systems
attrs (empty) {"type" => "recommendation"}
description (empty) In large Ruby deployments Schirp routinely patches out eval, patches out method_missing, freezes core classes, and fo...
short_description (empty) Freeze core classes, disable eval and method_missing in production to fight ecosystem drag.
create What counts as 'shit in production'? question
kind (empty) question
name (empty) What counts as 'shit in production'?
slug (empty) what-counts-as-shit-in-production
attrs (empty) {"answer_summary" => "Anything that reduces or doesn't add value — especially long-lasting damage like a wrong DB sch...
description (empty) Audience asks how Schirp defines 'shit in production' — is it just a bug? Schirp reframes: anything that reduces or d...
short_description (empty) Asks whether 'shit' means bugs or a broader category of damage.
create Does scale change the problem? question
kind (empty) question
name (empty) Does scale change the problem?
slug (empty) does-scale-change-the-problem
attrs (empty) {"answer_summary" => "Same problem everywhere; small teams just haven't thrown enough darts to see the distribution a...
description (empty) Audience pushes on Schirp's scaling argument: with three developers the problem size feels different. Schirp: it's th...
short_description (empty) If three developers have the same problem as 500, why does scale matter?
create LLMs 10× product misfunctions too question
kind (empty) question
name (empty) LLMs 10× product misfunctions too
slug (empty) llms-10x-product-misfunctions-too
attrs (empty) {"answer_summary" => "Agreed — product people face the same 10× amplification (un-requested features, less refinement...
description (empty) Audience member extends the argument: with 10× throughput LLMs also amplify product-quality issues — features and pro...
short_description (empty) Beyond technical bugs, AI ships features nobody asked for.
create Does the base language affect how hard automation work is? question
kind (empty) question
name (empty) Does the base language affect how hard automation work is?
slug (empty) does-the-base-language-affect-how-hard-automation-work-is
attrs (empty) {"answer_summary" => "Yes — a stronger base language shortens the distance to a good contribution threshold, and defa...
description (empty) Audience observation that the language itself sets the ecosystem threshold. Schirp confirms: a better base language (...
short_description (empty) Does a stronger base language reduce how much automation you have to build?
create What would you pick for a greenfield today? question
kind (empty) question
name (empty) What would you pick for a greenfield today?
slug (empty) what-would-you-pick-for-a-greenfield-today
attrs (empty) {"answer_summary" => "Haskell in theory; Rust in practice because it's an easy sell and delivers ~80% of Haskell's be...
description (empty) Audience asks what Schirp picks for greenfield work. With no economic constraints, always Haskell. But Haskell is a v...
short_description (empty) Language choice when economic constraints are in play.
create When to stop automating and invest in culture? question
kind (empty) question
name (empty) When to stop automating and invest in culture?
slug (empty) when-to-stop-automating-and-invest-in-culture
attrs (empty) {"answer_summary" => "Don't — culture is encoded discipline and also doesn't scale; fix automation first, treat cultu...
description (empty) Audience asks where on the threshold graph one should stop investing in automation and switch to investing in cultura...
short_description (empty) Is there a point on the curve where culture becomes the better investment?

Edges (44)

create Markus SchirpauthoredDiscipline Doesn't Scale
context (empty) Schirp delivered this talk at wroclove.rb 2026.
relation (empty) authored
source_node_id (empty) 6d1416eb-8271-4024-8c67-28d9e5513683
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create Discipline Doesn't Scalepresented_atwroclove.rb 2026
context (empty) Talk delivered on the main stage at wroclove.rb 2026.
relation (empty) presented_at
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) c1bfbda9-9fbb-4d7f-8e12-1a7a81621ba9
create Markus Schirpattendedwroclove.rb 2026
context (empty) Spoke at the conference and ran the same day's mutation-testing workshop.
relation (empty) attended
source_node_id (empty) 6d1416eb-8271-4024-8c67-28d9e5513683
target_node_id (empty) c1bfbda9-9fbb-4d7f-8e12-1a7a81621ba9
create Katierelated_toDiscipline Doesn't Scale
attrs (empty) {"role" => "speaker assistant"}
context (empty) Acted as Schirp's on-stage assistant, throwing darts at the slide during the talk.
relation (empty) related_to
source_node_id (empty) d34684a4-7797-4c17-9dac-6e89a9f162db
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create Discipline Doesn't ScaleaboutContribution Threshold Model
context (empty) Talk is structured around walking through the dartboard/threshold model.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 0abd9acc-3b22-4736-960c-4d98caad9047
create Discipline Doesn't ScaleaboutEcosystem Threshold
context (empty) One of the three thresholds introduced in the model.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 8b2b55c5-a01d-45d4-b03e-aae5d6ea77ed
create Discipline Doesn't ScaleaboutAutomation Threshold
context (empty) Central lever the talk advocates raising.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 1cabe887-5fad-4752-a4a0-4bc780171918
create Discipline Doesn't ScaleaboutContribution Threshold
context (empty) Goal line above which merges help the company.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) fa4773be-15e5-43db-85ef-b67d6d34ddf7
create Discipline Doesn't ScaleaboutRuby
context (empty) Argues Ruby's low ecosystem threshold makes the automation gap especially costly.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
create Discipline Doesn't ScaleaboutLarge Language Models
context (empty) LLMs multiply the number of contributions and stress the automation–contribution gap.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 5f3ec468-0bb7-43dd-aa34-63bd8658a111
create Contribution Threshold Modelrelated_toEcosystem Threshold
context (empty) First threshold in the model.
relation (empty) related_to
source_node_id (empty) 0abd9acc-3b22-4736-960c-4d98caad9047
target_node_id (empty) 8b2b55c5-a01d-45d4-b03e-aae5d6ea77ed
create Contribution Threshold Modelrelated_toAutomation Threshold
context (empty) Second threshold in the model.
relation (empty) related_to
source_node_id (empty) 0abd9acc-3b22-4736-960c-4d98caad9047
target_node_id (empty) 1cabe887-5fad-4752-a4a0-4bc780171918
create Contribution Threshold Modelrelated_toContribution Threshold
context (empty) Third threshold in the model.
relation (empty) related_to
source_node_id (empty) 0abd9acc-3b22-4736-960c-4d98caad9047
target_node_id (empty) fa4773be-15e5-43db-85ef-b67d6d34ddf7
create Discipline Doesn't Scale (Takeaway)from_talkDiscipline Doesn't Scale
context (empty) Headline lesson of the talk.
relation (empty) from_talk
source_node_id (empty) 5ee609d1-d902-483c-9397-017522daaaaf
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create LLMs Amplify Existing Patternsfrom_talkDiscipline Doesn't Scale
context (empty) Closing argument about LLMs in the talk.
relation (empty) from_talk
source_node_id (empty) 066faa79-e6fa-41b1-8f54-6f675b705425
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create LLMs Amplify Existing PatternsaboutLarge Language Models
context (empty) Takeaway specifically about LLM impact on software quality.
relation (empty) about
source_node_id (empty) 066faa79-e6fa-41b1-8f54-6f675b705425
target_node_id (empty) 5f3ec468-0bb7-43dd-aa34-63bd8658a111
create Ratios Not Absolutesfrom_talkDiscipline Doesn't Scale
context (empty) Audience-prompted clarification during Q&A.
relation (empty) from_talk
source_node_id (empty) 88777ec5-2b98-4588-abb3-162092944b0c
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create Culture Is a Second-Order Effectfrom_talkDiscipline Doesn't Scale
context (empty) Given in answer to the automation-vs-culture question.
relation (empty) from_talk
source_node_id (empty) 77430bfb-5507-4c62-b48e-36b904543f0c
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create Harden Ruby Production Systemsfrom_talkDiscipline Doesn't Scale
context (empty) Concrete mitigation Schirp shares for Ruby's low ecosystem threshold.
relation (empty) from_talk
source_node_id (empty) 3bfadedc-6ca0-4e16-b02b-27fe45f17207
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create Harden Ruby Production SystemsaboutRuby
context (empty) Specific practices for Ruby production deployments.
relation (empty) about
source_node_id (empty) 3bfadedc-6ca0-4e16-b02b-27fe45f17207
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
update Markus Schirpworks_onMutant
context Schirp is the author of Mutant. Mentions building Mutant and converting it to a commercial tool to keep it alive.
create Markus SchirprecommendsHaskell
context (empty) Says he would always work in Haskell if he had no economic constraints.
relation (empty) recommends
source_node_id (empty) 6d1416eb-8271-4024-8c67-28d9e5513683
target_node_id (empty) 6fa923ae-9495-431d-9ebc-8d6b986ecef9
create Markus SchirprecommendsRust
context (empty) His practical greenfield default — '80% Haskell, easy sell'.
relation (empty) recommends
source_node_id (empty) 6d1416eb-8271-4024-8c67-28d9e5513683
target_node_id (empty) 0acb6016-22e1-4a00-a2e9-46695fde3de2
create Discipline Doesn't ScaleaboutMutant
context (empty) Listed as one of the tools that can raise Ruby's automation threshold.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) ab45ac79-e626-4dbb-b938-be653956e6e5
create Discipline Doesn't ScaleaboutSorbet
context (empty) Cited as a way to raise the automation threshold in Ruby; Shopify's usage evidence.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Discipline Doesn't ScaleaboutRBS
context (empty) Mentioned alongside Sorbet as Ruby typing tooling that raises the automation threshold.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) bbf22e30-34ab-40fd-964c-783bf88a65a4
create Discipline Doesn't ScaleaboutProperty-Based Testing
context (empty) Open opportunity in Ruby; Schirp calls for a good library and popularization.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) a4e8c529-8bad-4962-9b1c-b46ecd77350a
create Discipline Doesn't ScaleaboutMutation Testing
context (empty) Named as a way to reduce wiggle room and raise the automation threshold.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 23d3425f-ac30-4ff6-b95a-d6349fd39a6b
create Discipline Doesn't ScaleaboutHaskell
context (empty) Used as the canonical example of a very high ecosystem threshold.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 6fa923ae-9495-431d-9ebc-8d6b986ecef9
create Discipline Doesn't ScaleaboutRust
context (empty) Schirp's real-world greenfield choice cited during Q&A.
relation (empty) about
source_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
target_node_id (empty) 0acb6016-22e1-4a00-a2e9-46695fde3de2
create Property-Based Testingrelated_toHaskell
context (empty) Schirp credits Haskell/finance as where property-based testing was a god-send.
relation (empty) related_to
source_node_id (empty) a4e8c529-8bad-4962-9b1c-b46ecd77350a
target_node_id (empty) 6fa923ae-9495-431d-9ebc-8d6b986ecef9
update Markus SchirpauthoredSetup and operation of mutation testing in agentic world
context (empty) Ran this mutation-testing workshop earlier the same day as the talk.
update Setup and operation of mutation testing in agentic worldpresented_atwroclove.rb 2026
context (empty) Workshop held at wroclove.rb 2026; referenced by attendees at the start of Schirp's talk.
create What counts as 'shit in production'?asked_atDiscipline Doesn't Scale
context (empty) Audience Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) eb67e15f-d124-403a-9055-7922c9725976
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create Does scale change the problem?asked_atDiscipline Doesn't Scale
context (empty) Audience Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) 02af2333-93ac-4d63-8e20-3f03d5917e85
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create LLMs 10× product misfunctions tooasked_atDiscipline Doesn't Scale
context (empty) Audience Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) ec6d00f0-1f8f-46ee-845b-f69961a9a500
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create Does the base language affect how hard automation work is?asked_atDiscipline Doesn't Scale
context (empty) Audience Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) 7b0ac980-4a2d-489e-ace8-363a57e0275c
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create What would you pick for a greenfield today?asked_atDiscipline Doesn't Scale
context (empty) Audience Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) 8678d6e3-6fa5-4f94-a073-4a7933bdbbb3
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create When to stop automating and invest in culture?asked_atDiscipline Doesn't Scale
context (empty) Audience Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) de0ea890-49af-403c-8e62-2893b89ac873
target_node_id (empty) 0ccfdebb-48ef-447c-b17d-95a796d3d155
create What would you pick for a greenfield today?aboutRust
context (empty) Answer centers on Rust as Schirp's greenfield default.
relation (empty) about
source_node_id (empty) 8678d6e3-6fa5-4f94-a073-4a7933bdbbb3
target_node_id (empty) 0acb6016-22e1-4a00-a2e9-46695fde3de2
create What would you pick for a greenfield today?aboutHaskell
context (empty) Haskell is the unconstrained first choice in the answer.
relation (empty) about
source_node_id (empty) 8678d6e3-6fa5-4f94-a073-4a7933bdbbb3
target_node_id (empty) 6fa923ae-9495-431d-9ebc-8d6b986ecef9
create Does the base language affect how hard automation work is?aboutEcosystem Threshold
context (empty) Question and answer are about how the language sets the ecosystem threshold.
relation (empty) about
source_node_id (empty) 7b0ac980-4a2d-489e-ace8-363a57e0275c
target_node_id (empty) 8b2b55c5-a01d-45d4-b03e-aae5d6ea77ed
create LLMs 10× product misfunctions tooaboutLarge Language Models
context (empty) Question is about LLM impact on product quality.
relation (empty) about
source_node_id (empty) ec6d00f0-1f8f-46ee-845b-f69961a9a500
target_node_id (empty) 5f3ec468-0bb7-43dd-aa34-63bd8658a111
create When to stop automating and invest in culture?aboutAutomation Threshold
context (empty) Question asks where to stop investing in this layer.
relation (empty) about
source_node_id (empty) de0ea890-49af-403c-8e62-2893b89ac873
target_node_id (empty) 1cabe887-5fad-4752-a4a0-4bc780171918

Read set

188 nodes

tool Mutant search_nodes talk Mutant on steroids search_nodes question Has Mutant been run against popular Ruby libraries? search_nodes project Ruby Romania search_nodes tool langchainrb search_nodes tool TruffleRuby search_nodes tool Ruby LLM search_nodes takeaway Port Python Libraries With ChatGPT search_nodes concept Mutation Operator search_nodes project Ruby News search_nodes concept Mutation Testing search_nodes concept Mutation Testing Preconditions search_nodes concept Incremental Mutation Testing search_nodes takeaway Start mutation testing incrementally search_nodes question Experience with mutation testing in other ecosystems? search_nodes tool Crystal Ball search_nodes talk Mutation testing workshop wroclove.rb 2019 search_nodes takeaway Mutation testing replaces dumb review questions search_nodes tool concurrent-ruby search_nodes event Rails World search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes event RubyKaigi search_nodes event wroclove.rb 2022 search_nodes talk Ruby Is Mature Now search_nodes resource Short Ruby Newsletter search_nodes talk Scientific Ruby Lightning Talk search_nodes person Markus Schirp search_nodes project Arkency Knowledge Graph search_nodes takeaway Name Things To Find Their Properties search_nodes concept AI Agent search_nodes project Check search_nodes concept Retrieval Augmented Generation search_nodes tool ChatGPT search_nodes concept GraphQL max_depth search_nodes tool Top Secret LLM search_nodes tool Sorbet search_nodes question Are Sorbet runtime checks built on TracePoint? search_nodes tool Steep search_nodes takeaway Sorbet fits big refactorable codebases, not greenfield search_nodes tool RBS search_nodes concept Runtime Types vs Static Types search_nodes talk Introducing Sorbet into your Ruby codebase search_nodes takeaway Generate RBI files instead of writing inline signatures search_nodes question Dry-types input validation vs full Sorbet typing search_nodes question Could types be defined outside the class like RBS? search_nodes takeaway Avoid logic in tests search_nodes concept Custom DSL for Specs search_nodes talk Testing Randomness search_nodes takeaway Treat existing system behavior as a specification search_nodes concept Logic in Tests search_nodes takeaway Test Code Can Be Generalized Like Production Code search_nodes talk Setup and operation of mutation testing in agentic world search_nodes+get_node_edges takeaway Delegate Event-Model-To-Test Translation To LLMs search_nodes concept Reactive Programming search_nodes tool PureScript search_nodes concept Punch Card Programming search_nodes tool Elm search_nodes tool Elixir search_nodes tool Rust search_nodes tool Clojure search_nodes takeaway Identify Data Calculations Actions In Your System search_nodes takeaway Purity Is The Wrong Lens; Dependency On Time Is The Right One search_nodes tool Erlang search_nodes tool Go search_nodes concept Exploratory Programming search_nodes tool Crystal search_nodes concept Railway Oriented Programming search_nodes tool Wolfram Language search_nodes tool Ruby search_nodes takeaway Narrow Agent Responsibilities For Reliability search_nodes takeaway Connect engineers to observability costs search_nodes concept Resume Driven Development search_nodes takeaway Silver Bullet Anti-Pattern search_nodes takeaway Publish Small Findings To Scale Debugging search_nodes concept Scaffolding Before Features search_nodes takeaway Build Your Own Internal CLI Tools search_nodes takeaway Audit and reduce existing log volume before adding more search_nodes takeaway Shared Hardware Is a 1970s Feedback Loop search_nodes takeaway Observability becomes addictive search_nodes question Generate code once vs instruct LLM per request search_nodes tool Codex CLI search_nodes takeaway Vibe Coding An Unfamiliar Domain Is Risky search_nodes takeaway Don't Vibe-Code Critical Thinking search_nodes concept Falsehoods Programmers Believe About LLMs search_nodes tool Claude Code search_nodes takeaway LLMs Are Just Token Generators search_nodes concept Structured LLM Output search_nodes takeaway Control the Input and the Evaluation, Not the Model search_nodes concept Optional Gradual Typing search_nodes talk Functional Programming as Naming Lightning Talk search_nodes concept Finite State Machine search_nodes tool ClojureScript search_nodes concept Monkey Patching search_nodes concept Refinements search_nodes concept Ruby Module Customization Mechanics search_nodes concept ActiveSupport Core Extensions search_nodes tool stub_any_instance search_nodes question Tracking HTTP client library changes search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes person Akira Matsuda search_nodes tool Mimic search_nodes tool Deface search_nodes tool CircleCI search_nodes concept CI Matrix Strategy search_nodes takeaway Quantify Wasted Time to Convince the Business search_nodes tool GitHub Actions search_nodes tool Codecov search_nodes takeaway Tests and Deployment in Under One Second search_nodes question How to integrate Mutant with CI search_nodes concept Blue-Green Deployment search_nodes tool reviewdog search_nodes company Planuj Wesele search_nodes talk Events events events search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2024 search_nodes talk Next Token! search_nodes tool power_assert search_nodes tool ruby-contracts search_nodes tool TestBench search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes concept Time.current Testing Trap search_nodes talk RSpec Is For Specs Not Tests search_nodes tool Heckle search_nodes question Can Mutant guide refactoring? search_nodes concept Equivalent Mutation search_nodes concept Crossing the Chasm search_nodes concept Comfort With Layers search_nodes takeaway Publish a roadmap to align contributors search_nodes concept RAIL Performance Model search_nodes concept Domain Storytelling search_nodes question How to do DDD remotely? search_nodes takeaway Every Model Is Wrong But Some Are Useful search_nodes concept Handwritten Incentive List and Action Plan search_nodes takeaway Prefer exploration over alerts; noisy alerts are worse than none search_nodes question Convincing Developers to Participate in EventStorming search_nodes tool Speaker Deck search_nodes takeaway Spoken Test Feedback with say + iTerm Triggers search_nodes tool macOS say command search_nodes concept Aspect-Oriented Programming search_nodes concept Test Driven Development search_nodes concept Axiom-Driven Development search_nodes takeaway TDD Is Process And Philosophy, Not Mechanics search_nodes concept Params-Driven Development search_nodes concept DDD Whirlpool search_nodes takeaway Avoid params-driven development search_nodes concept Data-Dictated Development search_nodes tool Lexer and Parser Generators search_nodes tool Kotlin search_nodes concept LLM Tool Calling search_nodes tool TypeScript search_nodes project axiom search_nodes project DataMapper 2 search_nodes talk Development with axioms search_nodes concept Declarative Migrations search_nodes concept Flat Query Structure search_nodes tool ROM search_nodes concept Context Map search_nodes question How hard is it to keep authorization relationships in sync? search_nodes takeaway Model permissions as a graph, check them as path existence search_nodes concept Domain Model (vs Active Record Model) search_nodes company Shopify search_nodes tool Bootsnap search_nodes resource Ruby Gem Fellowship Fund search_nodes company Nebulab search_nodes tool Packwerk search_nodes tool Tapioca search_nodes tool graphql-batch search_nodes company thoughtbot search_nodes project rails_event_store/ecommerce search_nodes tool Klaviyo search_nodes concept Domain-Driven Design search_nodes resource Implementing Domain-Driven Design search_nodes resource Domain-Driven Design: Patterns, Principles and Practices search_nodes talk Might & Magic of Domain-Driven Design search_nodes talk The pillars of Domain Driven Design search_nodes takeaway Model Domain By Reverse-Engineering Apps You Use search_nodes resource Domain-Driven Rails search_nodes question Does DDD require object-oriented programming? search_nodes question How to apply DDD when the client refuses to learn ubiquitous language? search_nodes takeaway DDD Is More Than Aggregates search_nodes tool GraphQL search_nodes tool Babel search_nodes takeaway Buy Faster Hardware search_nodes tool LLVM search_nodes concept Large Language Models search_nodes concept WebAssembly search_nodes

2 edges