I’ve worked on many, many projects in my career. Some of the projects I’ve started, some I’ve inherited. There comes a time in every project, not just software, but also home projects and car repairs, where I have to decide to scrap what I have and start over. This decision is never taken lightly as I’d be throwing away something that works in exchange for a clean start.
I’ve done this with my NotifyMail program a few times as the application was quite small, but in the process I had to drop features and probably ticked off a number of users. In all my time working on ReceiptWallet, I asked myself a number of times if it was time to scrap the code and start over. While I never completely scrapped the code, I did rewrite chunks of it as I learned more and better ways to write code.
With many of the projects I’ve inherited, the decision to start over has pretty much been a non-starter as the programs had existing users and I was under time pressure to get things done. Unfortunately this sometimes lead to fixing lots and lots of bugs that I didn’t create and probably wouldn’t have been in there if I started over.
The same type of decision has to be made with respect to cars and even a lesser extent, houses. If you keep pouring money into a car for repairs, at what point do you decide to buy a new car? Granted the cost is much higher for a new car, but over time the repairs could add up to the price of a new car, not to mention the hassle of taking a car to the mechanic.