Coping with Technical Debt
What is Technical Debt?
Technical debt is a programming concept that originates from improper solution design and development practices. It is the accumulation of development work for the future time, due to short cuts followed during the development period.
Technical debt is much like financial debt, but the only difference is the interest rate in technical debt is not regulated by any governing body and can even go beyond 100%
How is it Incurred?
The key reasons for technical debt are:
Un-Scalable technical design done by inexperienced technical architects who miss understanding all the different perspectives of software design and principles
Rush Development, when the time to deliver takes priority over quality, developers take short cut resulting in bad code. The project team is blind to the concept of technical debt, and make decisions without considering the long term implications
Unpolished coding mostly originating from unskilled developers who follow linear programming without applying any design pattern which I prefer to call “short-sighted programming”
Insufficient testing will definitely result in slippage of defects into deployed code which will be a sure burden for future
Little or no documentation has become a culture in most software development projects and it blocks the transfer of knowledge for the future developers who come to work on the system and hence build technical debt
Sometimes technical debt is built intentionally when an interim solution is built to address a pressing need and it never gets replaced with the better long term solution
Lack of infrastructure to support needed and governing practices (e.g. continuous integration systems, automation of frequent or tedious tasks, etc) also facilitate the environment for accumulating technical debt
Lehman’s “Laws” of Software Evolution states, a system must be continually adapted or it becomes progressively less satisfactory. Legacy systems are often a pile of technical debt incurred over time
Impact of Technical Debt on an Organization:
Frequent defects reported in production causing user dissatisfaction
Less value delivered and high risk because of naïve code deployed in production
Reduced efficiency and agility of the support team while implementing enhancements
High maintenance cost that tends to increase over time
System and future changes undertaken are not predictable and reliable
Frustration and stress within the development team support the system
Risk of reaching technical bankruptcy which can be complete disastrous and a point of no return
How to Clear Technical Debt?
Clearing the technical debt is often overlooked in organizations, simply because there is always something that holds a higher priority. It can be difficult to build a business case when the ROI seems to be consisting mostly of intangible components. Eventually, the technical debt ends up becoming a very significant limiting factor to the point of being a competitive liability:
Identify, quantify and acknowledge a technical debt
Understand short term and long term technology roadmap
Prepare a Debt reduction strategy. Never try to go Big Bang about resolving technical debt as it will have high Risk, High Reward proposition. The best way to act is by dividing and conquering gradually over time.
Adopt industry standard and best practices into team culture and stop incurring new debt
Upgrade into newer technology platform and decommission legacy conventional systems
Documentation and building knowledge base must be incorporated into the strategy
Technical debt is something that is prevailing in almost every organization; some choose to act while others choose to retain it at a blind spot until an accident happens. Our next article is going to be more specific on technical debt incurred in the Salesforce platform and steps required to resolve it.