“Done” sounds obvious until you ship a feature that “works on my machine,” breaks in production, confuses support, or forces a hotfix that steals your next sprint. A Definition of Done (DoD) is your team’s shared agreement about what “complete” means for a work item before it can be considered finished.
For small teams, the goal is not ceremony. The goal is fewer surprises, less rework, and a faster path from idea to stable value. A good DoD is short, repeatable, and flexible enough to handle both low-risk tweaks and high-risk changes.
This post walks through a DoD that fits small teams, plus a rollout approach that does not require a full-time Scrum Master to police it.
Why a Definition of Done matters
Small teams often move quickly by relying on context in people’s heads. That works until it doesn’t: someone is out sick, a bug report comes in with missing reproduction steps, or a minor change triggers an unexpected side effect.
A DoD helps in three practical ways:
- Reduces hidden work. Testing, documentation, and release steps stop being “someone else’s problem.”
- Improves predictability. When “done” includes the same basics each time, estimates become less chaotic because you are estimating the whole job.
- Protects focus. A DoD creates a clear finish line, which discourages endless tweaks and late scope creep.
Most importantly, a DoD shifts quality from an emergency response to a routine habit.
What to include in a practical DoD
The best DoD items are observable. Someone other than the author should be able to confirm them without reading minds. Think in terms of outcomes you can verify, not intentions like “make it clean.”
Baseline items vs risk-based items
Use two layers:
- Baseline DoD that applies to almost everything (small, always-on, non-negotiable).
- Risk-based add-ons that apply when a change touches sensitive areas (payments, auth, data migrations, critical workflows).
This keeps your process lightweight while still scaling up when the blast radius is larger.
Here are common DoD components that work well for small teams:
- Acceptance criteria met. The ticket’s stated behavior is implemented and demonstrable.
- Automated checks pass. Linting, tests, and build succeed in CI, not only locally.
- Basic test coverage. For many teams, this means “a test that fails without the change and passes with it” for the critical logic path.
- Peer review completed. At least one reviewer confirms intent, edge cases, and maintainability.
- Docs updated as needed. This can be a README, a runbook note, a support macro, or a short internal page. The form matters less than the usefulness.
- Telemetry considered. If failure would be costly, add a log, metric, or a simple alerting note. If it is low-risk, a log line might be enough.
- Release readiness. Any configuration changes, migrations, or manual steps are written down and validated.
Real-world example (concrete): A three-person SaaS team updates how invoices are generated. The change is functionally correct, but support starts receiving tickets because invoice PDFs now show different line item labels than the app UI. A simple DoD item like “user-facing copy reviewed and consistent across UI and outputs” would have caught the mismatch before shipping. That one line prevents a week of back-and-forth and restores trust.
A lightweight DoD template (copyable)
You can keep your DoD as a short checklist in your issue tracker. The format is less important than consistency. This example shows a baseline plus optional add-ons based on risk.
Definition of Done (Baseline)
- Acceptance criteria met and demoable
- CI green (build + tests + lint)
- Peer review complete (at least 1)
- Edge cases considered (inputs, auth, permissions, empty states)
- Docs/support note updated if behavior changed
Risk-based add-ons (apply when relevant)
- Data change: migration plan + rollback noted
- External API change: backward compatibility + versioning impact checked
- Customer-facing change: copy and screenshots reviewed
- Reliability: logs/metrics added for failure modes
- Security: least-privilege + secrets handling reviewed
Copy checklist tip: If your tracker supports templates, bake the baseline into every ticket type (feature, bug, chore) so it is the default, not an afterthought.
Rollout and enforcement without bureaucracy
A DoD fails when it is “announced” and then forgotten. The rollout should create one or two small feedback loops that keep it alive.
- Start with one week of observation. List the top 5 reasons work reopens (missed tests, missing docs, unclear acceptance criteria, release step forgotten, etc.). Build your baseline DoD from that, not from ideals.
- Keep the baseline under 7 items. If it is longer, people will treat it as background noise.
- Make it visible at the decision point. The best place is the PR description or the ticket completion checklist, where “Done” is actually decided.
- Agree on exceptions. Define what “expedite” means (for example, incidents) and what still must happen even during urgency (for example, peer review or at least a second set of eyes).
- Review and prune monthly. If an item never catches issues, remove it. If a new failure mode appears twice, add a targeted item.
A helpful rule: reviewers should check the DoD as a final gate, not as a weapon. The purpose is to protect the team, not to win arguments in code review.
Common mistakes
- Turning the DoD into a wish list. If you add “refactor related modules” or “improve architecture,” you will never finish. Keep it about completion quality, not aspirational improvements.
- One DoD for all risk levels. A typo fix should not require the same ceremony as a billing workflow change. Use baseline plus add-ons.
- Unverifiable items. “Code is clean” creates debates. Replace it with observable checks like “no TODOs added without a tracking issue” or “public API change documented.”
- Forgetting non-code work. A feature is rarely “done” if support, operations, or internal docs are surprised by it.
- Skipping retrospection. The DoD should evolve. If it never changes, it is probably not responding to your real failure modes.
When not to do this
A Definition of Done is not always the best lever. Consider delaying or simplifying if:
- You are in pure exploration mode. For spikes or prototypes, define a separate “Definition of Learned” (what questions must be answered) rather than forcing production-grade standards.
- You cannot automate any checks yet. If there is no CI and testing is entirely manual, a strict DoD can become performative. Start by automating one or two high-value checks first.
- The team has zero shared ownership. If work routinely gets thrown over the wall, a DoD will be ignored. Fix ownership and routing first, then introduce a DoD.
Key Takeaways
- A strong DoD is short, observable, and attached to the moment you decide “this is finished.”
- Use a baseline DoD for everything, then add risk-based items for sensitive changes.
- Build your DoD from real reopen reasons, and prune it regularly to keep it credible.
- Make exceptions explicit (incidents) so urgency does not permanently lower standards.
Conclusion
A practical Definition of Done is a small contract that saves a surprising amount of time. It turns recurring “we should have…” conversations into a consistent set of checks that happen before work is marked complete.
If you are starting from scratch, pick five baseline items that address your most common rework, add one risk-based add-on category, and run it for a month. You can always iterate, but you will feel the benefit quickly when fewer tickets bounce back from “done” to “not done.”
FAQ
Should our DoD include performance testing?
Include it as a risk-based add-on. For most teams, baseline performance testing on every ticket is too heavy. Instead, require it when you touch critical paths, introduce new queries, or change caching behavior.
How strict should we be about documentation?
Be strict about usefulness, not length. A one-paragraph support note or a short runbook update often beats a long doc that nobody reads. If a change alters behavior, someone should be able to discover the new behavior without asking the author.
What if we are a team of one?
A solo developer can still use a DoD as a personal checklist. Replace “peer review” with “sleep on it” or “rubber-duck review” and keep the rest. The value is in consistency and avoiding preventable mistakes.
How do we keep the DoD from slowing us down?
Keep the baseline short and automate what you can. A DoD speeds you up when it prevents reopen work. If an item is repeatedly painful and rarely catches issues, either automate it or remove it.