Strategic debt is intentional debt accumulated in a project. They are conscious, proactive decisions with larger short term benefits. This debt focuses on architectural and/or business trade-offs. Deciding to forgo extensive architecture for increased speed to market or reduce overhead is intentional debt. Small companies and new unproven products utilize this concept to keep costs down or to increase innovation. Other companies utilize strategic debt to maintain customer satisfaction or to meet project deadlines. The two most common reasons for strategic debt are time and/or money.
Non-strategic debt is unintentional debt accumulated in a project. This debt can happen when a feature is poorly designed or coded. Error-prone code creates more maintenance during the QA process and potentially more customer issues once deployed. Programming may also loose its effectiveness due to a lack of communication or concepts lost in translation. Unfortunately, this debt is unknown to most participants until after it has been created. Programmers do not knowingly design or write ineffective code.
The decision to tackle non-strategic debt is based on three factors: when it was found, the size of the problem, and where the problem is located. Once an area has been identified as non-strategic debt, the decision to forgo correcting the situation can become strategic.
Although strategic debt in a product can grow and shrink over time, non-strategic debt has a tendency to increase as a team grows. This increase can be accounted for through proper oversight. This can translate into new procedural steps, coding standards, code reviews, retrospectives, and much more. Each company is different. It's important to keep a continuous eye on strategic debt. Initial estimates of the size and time line can be affected by other business decisions or unanticipated customer growth. Strategic debt only becomes a problem when it is not properly monitored.