When to rewrite code from scratch

Edit 27/10/2016: The c2 wiki is back online, and you can find the original article here.

The c2 wiki has been closed for "remodeling." It has a very good article about good and bad reasons to rewrite code from scratch. I hope the irony of this is not lost on the reader.

Until the page comes back up, here is the abridged version I saved to a text file a while ago:

Good Reasons to Rewrite Code from Scratch

  • Required changes cannot be made using the existing code base.
  • We can't get the existing code to compile, or we can't even find the existing code.
  • Nobody can figure out how it works.
  • The architecture or underlying infrastructure is changing dramatically.
  • It is so bug-ridden or ill-suited to the requirements that it is completely useless as-is.
  • We are just doing it for fun or to exercise our development skills.
  • IntellectualProperty or licensing issues make it desirable to stop using someone else's code.
  • When the problem becomes too complex for the original language. For example, if I have a sed script whose complexity is getting out of hand, best rewrite it in some other language. Remember, not every program is "big".
  • We are going to be held responsible for it over a long term, and are uncomfortable with accepting responsibility for the existing code base.

Good Reasons to Avoid Rewriting Code from Scratch

  • Nobody knows what all the features are of the LegacyCode, or what requirements it is supposed to fulfil.
  • No tests are available to verify that new code is functionally equivalent to LegacyCode.
  • There are more-important things we can do with our time than re-writing code that already works. We don't need to be ReinventingTheWheel.
  • If the re-write takes longer than expected (and re-writes often do), then customers may move to other products/vendors.
  • We can re-write it a bit at a time rather than throwing it all away.
  • We have no reason to believe that a new team will do a better job than the original team did.

Bad Reasons to Rewrite Code from Scratch

  • It's really ugly.
  • We don't like the coding style.
  • We don't want to read it to figure out how it works.
  • It's not done the way we would have done it.
  • We don't like the people who wrote it. All their stuff sucks.
  • It was NotInventedHere (unless you're doing so as a loophole regarding IntellectualProperty issues)
  • It's too slow in some unspecific way. Better solution: find the hotspots (ProfileBeforeOptimizing) and optimize those. Only after quantifying the performance problems can it be determined that a total re-write is needed.

Bad Reasons to Avoid Rewriting Code from Scratch

  • We don't trust the developers to do it right. (This reason is even worse if it's valid.)
  • My grand-daddy always told me "IfItAintBrokeDontFixIt."


  • The CapitalisedCamelCased words are links to other c2 articles.