Do NOT rewrite from scratch if it is in production
Should we rewrite the existing solution?
Short description
New approaches to software design are always tempting teams to rethink the way they design software. However, if we have software in place that is used in production, then we should NOT try to rewrite the entire system at once. Doing so would rob us of important feedback loops, lengthen time to market, increase uncertainty and therefor lower chances of success. In short: Do NOT rewrite from scratch if it is in production.
Examples
-
You worked on integrating your software with a 3rd party solution. A team has invested 6 months worth of time in it. The software has been demonstrated internally but is not released to the public. The backlog for this integration has only increased since you started working on it. This approach will never scale to the level of agility desired. You have learned from this exercise and know of better models that will be more capable to deal with the proposed feature set. You rewrite using your new model.
-
Twelve months ago you launched a new piece of software to the general public. You have customers that interact with it and some have integrated your software into their process. Value is created by the software but you need to keep innovating for customers to keep using it. In order to improve the time to market you have taken many shortcuts.
These shortcuts now prevent you from understanding how everything fits together. Making changes to the internals is therefor difficult. However, because customers depend on the product you start by putting test controls in place at the outside seams of the software. This will allow you to refactor the software gradually over time, rather than rewriting it.
Context
- “In production” means customers using the software.
- Refactoring means changing code without changing behavior.