You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* CI extensions
* New thinking on reliability and what does it mean for me sections
* Readibility
* Move draft CI section to other PR
* Remove extra line break
* Review tweaks
Copy file name to clipboardExpand all lines: continuous-improvement.md
+58-10Lines changed: 58 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,17 +6,17 @@ Continuous improvement is the practice of iteratively reviewing processes and im
6
6
7
7
This document provides some theory and advice on practising continuous improvement. But you don't need a lot of process to get going. There will almost certainly be problems people are already aware of which provide a great starting point for improvement work.
8
8
9
-
Set up regular retrospectives with the whole team and make a commitment to spend time acting on the things which are uncovered. Don't bite off more than you can chew: pick one or two changes which you think will be achievable in the next Sprint/iteration.
9
+
Set up regular retrospectives with the whole team and make a commitment to spend time acting on the things which are uncovered. Don't bite off more than you can chew: pick one or two changes which you think will be achievable in the next Sprint.
10
10
11
11
Set out with the intention of having this as a permanent part of how you work, iteratively checking how things are, thinking of what to do to improve things, making a small change and repeating.
12
12
13
13
> **Example**
14
14
>
15
15
> During a retrospective, the team identify that the product owner frequently finds problems with features once they have been implemented, causing costly rework late in the delivery cycle.
16
16
>
17
-
> They consider various options, including adding more detailed requirements to stories during sprint planning, introducing a just in time "analysis and elaboration" stage to their agile process, and showing the working software to the product owner during development for earlier feedback.
17
+
> They consider various options, including adding more detailed requirements to stories during Sprint planning, introducing a just in time "analysis and elaboration" stage to their agile process, and showing the working software to the product owner during development for earlier feedback.
18
18
>
19
-
> They can see potential value in all three, but decide to choose one to start with, remembering that continuous improvement is an iterative process. Because the product owner is often busy and is sometimes not available at short notice, they decide to try adding more detailed requirements to stories during sprint planning.
19
+
> They can see potential value in all three, but decide to choose one to start with, remembering that continuous improvement is an iterative process. Because the product owner is often busy and is sometimes not available at short notice, they decide to try adding more detailed requirements to stories during Sprint planning.
20
20
>
21
21
> Teams who find it is easier to get input from the product owner at short notice may prefer to add the "analysis and elaboration" stage instead to get the benefit of doing this analysis just in time. It is important to choose the right action for the specific scenario the team is facing.
22
22
@@ -54,7 +54,7 @@ It takes continuous effort to maintain and evolve processes in response to chall
54
54
55
55
### Control technical debt
56
56
57
-
Technical debt arises due to processes or practices in the past, but has an ongoing impact on the present.
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
58
59
59
Technical debt:
60
60
* Leads to bugs and loss of reliability.
@@ -64,11 +64,26 @@ Technical debt:
64
64
65
65
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.
66
66
67
+
### Improve reliability and operability
68
+
69
+
Some important improvement work consists of implementing or improving reliability or operability features, such as monitoring dashboards, application logs or automated security testing.
70
+
71
+
Where things like this are missing or need improvement, it is not tech debt — improving them brings a tangible benefit to service reliability, which users do notice and care about.
72
+
73
+
The benefits of improving these areas are:
74
+
* Service has fewer bugs.
75
+
* Performance is more reliable.
76
+
* Services are more available.
77
+
* Services are more secure.
78
+
* Incidents are less severe.
79
+
* Incidents are detected earlier.
80
+
* Incidents are fixed more quickly.
81
+
67
82
## Identifying improvement opportunities
68
83
69
84
Regular team retrospectives are an effective way to identify improvement opportunities and actions. Another potential source are periodic reviews using tools such as the the [AWS](https://aws.amazon.com/architecture/well-architected/) or [Azure](https://azure.microsoft.com/en-gb/blog/introducing-the-microsoft-azure-wellarchitected-framework/) Well-Architected Frameworks and the [NHS Digital quality review](review.md). And of course, tech debt is often uncovered in the course of making changes to a system.
70
85
71
-
As discused in [Benefits](#benefits), in high level terms the opportunities for reducing waste or improving quality tend to be in two areas:
86
+
As discused in [Benefits](#benefits), in high level terms the opportunities for reducing waste or improving quality tend to be in these areas:
72
87
73
88
### 1. Process or practice
74
89
@@ -88,9 +103,18 @@ Examples include:
88
103
* Technologies which should be replaced.
89
104
* Areas with insufficient, inefficient or ineffective testing.
90
105
106
+
### 3. Reliability and operability
107
+
108
+
Examples include:
109
+
* Automated build and deployment pipelines.
110
+
* Monitoring dashboards.
111
+
* Automated alerts.
112
+
* Application logs.
113
+
* Automated security testing.
114
+
91
115
## Prioritising
92
116
93
-
Select changes which will have the most impact for the effort required. If you have many potential options, you will want to prioritise them. One option is to score how much each will move the [metrics](#measurement) that matter to you — its _value_. You can then use [Weighted Shortest Job First](https://blackswanfarming.com/wsjf-weighted-shortest-job-first/) prioritisation, selecting items with the highest ratio of
117
+
Select items which will have the most impact for the effort required. If you have many potential options, you will want to prioritise them. One option is to score how much each will move the [metrics](#measurement) that matter to you — its _value_. You can then use [Weighted Shortest Job First](https://blackswanfarming.com/wsjf-weighted-shortest-job-first/) prioritisation, selecting items with the highest ratio of
94
118
```
95
119
(value + urgency) / effort
96
120
```
@@ -102,12 +126,12 @@ There is a lot of mileage in following the [scout's rule](https://www.scout.org/
102
126
103
127
> always leave the code behind in a better state than you found it
104
128
105
-
— a practice which Martin Fowler calls [opportunistic refactoring](https://martinfowler.com/bliki/OpportunisticRefactoring.html). Making time for this as part of feature work is a very effective way to make incremental improvements to a codebase over time.
129
+
— a practice which Martin Fowler calls [opportunistic refactoring](https://martinfowler.com/bliki/OpportunisticRefactoring.html). Making time for this as part of feature work is a very effective way to make incremental improvements to a codebase over time. Factor in any time needed for refactoring or other tech debt improvement when estimating features.
106
130
107
-
Of course, sometimes you uncover issues which are just to big to tackle as part of an individual feature. For these more substantial issues, it can be useful to apply a little more structure to help with the difficult job of judging the value of fixing any given bit of technical debt. It is helpful to focus on the impact that each is having by considering aspects such as those listed in [Benefits — Control technical debt](#control-technical-debt). The score for each of those aspects will depend on how heavily that part of the system is worked on. By summing the individual scores for each of those aspects you can derive a measure of the total impact, which conveniently also works as a measure of the value of fixing it, which can be fed into Weighted Shortest Job First prioritisation as above.
131
+
Of course, sometimes you uncover issues which are just to big to tackle as part of an individual feature. For these more substantial issues, it can be useful to apply a little more structure to help with the difficult job of judging the value of fixing any given bit of technical debt. It is helpful to focus on the impact that each is having by considering aspects such as those listed in [Benefits — Control technical debt](#control-technical-debt), shortened here as _bugs_, _delays_, _uncertainty_ and _unhappiness_. The score for each of those aspects will depend on how heavily that part of the system is worked on. Another important consideration is the business _criticality_ of the affected part of the system. By combining the individual scores for each of those aspects you can derive a measure of the total impact, which conveniently also works as a measure of the value of fixing it, which can be fed into Weighted Shortest Job First prioritisation as above.
108
132
109
133
```
110
-
value = bugs + delays + uncertainty + unhappiness
134
+
value = criticality x (bugs + delays + uncertainty + unhappiness)
111
135
```
112
136
113
137
Visualising technical debt using an approach like Colin Breck's [Quality Views](https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/) can help facilitate conversations about how much improvement effort is required and where it should be focussed.
@@ -144,6 +168,12 @@ Break down larger problems into smaller ones which can be tackled with smaller c
144
168
> 3._We don't have the same code style_
145
169
> 4._We don't have the same test approach_
146
170
171
+
## Making time
172
+
173
+
Some teams have success with forming a single backlog covering feature and improvement work. This requires product and tech people to work together and build a shared understanding of the relative priority of each item so that a single priority order can be decided.
174
+
175
+
Other teams find it too difficult to determine relative priorities between features and improvement work and instead use a time budget approach. For example, they may decide that each Sprint roughly 70% of the capacity should go into feature and bug fix work and the remaining 30% into operability and improvement work. The appropriate split will depend on the specific situation the team finds themselves in, and can vary over time.
176
+
147
177
## Measurement
148
178
149
179
When seeking to [identify](#identifying-improvement-opportunities) and [prioritise](#prioritising) improvements, it can be helpful to have agreed metrics as a guide. These will be specific to each team, but some good defaults to start with are:
@@ -160,9 +190,27 @@ In addition, it is useful to track the proportion of time being spent on various
160
190
* Tech debt
161
191
* Other improvement work
162
192
193
+
## What does this mean for me as a less-technical person?
194
+
195
+
To do
196
+
197
+
## What does this mean for me as a technical person?
198
+
199
+
If you are an Engineer or Tester, continuous improvement will help you:
200
+
* Reduce waste and spend more time delivering value for users.
201
+
* Implement features and fix bugs more quickly and safely.
202
+
* Spend less time on menial or repetitive work.
203
+
204
+
You have an important role to play!
205
+
* Make sure you understand the user needs well enough to have an informed conversation about the relative priority of the functional work items.
206
+
* Express technical work in terms of the benefits it will deliver so that as a team you can have a meaningful conversation about relative priorities.
207
+
* Play an active role in backlog refinement and planning, ensuring that operability and reliability work is adequately represented.
208
+
* Be bold and make sure technical quality is maintained.
209
+
* But also, be pragmatic and accept that all systems have imperfections and some degree of tech debt.
210
+
163
211
## Closing remarks
164
212
165
213
As we have seen, the recipe to start or give a boost to continuous improvement is essentially very simple:
166
214
1. Make a start, keeping changes small and iterating.
167
-
2. Bake improvement work into the way you work with regular retrospectives which feed a trickle of improvement work into your activity within each Sprint/iteration.
215
+
2. Bake improvement work into the way you work with regular retrospectives which feed a trickle of improvement work into your activity within each Sprint.
168
216
3. Track metrics over time so you can measure the effect of improvement work.
0 commit comments