How would you then write the tool to make sure it wasn’t coupled to the work?
Jonathan Creamer

Hi Jonathan!

I think there are several ways to achieve more separation in the tool← →work example. For instance, work could accept a callback, and we would only pass in the tool’s “action”:

function work(action) { action() }

This takes us one step closer to separation, where instead of having work bound to the interface, it can now accept any interface — as long as it’s a function (so loosely coupled to the tool, tightly coupled to the action type).

But, I also think that this is only a technical product of design. If we need more separation, we can use loose coupling to achieve it. If we don’t, tight coupling is a-ok.