ap.Abhishek Patel

Search

Search notes, essays, projects, and the library. Use arrow keys to choose and Enter to open.

← Notes

Definition of Done: How to Stop Calling Work Finished When Testing Is Still Pending

Created · Updated · 6 min read

Why this matters: “dev done, testing pending” is the sentence that quietly destroys a product. This is the note that kills that sentence. It is also the mechanism that makes test cases and documentation structurally unavoidable, which is the fix for the problem described in Test Case Strategy.

What it is

The Definition of Done is a single shared checklist that applies to all work, describing what must be true before anything can be called complete.

It answers:

Is this genuinely, professionally finished, or does it just appear to work on my machine?

Unlike Acceptance Criteria, which change for every Story, the Definition of Done is written once by the team and changes rarely. Criteria ask “is this behaviour correct”. Done asks “is this work complete”.

Unlike Definition of Ready, this one is an official Scrum commitment. The Scrum Guide defines it as the formal description of the state of the Increment when it meets the quality measures required for the product, and it is blunt about the consequence: work that does not meet the Definition of Done cannot be released, cannot be presented at the Sprint Review, and is not part of the Increment. It goes back to the backlog.

A starter checklist

Start small and honest. A checklist the team actually follows beats an aspirational one that gets ignored in week two.

Version 1, for a team that currently has nothing:

  • Code written and works locally
  • Acceptance criteria all pass
  • Code reviewed by one other person
  • Merged to the main branch
  • No known critical or high severity defects
  • Manual QA pass completed

Version 2, after a few sprints:

  • Everything in version 1
  • Unit tests written for new logic and passing
  • Test cases written and linked to the Story
  • Integration tests passing
  • CI pipeline green
  • Deployed to the test environment
  • Logging added for the failure paths

Version 3, mature:

  • Everything in version 2
  • Automated regression test added to the suite
  • Security checks passed for anything touching auth, money or personal data
  • Performance acceptable under realistic data volume
  • Monitoring and alerting in place for the new path
  • Feature documented: behaviour, edge cases, owner
  • Feature flag configured, rollback path known
  • Release notes updated

The Scrum Guide explicitly allows a team’s quality practices to mature over time, and expects the definition to strengthen as they do. What it does not allow is the definition weakening because a deadline is close.

The rule that makes it real

A Story is Done or it is not Done. There is nothing in between.

No “90% done”. No “done except testing”. No “done, just needs the documentation”. If the checklist is not satisfied, the Story is not finished, it earns zero points, and it goes back to the backlog to be finished next sprint. Partial credit rules are covered in Velocity and Capacity.

This feels harsh for about two sprints. Then it starts doing something valuable: it makes you ask why so many Stories are ending the sprint unfinished. And the answer is always useful. Either the Stories are too big and need splitting per Writing User Stories, or scope was added mid sprint, which is Feedback and Scope Control, or you pulled in more than your actual velocity supports.

Allow partial credit and you lose all of that signal. The board looks green, the sprint looks successful, and the product quietly accumulates half finished features. That is precisely how a team ends up with a large product and almost no test coverage, without anyone ever deciding to skip testing.

Why this is the fix for missing test cases

The reason we have features with no test cases is not that anyone decided to skip them. It is that testing lived outside the definition of finished. So when the sprint got tight, the code shipped and the tests did not, and nothing in the process noticed.

Put “test cases written and linked to the Story” inside the Definition of Done and the pressure changes shape. Now a tight sprint does not produce untested features, it produces fewer features, which is visible, honest, and something a Product Owner can make a real decision about. You are trading scope instead of silently trading quality.

That is the whole trick: make quality non negotiable so that scope becomes the thing that flexes. Scope flexing is visible and discussable. Quality flexing is invisible until it is a crisis.

Keep it short enough to actually use

A Definition of Done with thirty items is a wish list. Nobody checks thirty items honestly. Aim for seven to twelve, written in plain language, and displayed somewhere the team sees it during the sprint, not buried in a wiki page.

If some item is genuinely not feasible for every Story, either drop it or write the exception explicitly. For example, “documentation updated” might apply to user facing changes only. Write that down rather than leaving the team to guess, because an ambiguous checklist item gets skipped by everybody while each person assumes somebody else handles it.

When you cannot meet it

Sometimes you truly cannot, for example a Story depends on a third party sandbox that is down, so integration tests cannot run.

The honest handling: the Story is not Done. Either it stays in progress, or you split off the part that is genuinely complete and carry the rest. What you must not do is mark it Done with a mental note to finish later, because that note is the thing that gets lost, and six months later nobody remembers that this feature was never fully tested. That forgetting is exactly the problem described in Feature Inventory and Ownership.

If exceptions are happening constantly, that is not a Story problem, it is a signal that your Definition of Done does not match your reality. Change it deliberately in a retrospective rather than eroding it silently, one urgent deadline at a time.

The three definitions together

The thing to hold in your head, expanded from Glossary:

Question Scope When it applies
Definition of Ready Can we safely start this? One Story Before the sprint
Acceptance Criteria Is this specific behaviour correct? One Story Written at refinement, checked at the end
Definition of Done Is this work professionally complete? All work Before saying “finished”

Three gates. Our current process has none of them, which is why anything can enter a sprint at any time and anything can be called finished. Putting these three in place, one at a time, is most of what Adoption Plan is about.

This connects to

Why Features End Up With No Test Cases, and How to Make That Structurally Impossible

That is the part worth understanding. There was never a meeting where we chose to ship untested features. What happened is that testing sat outside the definition of finished, so under pressure it was the thing that quietly did not happen, two hundred separate times.

Note

How to Write Acceptance Criteria: Defining Expected Behaviour Before Development Starts

Acceptance criteria are the specific, checkable conditions a single [[How to Write a User Story That Fits in One Sprint|User Story]] must satisfy to be accepted. They belong to that one Story and nothing else.

Note

Definition of Ready: The Checklist That Decides Whether a Story Can Enter a Sprint

The Definition of Ready is a short checklist a Story must pass before it is allowed into a sprint.

Note

Velocity and Capacity: How to Forecast Delivery Dates With Evidence Instead of Optimism

People mix these up constantly, so start here:

Note

How to Write a User Story That Fits in One Sprint: INVEST, Splitting Patterns and Examples

The most useful thing I ever read about User Stories is Ron Jeffries' idea of the three Cs: the Card (the short sentence), the Conversation (the discussion it triggers), and the Confirmation (the acceptance criteria you agree on). The written sentence is not a specifi

Note

Scope Creep in Sprints: How to Classify Stakeholder Feedback Instead of Absorbing It

A Story was agreed: export invoice as PDF, 5 points, acceptance criteria written.

Note

Why Nobody Remembers How a Feature Works: Documenting Behaviour, Edge Cases and Ownership

Right after you build a feature, you know everything about it. Every edge case, every reason you chose one approach over another, every weird case the stakeholder mentioned once.

Note

Agile and Azure DevOps Terminology Cheat Sheet: Every Term Explained in One Line

Acceptance criteria are per Story and change constantly. Definition of Done applies to everything and changes rarely. Definition of Ready is a team practice, not an official Scrum artifact, while Definition of Done is.

Note

How to Roll Out an Agile Delivery Process in 90 Days, One Change at a Time

One change at a time. A team can absorb roughly one new habit per two weeks. Introduce six at once and you get six half followed rituals and a team that concludes "process does not work here", which then blocks the next attempt for a year.

Note

Referenced by

Building Software With AI: Why Faster Code Makes Specification and Review the Real Bottleneck

AI did not create our planning problems. It removed the thing that was accidentally hiding them.

Note

The Sprint Cycle Explained: Backlog Refinement, Sprint Planning, Daily, Review and Retrospective

If you take one thing from this note: the quality of your sprint was decided before it started.

Note

Product Delivery Playbook: Planning, Estimating and Maintaining Software as It Grows

These are my notes on why software teams keep missing deadlines, keep losing track of what their own product does, and keep ending up with a hundred features and almost no test cases. I wrote them for myself first, after watching the same failure repeat sprint after sprint and re

Note

Ready to Use Templates for Epics, Features, Stories, Bugs, Test Cases and Sprint Goals

Written as a business objective, per [[Epic vs Feature vs User Story vs Task|Work Breakdown Hierarchy]].

Note

How to Set Up Azure DevOps for Agile Delivery: Work Items, Fields, Tags, Queries and Test Plans

A warning first: the tool does not create the discipline. A perfect Azure DevOps configuration with no [[How to Write Acceptance Criteria|Acceptance Criteria]] and no [[Definition of Done, The Gate Out of a Sprint|Definition of Done]] produces a beautifully organised record o

Note

Why Startups Keep Missing Deadlines: The Real Cause Behind Sprint Delays, Missing Test Cases and Forgotten Features

Sit in any startup review meeting and the same questions come back every month:

Note