Famous last words.
Famous last words.
There ARE counter-examples of successful systems re-built from scratch.
The rewrite might have killed Netscape, for example, but without the rewrite from scratch not only would have Netscape died but there wouldn't be a Firefox or Mozilla Foundation now.
(And I'd argue that it wasn't the rewrite that killed Netscape: the rewrite was necessary. What killed Netscape, and would have killed it even without the rewrite, was that the then all-mighty Microsoft decided to get into the internet game for real and build a good-enough browser. It's ironic that this good enough browser was IE6, which we know view as the worst impediment to web progress).
Also, didn't Frederic Brooks say "prepare to throw one away"?
http://www.mozillazine.org/talkback.html?article=1708
And BTW, on IE6, the lack of competition resulting from the killing of Netscape was why MS can get away with stagnating IE for 5 years in the first place.
Also, if we're going to link Joel articles from the decade before last, let me add this one which is merely ten years old, and elaborates the ideas from the previous: http://www.joelonsoftware.com/articles/fog0000000348.html
All that said, I think there are things to be learned and gained from rewrites.
> FogBugz is written in Wasabi, a very advanced, functional-programming dialect of Basic with closures and lambdas and Rails-like active records that can be compiled down to VBScript, JavaScript, PHP4 or PHP5. Wasabi is a private, in-house language written by one of our best developers that is optimized specifically for developing FogBugz; the Wasabi compiler itself is written in C#.
So to avoid starting from scratch they introduced a new language/compiler? Hrm... I question the scalability of this solution, what if every company decided to do this instead of biting the bullet and doing a rewrite?
Not phrases that usually go together.
On the contrary, if any browser killed Netscape, then it would seem to be IE5. (Scary, eh?)
Assuming everything works as planned.
https://github.com/reddit/reddit/blob/master/install-reddit....
It's kind of rare that you see a company actually make that mistake now. But I guess Digg did.
So I doubt that applies at all.
And a Digg-type site is not that hard to build. It's light-years away from the complexity of a web browser, for instance.
But yeah, overall I agree. Why would they rebuild the same product? That's already failed.
I feel like I've come across a couple "bad" implementations of some concept (as I see it anyways), and thought the best solution would be to start over and redo it.
Are there scenarios where starting from scratch is a good idea? How do you know?
(As an aside, I don't think starting from scratch will revive Digg. I think its time has passed...)
Heck, there are companies that still run DOS "servers". Engineering black holes. They suck developer time in and bend all infrastructure around themselves.
When the new hire Steve shows up and deletes the whole thing and uses the time-tested model of the wheel, he is not a villain, and anything to suggest otherwise is poor management philosophy that will drive Steves away, leaving you with a bad project, bad management and bad engineers (AKA 99% of every project ever). Even if by doing so Steve introduces bugs in the two-wrongs-make-a-right consuming code (which is simply a bug) and isn't polite enough to discover this on his own. The flexibility and resources to make systematic improvements like these which combat cruft and maintain or repair feature velocity are why QA - automated or otherwise - exists.
Honestly though, I don't think the article really means to cover such a scenario. There are many times that engineers decide to replace rather than understand a system which is complex-for-a-reason, this is written specifically with that in mind.
I regularly see this as I use/develop against/contribute to Drupal - a marvelously complex-for-a-reason(usually) piece of engineering that happens to be written in PHP - a language with a community that still celebrates simplicity-at-whatever-cost. "Nevermind that the theme/cache/localization/form/whathaveyou system accounts for what I need, it's more than what I need and I don't trust code more complex than I (or any single person with a single use case for that matter) could have written."
He doesn't make that clear, but it's the only sense I can make of the article given his degree of experience.
The question is, which will be faster?
Right now, it's written to run on an old OS, with old versions of old languages. We absolutely HAVE to update this stuff as it's just stupid to continue programming in the dark ages (no code completion, no jump to definition, printf debugging).
But is it better to refactor the code and rewrite it slowly, or just scrap it, lose all of the old terrible design decisions, and move on.
You ask the question "Why do you think you'd make the design decisions correctly this time around?" Well, we didn't write the first version. It was given to a vendor that totally botched the job and it's our responsibility to fix it.
There might also be security issues. I've found that's sometimes a good rationale - if I've got code that will only work in PHP 4.1, and it's gotta work for the next 5 years, probably rewriting ('wholesale refactoring') is a much more prudent choice, even though it's "a complete rewrite". There will be no security patches for the underlying language - building on a platform with known and 'never-will-be-fixed' security holes isn't a good long-term strategy.
Yes, you lose "conceptual integrity" and your UX may be inconsistent in the transitional time, but those are small prices to pay.
What exactly do you think you're building?
I take "from scratch" to mean "we are totally rethinking everything!
Look - lets not b fucking morons. The ONLY thing bought was digg.com the name which has a PR/publicity pull.
You will fail - digg has sucked and will suck and even the cult of personality around kevin rose evaporated, like milk, immediately after joining Google.
The fact is that the word digg and kevin rose have represented only one thing - the desire to extract fame and fortune from outdated and poor thought out ideas.
I wish you only failure.