← Extractions

Understanding Coupling — Łukasz Szydło at wroclove.rb 2018

Łukasz Szydło presents a framework for discussing software design precisely, introducing a five-level coupling metaphor (people in a company: local method, local instance, external instance, configurable instance, notification) built on the three kinds of linguistic messages — commands, queries, events. He argues design evaluation requires defining context (business, project, quality attributes) plus precise attribute description, and that coupling is neither inherently good nor bad but context-dependent.

Model
claude-opus-4-7
Ingestion
f8fbbf6c
Input tokens
120,505
fresh
51,205
cached
59,529
cache write
9,771
Output tokens
6,383
Duration
98.5s
Roundtrips
5
Tool calls
12
Cost
$0.00
Nodes/edges extracted
12 / 21
Read set (nodes/edges)
72 / 2

Nodes (12)

update Łukasz Szydło person
attrs (empty) {"roles" => "programmer, architect, trainer, consultant", "specialties" => "DDD, architecture, continuous delivery"}
description Conference speaker. Polish programmer, architect, trainer and consultant who helps companies improve their software. Specialties include ...
short_description Conference speaker. Polish programmer, architect, trainer and consultant specializing in DDD and architecture.
update Understanding coupling talk
attrs {"type" => "talk"} {"type" => "talk", "duration_minutes" => "45"}
description Talk at wroclove.rb 2018. Talk by Łukasz Szydło at wroclove.rb 2018. Follows the fictional team lead 'Guido Instinctive' who struggles to evalu...
short_description Talk at wroclove.rb 2018. Talk at wroclove.rb 2018 on evaluating software design via five levels of coupling.
create Coupling concept
kind (empty) concept
name (empty) Coupling
slug (empty) coupling
attrs (empty) {"category" => "practice"}
description (empty) A design quality describing how tightly two software elements depend on each other. In Szydło's framing, coupling bet...
short_description (empty) Degree of interdependence between software elements; a design attribute with multiple levels.
create Architecture Drivers concept
kind (empty) concept
name (empty) Architecture Drivers
slug (empty) architecture-drivers
attrs (empty) {"category" => "methodology"}
description (empty) Szydło's three-part definition of context needed to evaluate any software design: (1) business context — goals, visio...
short_description (empty) Business context, project context, and quality attributes that frame any design evaluation.
create Commands, Queries, and Events concept
kind (empty) concept
name (empty) Commands, Queries, and Events
slug (empty) commands-queries-and-events
attrs (empty) {"category" => "pattern"}
description (empty) Szydło's linguistic grounding for object-oriented messaging: in any language, a person can only build three kinds of ...
short_description (empty) The three kinds of messages objects can exchange, mirroring linguistic sentence types.
create Dependency Injection concept
kind (empty) concept
name (empty) Dependency Injection
slug (empty) dependency-injection
attrs (empty) {"category" => "pattern"}
description (empty) Technique for decreasing coupling by configuring an object's collaborators from the outside. Szydło reframes dependen...
short_description (empty) Passing collaborators into an object from outside rather than constructing them internally.
create Tacit Knowledge concept
kind (empty) concept
name (empty) Tacit Knowledge
slug (empty) tacit-knowledge
attrs (empty) {"category" => "methodology"}
description (empty) Psychological/philosophical concept Szydło invokes in the Q&A: knowledge experienced architects hold that cannot be a...
short_description (empty) Experience-based knowledge that cannot be fully expressed in words.
create Design Must Be Described Precisely Before It Can Be Improved takeaway
kind (empty) takeaway
name (empty) Design Must Be Described Precisely Before It Can Be Improved
slug (empty) design-must-be-described-precisely-before-it-can-be-improved
attrs (empty) {"type" => "lesson-learned"}
description (empty) Core lesson of the talk: design is abstract and hard to discuss, so teams drift into vague comments like 'it looks ok...
short_description (empty) Learn vocabulary for design first; better design follows precise communication.
create Coupling Is Neither Good Nor Bad takeaway
kind (empty) takeaway
name (empty) Coupling Is Neither Good Nor Bad
slug (empty) coupling-is-neither-good-nor-bad
attrs (empty) {"type" => "insight"}
description (empty) Szydło rejects the reflex that loose coupling is always better. Coupling is like gravity — just a force. High couplin...
short_description (empty) Coupling is a context-dependent force like gravity — sometimes high, sometimes loose.
create Metrics Alone Don't Fix a Coupled Legacy Codebase takeaway
kind (empty) takeaway
name (empty) Metrics Alone Don't Fix a Coupled Legacy Codebase
slug (empty) metrics-alone-don-t-fix-a-coupled-legacy-codebase
attrs (empty) {"type" => "insight"}
description (empty) Szydło's answer to the question of how to detect coupling in an existing large project: coupling metrics exist but in...
short_description (empty) Coupling metrics are overwhelmed on legacy projects; precise communication matters more.
create How to detect coupling in a large existing project? question
kind (empty) question
name (empty) How to detect coupling in a large existing project?
slug (empty) how-to-detect-coupling-in-a-large-existing-project
attrs (empty) {"answer_summary" => "Metrics exist but are useless on badly-coupled legacy code. Use precise design vocabulary as an...
description (empty) Audience member asks how to massively detect coupling on a big project you've just joined. Szydło: theoretical answer...
short_description (empty) Strategy for evaluating coupling when joining a big legacy codebase.
create Does experienced architect's intuition override precise design vocabulary? question
kind (empty) question
name (empty) Does experienced architect's intuition override precise design vocabulary?
slug (empty) does-experienced-architect-s-intuition-override-precise-design-vocabulary
attrs (empty) {"answer_summary" => "Intuition (tacit knowledge) is real and valuable, but doesn't replace precise vocabulary — team...
description (empty) Audience member argues experienced architects can correct customer requirements intuitively. Szydło agrees — he belie...
short_description (empty) Whether experience/intuition can replace explicit design-quality description.

Edges (21)

update Łukasz SzydłoauthoredUnderstanding coupling
context (empty) Delivered the talk at wroclove.rb 2018.
update Understanding couplingpresented_atwroclove.rb 2018
context (empty) Talk presented at the wroclove.rb 2018 conference.
create Łukasz Szydłoattendedwroclove.rb 2018
context (empty) Speaker at the conference.
relation (empty) attended
source_node_id (empty) a748753a-b5e0-43fa-b915-dfda4d5527e8
target_node_id (empty) 9243ef2c-21bb-4f23-b450-9ecd87882dfe
create Łukasz Szydłohas_skillDomain-Driven Design
attrs (empty) {"level" => "expert"}
context (empty) Listed as one of his specialties.
relation (empty) has_skill
source_node_id (empty) a748753a-b5e0-43fa-b915-dfda4d5527e8
target_node_id (empty) 6e2f88bd-e521-41a3-91d4-aeb5f8fd2486
create Understanding couplingaboutCoupling
context (empty) The talk is a framework for discussing and evaluating coupling.
relation (empty) about
source_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
target_node_id (empty) f74165f3-dae3-4470-a25f-cb314ece3e03
create Understanding couplingaboutArchitecture Drivers
context (empty) Defines context for design evaluation as business context, project context, and quality attributes.
relation (empty) about
source_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
target_node_id (empty) 98a55e8d-d1e0-43c1-810c-03071d25018c
create Understanding couplingaboutCommands, Queries, and Events
context (empty) Grounds object messages in the three linguistic sentence types.
relation (empty) about
source_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
target_node_id (empty) 7c04796a-bf02-4248-80f0-a63be3541234
create Understanding couplingaboutDependency Injection
context (empty) Reframed as the 'configurable instance' level of coupling.
relation (empty) about
source_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
target_node_id (empty) 06941a97-6c62-4450-8f9a-16cf172f5dd8
create Understanding couplingaboutTacit Knowledge
context (empty) Invoked in the Q&A to reconcile intuition with precise vocabulary.
relation (empty) about
source_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
target_node_id (empty) 0d9d68d4-e448-4719-814c-f6d314105ddf
create Design Must Be Described Precisely Before It Can Be Improvedfrom_talkUnderstanding coupling
context (empty) Closing lesson of the talk.
relation (empty) from_talk
source_node_id (empty) baae07a8-b625-4979-bba9-213d0f498fda
target_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
create Coupling Is Neither Good Nor Badfrom_talkUnderstanding coupling
context (empty) Summary point near the end of the talk.
relation (empty) from_talk
source_node_id (empty) 216fcc08-ddac-4716-9f3b-0bda7b79eaf0
target_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
create Metrics Alone Don't Fix a Coupled Legacy Codebasefrom_talkUnderstanding coupling
context (empty) Answer given in the Q&A.
relation (empty) from_talk
source_node_id (empty) bf095e66-6fb5-4e88-9a2a-ba8a61ed366f
target_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
create Design Must Be Described Precisely Before It Can Be ImprovedaboutCoupling
context (empty) Lesson illustrated with the coupling vocabulary built in the talk.
relation (empty) about
source_node_id (empty) baae07a8-b625-4979-bba9-213d0f498fda
target_node_id (empty) f74165f3-dae3-4470-a25f-cb314ece3e03
create Coupling Is Neither Good Nor BadaboutCoupling
context (empty) Takeaway is specifically about when to prefer tight vs loose coupling.
relation (empty) about
source_node_id (empty) 216fcc08-ddac-4716-9f3b-0bda7b79eaf0
target_node_id (empty) f74165f3-dae3-4470-a25f-cb314ece3e03
create Metrics Alone Don't Fix a Coupled Legacy CodebaseaboutCoupling
context (empty) Addresses detecting coupling in legacy systems.
relation (empty) about
source_node_id (empty) bf095e66-6fb5-4e88-9a2a-ba8a61ed366f
target_node_id (empty) f74165f3-dae3-4470-a25f-cb314ece3e03
create How to detect coupling in a large existing project?asked_atUnderstanding coupling
context (empty) Asked in the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) 96918794-6a40-4232-8410-7740b9f4c9bc
target_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
create Does experienced architect's intuition override precise design vocabulary?asked_atUnderstanding coupling
context (empty) Asked in the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) de674309-d96b-4d99-a31c-8ce15ed094e7
target_node_id (empty) e87e4e11-7443-459a-b228-848b6d21662b
create How to detect coupling in a large existing project?aboutCoupling
context (empty) Question asks about detecting coupling.
relation (empty) about
source_node_id (empty) 96918794-6a40-4232-8410-7740b9f4c9bc
target_node_id (empty) f74165f3-dae3-4470-a25f-cb314ece3e03
create Does experienced architect's intuition override precise design vocabulary?aboutTacit Knowledge
context (empty) Question centers on experiential, unspoken knowledge.
relation (empty) about
source_node_id (empty) de674309-d96b-4d99-a31c-8ce15ed094e7
target_node_id (empty) 0d9d68d4-e448-4719-814c-f6d314105ddf
create Couplingrelated_toCommands, Queries, and Events
context (empty) The five coupling levels are derived by progressively loosening what a sender knows about a receiver, culminating in ...
relation (empty) related_to
source_node_id (empty) f74165f3-dae3-4470-a25f-cb314ece3e03
target_node_id (empty) 7c04796a-bf02-4248-80f0-a63be3541234
create Dependency Injectionrelated_toCoupling
context (empty) DI corresponds to the 'configurable instance' level of coupling.
relation (empty) related_to
source_node_id (empty) 06941a97-6c62-4450-8f9a-16cf172f5dd8
target_node_id (empty) f74165f3-dae3-4470-a25f-cb314ece3e03

Read set

72 nodes

talk Understanding coupling search_nodes+get_node_edges takeaway AI Will Not Replace Developer-Client Empathy search_nodes talk Ever shorter feedback loop search_nodes question How to do DDD remotely? search_nodes tool Sync Space VR search_nodes concept Conway's Law search_nodes concept Weasel Words search_nodes concept Domain Storytelling search_nodes talk Spice up your life with eql search_nodes concept EventStorming search_nodes concept Domain-Driven Design search_nodes resource Implementing Domain-Driven Design search_nodes resource Domain-Driven Design: Tackling Complexity in the Heart of Software search_nodes talk Might & Magic of Domain-Driven Design search_nodes question How to apply DDD when the client refuses to learn ubiquitous language? search_nodes talk The pillars of Domain Driven Design search_nodes concept DDD Whirlpool search_nodes resource Domain-Driven Rails search_nodes person Łukasz Szydło search_nodes person Łukasz Reszke search_nodes person Miron Marczuk search_nodes talk Events events events search_nodes person Karol Szuster search_nodes person Mateusz Nowak search_nodes person Maciej Rząsa search_nodes person Krzysztof Hasiński search_nodes person Agnieszka Małaszkiewicz search_nodes person Jakub Rodzik search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Counterintuitive Rails pt. 2 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Counterintuitive Rails pt. 1 search_nodes resource Object-Oriented Software Construction search_nodes question Does DDD require object-oriented programming? search_nodes talk Doctrine of Useful Objects Separate Fact from Fiction in OOD search_nodes takeaway Use Refinements for Dependency Reduction search_nodes concept Context Map search_nodes concept Hexagonal Architecture search_nodes concept Breadth-First Search for Code Removal search_nodes concept CQRS search_nodes takeaway Bounded Contexts Are Not Microservices search_nodes takeaway Bounded Contexts Are Natural Microservice Seams search_nodes concept Event-Driven Architecture search_nodes takeaway Risks of DDD: Hierarchy, Perfectionism, Constraints search_nodes concept Waterfall Analysis search_nodes takeaway Replay-Based Debugging search_nodes resource Rocket Real-Time Benchmark search_nodes talk Setup and operation of mutation testing in agentic world search_nodes concept Command UUID Deduplication search_nodes tool RealtimeBoard search_nodes takeaway Time Travel Superpower search_nodes concept Event Store search_nodes tool Ruby Event Store search_nodes question How to persist commands in an event-sourced system? search_nodes talk Working with RailsEventStore in Cashflow Management System search_nodes concept Snapshotting search_nodes project AnyCable search_nodes concept Cynefin Framework search_nodes resource Drive search_nodes takeaway Sign serverlessforruby.org petition search_nodes concept Zero-Disconnect Deployment search_nodes talk Adventures in durable execution search_nodes talk Kamal is not harder than your PaaS search_nodes takeaway Stable commits enable bisect search_nodes concept Real-time Web Applications search_nodes tool webpagetest.org search_nodes

2 edges