Managing Technical Debt
IT departments and business start-ups face two kinds of debt: financial debt and the debt incurred during the course of the software development life-cycle. The latter is called technical debt, and it is similar to financial debt, in that you receive leverage today, but return that in the future with interest.
In lay terms, you are deferring current costs to the future. However, you still need to pay those back.
Types of Technical Debt
In addition, technical debt can take many forms, and this will affect your overall strategy to manage technical debt.
You have 10,000,000 lines of code which are no longer in use. Embedded in that code is a handful of functions that are critical to you your application. This code is toxic as anything new development or maintenance on it costs more because your developers will need to dig through all of that dead code for everything from analysis to coding and testing.
Repositories which are toxic, become expensive. It becomes technical debt, because you continuously defer the costs of clean-up to the future.
Deprecated Repositories and Branches
Stale code is often found in repositories or branches that are deprecated in your production product. For example, you might have an old proof of concept lingering out there, that no one found feasible enough to be merged into your mainstream trunk. Those branches just kind of hang around and similar to code toxicity, developers need to work their way around those dead branches.
A large and relevant backlog is great for any software project. However, over time the backlog can grow out of control and become stale and cumbersome. Normally, there is a product owner or business analyst that spend time in the backlog grooming older tasks. However, experience shows that almost every backlog becomes stale over time.
Temporary Code, Hacks and Quick Fixes
After thorough analysis, many projects need to evaluate options when confronted with technical constraints. In some cases, it doesn’t practice sense to choose the best solution, because you butt up against other constraints such as scope, resources or time line. Thus, the team chooses a less optimal solution as a temporary workaround, and leaves what might be a larger epic for future development or re-factoring. This is also a deferral of work, that also has an additional cost or technical debt. That giant epic that requires additional resources or a longer time-line will remain on your plate as another form of technical debt.
Paying Off Your Technical Debt
Similar to credit card debt, your company should seek to maintain a healthy debt level. You can incorporate into your overall strategy a combination of system and processes designed to keep technical debt to a minimum. For example, if you use JIRA, you can also following some proven techniques on their site to reduce technical debt. (https://www.atlassian.com/agile/delivery#!technical-debt). You can also continuously review and manage technical debt by using tools to measure it such as Sonar Toxicity Charts inside of the SonarQube JIRA add on.
If you don’t manage technical debt continuously, then the costs compound over time, just like compounded interest.
Another great strategy to manage technical debt is to transfer the work to an outsourcing firm. Tier Nine Consulting can put resources on your technical debt, which allows your in-house resources to focus on the critical path or future releases.
Identifying the Expected Value of the Project and Estimated ROI
Reversing technical debt related to IT systems can be time consuming, but outsourcing is one of the best ways to do it. Outsourced programmers can go through your system and work on old problems while you devote more resources to tackling future problems, helping you stay innovative and continue your growth trajectory.
Lowering Costs can Increase ROI
You should work with your outsourcing firm to understand the scope of the work and the total cost of labor. They should be able to work with you to define the correct team structure that provides a lower blended costs to your projects.