Continuing with yesterday’s post 90 Days of GitHub Commits, jumping back into software engineering has really driven home to me why it’s so hard for successful software companies to keep up with new upstarts. Once a product is working, and the startup starts scaling, all the engineering efforts are focused on keeping up with growth, not with the latest technologies. And, over time, as the code gets deeper and broader, it becomes even more difficult to modernize things.
Here are a few thoughts on legacy code base challenges:
- Think of the products you use on a regular basis. Now, think about their user interfaces, especially the ones that are the most legacy (e.g. payroll, CRM, etc.). The older the application, the more antiquated the interface due to a large customer base and the tremendous difficulty updating it.
- Newer technologies often make software engineering faster, more scalable, and more maintainable (when used correctly), which gives an edge to startups using the latest technologies.
- Complicated customer use cases for a limited audience can be even more challenging for legacy products as the market no longer demands the functionality, yet it still has to be maintained because certain customers use it (watch out for frankenstein products).
- Entire markets of new products to mobile-enable legacy products have emerged (e.g. Catavolt) showing that legacy software companies have serious difficulties staying up-to-date
A common question I hear from people outside the software world when talking about a startup idea is “can’t Google/Facebook/Microsoft just update their product to include this functionality?” Yes, it’s technically possible, but there are so many competing priorities and legacy challenges that it won’t ever get done. And, that’s one reason why startups can start with a niche and grow into a formidable competitor.
What else? What are some more thoughts on challenges with legacy code bases?