← Extractions

An Introduction to Test Bench — Nathan Ladd at wroclove.rb 2023

Nathan Ladd tells the intertwined story of the Test Bench Ruby test framework and his own journey learning TDD 'the hard way' under Scott Bellware's mentorship. He explains how validating every step with the framework itself produced a novel capability — self-testable fixtures as reusable test objects — and argues TDD is a process and philosophy for improving implementation quality, not merely red-green-refactor mechanics.

Model
claude-opus-4-7
Ingestion
cf619515
Input tokens
471,063
fresh
314,805
cached
142,985
cache write
13,273
Output tokens
16,720
Duration
284.8s
Roundtrips
9
Tool calls
25
Cost
$0.00
Nodes/edges extracted
18 / 37
Read set (nodes/edges)
124 / 4

Nodes (18)

update An Introduction to Test Bench talk
attrs {"type" => "talk"} {"date" => "2023-03-31", "type" => "talk"}
description Talk at wroclove.rb 2023. Nathan Ladd's wroclove.rb 2023 talk (March 31, 2023), interleaving the history of Test Bench with his personal histor...
short_description Talk at wroclove.rb 2023. Nathan Ladd's wroclove.rb 2023 talk on Test Bench, TDD, and fixtures as test objects.
update TestBench tool
attrs {"category" => "library"} {"author" => "Nathan Ladd", "category" => "library", "initial_release" => "2016-03-31"}
description Test framework shipped with the Eventide project. Usable in any Ruby project, including Rails. Pavel jokes that to us... Test framework shipped with the Eventide project. Usable in any Ruby project, including Rails. Initial release March ...
short_description Eventide's opinionated test framework for Ruby, used in place of RSpec. Minimal Ruby test framework from Eventide; self-testable, composable, fixture-oriented.
update Nathan Ladd person
attrs {"role" => "co-principal, Eventide project", "twitter" => "@realntl"} {"role" => "co-principal, Eventide project", "origin" => "Alaska, USA", "twitter" => "@realntl"}
description Conference speaker, co-principal / co-founder of the Eventide project (a toolkit for event sourcing and autonomous se... Conference speaker, co-principal / co-founder of the Eventide project (a toolkit for event sourcing and autonomous se...
short_description Ruby conference speaker; co-principal of the Eventide project. Ruby conference speaker; co-principal of Eventide; author of Test Bench.
update Scott Bellware person
attrs (empty) {"role" => "co-maintainer, Eventide"}
description Conference speaker. Conference speaker and long-time TDD/BDD practitioner. Began working with Nathan Ladd in 2015; the pair's dissatisfac...
short_description Conference speaker. TDD/BDD thought leader, co-maintainer of Eventide, collaborator on Test Bench.
create Useful Objects concept
kind (empty) concept
name (empty) Useful Objects
slug (empty) useful-objects
attrs (empty) {"category" => "methodology"}
description (empty) Object-oriented design doctrine associated with Scott Bellware (see 'Doctrine of Useful Objects: Separate Fact from F...
short_description (empty) Scott Bellware's OOD doctrine about designing complete, downstream-serving objects.
create Rushing Causes Design Mistakes takeaway
kind (empty) takeaway
name (empty) Rushing Causes Design Mistakes
slug (empty) rushing-causes-design-mistakes
attrs (empty) {"type" => "lesson-learned"}
description (empty) Reflecting on his pre-2018 career, Ladd identifies rushing as a consistent personal theme (mirroring his inability to...
short_description (empty) Ladd's recurring failure mode: enjoying the first 20% and declaring work done when only 'working'.
create Test Bench Fixture concept
kind (empty) concept
name (empty) Test Bench Fixture
slug (empty) test-bench-fixture
attrs (empty) {"category" => "pattern"}
description (empty) Test Bench's central abstraction and its most novel capability. A fixture is just a plain Ruby class that includes th...
short_description (empty) Plain class including TestBench::Fixture that behaves as a composable test object.
create Context Specification concept
kind (empty) concept
name (empty) Context Specification
slug (empty) context-specification
attrs (empty) {"category" => "practice"}
description (empty) Practice of organizing tests into nested descriptive contexts with prose that reads as specification. Introduced to t...
short_description (empty) Using nested descriptive prose in tests as technical writing that validates design.
create Introduce Explaining Variable concept
kind (empty) concept
name (empty) Introduce Explaining Variable
slug (empty) introduce-explaining-variable
attrs (empty) {"category" => "pattern"}
description (empty) Classic refactoring from Fowler's 'Refactoring': declare a variable, assign it a value, and give it a name that makes...
short_description (empty) Refactoring: extract a meaningfully-named boolean variable to clarify intent.
create Mistake As Obstruction To Understanding concept
kind (empty) concept
name (empty) Mistake As Obstruction To Understanding
slug (empty) mistake-as-obstruction-to-understanding
attrs (empty) {"category" => "practice"}
description (empty) Definition Ladd attributes to ongoing conversations with Scott Bellware. A mistake is not merely a defect or malfunct...
short_description (empty) In knowledge work, any obstruction to human understanding counts as a mistake.
update Test Driven Development concept
description Discipline of writing a failing test first, then implementing the minimum code to make it pass, then refactoring. In ... Ladd reframes TDD beyond the 'write a test, make it pass, refactor' mechanics: TDD's real object is improving the qua...
short_description Practice of writing tests before production code and letting them drive design. Discipline for improving design by validating every implementation step through tests.
create Refactoring (book) resource
kind (empty) resource
name (empty) Refactoring (book)
slug (empty) refactoring-book
attrs (empty) {"type" => "book", "author" => "Martin Fowler"}
description (empty) Martin Fowler's 'Refactoring: Improving the Design of Existing Code'. Recommended by Scott Bellware during the Test B...
short_description (empty) Martin Fowler's book on refactoring, source of catalog refactorings like Introduce Explaining Variable.
create What are fixtures in Test Bench? question
kind (empty) question
name (empty) What are fixtures in Test Bench?
slug (empty) what-are-fixtures-in-test-bench
attrs (empty) {"answer_summary" => "A Test Bench fixture is a plain class that includes TestBench::Fixture and exercises another ob...
description (empty) Audience member (a Rails developer) asks Ladd to clarify what 'fixture' means in Test Bench, since it collides with R...
short_description (empty) Audience asks to clarify 'fixture' vs the Rails fixture meaning.
create How to assert on collection properties in Test Bench? question
kind (empty) question
name (empty) How to assert on collection properties in Test Bench?
slug (empty) how-to-assert-on-collection-properties-in-test-bench
attrs (empty) {"answer_summary" => "Build a specialized fixture per verification shape (CSS-selector XML, JSON attribute, 'Nth elem...
description (empty) Audience member describes a case where they want to assert that an array contains a hash with a specific key, rather ...
short_description (empty) Audience asks how to do RSpec-style composable matcher assertions in Test Bench.
create TDD Is Process And Philosophy, Not Mechanics takeaway
kind (empty) takeaway
name (empty) TDD Is Process And Philosophy, Not Mechanics
slug (empty) tdd-is-process-and-philosophy-not-mechanics
attrs (empty) {"type" => "insight"}
description (empty) Ladd's central lesson from developing Test Bench: TDD is not just a technique to install. Writing test-first, doing r...
short_description (empty) Red-green-refactor is TDD's routine; its objective is validated, understanding-free implementations.
create Test Code Can Be Generalized Like Production Code takeaway
kind (empty) takeaway
name (empty) Test Code Can Be Generalized Like Production Code
slug (empty) test-code-can-be-generalized-like-production-code
attrs (empty) {"type" => "insight"}
description (empty) Ladd argues Test Bench's fixtures prove test code can be generalized, composed, and layered like regular code — e.g. ...
short_description (empty) Fixtures can compose and depend on other fixtures, opening a new frontier for test frameworks.
create Practice Makes Permanent takeaway
kind (empty) takeaway
name (empty) Practice Makes Permanent
slug (empty) practice-makes-permanent
attrs (empty) {"type" => "lesson-learned"}
description (empty) Ladd credits his high-school soccer coach (and, in spirit, Scott Bellware) with the adage 'practice doesn't make perf...
short_description (empty) Whatever level you practice at is what you get better at; choose your best.
create Software Perfection Is An Ongoing Process takeaway
kind (empty) takeaway
name (empty) Software Perfection Is An Ongoing Process
slug (empty) software-perfection-is-an-ongoing-process
attrs (empty) {"type" => "insight"}
description (empty) Ladd's reframing of the 'software is never done' adage. He used to read it as 'there is always some future elaboratio...
short_description (empty) 'Software is never done' means the process of perfecting it never ends, not that more features remain.

Edges (37)

create Nathan Laddattendedwroclove.rb 2023
context (empty) Presented 'An Introduction to Test Bench'.
relation (empty) attended
source_node_id (empty) c2047c7c-2316-4c38-af4f-1e8a78f80206
target_node_id (empty) f1adcf6d-780c-4418-8a81-c88da8b4e631
update Nathan LaddauthoredAn Introduction to Test Bench
context (empty) Delivered the talk at wroclove.rb 2023.
update An Introduction to Test Benchpresented_atwroclove.rb 2023
context (empty) Talk given on 2023-03-31 at wroclove.rb in Wrocław.
create An Introduction to Test BenchaboutTestBench
context (empty) Primary subject: the history, design, and capabilities of the Test Bench framework.
relation (empty) about
source_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
target_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
create An Introduction to Test BenchaboutTest Driven Development
context (empty) Major thread of the talk: TDD as process/philosophy, the V1 rewrite done under strict TDD.
relation (empty) about
source_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
target_node_id (empty) 1c2ff90e-39e6-496e-b94d-6234d545033e
create An Introduction to Test BenchaboutTest Bench Fixture
context (empty) Introduces fixtures as Test Bench's novel composable test-object abstraction.
relation (empty) about
source_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
target_node_id (empty) 4740fe5e-8060-4f68-bdff-e3bcf52901af
create An Introduction to Test BenchaboutUseful Objects
context (empty) Explains how the V1 rewrite made Useful Objects 'click' for Ladd.
relation (empty) about
source_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
target_node_id (empty) c9dea571-60bc-4290-91c0-bfcb0dc4008d
create An Introduction to Test BenchaboutContext Specification
context (empty) Discusses BDD/context specification's value and how green-dot output eroded it.
relation (empty) about
source_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
target_node_id (empty) ec189a2b-a1d3-4e61-bb43-5421746b0df4
create Nathan Laddworks_onTestBench
attrs (empty) {"role" => "author"}
context (empty) Author of Test Bench; drove initial implementation and V1 rewrite.
relation (empty) works_on
source_node_id (empty) c2047c7c-2316-4c38-af4f-1e8a78f80206
target_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
create Scott Bellwareworks_onTestBench
attrs (empty) {"role" => "collaborator, documentation"}
context (empty) Collaborated on original design in 2016, wrote Test Bench V1 documentation.
relation (empty) works_on
source_node_id (empty) a230a950-7b3c-4b0a-a4d3-da2800c903bc
target_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
create Nathan Laddrelated_toScott Bellware
attrs (empty) {"since" => "2015"}
context (empty) Working together since 2015; Bellware mentored Ladd on TDD and design principles.
relation (empty) related_to
source_node_id (empty) c2047c7c-2316-4c38-af4f-1e8a78f80206
target_node_id (empty) a230a950-7b3c-4b0a-a4d3-da2800c903bc
create TestBenchrelated_toEventide
context (empty) Test Bench is shipped and used as the test framework for Eventide projects.
relation (empty) related_to
source_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
target_node_id (empty) 702f4d95-01a7-4836-9562-8c14b01a4b73
create TestBenchrelated_tominitest
context (empty) Team migrated their projects from minitest to Test Bench in 2016 after dissatisfaction with must_equal semantics, lac...
relation (empty) related_to
source_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
target_node_id (empty) 6d3b8a3d-e1b5-4eba-ae6f-eaab5ce22211
create TestBenchrelated_toRSpec
context (empty) Positioned as an alternative to RSpec; rejects the elaborate matcher API and green-dot default output.
relation (empty) related_to
source_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
target_node_id (empty) 91c45bda-6818-4a05-962e-8c4531264e44
create Test Bench Fixturerelated_toTestBench
context (empty) Fixture is Test Bench's central abstraction, enabled by the DSL being usable in isolation from the framework.
relation (empty) related_to
source_node_id (empty) 4740fe5e-8060-4f68-bdff-e3bcf52901af
target_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
create Nathan LaddrecommendsTest Driven Development
context (empty) Advocates TDD as a process/philosophy for improving implementation quality.
relation (empty) recommends
source_node_id (empty) c2047c7c-2316-4c38-af4f-1e8a78f80206
target_node_id (empty) 1c2ff90e-39e6-496e-b94d-6234d545033e
create Nathan LaddrecommendsUseful Objects
context (empty) Credits Useful Objects for reshaping the economics of encapsulation during the V1 rewrite.
relation (empty) recommends
source_node_id (empty) c2047c7c-2316-4c38-af4f-1e8a78f80206
target_node_id (empty) c9dea571-60bc-4290-91c0-bfcb0dc4008d
create Scott BellwarerecommendsRefactoring (book)
context (empty) Recommends Fowler's book to anyone who uses the word 'refactoring', during the Test Bench Q&A.
relation (empty) recommends
source_node_id (empty) a230a950-7b3c-4b0a-a4d3-da2800c903bc
target_node_id (empty) 61c4eaa8-1e21-476c-b171-a0d223e43f46
create Nathan Laddusesminitest
context (empty) Devoted minitest user before Test Bench; preferred its simpler should-style semantics over RSpec's expect syntax.
relation (empty) uses
source_node_id (empty) c2047c7c-2316-4c38-af4f-1e8a78f80206
target_node_id (empty) 6d3b8a3d-e1b5-4eba-ae6f-eaab5ce22211
create What are fixtures in Test Bench?asked_atAn Introduction to Test Bench
context (empty) Audience Q&A clarifying the word 'fixture' vs Rails fixtures.
relation (empty) asked_at
source_node_id (empty) b8451771-c773-4c14-a6e4-dcf734bf2a7f
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create What are fixtures in Test Bench?aboutTest Bench Fixture
context (empty) Asks for a definition of the fixture concept in Test Bench.
relation (empty) about
source_node_id (empty) b8451771-c773-4c14-a6e4-dcf734bf2a7f
target_node_id (empty) 4740fe5e-8060-4f68-bdff-e3bcf52901af
create How to assert on collection properties in Test Bench?asked_atAn Introduction to Test Bench
context (empty) Audience Q&A on replacing RSpec composable matchers for collection properties.
relation (empty) asked_at
source_node_id (empty) 2c15d284-e411-4931-8878-1d0f6c8c8927
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create How to assert on collection properties in Test Bench?aboutTest Bench Fixture
context (empty) Answer: build specialized fixtures (CSS-selector XML, JSON attribute, Nth-element) rather than general-purpose matchers.
relation (empty) about
source_node_id (empty) 2c15d284-e411-4931-8878-1d0f6c8c8927
target_node_id (empty) 4740fe5e-8060-4f68-bdff-e3bcf52901af
create TDD Is Process And Philosophy, Not Mechanicsfrom_talkAn Introduction to Test Bench
context (empty) Central lesson of the talk.
relation (empty) from_talk
source_node_id (empty) 3bbf5960-7055-455a-818b-a55327991614
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create TDD Is Process And Philosophy, Not MechanicsaboutTest Driven Development
context (empty) Reframes TDD away from red-green-refactor mechanics.
relation (empty) about
source_node_id (empty) 3bbf5960-7055-455a-818b-a55327991614
target_node_id (empty) 1c2ff90e-39e6-496e-b94d-6234d545033e
create Test Code Can Be Generalized Like Production Codefrom_talkAn Introduction to Test Bench
context (empty) One of three main takeaways Ladd highlights.
relation (empty) from_talk
source_node_id (empty) a0318baf-e6fb-489b-b583-5f1e78365ae6
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create Test Code Can Be Generalized Like Production CodeaboutTest Bench Fixture
context (empty) Fixtures are the mechanism enabling test-code composition and layering.
relation (empty) about
source_node_id (empty) a0318baf-e6fb-489b-b583-5f1e78365ae6
target_node_id (empty) 4740fe5e-8060-4f68-bdff-e3bcf52901af
create Practice Makes Permanentfrom_talkAn Introduction to Test Bench
context (empty) Closing adage Ladd credits to his soccer coach and Scott Bellware.
relation (empty) from_talk
source_node_id (empty) 5a28bb7b-2fe8-46f0-99f7-5e847b9213fa
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create Software Perfection Is An Ongoing Processfrom_talkAn Introduction to Test Bench
context (empty) Closing takeaway reframing 'software is never done'.
relation (empty) from_talk
source_node_id (empty) fcf49d3e-594d-4d4b-8c72-35d0664a7242
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create Rushing Causes Design Mistakesfrom_talkAn Introduction to Test Bench
context (empty) Ladd's autobiographical lesson motivating the V1 rewrite's strict rules.
relation (empty) from_talk
source_node_id (empty) 0516dbb5-f541-477e-adf8-b3a63717dcb7
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create Mistake As Obstruction To Understandingfrom_talkAn Introduction to Test Bench
context (empty) Definition Ladd credits to ongoing discussions with Bellware and uses to motivate the rewrite.
relation (empty) from_talk
source_node_id (empty) 8abba807-f4ac-4dd5-9340-bda04376628e
target_node_id (empty) 107c99ec-4297-43e4-9ce4-c0f0fcfeb83f
create Introduce Explaining Variablerelated_toRefactoring (book)
context (empty) Canonical refactoring cataloged in Fowler's book.
relation (empty) related_to
source_node_id (empty) 1a253470-7bb0-4144-a286-41b5c8b79d0f
target_node_id (empty) 61c4eaa8-1e21-476c-b171-a0d223e43f46
create Introduce Explaining Variablerelated_toTestBench
context (empty) Bellware cites this refactoring as the rationale for Test Bench having only assert/refute on booleans instead of spec...
relation (empty) related_to
source_node_id (empty) 1a253470-7bb0-4144-a286-41b5c8b79d0f
target_node_id (empty) 6582919f-afe1-4cd1-9f91-82abad210290
create Scott Bellwareattendedwroclove.rb 2023
context (empty) Present in the audience; contributed Q&A clarifications; also gave 'Doctrine of Useful Objects' at the same event.
relation (empty) attended
source_node_id (empty) a230a950-7b3c-4b0a-a4d3-da2800c903bc
target_node_id (empty) f1adcf6d-780c-4418-8a81-c88da8b4e631
create Ethan Garofoloattendedwroclove.rb 2019
context (empty) Ladd mentions Garofolo presented at wroclove.rb 2019 and coordinated a morale video after Ladd's accident.
relation (empty) attended
source_node_id (empty) 7d9dc5f0-e9bf-42cb-bbb7-a0e11d1f3009
target_node_id (empty) 8bcc988a-785d-4dfa-a063-1daa7ba349c0
update Nathan Laddworks_onEventide
context Co-principal / co-founder of the Eventide project. Co-principal of the Eventide project; Test Bench and its fixtures are used throughout Eventide.
create Scott Bellwareworks_onEventide
attrs (empty) {"role" => "co-maintainer"}
context (empty) Co-maintainer of Eventide; collaborated on Test Bench used throughout the project.
relation (empty) works_on
source_node_id (empty) a230a950-7b3c-4b0a-a4d3-da2800c903bc
target_node_id (empty) 702f4d95-01a7-4836-9562-8c14b01a4b73

Read set

124 nodes

tool TestBench search_nodes talk An Introduction to Test Bench search_nodes+get_node_edges tool test-prof search_nodes tool minitest search_nodes tool parallel_tests search_nodes tool FactoryBot search_nodes tool Crystal Ball search_nodes tool power_assert search_nodes tool TTY toolkit search_nodes takeaway Rails Tests Are Mostly Integration Tests search_nodes person Nathan Ladd search_nodes tool ChatGPT search_nodes takeaway Name Things To Find Their Properties search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Building LLM powered applications in Ruby search_nodes event Rails World search_nodes talk How wroclove.rb impacts developers and companies search_nodes concept Test Driven Development search_nodes talk Development with axioms search_nodes concept Axiom-Driven Development search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes concept Params-Driven Development search_nodes talk Ever shorter feedback loop search_nodes takeaway Avoid params-driven development search_nodes resource awesome-ddd search_nodes concept Data-Dictated Development search_nodes takeaway Cut Test Suites Under 15 Minutes search_nodes person Scott Bellware search_nodes person Scott Bell search_nodes tool RealtimeBoard search_nodes company SpaceX search_nodes concept GitHub Self-Hosted Runner search_nodes tool jq search_nodes takeaway Be kind and build useful things search_nodes takeaway Spoken Test Feedback with say + iTerm Triggers search_nodes project Eventide search_nodes takeaway Recommend Reading The Eventide Project search_nodes tool Ruby Event Store search_nodes project Event Store (project) search_nodes tool Entity Store search_nodes talk Introduction To Event Sourcing How To Use It With Ruby search_nodes concept Entity Projection search_nodes tool EventMachine search_nodes question Can parts of Eventide, Rails Event Store and Trailblazer be combined in one project? search_nodes question Do Rails adopters write handlers instead of controller actions? search_nodes person Ethan Garofolo search_nodes person Adam Okoń search_nodes tool Falcor search_nodes tool Faker search_nodes tool interactor search_nodes project Ruby News search_nodes question Should fake implementations live with production code? search_nodes question Are fake-dice tests enough, or should the real dice be tested too? search_nodes takeaway Avoid logic in tests search_nodes talk Testing Randomness search_nodes takeaway Prefer fixtures and stubs over factories and mocks search_nodes concept Logic in Tests search_nodes question How do you test units with dependencies on other units? search_nodes person Martin Fowler search_nodes resource 99 Bottles of OOP search_nodes resource Practical Object-Oriented Design in Ruby search_nodes resource Domain-Driven Design: Patterns, Principles and Practices search_nodes resource Domain-Driven Design: Tackling Complexity in the Heart of Software search_nodes resource Object-Oriented Software Construction search_nodes resource Implementing Domain-Driven Design search_nodes question Move transformation vs refactoring when tests change search_nodes concept Commit Transformations search_nodes question Risk of misidentifying domains during legacy re-architecture search_nodes person DHH search_nodes resource The Rails and Hotwire Codex search_nodes concept Majestic Monolith search_nodes resource Rails Architect Master Class search_nodes talk Toolbelt of a Seasoned Bug Hunter search_nodes tool Active Admin search_nodes tool cssbundling-rails search_nodes tool Discourse search_nodes concept Null Object Pattern search_nodes talk Doctrine of Useful Objects Separate Fact from Fiction in OOD search_nodes+get_node_edges concept Service Object search_nodes takeaway Prefer class-method services over stateful service objects search_nodes concept Dependency Injection search_nodes concept Stateless Service Object search_nodes concept Plain Old Java Object search_nodes question How does naming an abstraction relate to OOP design? search_nodes takeaway Encapsulation Via Function-Style Objects search_nodes takeaway Don't reuse service objects across applications search_nodes concept Architecture Drivers search_nodes question How to do DDD remotely? search_nodes concept DDD Whirlpool search_nodes concept Domain Storytelling search_nodes concept View-Biased Event Schemas search_nodes concept Domain-Driven Design search_nodes concept Fixtures over Factories search_nodes tool Standard RB search_nodes question Do fixtures beat factories? search_nodes concept Weasel Words search_nodes resource My Ruby Story search_nodes talk To Refine or Not to Refine search_nodes talk Scientific Ruby Lightning Talk search_nodes concept Cynefin Framework search_nodes project monolith framework search_nodes tool RSpec search_nodes question How to detect coupling in a large existing project? search_nodes concept Breadth-First Search for Code Removal search_nodes takeaway Mutant as complexity metric and refactoring guide search_nodes takeaway Metrics Alone Don't Fix a Coupled Legacy Codebase search_nodes tool dry-struct search_nodes tool dry-types search_nodes tool dry-validation search_nodes talk Configuration Again Lightning Talk search_nodes tool Representable search_nodes tool Distributed Ruby search_nodes project configuration_again search_nodes tool DBM / SDBM / GDBM search_nodes takeaway Ruby as a Data Management Language search_nodes concept Aggregate Test Failures search_nodes tool knapsack_pro search_nodes concept Stubs over Mocks search_nodes

4 edges