Under tight time-to-market deadlines for a new product, developers have traditionally settled for less than optimal solutions, secure in the knowledge that any and all issues that arise after release can be successfully resolved in the next version. This practice results in the necessary reworking – and related reworking costs – soon after its release into the market.
This trade-off between the short-term and the long-term value has become known as technical debt. Technical debt is analogous to financial debt, because of the expense involved in optimizing the product and securing its long-term value once it’s already in the market. The practice of accruing technical debt has been accepted within the industry because of both the desire to satisfy one’s customers quickly and the need to maintain one’s market share by staying ahead of the competition.
Managing technical debt, however, is becoming an increasingly important part of developing high quality, timely and cost-effective software technologies. Balancing the need to release new software quickly against the desire to produce sound engineering that will reduce reworking needs has become an increasingly sophisticated exercise.
One area that has yielded positive results is the identification of metrics within the code and schedule structures of software systems. These modules provide insights into the software architecture dependencies and provide a basis for achieving greater efficiencies with regard to productivity and overall system quality.
Taking a Holistic View of Development
To properly manage technical debt, it is necessary first of all to take a step back and view the process of developer productivity holistically.
There are four critical dimensions of developer productivity:
- Speed of Development
- Results/Functionality Delivered
- Cost of Delivery
All four dimensions play pivotal roles in the overall delivery process, and proactively managing technical debt is a critical aspect of efficient delivery.
Experience has shown that a delicate balance must be struck between the desire to release new software features rapidly in order to satisfy users, and the desire to practice the sound software engineering that reduces rework.
The reverse is also true – adopting a less than holistic view creates the technical debt that must be paid off at some future date in order to at that time optimize long-term success.
In our next article, discover The Three Foundational Blocks that Optimize Developer Performance .