The Wrong Abstraction (2016)
I found the following comment very insightful in a past discussion:<p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=11042400" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=11042400</a><p>I reproduce the relevant part:<p><i>Dependencies (coupling) is an important concern to address, but it&#x27;s only 1 of 4 criteria that I consider and it&#x27;s not the most important one. I try to optimize my code around reducing state, coupling, complexity and code, in that order. I&#x27;m willing to add increased coupling if it makes my code more stateless. I&#x27;m willing to make it more complex if it reduces coupling. And I&#x27;m willing to duplicate code if it makes the code less complex. Only if it doesn&#x27;t increase state, coupling or complexity do I dedup code.</i><p>State &gt; Coupling &gt; Complexity &gt; Duplication. I find that
to be a very sensible ordering of concerns to keep in mind when addressing any of those.