Ronald Hudson - Fotolia
Anyone who has been in software development long enough to work through a few design cycles has likely seen examples of technical debt, in which initial design decisions result in product failure or in more time or resources needed to add features or maintain the code after the first release.
Planned technical debt
Technical debt can be incurred knowingly. In some cases, teams may warrant a quick and dirty initial implementation in order to quickly establish a presence in a rapidly developing market or to gather customer feedback to guide future development. For a startup, a quick market entry may be essential and make the difference between establishing a market position or disappearing.
The downside of a rushed initial design is teams rarely have time for the basic redesign they discussed when they made the decision to quickly enter the market. Markets change rapidly, and the only way to respond quickly is to allocate all available resources to building on the original design. The code redesign effort is repeatedly put off until the next year.
Inadvertent technical debt
Technical debt can also be incurred inadvertently. Developers may not understand market requirements or how to design a product architecture that meets those requirements. Poor management can also result in debt. For example, technical debt can occur when inexperienced team members are assigned critical components and management doesn't conduct reviews that would catch problems early on.
Purchased software can appear to meet the market need. But, even if the code and design documents are open for review, it may be difficult for teams to spot problems. Further, some components may not follow the design or may not have been thoroughly tested.
Enterprise teams also use outsourcing to fill in for inadequate internal resources or to save money. The outsource team may be experienced but may not understand market requirements as thoroughly as a team focused on that market. The outsourcer may not implement the design as carefully as an internal team with a vested financial stake in the product's success or failure.
How to reduce technical debt
Enterprises can incur different types of technical debt in many ways. The best approach to reduce technical debt is to build on a core of experienced designers who thoroughly understand market requirements and the possible consequences of each decision. It's also critical to supervise less experienced team members during the product implementation phase. But, even when following these guidelines, perfect design and implementation -- with no elements of technical debt -- are a rare result.