UAT Defect Analysis

Using UAT findings to understand root causes and improve upstream quality and requirements.

Overview

User acceptance testing (UAT) is the final quality gate before a feature reaches production. When defects are found in UAT, the immediate concern is fixing them — but the more valuable question is: why did they reach UAT? Defects found in UAT represent failures in earlier quality gates: in requirements writing, in development practices, in unit and integration testing. Analysing where defects originate enables the team to fix the process, not just the code.

For improving requirements quality to prevent defects at source, see Writing Effective User Stories and Testable Acceptance Criteria.


Why It Matters

UAT defects are expensive. A bug found in UAT requires a context switch from the developer (who has moved on), a regression test cycle, a re-review by QA, and often a delay to the sprint or release. The same bug found during development costs a fraction of that.

Defect patterns reveal process failures, not just technical failures. A cluster of defects in user input validation points to a missing requirement. A cluster of defects in integration behaviour points to a missing or misread API contract. A cluster of defects in edge cases points to inadequate acceptance criteria. Each pattern has a different upstream fix.

UAT defect volume is a leading indicator of process health. A team with consistently low UAT defect rates has good requirements, good development practices, and good testing. A team with consistently high UAT defect rates has at least one of those failing. The metric is a proxy for process quality.

Without analysis, UAT feedback does not improve the process. Fixing individual bugs closes individual tickets. Root cause analysis changes the process that produced the bugs. Teams that only do the former find themselves fixing the same categories of defects sprint after sprint.

Defect analysis data builds the case for process investment. "We should invest more time in acceptance criteria" is an opinion. "30% of our UAT defects last quarter were caused by missing edge cases in acceptance criteria, costing an average of 2 additional developer-days per defect" is a business case.


Standards & Best Practices

Defect severity vs priority

These are different dimensions and should be tracked separately:

DimensionDefinitionScale
SeverityHow badly does this affect the user or system?Critical / High / Medium / Low
PriorityHow urgently does this need to be fixed?P1 (now) / P2 (this sprint) / P3 (next sprint) / P4 (backlog)

A cosmetic defect in a critical user flow might be low severity but P2 priority (it affects user confidence). A data corruption bug in a rarely-used admin tool might be high severity but P1 priority regardless of frequency.

Separating severity and priority prevents the conflation that leads to either ignoring serious bugs because they are rare, or scrambling to fix cosmetic issues because they look bad in a demo.

Defect categorisation

Categorise each defect by its root cause in the development process:

CategoryDescriptionUpstream fix
Requirements gapBehaviour was not specified; developer made a reasonable assumptionImprove acceptance criteria
Requirements ambiguityBehaviour was specified ambiguously; developer interpreted incorrectlyImprove Three Amigos / DoR process
Implementation errorRequirements were clear; developer made a technical mistakeCode review process; testing
Testing gapDefect was in scope; testing did not cover itImprove test coverage; test case design
Environment/integrationDefect only occurs in specific environments or integration contextsImprove staging environment parity
RegressionPreviously working functionality broken by a new changeAutomated regression testing

Track categorisation over sprints. The categories with the highest frequency are where process investment will have the most impact.

UAT quality gates

Define a UAT quality gate: a set of criteria that must be met before UAT is considered passed and a release is approved. Example gate:

  • Zero Critical or High severity defects open
  • Medium defects below [X] count
  • All P1 defects resolved and regression-tested
  • Acceptance criteria for all sprint stories verified as passing

UAT without a quality gate produces ambiguous release decisions — "do we ship with these bugs?" becomes a negotiation rather than a clear pass/fail.

The 5 Whys technique

For significant or recurring defects, apply 5 Whys to find the root cause:

  1. Why did this defect reach UAT? (The immediate answer)
  2. Why did [immediate answer] happen?
  3. Why did [previous answer] happen?
  4. Why did [previous answer] happen?
  5. Why did [previous answer] happen?

The fifth answer is usually the process failure. Example:

  1. Why did this defect reach UAT? The edge case was not tested.
  2. Why was it not tested? It was not in the acceptance criteria.
  3. Why was it not in the acceptance criteria? The acceptance criteria were not reviewed for edge cases.
  4. Why were edge cases not reviewed? The Three Amigos session was skipped for this story.
  5. Why was the Three Amigos session skipped? The story entered the sprint before it met the Definition of Ready.

Fix: enforce the Definition of Ready gate for all stories.


How to Implement

UAT defect log maintenance

Maintain a structured log for all UAT defects:

## UAT Defect Log — Sprint [N]

| ID   | Title   | Story   | Severity | Priority | Category         | Assigned | Status |
| ---- | ------- | ------- | -------- | -------- | ---------------- | -------- | ------ |
| D-01 | [title] | [story] | High     | P1       | Requirements gap | [dev]    | Open   |

The log should be reviewed at the sprint retrospective.

Sprint-end defect retrospective

At each sprint retrospective, spend 10 minutes on UAT defect analysis:

  1. How many defects were found in UAT this sprint?
  2. What was the breakdown by category?
  3. Are any categories consistently recurring?
  4. What is one process change that would reduce the most common category next sprint?

This does not need to be elaborate. The discipline of asking the questions and implementing one improvement per sprint compounds significantly over a year.

Defect trend tracking

Track these metrics across sprints:

  • Total UAT defects per sprint
  • Defects by category (as % of total)
  • Defects that required re-opening (fixed incorrectly the first time)
  • Average cost of a UAT defect in developer-days

A downward trend in total defects is the signal that process improvements are working. A category that is increasing as a percentage points to a new process failure.


Tools & Templates

UAT defect log template

## UAT Defect Log — [Sprint / Release name]

**UAT period:** [Start date] → [End date]
**Stories tested:** [N]
**Total defects found:** [N]

### Defects

| ID   | Title   | Affected story | Severity | Priority | Category   | Root cause note | Status |
| ---- | ------- | -------------- | -------- | -------- | ---------- | --------------- | ------ |
| D-01 | [title] | [story]        | Critical | P1       | [category] | [brief note]    | Open   |
| D-02 | ...     |                |          |          |            |                 |        |

### Summary

| Category                | Count | % of total |
| ----------------------- | ----- | ---------- |
| Requirements gap        | [N]   | [%]        |
| Requirements ambiguity  | [N]   | [%]        |
| Implementation error    | [N]   | [%]        |
| Testing gap             | [N]   | [%]        |
| Environment/integration | [N]   | [%]        |
| Regression              | [N]   | [%]        |

5 Whys worksheet

## 5 Whys — [Defect title]

**Defect:** [What happened]
**Story:** [Which story was this in]

1. Why did this defect reach UAT?
   → [Answer]

2. Why did [Answer 1] happen?
   → [Answer]

3. Why did [Answer 2] happen?
   → [Answer]

4. Why did [Answer 3] happen?
   → [Answer]

5. Why did [Answer 4] happen?
   → [Root cause]

**Root cause category:** [Requirements / Testing / Implementation / Environment / Regression]

**Process change recommended:** [Specific, actionable change]
**Owner:** [Name]
**Target sprint:** [Sprint N]

Common Pitfalls

Fixing bugs without categorising them. Closing a defect ticket is not the same as understanding why the defect occurred. Without categorisation, retrospective analysis is impossible and patterns are invisible.

UAT as the only quality gate. Teams that rely on UAT to catch all defects are using the most expensive quality gate. Investing in earlier gates — acceptance criteria quality, code review, unit testing — reduces the defects that reach UAT. UAT should be a verification step, not a discovery step.

Severity and priority inflation. Teams under delivery pressure often mark every defect as Critical/P1 to get it fixed quickly. This destroys the usefulness of the severity/priority dimensions. Reserve Critical for defects that make the system unusable or cause data loss. Apply P1 only to defects that are genuinely blocking release.

Not feeding defect data back to requirements. The most common category of UAT defect is a requirements gap. The most direct fix is better acceptance criteria. If defect analysis data is not shared with the product manager or incorporated into the refinement process, the same gap will recur next sprint.

Treating UAT findings as developer failures. UAT defects are process failures, not individual failures. Attributing defects to specific developers creates blame culture and discourages honest defect reporting. Categories and root causes are the right unit of analysis — not names.

Not tracking trends. Sprint-by-sprint UAT defect counts that are never aggregated across sprints cannot show improvement or regression. Track quarterly trends to understand whether process investments are reducing defect rates.