Scott Bellware's wroclove.rb 2023 talk. Opens with Rogers' adoption curve and Moore's 'crossing the chasm' to frame why OO knowledge doesn't propagate from innovators/early adopters to the Rails majority — and provocatively claims 'Active Record objects are data structures built in an object-oriented language', not OO code, so most Rails developers haven't actually learned OO. Introduces the design fundamentals: afferent (inbound) vs efferent (outbound) coupling; generalization vs specialization; mapping these onto a 2x2 where the happy quadrants are afferent+general (e.g. BasicObject/Kernel) and efferent+special (controllers), and the sad ones are the inversions. Uses this to prove 'fat model, skinny controller' is one of the most fundamental mistakes in Rails design — model objects are highly afferent, so piling controller-specific business code onto them maximises blast radius; the root cause is that Rails controllers historically couldn't be tested, so TDD 'was never born' in Rails. Covers single-purpose objects and 'tell don't ask' as expressions of encapsulation, and introduces the Doctrine of Useful Objects: an object must be usable immediately after instantiation without nil-reference errors; initializers are primitive (only accept and record primitives); no IoC containers; no test doubles like mocks/stubs/spies ('toxic masculinity as a design methodology'); prefer telemetry. Walks through a SignUp class + HTTPClient example across multiple refactors: first injecting the HTTP client, then turning it into a null-coalescing attribute defaulted to a `Mimic` (Eventide's null-object generator that implements an interface inertly — invoking Liskov substitutability), then replacing the hand-rolled attribute with the `dependency` macro and defining a `Substitute` module that exposes domain telemetry (e.g. `http_client.posted?(content)`). Splits convenience from mechanical correctness by pairing a primitive initializer with a class-level `build` factory/constructor — the initializer yields a diagnostic-ready instance (mimic deps), the constructor wires real operational dependencies. Closes with Rails guidance: 'give unto Rails that which is Rails', keep business logic in `lib/`, put a `lib/model/` directory of callable objects encapsulating database operations, rename `app/models` to `app/data` and scaffold only (no callbacks, no extra code) to prevent afferent surface area from growing like Velcro. Q&A covers: how to set return values on diagnostic substitutes (specialise the substitute module, don't reach for mocks); whether this is effectively a spy (same spirit but architecturally different — designed-in telemetry vs retrofitted transparency in test files); and why class-internal dependency configuration beats external IoC/Rails configuration (a class should configure its own operational dependencies).