Skip to content

Commit cb611a4

Browse files
committed
📝 (content): enhance Definition of Done documentation for clarity and depth
🔧 (footer.html): add Masonry layout script for improved UI flexibility ♻️ (list.html): refactor tag list layout for better readability and maintainability The Definition of Done documentation is expanded to provide a more comprehensive understanding of its importance, including organizational and team-specific criteria. This aims to improve transparency, consistency, and quality across teams. The footer now includes the Masonry layout script to enhance the visual presentation of content. The tag list layout is refactored to improve readability and maintainability, ensuring a more organized and user-friendly interface.
1 parent 5692ed6 commit cb611a4

File tree

3 files changed

+185
-63
lines changed

3 files changed

+185
-63
lines changed

site/content/tags/definition-of-done/_index.md

+69-4
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,75 @@ Instructions: |-
1919
**Strictly exclude** any discussions that deviate from the core principles of the Definition of Done, such as unrelated project management practices, non-Agile methodologies, or personal opinions on team dynamics that do not directly relate to the DoD.
2020
headline:
2121
cards: []
22-
title: Definition of Done
23-
subtitle: Establish clear criteria for completion to enhance transparency and ensure quality across teams and projects.
24-
content: Establishing a clear completion standard enhances team alignment and project quality. Posts should explore criteria for assessing work readiness, the impact on workflow efficiency, and methods for fostering shared understanding among team members, ensuring consistent delivery and accountability across various contexts.
22+
title: Definition of Done (DoD)
23+
subtitle: Ensuring Quality, Transparency, and Releasability
24+
content: The **Definition of Done (DoD)** establishes a shared understanding of what makes a product increment **complete and releasable**, ensuring all work meets a **minimum quality standard**. It enhances transparency, consistency, and empirical decision-making by providing clear criteria for done work. This includes an Organisational Definition of Done that applies across teams, with team-specific extensions as needed. A well-defined DoD is essential for adaptation, accountability, and delivering valuable, verifiable, and production-ready increments.
2525
updated: 2025-02-13T12:05:05Z
26-
2726
---
2827

28+
The **Definition of Done (DoD)** establishes a shared understanding of what constitutes a **completed and releasable** product increment. It ensures that all work meets a **minimum quality standard**, providing transparency, consistency, and the ability to make **empirical decisions** based on real-world feedback.
29+
30+
This document outlines the **Organisational Definition of Done**, which applies across all teams, as well as **team-specific extensions** that may be necessary based on product requirements. It also highlights why the DoD is essential for **transparency, adaptation, and ensuring that every increment is valuable, verifiable, and production-ready**.
31+
32+
## Organisational Definition of Done
33+
34+
For work to be considered **Done**, it must meet the following **minimum standard**:
35+
36+
- **Live and in production**: The increment must be deployed and available for end users.
37+
- **Collecting telemetry**: The increment must be instrumented with appropriate logging, monitoring, and analytics to gather data on its impact.
38+
- **Supporting or diminishing the starting hypothesis**: The increment must validate or disprove the assumptions that justified its development.
39+
40+
## Team-Specific Definition of Done
41+
42+
Each team must define what is required for a product increment to be considered **releasable** while ensuring full compliance with the **Organisational Definition of Done**. The organisational DoD sets the **minimum quality standard** that all teams must meet. If additional criteria are needed based on product-specific requirements, teams may extend their Definition of Done beyond the organisational standard but never below it. This ensures a consistent, high-quality standard across all teams and prevents discrepancies in what is considered Done.
43+
44+
Each team may have additional criteria, but they must adhere to the **organisational DoD** as a minimum. Typical extensions include:
45+
46+
- Code is peer-reviewed and merged to main.
47+
- Automated tests (unit, integration, performance, security) are written and pass.
48+
- Feature flags or rollback mechanisms are in place.
49+
- Documentation is updated.
50+
- No critical bugs or unresolved incidents are present.
51+
- User feedback mechanisms are implemented.
52+
53+
If there are multiple teams working on a single product, those teams must agree on a shared **Definition of Done** and ensure it is consistently honoured.
54+
55+
## Validation and Continuous Improvement
56+
57+
- Each deployed increment should be evaluated based on **real-world telemetry**.
58+
- Adjustments should be made based on the evidence collected, ensuring iterative learning and refinement.
59+
- The DoD should be reviewed periodically to incorporate evolving engineering and business needs.
60+
- The **purpose of the Definition of Done is to provide transparency** into what has been achieved and ensure that increments are **usable and releasable**.
61+
62+
By **strictly adhering to and continuously refining our DoD**, we ensure that every increment is **valuable, verifiable, and ready for real-world use**.
63+
64+
## Why the Definition of Done Matters
65+
66+
The Definition of Done is more than a checklist—it is the bedrock of transparency and adaptation. Without a clear and universally understood DoD, teams risk misalignment, rework, and poor decision-making.
67+
68+
### Transparency
69+
70+
- **Shared Understanding**: The DoD ensures that every stakeholder, from developers to leadership, understands what "done" truly means.
71+
- **Clear Expectations**: Teams, Product Managers, and business leaders operate with full visibility into what work is **ready for use versus work-in-progress**.
72+
- **Trust in Delivery**: A well-defined DoD reduces ambiguity, improving confidence in the quality and completeness of increments.
73+
74+
### Enabling Adaptation
75+
76+
- **Empirical Decision-Making**: The DoD ensures increments are deployed with real-world telemetry, allowing teams to inspect and adapt based on actual data rather than assumptions.
77+
- **Minimising Risk**: By enforcing rigorous completion criteria, the DoD prevents half-baked work from reaching users, reducing technical debt and ensuring fast, safe iteration.
78+
- **Faster Feedback Loops**: A strong DoD accelerates learning, allowing teams to course-correct sooner and focus on what truly delivers value.
79+
80+
## Done Means Releasable
81+
82+
When a **Product Backlog item** or an **Increment** is described as **Done**, everyone must understand what that means. This ensures **transparency**, the foundation of any empirical system. Without a consistent Definition of Done, teams cannot know what it takes to get something finished.
83+
84+
A shared Definition of Done allows us to:
85+
86+
1. Maintain **Transparency** of what we have **Done**.
87+
2. Understand how much work is required to deliver an item.
88+
3. Create an agreement of what to **show at the Sprint Review**.
89+
4. **Protect our Brand!**
90+
91+
A releasable product increment adheres to all aspects of quality, with **no corners cut** during development. This ensures that Product Management has the choice to release at any time, rather than requiring additional work before shipping.
92+
93+
The Definition of Done is the **commitment to quality for the Increment**. Creating and adhering to a usable increment that meets the DoD ensures **predictable, high-quality delivery**.

site/layouts/partials/infrastructure/footer.html

+1
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ <h4 class="p-2">Tools</h4>
151151
</footer>
152152
<!-- Bootsrap -->
153153
<script async src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
154+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/masonry.pkgd.min.js" integrity="sha384-GNFwBvfVxBkLMJpYMOABq3c+d3KnQxudP/mGPkzpZSTYykLBNsZEnG2D9G/X/+7D" crossorigin="anonymous" async></script>
154155
<!-- Lightbox -->
155156
<script async src="https://cdn.jsdelivr.net/npm/[email protected]/dist/index.bundle.min.js"></script>
156157
<!-- Cards -->

site/layouts/tags/list.html

+115-59
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,133 @@
11
{{- define "main" }}
2-
<section class="container my-5">
3-
<div class="row">
4-
{{- $taxonomyName := .Title }}
5-
{{- $taxonomyShortName := .Title }}
6-
{{- $pages := where .Pages.ByWeight "Draft" "!=" true }}
2+
{{- $taxonomyName := .Title }}
3+
{{- $taxonomyShortName := .Title }}
4+
{{- $pages := where .Pages.ByWeight "Draft" "!=" true }}
75

8-
{{- $pagesWithData := slice }}
9-
{{- range $page := $pages }}
10-
{{- with .Resources.GetMatch "data.index.classifications.json" }}
11-
{{- $data := . | transform.Unmarshal }}
12-
{{- $dataItem := index $data $taxonomyName }}
13-
{{- if $dataItem }}
14-
<!-- Ensure the taxonomy exists in the data -->
15-
{{- $pagesWithData = $pagesWithData | append (dict "page" $page "score" ($dataItem.final_score | default 0)) }}
16-
{{- else }}
17-
{{- $pagesWithData = $pagesWithData | append (dict "page" $page "score" 0) }}
18-
{{- end }}
19-
{{- else }}
20-
{{- $pagesWithData = $pagesWithData | append (dict "page" $page "score" .Weight) }}
21-
<!-- Default when no data file -->
22-
{{- end }}
6+
{{- $pagesWithData := slice }}
7+
{{- range $page := $pages }}
8+
{{- with .Resources.GetMatch "data.index.classifications.json" }}
9+
{{- $data := . | transform.Unmarshal }}
10+
{{- $dataItem := index $data $taxonomyName }}
11+
{{- if $dataItem }}
12+
<!-- Ensure the taxonomy exists in the data -->
13+
{{- $pagesWithData = $pagesWithData | append (dict "page" $page "score" ($dataItem.final_score | default 0)) }}
14+
{{- else }}
15+
{{- $pagesWithData = $pagesWithData | append (dict "page" $page "score" 0) }}
2316
{{- end }}
24-
{{- $sortedPagesWithData := sort $pagesWithData "score" "desc" }}
25-
26-
{{- range $pageWithData := $sortedPagesWithData }}
27-
{{- if eq $pageWithData.page.Type "course" }}
28-
<div class="col-xl-4 d-flex p-2">
29-
{{- partial "cards-course.html" (dict "context" .) }}
30-
</div>
31-
{{- else if or (eq $pageWithData.page.Type "tags") (eq $pageWithData.page.Type "categories") }}
32-
<div class="col-xl-4 d-flex p-2">
33-
{{- partial "page-sections/sections-taxonomies-card.html" (dict "site" .Site "context" $pageWithData.page "subTypes" "resources") }}
34-
</div>
35-
{{- else }}
36-
<div class="col-xl-4 d-flex p-2">
37-
{{- $title := $pageWithData.page.Title }}
38-
{{- $description := $pageWithData.page.Description }}
39-
{{- $buttonContent := "Find out More" }}
40-
{{- if $pageWithData.page.Params.card }}
41-
{{- $title = $pageWithData.page.Params.card.title }}
42-
{{- $description = $pageWithData.page.Params.card.content }}
43-
{{- $buttonContent = $pageWithData.page.Params.card.button.content }}
44-
{{- end }}
45-
<!-- layouts/partials/card.html -->
46-
<div class="sectioncards p-2 flex-fill flex-grow-1 h-100">
47-
<div class="card sectioncards flex-fill flex-grow-1 m-3 shadow text-start small border-0 h-100 position-relative">
48-
<div class="card-body p-4 px-20">
49-
<span class="badge text-bg-secondary">{{- title $pageWithData.page.Params.ResourceType }}</span>
50-
<h3 class="ttl-nkdagility h5 text-start" title="{{ $title }}">{{- $title }}</h3>
51-
<div class="card-text text-muted">
52-
{{- $description | markdownify }}
17+
{{- else }}
18+
{{- $pagesWithData = $pagesWithData | append (dict "page" $page "score" .Weight) }}
19+
<!-- Default when no data file -->
20+
{{- end }}
21+
{{- end }}
22+
{{- $sortedPagesWithData := sort $pagesWithData "score" "desc" }}
23+
<section class="container my-2">
24+
<div class="container">
25+
<div class="row">
26+
{{- range first 3 $sortedPagesWithData }}
27+
<div class="col-xl-4 p-2">
28+
{{- if or (eq .page.Type "tags") (eq .page.Type "categories") }}
29+
{{- partial "page-sections/sections-taxonomies-card.html" (dict "site" .Site "context" .page "subTypes" "resources") }}
30+
{{- else }}
31+
{{- $title := .page.Title }}
32+
{{- $description := .page.Description }}
33+
{{- $buttonContent := "Find out More" }}
34+
{{- if .page.Params.card }}
35+
{{- $title = .page.Params.card.title }}
36+
{{- $description = .page.Params.card.content }}
37+
{{- $buttonContent = .page.Params.card.button.content }}
38+
{{- end }}
39+
<!-- layouts/partials/card.html -->
40+
<div class="sectioncards p-2 flex-fill flex-grow-1 h-100">
41+
<div class="card sectioncards flex-fill flex-grow-1 m-3 shadow text-start small border-0 h-100 position-relative">
42+
<div class="card-body p-4 px-20">
43+
<span class="badge text-bg-secondary">{{- title .page.Params.ResourceType }}</span>
44+
<h3 class="ttl-nkdagility h5 text-start" title="{{ $title }}">{{- $title }}</h3>
45+
<div class="card-text text-muted">
46+
{{- $description | markdownify }}
47+
</div>
48+
</div>
49+
<div class="card-footer border-transparent bg-white p-3 border-0 d-flex justify-content-between align-items-center">
50+
<small class="text-body-secondary" title="Affinity to {{ $taxonomyName }} is {{ .score }}%"> <strong class="d-inline-block text-truncate" style="max-width: 150px; vertical-align: middle;"> {{ $taxonomyName }} </strong>: {{ .score }}% </small>
51+
<a href="{{ .page.Permalink }}" class="btn btn-nkdagility p-2" title="More information on {{ .title }}"> {{- $buttonContent }} <i class="fa-solid fa-arrow-right"></i> </a>
5352
</div>
5453
</div>
55-
<div class="card-footer border-transparent bg-white p-3 border-0 d-flex justify-content-between align-items-center">
56-
<small class="text-body-secondary" title="Affinity to {{ $taxonomyName }} is {{ $pageWithData.score }}%"> <strong class="d-inline-block text-truncate" style="max-width: 150px; vertical-align: middle;"> {{ $taxonomyName }} </strong>: {{ $pageWithData.score }}% </small>
57-
<a href="{{ $pageWithData.page.Permalink }}" class="btn btn-nkdagility p-2" title="More information on {{ .title }}"> {{- $buttonContent }} <i class="fa-solid fa-arrow-right"></i> </a>
54+
</div>
55+
{{- end }}
56+
</div>
57+
{{- end }}
58+
<div class="col-xl-12 p-2 my-4">
59+
<h2>Overview of {{ .Title }}</h2>
60+
{{- .Content }}
61+
</div>
62+
{{- range after 3 $sortedPagesWithData }}
63+
<div class="col-xl-4">
64+
{{- if or (eq .page.Type "tags") (eq .page.Type "categories") }}
65+
{{- partial "page-sections/sections-taxonomies-card.html" (dict "site" .Site "context" .page "subTypes" "resources") }}
66+
{{- else }}
67+
{{- $title := .page.Title }}
68+
{{- $description := .page.Description }}
69+
{{- $buttonContent := "Find out More" }}
70+
{{- if .page.Params.card }}
71+
{{- $title = .page.Params.card.title }}
72+
{{- $description = .page.Params.card.content }}
73+
{{- $buttonContent = .page.Params.card.button.content }}
74+
{{- end }}
75+
<!-- layouts/partials/card.html -->
76+
<div class="sectioncards p-2 flex-fill flex-grow-1 h-100">
77+
<div class="card sectioncards flex-fill flex-grow-1 m-3 shadow text-start small border-0 h-100 position-relative">
78+
<div class="card-body p-4 px-20">
79+
<span class="badge text-bg-secondary">{{- title .page.Params.ResourceType }}</span>
80+
<h3 class="ttl-nkdagility h5 text-start" title="{{ $title }}">{{- $title }}</h3>
81+
<div class="card-text text-muted">
82+
{{- $description | markdownify }}
83+
</div>
84+
</div>
85+
<div class="card-footer border-transparent bg-white p-3 border-0 d-flex justify-content-between align-items-center">
86+
<small class="text-body-secondary" title="Affinity to {{ $taxonomyName }} is {{ .score }}%"> <strong class="d-inline-block text-truncate" style="max-width: 150px; vertical-align: middle;"> {{ $taxonomyName }} </strong>: {{ .score }}% </small>
87+
<a href="{{ .page.Permalink }}" class="btn btn-nkdagility p-2" title="More information on {{ .title }}"> {{- $buttonContent }} <i class="fa-solid fa-arrow-right"></i> </a>
88+
</div>
5889
</div>
5990
</div>
60-
</div>
91+
{{- end }}
6192
</div>
6293
{{- end }}
63-
{{- end }}
94+
</div>
6495
</div>
6596
</section>
6697
{{- end }}
6798

6899
{{- define "siteSectionCallback" }}
69100
<section class="container my-5">
70-
{{/* <h2 title="R - What we do?">Our Services</h2>
71-
<p>Explore our comprehensive range of services and capabilities designed to empower organizations and teams. With our expert solutions, you can efficiently address and resolve immediate challenges, driving success across your operations.</p>
72-
{{- partial "cards-section.html" (dict "context" . "SectionName" "capabilities")
73-
}}
74-
*/}}
101+
<div class="m-1 small">
102+
<h5>Categories</h5>
103+
<div class="row">
104+
{{ range $category, $pages := .Site.Taxonomies.categories }}
105+
<div class="col-md-3 d-flex align-items-center">
106+
<span class="text-truncate d-inline-block" style="max-width: 100%;" title="{{ .Page.Title }}">
107+
<a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a>
108+
</span>
109+
{{- $count := len (where $pages "Draft" "!=" true) }}
110+
<span class="ms-1">({{ $count }})</span>
111+
</div>
112+
{{ end }}
113+
</div>
114+
<hr />
115+
</div>
116+
<div class="m-1 small">
117+
<h6>Tags</h6>
118+
<div class="row">
119+
{{ range $category, $pages := .Site.Taxonomies.tags }}
120+
<div class="col-md-3 d-flex align-items-center">
121+
<span class="text-truncate d-inline-block" style="max-width: 100%;" title="{{ .Page.Title }}">
122+
<a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a>
123+
</span>
124+
{{- $count := len (where $pages "Draft" "!=" true) }}
125+
<span class="ms-1">({{ $count }})</span>
126+
</div>
127+
{{ end }}
128+
</div>
129+
<hr />
130+
</div>
75131
</section>
76132
{{- end }}
77133

0 commit comments

Comments
 (0)