<story><title>Notes on Software Development Waste</title><url>https://hcarvalhoalves.github.io/software-development-waste/</url></story><parent_chain><item><author>tomxor</author><text>&amp;gt; 2. Unnecessary technical complexity (&lt;i&gt;duplicating code&lt;/i&gt;, lack of interaction design reuse[...]&lt;p&gt;That&amp;#x27;s funny, I usually find a common source of unnecessary complexity is people trying &lt;i&gt;way&lt;/i&gt; too hard to de-duplicate everything. Which has a tendency to causes abstractions that are more cognitively and technically expensive than the code they replaced... and once enough layers accreted, I&amp;#x27;m pretty sure they take up more space.</text></item></parent_chain><comment><author>Jtsummers</author><text>Like with many things it&amp;#x27;s a balance. If you have to spend too much time thinking about how to create a more reusable or deduplicated version of something, it&amp;#x27;s probably not ready to be deduplicated. On the other hand, I&amp;#x27;ve watched several projects flounder &lt;i&gt;because of&lt;/i&gt; useless duplication:&lt;p&gt;&lt;pre&gt;&lt;code&gt;  main.cpp
  complex_baseline&amp;#x2F;*.{cpp,h}
  copy_and_mod_1&amp;#x2F;*.{cpp,h}
  copy_and_mod_2&amp;#x2F;*.{cpp,h}
  ... (about 12 times)
&lt;/code&gt;&lt;/pre&gt;
The duplication means that issues are scattered throughout every copy if they&amp;#x27;re in the original, but hard to find after the modifications. Doing the exercise to find all the duplicated issues is frustrating and people eventually stop doing it. The code gets worse and worse until a refactor or rewrite is forced on them, and then the customer is unhappy with the delay and it&amp;#x27;s either hastily done (often worse than doing nothing) or abandoned.</text></comment>
<story><title>Notes on Software Development Waste</title><url>https://hcarvalhoalves.github.io/software-development-waste/</url></story><parent_chain><item><author>tomxor</author><text>&amp;gt; 2. Unnecessary technical complexity (&lt;i&gt;duplicating code&lt;/i&gt;, lack of interaction design reuse[...]&lt;p&gt;That&amp;#x27;s funny, I usually find a common source of unnecessary complexity is people trying &lt;i&gt;way&lt;/i&gt; too hard to de-duplicate everything. Which has a tendency to causes abstractions that are more cognitively and technically expensive than the code they replaced... and once enough layers accreted, I&amp;#x27;m pretty sure they take up more space.</text></item></parent_chain><comment><author>laserlight</author><text>I’ve heard this argument against deduplication many times before. Wrong abstraction is not a solution to duplicate code. It’s a different problem. If developers are not able to perform the simplest of abstractions, the problem is more serious.</text></comment>