Code learns. It is easy to underestimate how much code has learned when the knowledge is encrypted in poor abstractions. If you throw away the code you are going to have to repeat the learning, which could be easier (better technology) or harder (more unforgiving users). One can refactor knowledge to the surface of code. This is much like repeating the learning except that you are never set back to zero. -- WardCunningham An argument not to RewriteCodeFromScratch. Your LegacyCode is wise. UnitTest''''''s not only learn, they also teach.