Discussion about this post

User's avatar
Giorgio Sironi's avatar

To make a completely opposite example that smells like design up front, you made me think that a big part of Domain-Driven Design is to use Ubiquitous Language(s) to make (de)coupling explicit without touching the code just yet: is the Customer in this Invoice the same Customer as in this Order, or do they follow different rules?

Expand full comment
Daniel Haarhoff's avatar

My first contact with that Shigeo Shingo quote was in the context of manufacturing. The example there is often that of a separate 'inspection' team hunting defects before material entered subsequent work steps. An inspection removed from both from where the defect is created and where it impacts.

So initially I was confused by your interpretation in the context of code. I would not have put the system boundary of the defect creation at the writing, but at the deployment of code. A great provocation, in the sense of 'thought-provoking'. Prior to your post I would have not gone beyond shrinking the boundary from 'deployed' to 'committed'.

You've previously discussed with me how the 'refactor' step of 'red-green-refactor' is essentially an aesthetic one. The 'red' is driven by the product, the 'green' by the 'red' but the 'refactor' is driven by these harder to grasp things in our heads.

I am hopeful that we can hone these senses regarding coupling. Since you've worked with us, our team has definitely started noticing and addressing coupling a lot more. We've started to listen for symptoms such as shotgun-surgery being needed to change something.

But is is often still only after broken tests inform us of coupling that we see it. So looking forward to see which language, perspectives and thought patterns you can unearth that shorten the feedback loop.

Expand full comment
4 more comments...

No posts