The Developer’s Triangle
There is a war in every software development project but nobody knows its name. Its the war between ideas, technology, and shipping a product. Its the conflict between going fast and doing it right. Its adding new features versus providing maintainability, stability, and scalability.
Whether you realize it or not, every decision you make during a project is a choice between investing in Innovation, Cycle Time, and Sustainability.
Cycle Time is the degree to which time is an asset or an obstacle for a project. Investing in tools and technologies to remove friction from a project is the key to accelerated learning through the Scientific Method. Why worry about time? Employees, hosting, equipment, all are obvious costs, but what if you miss your crucial window and you are nolonger the “right-product at the right-time”? Time-to-Market and the time to iterate and learn from your successes and failures is crucial. The faster you can go from envisioning a new feature to delivering it to customers, the more likely you will succeed.
Innovation is making leaps rather than steps, its discovering new solutions to old problems, and new problems (opportunities) in old ideas. Without innovation, you are the status-quo, you are a “me too” product. Sometimes even with well worn projects innovation is key to solving them faster, making them more robust or less expensive to build & own. Even after delivering a product, constant gardening is required to fend-off entropy since the smallest changes often reveal new opportunities.
Sustainability is less exciting than building new features, playing with new technology, or honing our craft, but launching a successful product and sustaining it’s success are entirely different challenges. To retain customers, quality must be maintained, services must be highly available and robust, and the system must meet expectations for responsiveness and usability. To allow for innovation and discovering new opportunities, the product must be flexible to change, highly composable, configurable, and extensible. To support a growing customer base, the product must be scaleable and make efficient use of required hardware and services. Excessive support-costs decreases your agility and ability to respond rapidly to customer needs and steals time from other areas where you could invest and profit.
The Developer’s Triangle is a way of thinking about the trade-offs you make every day on a project, choosing between automating your build process versus adding a new feature, or paying down technical-debt are critical decisions. If you tally-up all of the stories and bugs you work on during a project, you can easily see where you are spending your time. Its not a zero-sum game here, its unlikely you spend 100% of your time on any one of these three areas — typical stories are a mix of two or all three. If you don’t explicitly manage this triangle, you may find yourself dogged by unproductive iterations that in the worst case scenario can lead to complete project failure. On the other hand, wielding the developer’s triangle effectively can offer you a competitive edge that delivers success and wealth that oblivious competitors could never achieve.
So, manage your developer’s triangle!