Skip to content

Commit a84f4f3

Browse files
authored
Tech debt definition (#263)
1 parent 9b8372a commit a84f4f3

File tree

3 files changed

+73
-10
lines changed

3 files changed

+73
-10
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ This framework is concerned with using "good" software engineering to support ra
1010

1111
It aims to:
1212
1. Describe a shared (across multiple teams) definition of "good" engineering
13-
2. Provide tools for teams to gain insight into their current engineering maturity levels
14-
3. Provide resources to support teams to increase their engineering maturity levels
13+
2. Provide tools for teams to gain insight into their current engineering maturity levels and their level of [technical debt](tech-debt.md)
14+
3. Provide resources to support teams to increase their engineering maturity levels and manage their [technical debt](tech-debt.md)
1515

1616
![Ecosystem](images/engineering-ecosystem.png)
1717
## Philosophy
@@ -21,7 +21,7 @@ The philosophy underpinning this framework advocates:
2121
* Empowered delivery teams which are accountable for their products
2222
* Products must be actively maintained for their entire lifecycle
2323
* Rapid, iterative and incremental development: "Release early. Release often. And listen to your customers." (Eric S. Raymond in [The Cathedral and the Bazaar](https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar))
24-
* Robust and comprehensive automation supporting and enforcing quality
24+
* Robust and comprehensive automation supporting and enforcing quality
2525
* Reliable & scalable services, remembering "Everything fails, all the time" (Werner Vogels), and treating operations as a software engineering challenge (as in Google's [Site Reliability Engineering](https://landing.google.com/sre/))
2626
* Loosely-coupled & cloud-native composable components as the default mode of construction
2727
* Continuous improvement, with prioritisation decisions based on data rather than sentiment

continuous-improvement.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,7 @@ It takes continuous effort to maintain and evolve processes in response to chall
5454

5555
### Control technical debt
5656

57-
Technical debt is a term which refers to 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.
58-
59-
Technical debt:
60-
* Leads to bugs and loss of reliability.
61-
* Means changes take longer.
62-
* Makes it harder to predict how long any given change will take.
63-
* Causes dissatisfaction and disengagement in the team.
57+
[Technical debt](tech-debt.md) is a term which refers to 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.
6458

6559
Without sustained improvement effort these all get worse over time, reducing capacity to deliver features. If little or no tech debt improvement work is done, delivery may initially be faster but over time it becomes progressively slower and less predictable.
6660

tech-debt.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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

Comments
 (0)