They did it by making the single worst strategic mistake that any software company can make:
They decided to rewrite the code from scratch.
How many times have you thought “This software is s**t! We need to rewrite it from scratch!”, and how many time have you actually did it? I have done both, at least a couple of times, and the result was not pretty in both cases.
I understand the frustration, but I think it’s almost always not a good outcome to rewrite a software from scratch, especially a complex one and especially with customers!
The reason for it is clearly explained in the article, I am not going to repeat everything again since I agree 100% with it. But, I am going to add a few examples on top of it.
You are probably reading this from a browser, in the case of Chrome that is ~9 years old, and in case of Firefox that is ~15 years old, do you think the code of both is extremely clear? No, and you can see the source code. Do you think it is a good decision to stop the development and start a rewrite in Rust (for example) and spend 5+ years developing it? No.
This can be applied to many other tools that you probably use daily that you don’t think about. The python interpreter CPython is ~30 years old (this
is the first commit). The Linux kernel is ~25 years old. GCC is ~30 years old. FreeBSD is ~25 years old. Emacs is ~40 years old.
The list goes on and on, and I’m sure you can come up with more examples just looking at the tool you are using daily. Why do you think these software (that are not trivial software, they have complex architectures!) are still actively developed today, and why do you think they didn’t rewrite those? Because they have always improved over the years, and over the years many man-hours have been spent to develop those. Also, the architecture has changed over the years, and multiple codes restructure has taken place, but it’s always improvements on an existing codebase, never a rewrite from scratch.
Think about this article, and maybe read it again, once in a while every time you want to rewrite a software from scratch, and instead think of a simpler restructure of a function or a part of the code. Also, if you are interested in this topic there is this
interesting book about it.