&gt; You may discover as you work in the subsystem that maintaining it is simply untenable — and it may be time to consider rewriting the subsystem from scratch. (After all, most of the subsystems that are in the first category replaced subsystems that were in the second.) One should not come to this decision too quickly — rewriting a subsystem from scratch is enormously difficult and time-consuming. Still, don’t rule it out <i>a priori</i>.<p>It&#x27;s good to see this important trade-off mentioned. I&#x27;ve seen Spolsky&#x27;s infamous allegory about Netscape [1] that &quot;[rewriting] the code from scratch [... is] the single worst strategic mistake that any software company can make,&quot; used to browbeat people in response to their quite justified opinion that &quot;maintaining it is simply untenable.&quot; While Spolsky does go on to nuance his statement a little bit, advocating for a careful refactoring process with lots of tests, I was happy to see the same advice formulated in a way that precludes such cherry picking here.<p>[1] <a href="http:&#x2F;&#x2F;www.joelonsoftware.com&#x2F;articles&#x2F;fog0000000069.html" rel="nofollow">http:&#x2F;&#x2F;www.joelonsoftware.com&#x2F;articles&#x2F;fog0000000069.html</a>