This code is horrible, we need to throw it away and rebuild everything!

Nah, think twice, there are some unwritten rules in software that you need to take into consideration.

If you can’t refactor and you must rewrite, please, go with iterative improvements on parts of the system.

  • It’s may not be a bug, it became a feature! Often a “bug” indeed becomes a feature and is used as a way for the users to achieve a missing feature, and they will exploit anything available in the current application to achieve what they are looking for… Fix the “Bug”, and now you broke the workflow of your clients.
  • It’s always harder than it looks, that bad code has years of fixes that it will be hard for you to account for in your new implementation
  • You tend to assume that you can do better, but you may follow the same traps that resulted in that code becoming unmanageable, like short deadlines, quick decisions, and lack of refactoring