Examples of second system syndrome
coliveira.net
coliveira.net
The thing with re-writes is that you only really hear the horror stories because people like to talk about failing companies that stemmed from something technical. The good re-writes never get much press, and neither do the companies that slowly fade to black. I think SAS could end up going that route if they don't completely rewrite their systems and introduce a more friendly coding system.
It's fundamentally different from a re-write from scratch, and in effect much closer to refactoring.
There's no black and white choice between re-writing and refactoring.
I'd also suggest that RDF has been the second system for Tim Berners Lee.
>The solution Netscape found was to rewrite the whole browser from scratch, in order to create a new code base that would be easier to evolve.
It is true that the Navigator codebase was hard to work in, but the rewrite had another big motivation: it was in Java. One of Netscape's strengths was that Navigator was cross-platform: Win32, Win16, MacOS, and various Unices. The problem was that it was getting hard to find anybody to work on anything but Win32--in particular, MacOS was perceived as a dying platform, and developers were fleeing. So the idea was that Javagator would let us move forward with just a few specialists on each of the minor platforms.
(Of course, looking back, expecting reasonable performance out of Java that decade may have been pretty stupid. There was a project underway called Electrical Fire, which I think became, or fed into, Sun's first JIT; but we probably shouldn't have assumed it would succeed.)
>In the case of Netscape versus Microsoft, Netscape gave up all the development advantage they had.
This is just flat-out wrong. For it to be true, Netscape would have had to have essentially everybody working on Javagator; we definitely didn't. I think it was something like 5-10 people at most.
In fact, we build software (or grow it). Where we end up is more like where an explorer ends up in an unknown region. Very few people prove even one aspect of a small part of their programs, and it takes them a long time. We understand our code no more than we understand our bodies.
There's no need to make an effort to rewrite, because with the next disruptive platform, the same old stuff all gets rewritten/reinvented anyway (current egs: JavaScript (web); objective-c (iPhone)).
BTW: Joel's famous article on mozilla: http://www.joelonsoftware.com/articles/fog0000000069.html
We've regretted continuing work on horrible code bases though.
When you have hindsight, stronger developers, and more understanding of the performance and requirements, you truly can do a better job.
"Its big, slow, late and expensive!"