In a recent discussion with some of the leading startups in Silicon Valley, one of the issues we discussed was that of technical debt. It is perhaps ironic, that in this time when every discussion focuses on the need to be customer centric, and adding the latest technologies, too many software companies end up failing because they prioritize new features, over architectural and foundational work. By ignoring the technology stack they accumulate significant technical debt.
I recognize that technical debt is often overlooked or ignored in organizations, simply because they are in any case struggling to keep up with all their other business priorities. It can be difficult to build a business case to deal with an issue, when there are other seemingly higher priorities. However, for some companies their technical debt ends up becoming a very significant limiting factor to the point of being a competitive liability, as other companies can come in with a more nimble technology stack that is easier to maintain, faster to deploy, or that scales more easily and less expensively. And for that reason, they are able to move faster, and not only catch up, but actually beat your own product.
Technical debt can be acceptable at times, but in this case it means actively being aware of and managing this debt, and ensuring that your acceptance of this debt is aligned to your business strategy. And as with most things in life, prevention is better than cure – it’s better to deal with debt early on in the life of your startup, before it becomes a competitive liability. So how can you avoid falling into this common trap? During my recent meetings with some of Silicon Valley’s best known executives such as Phil Fernandez of Marketo and Mikkael Zvane of Zendesk, we came to a consensus on the importance of funding real R&D in the base technology. This R&D helps ensure your technology stays abreast of the latest developments. We also discussed the importance of training the board and executives to properly value the technical debt, just as much as they value new features. In addition, it’s critical to schedule time for the base work and new technology, not just new features. Another strategy is to buy smaller companies, even acqui-hires. This can be an effective way to keep a fresh inflow of ideas and technologies.
We also discussed the importance of measuring technical debt, to prevent it from becoming problematic. Particularly in an Agile development environment, the methodology provides an easy way to achieve this – via having good requirements, documentation, code reviews for example, you can clearly and transparently measure this debt, and the impact debt is having. Once you have measured it, it’s important to communicate in both technical and non-technical language to the appropriate stakeholders, including senior management. This comes back to the earlier point about training executives on valuing this debt.
We have previously blogged about the value of hiring individuals with significant experience- those so-called “grey-haired developers”. It’s worth bringing this into the discussion, because as my colleague Uzi Mamani mentioned in an article in Forbes, young developers can sometimes rapidly produce code “like a machine gun”, but don’t look at the broader picture, the side effects of the code, what are its dependencies? Having such senior developers and technical experts on your team will help you keep abreast of the impact of the technology you are developing, and whether it will contribute to your debt.
What have been your experiences? What strategies have been most successful for you?