Skip to content

Commit 12acb36

Browse files
authored
Continuous improvement extensions (#102)
* 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
1 parent e5a5b95 commit 12acb36

File tree

1 file changed

+58
-10
lines changed

1 file changed

+58
-10
lines changed

continuous-improvement.md

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ Continuous improvement is the practice of iteratively reviewing processes and im
66

77
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.
88

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.
1010

1111
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.
1212

1313
> **Example**
1414
>
1515
> 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.
1616
>
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.
1818
>
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.
2020
>
2121
> 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.
2222
@@ -54,7 +54,7 @@ It takes continuous effort to maintain and evolve processes in response to chall
5454

5555
### Control technical debt
5656

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.
5858

5959
Technical debt:
6060
* Leads to bugs and loss of reliability.
@@ -64,11 +64,26 @@ Technical debt:
6464

6565
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.
6666

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+
6782
## Identifying improvement opportunities
6883

6984
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.
7085

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:
7287

7388
### 1. Process or practice
7489

@@ -88,9 +103,18 @@ Examples include:
88103
* Technologies which should be replaced.
89104
* Areas with insufficient, inefficient or ineffective testing.
90105

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+
91115
## Prioritising
92116

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
94118
```
95119
(value + urgency) / effort
96120
```
@@ -102,12 +126,12 @@ There is a lot of mileage in following the [scout's rule](https://www.scout.org/
102126

103127
> always leave the code behind in a better state than you found it
104128
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.
106130

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.
108132

109133
```
110-
value = bugs + delays + uncertainty + unhappiness
134+
value = criticality x (bugs + delays + uncertainty + unhappiness)
111135
```
112136

113137
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
144168
> 3. _We don't have the same code style_
145169
> 4. _We don't have the same test approach_
146170
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+
147177
## Measurement
148178

149179
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
160190
* Tech debt
161191
* Other improvement work
162192

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+
163211
## Closing remarks
164212

165213
As we have seen, the recipe to start or give a boost to continuous improvement is essentially very simple:
166214
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.
168216
3. Track metrics over time so you can measure the effect of improvement work.

0 commit comments

Comments
 (0)