
Geschreven door Funs Janssen
Software Consultant
Ik ben Funs Janssen. Ik ontwikkel software en schrijf over de beslissingen die daarbij komen kijken: architectuur, ontwikkelmethoden, AI-tools en de zakelijke impact van technische keuzes. Deze blog is een verzameling praktische aantekeningen van echte projecten: wat schaalbaar is, wat misgaat en wat in blogvriendelijke voorbeelden vaak over het hoofd wordt gezien.
You wrote a Definition of Done. The team agreed to it in a refinement session, someone pasted it into the wiki, and everyone nodded. Three sprints later, items are sliding to Done with no peer review, no test evidence, and no sign-off, exactly the things your DoD said were mandatory. The standard exists. It just isn't doing anything.
This is the gap nobody talks about: there's a world of difference between documenting a Definition of Done and enforcing one. A wiki page is advisory. It relies on memory and goodwill, and both run out under deadline pressure. What you actually want is a gate: an item physically cannot reach Done until the work it promised is verifiable, and you get a record proving who checked what and when.
In this post I'll show you how to build that gate inside Azure DevOps Boards using a checklist that lives in the work item, a custom field, and a state-transition rule. I built the Checklist Extension that makes this practical, so I'll also be honest about what breaks along the way.
Why a documented Definition of Done isn't enough
The gap between agreeing on a DoD and enforcing it
Most teams treat the Definition of Done as a cultural artifact: a shared understanding, reinforced in standups and retros. That works right up until it doesn't. The moment a sprint is running hot, "the team understands the DoD" degrades into "someone remembers most of the DoD." A documented standard with no enforcement is a suggestion, and suggestions lose to deadlines every time.
Azure DevOps already gives you the raw materials to close this gap. The platform supports custom rules on work item types that can make fields required, set values, or restrict behavior based on conditions. The piece most teams miss is that you can wire those rules to block a state transition entirely. That's the difference between a DoD you hope people follow and one the tool refuses to let them skip.
What it costs you: escaped defects, audit scrambles, "done enough"
When "Done" is negotiable, three costs show up:
- Escaped defects. Work marked done without the test step in your DoD ships bugs that a checklist would have caught at the source.
- Audit scrambles. When a reviewer or auditor asks you to prove a release met your own standard, "trust us, we usually do it" is not evidence. You end up reconstructing history from Slack threads.
- "Done enough" drift. Without a hard line, each person's private definition of done quietly replaces the team's. Six months later nobody agrees what the standard even was.
A documented DoD addresses none of these. An enforced one addresses all three.
The two pieces of real enforcement
Enforcement isn't one feature, it's two parts working together.
A checklist that lives in the work item, not a wiki
Docs are great for onboarding and deep explanation. They're terrible at getting used during the exact moment they matter, because when work is happening, people live in Boards, not in Confluence. The first piece of enforcement is moving your DoD out of the wiki and into the work item itself, as a reusable checklist template applied automatically to every user story, bug, or task. Now the standard is staring at you on the item you're about to close, not buried two clicks away.
A rule that blocks the state transition
A visible checklist nudges. It doesn't stop anyone. The second piece is a custom field, call it Checklist Complete, whose value reflects whether the checklist is actually finished, plus a rule that reads that field and refuses the transition to Done when it's false. This is the hard gate. The item literally will not save in the Done state until the checklist work is genuinely complete.
Wiring it up: block Done until the checklist is complete
Here's the concrete mechanism. The setup is a one-time effort per work item type.
Step 1, add a "Checklist Complete" field to your process
You can only add custom fields to a custom (inherited) process, not to the out-of-the-box Agile, Scrum, CMMI, or Basic processes. In Organization Settings > Process, create an inherited process from whichever one you use, then point your project at it under Project Settings > Project configuration > Process. Add a boolean field named Checklist Complete to the work item type you want to gate (User Story is a good first target). Microsoft's guide to adding a custom field to an inherited process walks through the exact clicks.
Step 2, build the DoD as a reusable checklist template
In the Checklist Extension, create a template that is your Definition of Done: peer review completed, unit and integration tests passing, acceptance criteria verified, documentation updated, no open blockers. Assign it to the User Story work item type so every story gets the same checklist automatically. This is the same approach I detail in the guide to implementing custom checklists for Agile teams, applied specifically to your DoD.
Keep the template tight. A 30-item checklist nobody finishes is worse than a 7-item checklist everyone does. More on that in the fatigue section below.
Step 3, map checklist completion to the field
This is the bridge between the two pieces. The extension supports field mappings so that checklist progress drives a work item field. Map your DoD template's completion state to the Checklist Complete boolean: when every required item is ticked, the field flips to true; if anything is outstanding, it stays false. Now the field is a trustworthy, automatic signal of whether the DoD is satisfied, with no manual bookkeeping.
Step 4, add the state-transition rule
Finally, the gate itself. In your inherited process, add a custom rule on the User Story type along the lines of:
When State changes to Done and Checklist Complete = False, then make the change invalid / block the transition.
Now the platform enforces your DoD. An item cannot enter Done while the checklist field reads false. The Checklist Extension also offers a built-in option to restrict state transitions tied directly to checklist completion, so depending on your governance preference you can enforce this through the extension, through a native process rule, or both for belt-and-braces. Either way, "Done" now means done.
What actually breaks (and how to handle it)
I've watched plenty of teams set this up, so here are the snags worth knowing before you hit them.
Inherited vs system processes
The single most common stumbling block: people try to add the field to a system process and can't. You must create an inherited process first. If your organization has multiple projects on different processes, decide whether you're gating one project or standardizing across all of them before you start, because retrofitting later means touching each process.
Partial completion, optional items, and escape hatches
A rigid all-or-nothing gate frustrates people when an item legitimately doesn't need every checklist entry. Handle this by separating required items from optional ones in your template, and mapping only the required set to the Checklist Complete field. For genuine exceptions, don't build a backdoor that quietly bypasses the gate, add an explicit, visible "exception approved" checklist item that someone has to consciously tick, so the override is itself part of the audit trail rather than a silent skip.
Avoiding checklist fatigue while keeping the gate
The fastest way to kill enforcement is a bloated checklist. When the gate becomes painful, people start gaming it, and a gamed gate is worse than no gate because it produces false confidence. Keep the DoD checklist to the handful of things that genuinely prevent defects and audit failures. Review it at the end of each sprint: cut items that have become noise, add ones a recent incident exposed. Treat the checklist as a living standard, not a monument.
The audit trail you get for free
This is the part compliance-conscious teams care about most, and it requires no extra work once the above is in place.
Field History as compliance evidence
The Checklist Extension stores checklist state in a standard work item field, which means every change is captured in Azure DevOps Field History. You get a timestamped record of who changed what and when, surfaced through the same audit mechanisms your organization already trusts. When an auditor asks you to demonstrate that releases met your Definition of Done, you point at the history instead of reconstructing it from memory. Microsoft's overview of work item fields and history covers how field changes are tracked.
Markdown storage for reporting and exports
Checklist content and status are stored as Markdown in the custom field, so the data stays usable outside the board: queries, reports, exports, and existing reporting pipelines can all read it. Your enforcement mechanism doubles as a data source. For regulated industries this matters, the same record that blocks a premature Done is the record that proves compliance after the fact.
A pragmatic rollout
Don't try to gate everything on day one. That's how you get a revolt.
Start with one work item type and one gate
Pick User Story, build the DoD template, wire the field and the rule, and run it for a sprint or two. Let the team feel that the gate is reasonable, not bureaucratic. Tune the checklist based on what they hit. A narrow, well-tuned gate that people accept beats a sweeping one they resent and route around.
Expand to release readiness and Definition of Ready
Once the Done gate is trusted, the same mechanism extends naturally. Add a Definition of Ready checklist that gates the transition into Active, so half-baked stories can't enter a sprint. Add a release-readiness template on your release item, exactly the approach in my release checklist guide, so "ready to ship" is enforced the same way "done" is. The pattern is identical: checklist, field mapping, transition rule. Learn it once, apply it everywhere quality matters.
Conclusion
A Definition of Done that lives in a wiki is a hope. A Definition of Done wired into a checklist, a field, and a state-transition rule is a guarantee. The mechanism is four steps: add a Checklist Complete field to an inherited process, build your DoD as a reusable checklist template, map completion to the field, and add a rule that blocks Done until the field is true. The payoff is threefold, fewer escaped defects, a Done that genuinely means done, and an audit trail you get for free instead of reconstructing under pressure.
Start small, gate one work item type, tune it, then extend the same pattern to Definition of Ready and release readiness. The hard part isn't the technology, it's deciding that your standard is real enough to enforce.
If you want the checklist-and-enforcement half of this without building it from scratch, that's exactly what I built the extension for. Install the Checklist Extension for Azure DevOps, it's free, and put your Definition of Done where the work actually happens.
Frequently asked questions
Can I really block a work item from moving to Done in Azure DevOps?
Yes. Using a custom rule on an inherited process, you can make a transition to the Done state invalid when a condition isn't met, such as a Checklist Complete field reading false. The Checklist Extension also offers a built-in option to restrict state transitions tied to checklist completion, so you can enforce it through the extension, a native process rule, or both.
Why do I need an inherited process to do this?
Azure DevOps doesn't let you add custom fields or rules to the system processes (Agile, Scrum, CMMI, Basic). You create an inherited process from your current one, point your project at it, and then add the Checklist Complete field and the transition rule there. It's a one-time setup per process.
Won't enforcing a Definition of Done create checklist fatigue?
It can, if the checklist is bloated. Keep it to the handful of items that genuinely prevent defects and audit failures, separate required items from optional ones, and review the template each sprint. A tight, trusted checklist gets followed; a 30-item one gets gamed, which is worse than no gate at all.
How does this help with compliance audits?
Checklist state is stored in a standard work item field, so every change is captured in Azure DevOps Field History with timestamps and authorship. Instead of reconstructing whether a release met your Definition of Done from memory or chat logs, you point an auditor at the history. The same record that blocks a premature Done is your compliance evidence.
Is the Checklist Extension free, and what does it actually do?
The Checklist Extension is free and used by around 1,000 organizations. It adds reusable checklist templates to Azure DevOps work items, with progress tracking, field mappings, and the ability to restrict state transitions until checklist work is done. It's not an AI tool or a pipeline tool, it lives inside Boards on your work items.
Reacties
Nog geen reacties. Wees de eerste om te reageren.
Plaats een reactie

Geschreven door Funs Janssen
Software Consultant
Ik ben Funs Janssen. Ik ontwikkel software en schrijf over de beslissingen die daarbij komen kijken: architectuur, ontwikkelmethoden, AI-tools en de zakelijke impact van technische keuzes. Deze blog is een verzameling praktische aantekeningen van echte projecten: wat schaalbaar is, wat misgaat en wat in blogvriendelijke voorbeelden vaak over het hoofd wordt gezien.
Inhoud

The Azure DevOps Checklist Extension now supports skip items, progress and completion field mappings, styling rules, and blocking transitions until checklist work is done.

Use a release checklist Azure DevOps teams trust to standardize readiness, prevent incidents, and ship confidently every time.
