Skip to content

Commit b6c6625

Browse files
authored
Update continuous integration practice (#268)
* Update continuous integration practice * Incorporate review changes recommendations * Fix the links and formatting to pass the linter check * Improve formatting * Typo * Improve more formatting * Fix MD031/blanks-around-fences
1 parent 7befdad commit b6c6625

13 files changed

+488
-301
lines changed

.github/workflows/markdown-check-format.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ jobs:
1919
- run: |
2020
files=$(git diff --diff-filter=ACMRT --name-only origin/${{ github.event.repository.default_branch }}.. "*.md")
2121
if [ -n "$files" ]; then
22-
image=ghcr.io/igorshubovych/markdownlint-cli:sha256:c902fc97bb4ba50cd073408e664fe00414e6e2064f0c213bafd393ea17f3a0fd # v0.32.1
22+
image=ghcr.io/igorshubovych/markdownlint-cli@sha256:c902fc97bb4ba50cd073408e664fe00414e6e2064f0c213bafd393ea17f3a0fd # v0.32.1
2323
docker run --rm -v $PWD:/workdir $image $files --disable MD013 MD033
2424
fi

.vscode/extensions.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"recommendations": [
3-
"ban.spellright",
43
"davidanson.vscode-markdownlint",
54
"editorconfig.editorconfig",
65
"johnpapa.vscode-peacock",

continuous-improvement.md

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Set out with the intention of having this as a permanent part of how you work, i
2323
## Improvement Kata
2424

2525
The [Improvement Kata](https://www.atlassian.com/agile/agile-at-scale/using-improvement-kata-to-support-lean) is a product of the [Toyota Production System](https://global.toyota/en/company/vision-and-philosophy/production-system/) and provides a useful structure for wrapping continuous improvement activities:
26+
2627
1. Understand the direction or challenge — expressed as a [measurable signal](#measurement) e.g. _Increase the number of deployments per month_
2728
1. Grasp the current condition — e.g. _We deploy once per month_
2829
1. Define the target destination — e.g. _Able to deploy on demand, up to several times per day_
@@ -31,6 +32,7 @@ The [Improvement Kata](https://www.atlassian.com/agile/agile-at-scale/using-impr
3132
## Plan-Do-Check-Act improvement cycles
3233

3334
It is common to describe the iterative continuous improvement process as a cycle, and the most common is called Plan-Do-Check-Act (PDCA). This gives a mental model rather than a process to follow, but this can still be useful when adopting and maintaining continuous improvement. The PDCA cycle is attributed to Demming and Shewhart, and here adapted from [ASQ](https://asq.org/quality-resources/continuous-improvement), has four stages which are performed in a continuous loop:
35+
3436
* **Plan**: Identify an opportunity and plan for change.
3537
* **Do**: Implement the change on a small scale.
3638
* **Check**: Use data to analyse the results of the change and determine whether it made a difference.
@@ -46,9 +48,9 @@ Continuous improvement has significant benefits for teams.
4648

4749
Improving processes:
4850

49-
* Reduces waste, leading to improved efficiency and productivity.
50-
* Improves quality and reduce error rates.
51-
* Leads to happier people and improved engagement, retention, and recruitment.
51+
* Reduces waste, leading to improved efficiency and productivity.
52+
* Improves quality and reduce error rates.
53+
* Leads to happier people and improved engagement, retention, and recruitment.
5254

5355
It takes continuous effort to maintain and evolve processes in response to challenges and changing circumstances. Without this sustained effort, productivity and quality decline over time.
5456

@@ -65,6 +67,7 @@ Some important improvement work consists of implementing or improving reliabilit
6567
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.
6668

6769
The benefits of improving these areas are:
70+
6871
* Service has fewer bugs.
6972
* Performance is more reliable.
7073
* Services are more available.
@@ -84,6 +87,7 @@ As discused in [Benefits](#benefits), in high level terms the opportunities for
8487
The [Lean principles](principles.md) give some useful areas to consider.
8588

8689
Examples include:
90+
8791
* The way stories are analysed or elaborated.
8892
* The way code is written or reviewed.
8993
* The tools and techniques for testing.
@@ -93,13 +97,15 @@ Examples include:
9397
### 2. Technical debt
9498

9599
Examples include:
100+
96101
* Code which needs to be refactored.
97102
* Technologies which should be replaced.
98103
* Areas with insufficient, inefficient or ineffective testing.
99104

100105
### 3. Reliability and operability
101106

102107
Examples include:
108+
103109
* Automated build and deployment pipelines.
104110
* Monitoring dashboards.
105111
* Automated alerts.
@@ -109,22 +115,24 @@ Examples include:
109115
## Prioritising
110116

111117
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
112-
```
118+
119+
```formula
113120
(value + urgency) / effort
114121
```
122+
115123
Value, urgency and effort are judgements and estimates in arbitrary relative units, and it is common to use a [modified Fibonacci](https://www.mountaingoatsoftware.com/blog/why-the-fibonacci-sequence-works-well-for-estimating) scale (1, 2, 3, 5, 8, ...) for each.
116124

117125
### Prioritising tech debt
118126

119-
There is a lot of mileage in following the [scout's rule](https://www.scout.org/sites/default/files/news_files/Leave%20the%20world%20a%20little%20better%20than%20you%20found%20it.pdf) as [applied to coding by Uncle Bob](https://www.oreilly.com/library/view/97-things-every/9780596809515/ch08.html) —
127+
There is a lot of mileage in the _"try and leave this world a little better than you found it"_ scout's rule as [applied to coding by Uncle Bob](https://www.oreilly.com/library/view/97-things-every/9780596809515/ch08.html) —
120128

121129
> always leave the code behind in a better state than you found it
122130
123131
— 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.
124132

125133
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.
126134

127-
```
135+
```formula
128136
value = criticality x (bugs + delays + uncertainty + unhappiness)
129137
```
130138

@@ -157,6 +165,7 @@ Break down larger problems into smaller ones which can be tackled with smaller c
157165
> **Example**
158166
>
159167
> The problem "_We don't communicate enough with the other team working in this area._" could break down into several more specific points, helping drive incremental action:
168+
>
160169
> 1. _We don't have visibility of each other's backlogs_
161170
> 2. _We don't coordinate changes and end up clashing_
162171
> 3. _We don't have the same code style_
@@ -171,36 +180,41 @@ Other teams find it too difficult to determine relative priorities between featu
171180
## Measurement
172181

173182
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:
183+
174184
* Deployment frequency
175185
* Lead time for changes
176186
* Incident rate
177187
* Mean time to recover
178188
* Team happiness
179189

180190
In addition, it is useful to track the proportion of time being spent on various activities so that the balance can be corrected if required:
181-
* Features
182-
* Bug fixing
183-
* Operability
184-
* Tech debt
185-
* Other improvement work
191+
192+
* Features
193+
* Bug fixing
194+
* Operability
195+
* Tech debt
196+
* Other improvement work
186197

187198
## What does this mean for me as a less-technical person?
188199

189200
Good engineering and good ways of working are intrinsically connected. Every team member, regardless of how technical they perceive themselves, has a role to play. Think of how your own area of expertise may contribute to improving the metrics the team has selected. Looking at the examples in [Acting](#acting), the conditions to enable increased number of deployments, or better communication, are created by the team as a whole.
190201

191202
Same as for more technical people, continuous improvement should help you reduce waste and enable more focus on the core activities that deliver value from your role. Start with general concepts that may help you identify more specific areas for improvement:
203+
192204
* Can you observe handoffs between "teams-within-a-team"? How could you help reduce or avoid them?
193205
* Do you have no understanding of what a part of the team is working on? How could that be made more visible?
194206
* Do you find yourself spending significant time on activities which seem to have no influence on the value of what the team produces? Why do such activities exist, and how could they be reduced or avoided so that time can be better spent?
195207

196208
## What does this mean for me as a technical person?
197209

198210
If you are an Engineer or Tester, continuous improvement will help you:
211+
199212
* Reduce waste and spend more time delivering value for users.
200213
* Implement features and fix bugs more quickly and safely.
201214
* Spend less time on menial or repetitive work.
202215

203216
You have an important role to play!
217+
204218
* Make sure you understand the user needs well enough to have an informed conversation about the relative priority of the functional work items.
205219
* 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.
206220
* Play an active role in backlog refinement and planning, ensuring that operability and reliability work is adequately represented.
@@ -210,6 +224,7 @@ You have an important role to play!
210224
## Closing remarks
211225

212226
As we have seen, the recipe to start or give a boost to continuous improvement is essentially very simple:
227+
213228
1. Make a start, keeping changes small and iterating.
214229
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.
215230
3. Track metrics over time so you can measure the effect of improvement work.

inclusive-language.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ git remote set-head origin -a
3838

3939
## Further reading
4040

41-
* [inclusivenaming.org](https://inclusivenaming.org/word-lists/overview/)
41+
* [inclusivenaming.org](https://inclusivenaming.org/word-lists/)
4242
* [Internet Engineering Task Force](https://datatracker.ietf.org/doc/draft-knodel-terminology/)
4343
* [Python](https://bugs.python.org/issue34605)
4444
* [GitHub](https://github.com/github/renaming)

0 commit comments

Comments
 (0)