&gt; Low coupling means that the innards of each module are isolated from the others.<p>Isn&#x27;t coupling just the complexity of the dependency graph? I would say depending on an interface is coupling as well. In my experience complex static typesystems encourage highly abstracted interfaces which are sometimes even more cancerous dependencies (that doesn&#x27;t apply for really basic and practical things like Iterables which come with the language).<p>For this reason, IMHO an even better ideal than coding against interfaces is relying on concrete datatypes that are just a given, like structures and arrays of integers.