Introduction
In the rapidly evolving world of software development, change is often seen as essential to staying competitive. I recently encountered this firsthand with a long-standing client—a successful IT product company that had been around for over 20 years. They were undergoing a leadership transition, bringing in a new, younger CTO with ambitious plans to modernize their technology stack. The CTO proposed a bold plan: rewrite their legacy software, currently written in PHP, in GoLang to achieve greater performance and reduced server costs.
Rapid Changes vs Incremental Improvement
The new CTO was convinced that rewriting the entire codebase in GoLang would bring faster performance and significantly reduce server infrastructure costs. It sounded like an alluring idea on paper, promising a modernized, more efficient system.
However, based on my experience, I advised him that a complete rewrite could lead to costly pitfalls. Instead of discarding everything, I proposed identifying and replacing the bottlenecks in the existing PHP software with Go services while leaving the rest of the system intact. This approach would maintain operational stability while allowing the rest of the budget to focus on new features and innovation.
Lessons from Joel Spolsky: The Value of Existing Code
This perspective echoes the wisdom shared by Joel Spolsky in his article, “Things You Should Never Do, Part I,” where he describes the catastrophic effects of rewriting software from scratch. He argues that legacy code, despite its perceived inefficiencies, embodies valuable bug fixes and refinements accumulated over time. The risks of rewriting software include losing this historical knowledge, wasting resources, and inadvertently handing over a market advantage to competitors. The iconic examples he provides, like Netscape and Borland, serve as cautionary tales for anyone tempted by the allure of new technology.
Deeper Understanding of Software Economics
In software development, rewriting old code is often a much larger process than anticipated. Legacy software reflects years of incremental improvements, feature additions, and bug fixes that cannot be swiftly replicated. Furthermore, quality assurance is an ongoing effort, conducted both by QA engineers and the end users in live production.
Financial Considerations in Challenging Times
Given the current fiscal difficulties faced by the company—having cut their team by more than 60% and struggling financially—it’s essential to evaluate the economic impact of technological decisions carefully. Rewriting software not only diverts a significant portion of the budget towards development but also neglects potential revenue from new features in the existing system. In times of financial restraint, the costs of a complete overhaul can be devastating, exacerbating the company’s financial health rather than improving it.
Conclusion
Navigating technological change requires a balanced approach that considers innovation alongside practical and financial realities. By understanding the software’s accumulated value and the economy of a rewrite, companies can make more informed decisions about when to iterate and when to revolutionize, especially during financially precarious times.