> I think any attempt to distil hard earned experience and domain awareness will eventually devolve into misplaced generalisms.
Ground up rewrites are a gamble. Classic Spolksy essay [1] about Netscape losing their lead to Internet Explorer is a must read.
Briefly:
1. You think you know how to build the new version, but you really don't. Years of improvements of the old version, years of bug fixes, years of business knowledge are below the surface.
2. The new version is going to have new bugs.
3. While you're rebuilding everything from scratch your competition is improving their product.
I heard someone once say “All that ‘cruft’ you complain about, I call ‘bug fixes.’”
A mature codebase represents a lot of “tribal investment,” which is sort of like “tribal knowledge.”
It’s something that can’t easily be quantified, but, is, nonetheless, a big deal, and represents a really significant investment of resources. Throwing it away, means tossing out that investment, as well. That’s why many large software codebases are still in “non-buzzword-compliant” languages.
At the same time, we don’t want to throw good money after bad, so experience gives us the tools we need, to figure out when it’s time to “clear the decks.”
>> You think you know how to build the new version, but you really don't. Years of improvements of the old version, years of bug fixes, years of business knowledge are below the surface.
This point has always baffled me. The old adage of "if it ain't broke, don't fix it." but then in the past decades of everybody jumping on the JS frameworks and whole heartedly believing by moving to "X" framework, they can eliminate all the issues you have or had with the older version.
In my own experience, it never goes this way. Oh sure, do you want to be working in legacy code that's 10 plus years old? Probably not, but the idea that every new shiny thing has all the answers to all the issues you had before is a sure fire way to get a lot of people fired for overpromising and underdelivering.
This is the wisdom of devops. Do it well, and things will go smoothly.