|
| 1 | +# Technical debt |
| 2 | + |
| 3 | +## Context |
| 4 | + |
| 5 | +* This is part of a broader [quality framework](README.md) |
| 6 | + |
| 7 | +## Overview |
| 8 | + |
| 9 | +"Technical debt" is a term which refers to undesirable things about the way a system is built which are not apparent to users of the system, but impact the ability of the team to make changes to it quickly and safely. Tech debt arises due to processes or practices in the past, but has an ongoing impact on the present, in that it: |
| 10 | + |
| 11 | +* Leads to bugs and loss of reliability |
| 12 | +* Means changes take longer to develop, and makes it harder to predict how long the work will take |
| 13 | +* Causes dissatisfaction and disengagement in the delivery team |
| 14 | + |
| 15 | +There are many different views on what is and isn't tech debt - this is ours. |
| 16 | + |
| 17 | +## Purpose |
| 18 | + |
| 19 | +This definition is important because an understanding of technical debt supports teams to make prioritisation decisions such that systems will remain safe. |
| 20 | + |
| 21 | +Teams must record technical debt in their backlog, and they must actively manage the risks associated with that debt. |
| 22 | + |
| 23 | +## Definition |
| 24 | + |
| 25 | +We define tech debt as: the negative results of design & implementation decisions, and how those decisions age over time if they aren’t incrementally adjusted or improved |
| 26 | + |
| 27 | +* This includes technical decisions that are made for short-term benefit (e.g. delivery time or cost) that will slow you down or increase your costs / risks over time |
| 28 | +* This also includes technical decisions that were appropriate at the time, but better options exist now (e.g. new technologies that weren't available at the time) |
| 29 | + |
| 30 | +Note: it includes working practices as well as the software: the scope includes anything that's not in line with the contents of this [quality framework](README.md) |
| 31 | + |
| 32 | +### Examples of what it IS |
| 33 | + |
| 34 | +Here is a non-exhaustive list of examples we consider to be *in* scope of "technical debt": |
| 35 | + |
| 36 | +* Unknown / poor code hygiene and lack of coding standards |
| 37 | +* Unknown / poor [resilience test-automation](practices/service-reliability.md) |
| 38 | +* Unknown / poor [security test-automation](practices/security.md) |
| 39 | +* Unknown / poor accessibility test-automation |
| 40 | +* Use of technologies not endorsed by the organisation |
| 41 | +* Code you no longer need ([e.g. a new managed service is available](patterns/outsource-bottom-up.md)) |
| 42 | +* Technologies no longer needed (e.g. you've introduced something better than what you used before) |
| 43 | +* CI issues, e.g. lack of [fast feedback](patterns/fast-feedback.md), or intermittent [build failures](practices/continuous-integration.md) |
| 44 | +* Manual processes that could be [automated](patterns/automate-everything.md) |
| 45 | +* Software components with inappropriate / confused [domain boundaries](patterns/architect-for-flow.md) |
| 46 | +* Use of obsolete / unsupported technologies |
| 47 | +* Self-run tooling where a [SaaS offering](patterns/outsource-bottom-up.md) exists, e.g. sonarqube vs sonarcloud |
| 48 | + |
| 49 | +### Examples of what it ISN'T |
| 50 | + |
| 51 | +Here is a non-exhaustive list of examples we consider to be *out of* scope of "technical debt": |
| 52 | + |
| 53 | +* "Architectural debt", for example: |
| 54 | + * A business capability within a product that doesn't need to exist within that product, because a dedicated / strategic service is now available to perform the same function |
| 55 | + * Use of no-longer-preferred architectural patterns, e.g. monolith pattern |
| 56 | +* "Functional debt", for example: |
| 57 | + * Bugs |
| 58 | + * New features that haven't been built yet |
| 59 | +* Operational issues within the delivery & operational teams, for example: |
| 60 | + * Poor communication channels from/to end users, between operational teams, or within teams |
| 61 | + * Silos of knowledge / single points of failure within the team |
| 62 | + * Poorly understood team responsibilities |
| 63 | + * Poorly aligned contracts / organisation-level-agreements across suppliers / teams |
| 64 | + |
| 65 | +## Instrumentation |
| 66 | + |
| 67 | +The collection of tech debt should be fully automated. Some aspects of the above "in scope" list are much easier to collect than others - many of the above are reflected in [metrics](insights/metrics.md). |
| 68 | + |
| 69 | +TO DO: further details around instrumentation |
0 commit comments