ap.Abhishek Patel

Search

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

← Notes

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

Created · Updated · 9 min read

Why this matters: every idea in these notes has to survive contact with the tool, and a tool configured badly quietly prevents good practice. This is the practical mapping, not a product manual. The thinking behind each piece is in the concept notes it links to.

A warning first: the tool does not create the discipline. A perfect Azure DevOps configuration with no Acceptance Criteria and no Definition of Done produces a beautifully organised record of the same delays. Configure it because it makes the right behaviour easy, not because you expect it to change behaviour by itself.

Pick the process template deliberately

When you create a project you choose a process, and it decides your work item types permanently enough that changing later is painful.

Process Hierarchy Use when
Basic Epic → Issue → Task Very small team, minimal ceremony
Agile Epic → Feature → User Story → Task The default I would pick. Matches Work Breakdown Hierarchy exactly.
Scrum Epic → Feature → Product Backlog Item → Task Same thing, PBI instead of User Story, and it has an explicit Impediment type
CMMI Heavier, with formal change requests Regulated or audit heavy environments

Agile is the one I would use, purely because its names match the language everyone already uses in these notes, and because its Bug handling is flexible.

One setting worth deciding early: whether Bugs appear on the backlog alongside Stories, or on the task board. Bugs as backlog items means they are prioritised and estimated against features, which is usually healthier because it makes the cost of quality visible. Bugs as tasks means they hide under Stories. Pick one and be consistent, otherwise half your defects disappear from planning.

The hierarchy, and how to keep it honest

flowchart TD
    A["Epic<br/>(business objective, spans quarters)"]
    B["Feature<br/>(capability, spans sprints)"]
    C["User Story<br/>(small testable outcome, one sprint)"]
    D["Task<br/>(implementation, a day or less)"]
    E["Test Case<br/>(linked, under Test Plans)"]

    A --> B
    B --> C
    C --> D
    C --> E

Parent your items properly. It takes ten seconds and it is what makes everything above the Story level meaningful. An unparented Story is invisible to anyone looking at progress on a Feature, and then leadership asks for status and somebody builds a spreadsheet, which is how parallel tracking systems are born.

Practical hygiene rules:

  • Every Story has a parent Feature. Every Feature has a parent Epic.
  • If you cannot name a sensible parent, you have probably written the item at the wrong level. Re read Work Breakdown Hierarchy.
  • One Feature with exactly one Story is fake hierarchy. Collapse it.

Fields that actually matter

Most fields are noise. These are the ones I would insist on:

On a User Story

  • Title. Written as an outcome, per Writing User Stories.
  • Description. The As a / I want / So that, plus context and any links.
  • Acceptance Criteria. There is a dedicated field. Use it. This is the single most important field in the entire system, per Acceptance Criteria.
  • Story Points. Relative size only, per Estimation and Story Points.
  • Area Path. Which product area, which is also how you slice reporting later.
  • Iteration Path. Which sprint, or the backlog.
  • Priority / Business Value. For ordering.
  • Tags. Covered below.

On a Task

  • Title, and Remaining Work in hours if you use capacity tracking. Original Estimate optional. Do not put Story Points on Tasks.

On a Bug

  • Repro steps, severity, and a link to the Story or Feature it belongs to. The link is what later tells you which features generate the most defects, which is how you prioritise in Test Case Strategy.

Tags, because they carry the process

Tags are underrated and free. The set I would use:

  • ready on Stories that pass Definition of Ready. This is your readiness gate made visible.
  • needs-refinement on items that failed it, so they surface in the refinement session.
  • added-mid-sprint on anything pulled in after planning started. This tag is how you measure scope growth, which is the number that matters most in Feedback and Scope Control.
  • spike for timeboxed investigations.
  • tech-debt so you can report how much of it you are actually paying down.
  • blocked plus a comment saying by what and since when.

The added-mid-sprint tag costs one second per item and produces the single most useful retrospective statistic you will have.

Boards and columns

Map your board columns to your real workflow, and make sure the columns reflect your Definition of Done, not wishful thinking.

flowchart LR
    A["New"] --> B["Ready"]
    B --> C["Active"]
    C --> D["In Review"]
    D --> E["In Test"]
    E --> F["Done"]

Two things to configure:

Definition of Done per column. Azure DevOps lets you write exit criteria on each column. Write them. “In Review means: PR raised, criteria checked, tests written.”

Work in progress limits. Set a limit on Active and In Review. If the column is full, finish something before starting something. This is what stops a sprint where six Stories are each 80% complete and nothing ships.

Also: use the split columns (Doing / Done) on In Review and In Test, otherwise you cannot see whether something is waiting for a reviewer or being reviewed, and waiting is where time actually goes.

Sprints, capacity, burndown

Iteration paths are your sprints. Set the dates so the reports work.

Capacity is set per person per sprint, with days off. Then the sprint’s task Remaining Work can be compared against real availability, which is the arithmetic in Velocity and Capacity. If you are not going to fill in task hours, skip capacity entirely rather than half using it, because a half filled capacity view is worse than none.

Sprint burndown is where mid sprint scope increases become visible. That is its real value, more than the trend line. A burndown that goes up on day four is telling you something important.

Velocity chart and the forecast tool on the backlog will project how far down the backlog you can get at your historical rate. Useful for the “when will this be ready” conversation, as long as you treat the output as a range and remember the assumption that scope does not grow.

This is the part most teams do not set up, and it is the part that fixes traceability.

Create a Test Plan per release or per sprint, with Test Suites grouped by Feature, and Test Cases linked to the User Story they verify. Requirement based suites do this linking automatically: point a suite at a Story and it collects the test cases linked to it.

What that gives you, and why it is worth the setup:

  • From any Story you can see its test cases and whether they passed.
  • From any Feature you can see coverage across all its Stories.
  • You can finally answer “which features have no test cases at all”, which is the question from Test Case Strategy that nobody can currently answer.

Link automated tests to the same test cases so that manual and automated coverage appear in one place instead of two.

Queries worth saving

A handful of saved queries tells you more about your process than any status meeting:

  1. Stories in the current sprint with an empty Acceptance Criteria field. Should be zero. If it is not, your Definition of Ready is decorative.
  2. Items tagged added-mid-sprint in the current iteration. Your scope growth, per sprint.
  3. Stories carried over, meaning items whose iteration changed. Your carry over rate.
  4. Active Stories with no linked test case. Your future coverage gap, visible before it becomes permanent.
  5. Bugs grouped by Area Path, last 90 days. Shows you where the risk actually lives, which is how you choose what to automate first.
  6. Stories with points above 13. These should not exist in a sprint, per Estimation and Story Points.
  7. Items untouched for 30 days. Your backlog rot. Close them or commit to them.

Put these on a dashboard. A dashboard of four honest numbers beats twelve charts nobody reads.

Where to write the definitions themselves

Put Definition of Ready and Definition of Done where the team sees them while working, not in a wiki page they visit once:

  • In the board column exit criteria, which appear during drag and drop.
  • In the work item templates, so a new Story is created with a pre filled acceptance criteria structure.
  • Pinned on the team dashboard.

Work item templates in particular are worth ten minutes: create one for Story, Bug and Spike with the structures from Templates pre filled. It removes the blank page problem, which is the real reason acceptance criteria go unwritten.

Hygiene rules that keep it usable

  • One board, one truth. The moment planning also lives in a spreadsheet, both become unreliable.
  • Update items as work happens, not in a panic before the demo. A board updated once a week is a work of fiction.
  • Close what is dead. A backlog with 400 open items is not a backlog, it is a landfill, and it makes prioritisation impossible. If it has been open a year and nobody has asked, close it. It is in the history if it ever matters.
  • Do not create parallel tracking. If somebody needs a different view, build the query or the dashboard instead of a new document.
  • Link the code. Mention the work item ID in commits and pull requests so the change and the requirement stay connected. In a year that link is how anyone reconstructs why a line of code exists, which is what Feature Inventory and Ownership depends on.

This connects to

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 Done: How to Stop Calling Work Finished When Testing Is Still Pending

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.

Note

Epic vs Feature vs User Story vs Task: How to Break Work Down and Decide Which Is Which

Four levels, and each one answers a different question:

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

Story Points Explained: What They Measure, Why Fibonacci, and How to Run Planning Poker

If you write "1 point = 4 hours" on a whiteboard, you have not adopted story points. You have invented a complicated way of writing hours, and you have kept every problem hours had while adding a translation step.

Note

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

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

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

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

People mix these up constantly, so start here:

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

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

Referenced by

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

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

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

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