It seems like common sense, but every few months I need a reminder that I should prefer to incrementally refactor/re-architect the codebase I have, rather than start from scratch.
I wish I had seen that (or if I had seen it before just remembered that) a few months ago. I work on an internal project that is core to part of our business and we are on our 3rd iteration of our platform in less than a year. An when I say iteration, I mean from scratch re-write. I will say it was probably necessary to go from the first to second platform with a re-write because the first one was half baked and didn't do much of what was needed. However, the 2nd to 3rd platform was not necessary and like Joel says, could have been refactored instead of scrapped entirely. Our QA person was super pissed too since they had put in so much time and effort into creating test cases for the platform we had and now they are completely wasted. Not to mention, because we are writing the newest iteration from scratch we missed deadlines because we had to deal with more than just business knowledge (which the team lacks as all but one of us is new to the specific domain in the health care realm) but putting together a new platform that could be extensible (just like the previous version of it was supposed to be) for future clients and outputs.