5 ms·
I think the famous article 'Things you should never do' from Joel Spolsky is closely related to this. I have seen blatently ignoring the lessons from either art
by cjfd 5y ago
I think the famous article 'Things you should never do' from Joel Spolsky is closely related to this. I have seen blatently ignoring the lessons from either article and reaping the predictable results from this in multiple jobs that I had. It seems the incremental approach that is both much safer and much more fruitful is a rather hard thing to sell.
Even after a project in the category 'things you should never do' had taken way too long, when another piece of code was discovered that was not quite up to standards and that was sometimes malfunctioning the first idea was again to completely throw it out and rewrite from scratch. I argued against this and instead took the Michael Feathers approach of first covering it in tests and then refactoring. This made the code familiar enough to me that I also in the meantime found the reason it was malfunctioning. It was just a multi-threading isssue that could be fixed by introducing a lock. Size of the actual patch fixing it is about 5 lines.... The result of the gradual approach was both more modern code, automated tests, and no more failures in production and it was much faster than just throwing out the whole thing and starting anew would have been.
- avnigo 5y agoLink of 'Things you should never do' article for reference: https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ https://www.joelonsoftware.com/2000/04/06/things-you-should-...
- christophilus 5y agoI’ve been on a few successful rewrites, and still think those were the right decisions. It’s not a “thou shalt not”, in my opinion, but rather contextual. Also, you could say that Chrome was a rewrite of Firefox. Office was a rewrite of Lotus Notes. Google was a rewrite of Yahoo. Facebook was a rewrite of MySpace. And so on. Most market-leading products were not the first to market, and can be seen as a rewrite of a previous product.
- cjfd 5y agoQuite the examples you name.... Google has come under quite a bit of public scrutiny for their general practice of espionage performed on the general public and I think we should notice that Chrome is part of that. I have never worked with lotus notes but I did with wordperfect. The progression seems from tool that are understandable to tools that throw away all formatting at the slightest provocation. I am not so sure about it. Of course, I personally would write all of my text in LaTeX.... And where do we start on the topic of Facebook.... maybe try to read a few HN threads regarding the subject.... Maybe I am just starting to feel old but it makes me wonder if we are not over the top in terms of software quality. As far as programming is concerned I consider tool churn as the biggest enemy of the programmer. Especially when a single product consists of too many languages which all have their associated tools. So, that would be another shot against rewriting. In any case, if you are to use the same toolchain anyway, one might as well take large portions of the existing system. Personally I can do anything I want to do with vim, c++, make, coq and LaTeX. All the rest of it has pretty much been brought in without me asking for any of it....