severity-vs-priority-reference
Pure-reference catalog for defect classification: severity (impact on the system / user) vs priority (urgency of fix) on independent axes - the canonical 5-point severity scale (Critical / High / Medium / Low / Trivial), the 5-point priority scale (Immediate / High / Medium / Low / Deferred), the 5x5 matrix with worked S1/P5 and S5/P1 examples, and IEEE 1044-2009 severity classes; plus the full defect lifecycle (ISTQB-canonical states new / open / assigned / fixed / verified / closed / reopened / deferred / rejected / duplicate, allowed and forbidden transitions, tracker vocabulary maps) and the defect-categorisation taxonomies (IEEE 1044 anomaly classification, ISTQB CTAL-TA root-cause categories, Orthogonal Defect Classification) in references. Use when triaging or classifying a defect, configuring a tracker's severity/priority/state fields, reviewing a bug report's classification, or running root-cause analysis.
Install with skills.sh (any agent)
npx skills add testland/qa --skill severity-vs-priority-referenceseverity-vs-priority-reference
Overview
Severity and priority are two independent axes, not synonyms. Every triaged defect must have both, and the combination drives scheduling, escalation, and SLA enforcement.
This skill is a pure reference consumed by defect-report review (which rejects reports that conflate the two), bug-tracker-workflow, and downstream triage tooling. Two companion references extend it: the defect lifecycle (states, allowed / forbidden transitions, tracker vocabulary) in references/lifecycle.md, and the categorisation taxonomies (IEEE 1044, ISTQB CTAL-TA root cause, ODC) in references/taxonomy.md.
When to use
How to use
The two axes
Severity scale
Per IEEE 1044-2009 (cite by stable ID; "Standard Classification for Software Anomalies") and ISTQB CTFL syllabus:
| Severity | Definition | Example |
|---|---|---|
| Critical (S1) | System unusable; data loss; security breach; total loss of function. | Production database is corrupted on user signup. |
| High (S2) | Major function broken; significant user impact; no easy workaround. | Checkout fails 30 % of the time; no workaround. |
| Medium (S3) | A function works incorrectly; usable workaround exists; impact bounded. | Date picker shows wrong month abbreviations; users can type the date. |
| Low (S4) | Cosmetic or minor inconvenience; functionality not impaired. | Footer copyright year not updated. |
| Trivial (S5) | Spelling, alignment, polish-level issues. | "Settngs" link misspelled in sidebar. |
Per ISTQB Glossary "severity" entry (glossary.istqb.org (opens in new window)): "the degree of impact that a defect has on the development or operation of a component or system."
Priority scale
Per ISTQB Glossary "priority": "the level of (business) importance assigned to an item, e.g., a defect."
| Priority | Definition | Example |
|---|---|---|
| Immediate / Blocker (P1) | Stop the release; halt downstream work until fixed. | Production outage; security incident in progress. |
| High (P2) | Fix in current sprint / before next release. | Customer-reported high-severity bug. |
| Medium (P3) | Fix when capacity permits in coming sprints. | Medium-severity bug with workaround. |
| Low (P4) | Backlog; fix opportunistically. | Low-severity, no customer impact. |
| Deferred (P5) | Won't fix in foreseeable horizon. | Cosmetic in deprecated feature. |
Why they must be separate axes
The "combined severity-priority" scale is a common anti-pattern. Each cell in the 5×5 matrix below represents a real combination:
| P1 Immediate | P2 High | P3 Medium | P4 Low | P5 Deferred | |
|---|---|---|---|---|---|
| S1 Critical | typical | unusual but real | rare | rare | rare |
| S2 High | typical | typical | typical | rare | rare |
| S3 Medium | unusual | typical | typical | typical | unusual |
| S4 Low | unusual | unusual | typical | typical | typical |
| S5 Trivial | unusual (PR demo!) | rare | unusual | typical | typical |
Worked examples that prove the distinction:
Worked example
A CSV export appends one trailing blank column for every user. The export still succeeds and every data value is correct.
Result: the fix is scheduled in the current sprint despite Low severity, driven entirely by the High priority - a clean demonstration that the two axes move independently.
Mapping to lifecycle
Severity and priority don't change with state (typically). However:
See references/lifecycle.md for the state transitions; this skill defines the orthogonal severity / priority fields.
Common confusions
| Confusion | Reality |
|---|---|
| "Severity = customer impact." | Severity = system function impact. Customer impact informs priority. A bug that breaks an unused admin tool is High severity but Low priority. |
| "Priority always equals severity." | False. The 5×5 matrix has 25 distinct cells, all observed in practice. |
| "Critical defects always get fixed immediately." | False. A Critical defect in a deprecated subsystem may be Deferred. |
| "Cosmetic = Low / Trivial severity always Low priority." | False. Marketing context (S5 / P1 example above) can make trivial severity an immediate priority. |
| "Severity is set by the reporter; priority by the PM." | Convention varies. Best practice: reporter proposes severity; triager confirms severity + assigns priority. |
Configuring a tracker
| Tracker | Severity field | Priority field |
|---|---|---|
| Jira | Custom field (often Severity with select-list) | Built-in Priority field |
| Linear | Custom field (Severity), no first-class | Built-in Priority field (Urgent / High / Medium / Low / No priority) |
| GitHub Issues | Labels (severity:critical etc.) | Labels (priority:p1 etc.) + Projects status |
| Azure DevOps | Built-in Severity (1 - Critical / 2 - High / 3 - Medium / 4 - Low) | Built-in Priority (1 / 2 / 3 / 4) |
| Bugzilla | Built-in Severity + Priority | Same |
bug-tracker-workflow covers the platform-specific configuration for Jira, Linear, GitHub Issues, and Azure DevOps.
Anti-patterns
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Single combined field | Loses information; everyone fights about whether to bump severity to escalate or vice versa | Two fields, explicit per defect |
| Default both fields to "Medium" | Triagers don't engage with the distinction | Require both fields explicitly on transition from New → Open |
| Auto-equate severity with priority | "S1 must be P1" - disallows S1/P5 deferred legacy bugs | Allow both axes independently |
| Severity is purely subjective | Variability across reporters; metrics unreliable | Use the IEEE 1044 examples + team-calibrated rubric |
| Priority changes weekly without reason | Metrics chaos; no accountability | Log priority changes with rationale |
| Critical defects always escalated to release manager | Floods the escalation channel | Use severity and priority for escalation rules |
Limitations
References
Defect lifecycle states and transitions
View source (opens in new window)Defect lifecycle states and transitions
Reference companion to severity-vs-priority-reference. Catalogs the ISTQB-canonical defect lifecycle and maps it to Jira, Linear, and GitHub Issues workflows. Consumed by bug-tracker-workflow for state-transition logic.
How to use
ISTQB terms - error, fault, defect, failure, anomaly
Per the ISTQB Glossary (glossary.istqb.org (opens in new window)):
| Term | Definition |
|---|---|
| Error | A human action that produces an incorrect result. |
| Fault (synonyms: defect, bug) | A manifestation of an error in software. |
| Defect | An imperfection or deficiency in a work product where it does not meet its requirements or specifications. Synonyms: bug, fault, problem. |
| Failure | An event in which a component or system does not perform a required function within specified limits. Failure is what users experience; fault is what produced it. |
| Anomaly | Any condition that deviates from expectation. Broader than defect - could be a usability issue, a documentation gap, or a defect. |
These terms are surprisingly often misused: developers say "the bug failed in production" when they mean "the failure, caused by the fault, occurred in production." The lifecycle below tracks defects (faults), not failures (events).
Canonical lifecycle states
The standard set per IEEE 1044-2009 "Standard Classification for Software Anomalies" and ISO/IEC/IEEE 29119-3:2021 "Test documentation":
| State | Meaning | Typical owner |
|---|---|---|
| New | Just reported. Not yet triaged. | Reporter |
| Open (or Acknowledged) | Triaged; confirmed as a real defect. | Triage lead |
| Assigned | A developer / team owns it. | Engineering manager |
| In Progress | Active investigation / fix. | Assigned developer |
| Fixed (or Resolved) | Code change merged; awaiting verification. | Assigned developer |
| Verified (or Tested) | A tester confirmed the fix. | QA |
| Closed | Defect lifecycle complete. | Release manager / QA |
| Reopened | Verification failed; back to assigned. | QA / Reporter |
| Deferred | Real defect, fix postponed (next release / never). | Product manager |
| Rejected (or Not a Bug) | Triage concluded this isn't a defect (misuse, by design, dup). | Triage lead |
| Duplicate | Already tracked as another defect. Link to canonical. | Triage lead |
Cite: ISO/IEC/IEEE 29119-3:2021 §6 "Test documentation - Anomaly report" - section enumerates the recommended fields and lifecycle states. Cite by stable ID; full text behind iso.org paywall.
State transition diagram
+-----+
| New |
+-----+
|
triage | (or reject / dup)
v
+-----------+ +-----------+
| Open |------>| Rejected |
+-----------+ +-----------+
| ^
| |
assign |
v |
+-----------+ |
| Assigned | |
+-----------+ |
| |
v |
+-----------+ defer +-----------+
|In Progress|-------->| Deferred |
+-----------+ +-----------+
|
v
+-----------+
| Fixed |
+-----------+
|
verify
|
+------- fail ----+
| |
v v
+-----------+ +-----------+
| Verified | | Reopened |
+-----------+ +-----------+
| |
v assigned (back to In Progress)
+-----------+
| Closed |
+-----------+Allowed transitions (defensible):
| From | Allowed → |
|---|---|
| New | Open, Rejected, Duplicate |
| Open | Assigned, Deferred, Rejected |
| Assigned | In Progress, Deferred, Reopened |
| In Progress | Fixed, Deferred |
| Fixed | Verified, Reopened |
| Verified | Closed, Reopened (rare - late finding) |
| Reopened | Assigned, In Progress |
| Deferred | Open, Closed (wontfix) |
Forbidden transitions (smells):
Tracker-vocabulary map
The canonical lifecycle maps to platform-specific terminology across Jira, Linear, and GitHub Issues, with per-platform notes on how configurable each tracker's states are. See the full cross-platform table in tracker-vocabulary-map.md (opens in new window).
Recommended state-transition guardrails
Enforced by bug-tracker-workflow automation:
| Guardrail | Rule |
|---|---|
| Triage SLA | New → Open or Rejected within 1 business day |
| Verification gate | Fixed → Closed must pass via Verified |
| Reopen audit | Reopened transitions are tracked; >3 reopens on the same defect signals fix-quality issues |
| Deferred review | Deferred items reviewed at sprint planning; auto-expire to Closed (wontfix) after N sprints |
| Duplicate linking | Duplicate transitions require duplicate_of: link to canonical |
Worked example
A Jira ticket sits in In Review and a developer wants to drag it straight to Done.
Result: block the drag to Done, route the ticket to a QA verification step, and only allow Verified -> Closed once the fix is confirmed.
Anti-patterns
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| "Closed" used as "Done" without verification | Defect re-emerges in production | Require Verified → Closed transition |
| All defects start in "Assigned" with no triage | Triage data lost; metrics unreliable | New → Open → Assigned (triage step is informative) |
| Reopened defects re-counted as new in metrics | Inflates inflow / understates fix quality | Distinguish New vs Reopened in dashboards |
| Deferred = forgotten | Deferred items accumulate; technical debt | Deferred review at every sprint planning |
| Multiple "Open" subtypes ("In Triage", "Triaged", "Confirmed") | Workflow becomes opaque; reporters don't know which state means what | Collapse to fewer states; use fields for nuance |
| Direct New → Closed by triage | Lost signal - was it spam? duplicate? rejected? | Always transition through a meaningful state |
| Different teams use different workflows in the same tracker | Cross-team metrics impossible | Standardise to the canonical lifecycle above |
Limitations
References
Defect categorisation taxonomies
View source (opens in new window)Defect categorisation taxonomies
Reference companion to severity-vs-priority-reference. Catalogs the three load-bearing defect taxonomies:
Use to categorise defects consistently across a team, drive root-cause analysis, and inform process-improvement decisions ("where in the SDLC do we leak the most defects?"). The from-CI-failure workflow in bug-report-template (qa-bug-repro) populates these classification fields; its review checklist rejects unclassified defects.
IEEE 1044-2009 classification
IEEE 1044-2009 "Standard Classification for Software Anomalies" (cite by stable ID; statutory text behind ieee.org paywall) defines four classification dimensions per defect:
1. Anomaly class
What the anomaly broadly is.
| Class | Description |
|---|---|
| Defect | An imperfection in a work product. |
| Test failure | An anomaly observed during testing. |
| Customer failure | An anomaly observed by a customer. |
| Process anomaly | Process not followed correctly. |
| Document anomaly | Documentation defect. |
| Configuration anomaly | Configuration / environment issue. |
2. Anomaly type
Where in the lifecycle the defect originated.
| Type | Example |
|---|---|
| Requirements | Missing requirement; ambiguous requirement; conflicting requirements. |
| Design | Architectural flaw; incorrect algorithm choice. |
| Code (implementation) | Off-by-one; null-pointer; incorrect logic. |
| Interface | Wrong API contract; type mismatch between modules. |
| Data | Incorrect test data; production data corruption. |
| Tools | CI tool failure; environment misconfiguration. |
| Test specification | Wrong expected result in the test case. |
| User documentation | Help text describes wrong behaviour. |
3. Anomaly severity
Per the severity scale in the main severity-vs-priority-reference SKILL.
4. Cause classification
Root cause categories: timing, race condition, memory leak, boundary condition, calculation error, control flow, etc.
ISTQB CTAL-TA root-cause taxonomy
The ISTQB Advanced Test Analyst syllabus simplifies to six high-frequency categories used in retrospective root-cause analysis:
| Root cause | Definition | Example |
|---|---|---|
| Requirements | Missing, wrong, or ambiguous requirement. | "We never specified what happens when the cart is empty at checkout." |
| Design | Design choice that produces the defect. | "Architecture coupled UI to DB schema; schema change broke UI." |
| Implementation | Correct design, wrong code. | "Off-by-one in pagination logic." |
| Interface / integration | Modules disagree on contract. | "Auth service returns null for missing claim; UI expects empty string." |
| Test data / environment | Test passed against wrong fixture. | "Staging DB had stale schema; test reported false positive." |
| Build / configuration | Right code, wrong configuration. | "Feature flag default flipped in prod; test environment was correct." |
Per ISTQB Glossary (glossary.istqb.org (opens in new window)) entries "root cause" and "root cause analysis." The categories above appear in CTAL-TA syllabus §6 on defect management.
Orthogonal Defect Classification (ODC)
IBM Research's ODC framework (Chillarege et al. 1992) classifies each defect on eight orthogonal attributes so that the classification is reproducible across analysts and the resulting distribution is informative.
Opener attributes (recorded when defect is found)
| Attribute | Values |
|---|---|
| Activity | Where defect was found: Design Review, Code Inspection, Unit Test, Function Test, System Test, Acceptance Test. |
| Trigger | What made the defect surface: Design Conformance, Logic / Flow, Backward Compatibility, Concurrency, Boundary, Workload / Stress, Recovery, Test Coverage, Test Variation, Test Sequencing, Test Interaction. |
| Impact | How the customer experiences it: Installability, Integrity / Security, Performance, Maintenance, Documentation, Usability, Reliability, Capability, Accessibility, Standards, Migration. |
Closer attributes (recorded when defect is closed)
| Attribute | Values |
|---|---|
| Target | What was modified: Design, Code, Build / Package, Information Development (docs). |
| Defect Type | What kind of change: Function / Algorithm, Assignment / Initialization, Interface, Checking, Timing / Serialization, Build / Package / Merge, Documentation. |
| Qualifier | Why the defect existed: Missing, Incorrect, Extraneous. |
| Source | Where the defective code came from: In-house, Library / Reused, Outsourced, Ported. |
| Age | When introduced: New, Old, Rewritten, Refixed. |
ODC's strength: the distribution of values per attribute indicates where in the process the defect process leaks. A high "Function / Algorithm - Missing - Requirements activity" cluster says the requirements review process is broken.
Per IBM Research's published ODC materials and Chillarege's canonical paper "Orthogonal Defect Classification - A Concept for In-Process Measurements" (IEEE Trans. Software Engineering 1992).
Same defect under three taxonomies - worked example
Defect: Checkout silently drops the discount when the user applies two stackable promo codes in reverse order. Reproducible.
| Taxonomy | Classification |
|---|---|
| IEEE 1044-2009 | Class: Defect. Type: Code (implementation). Severity: High (S2). Cause: Control flow (incorrect ordering in promo-stacking loop). |
| ISTQB CTAL-TA | Implementation (correct design - stackable promos are supported - but the loop control-flow has the order-sensitivity bug). |
| ODC | Activity: Function Test. Trigger: Test Sequencing. Impact: Capability (feature doesn't work). Target: Code. Defect Type: Function / Algorithm. Qualifier: Incorrect. Source: In-house. Age: New. |
The three give different lenses: IEEE points at "control flow"; CTAL-TA points at "implementation"; ODC says "the function-test activity caught what code inspection missed, and the bug is a sequencing-triggered algorithm issue."
Process metrics enabled by classification
Once defects are classified, useful metrics emerge:
Anti-patterns
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Free-text "root cause" field | No aggregation possible | Use a controlled vocabulary - pick one of the three taxonomies + populate enums |
| Single-axis classification ("severity only") | Loses root-cause signal entirely | Add at least an IEEE 1044 Type field |
| Classifying after closure only | Detection-time data lost (ODC Opener attributes) | Classify at triage; refine at closure |
| ODC without training | Inter-analyst disagreement explodes; metrics noisy | Calibrate via training set (10 defects classified by 2 analysts; reconcile) |
| Custom taxonomy invented per team | Cross-team metrics impossible | Use IEEE 1044 or ODC as the floor |
| Classifying duplicates separately | Inflates counts; same root cause counted thrice | Resolve duplicates first; classify the canonical |
| Treating "Implementation" as the default | Hides design / requirements leakage | Require explicit classification; default = "unclassified" until reviewer assigns |
Limitations
References
Tracker-vocabulary map
View source (opens in new window)Tracker-vocabulary map
The canonical ISTQB / IEEE lifecycle maps to platform-specific terminology across Jira, Linear, and GitHub Issues.
| ISTQB / IEEE | Jira (default workflow) | Linear (default workflow) | GitHub Issues (default + Projects) |
|---|---|---|---|
| New | To Do | Backlog | Open + label triage |
| Open | In Triage (custom) | Todo | Open + label confirmed |
| Assigned | (Assignee set) | In Progress + assignee | Open + assignee |
| In Progress | In Progress | In Progress | Open + linked PR draft |
| Fixed | In Review | In Review | Open + linked PR ready |
| Verified | Done (pre-release) | Done | Closed (PR merged) - but often kept Open until verified |
| Closed | Done | Done | Closed |
| Reopened | Reopened | Reopened (custom) | Reopened |
| Deferred | Won't Do (deferred subtype) | Cancelled (with reason) | Closed not-planned |
| Rejected | Won't Do / Cannot Reproduce | Cancelled with reason | Closed not-planned + label not-a-bug |
| Duplicate | Resolved as Duplicate (link to canonical) | Cancelled with Duplicate of: link | Closed + comment Duplicate of #N |
Per the platform docs (Atlassian "Issue workflow", Linear "Workflow states", GitHub "Issue templates"):
Related skills
bug-tracker-workflow
Repairs defect bookkeeping that reports the wrong numbers - a weekly summary showing zero in the top severity band, a 'new defects this week' figure counting items already fixed, duplicates that were never merged, or one script moving issues across several boards whose workflows disagree. Files, transitions, dedupes, and searches bugs through one tracker-agnostic workflow across Jira, Linear, GitHub Issues, and Azure DevOps: authenticate, dedupe-search before creating, classify severity and priority, transition lifecycle states, and wire idempotent CI-driven filing from test failures. Jira Cloud REST API v3 is worked in full in the body (ADF descriptions, runtime transition lookup, JQL triage and duplicate queries, dry-run bulk transitions). Use when tracker data, defect metrics, or cross-board transitions are wrong or need automating.
confirmation-testing-workflow
Procedure for proving that a claimed defect fix actually reached the build under test and actually works. Covers the merge-base ancestry check that proves the running build contains the fix commit rather than trusting a version label, the priority order for choosing which reproduction to re-run, and the VERIFIED / NOT FIXED / BLOCKED verdict table whose governing rule is that any ambiguous, flaky, or unreproducible result resolves to BLOCKED and is never guessed. Scoped to ISTQB confirmation testing (does this specific fix work?), not regression testing (did the fix break something else?), and not triage or severity assignment. Use when a developer has marked a defect Fixed and someone must decide whether it moves to Verified or back to Reopened.