How every metric is calculated
Every number in this product comes from a documented, deterministic rule applied to your export. Nothing is generated by a language model, and nothing is estimated when the data cannot support it.
How VeloWise thinks
Each concept below is shown first, then explained. Every figure is example data; the rules are the ones the product applies to your export.
The normalized delivery modelExample delivery data - Not started
- Development
- Code review
- QA / testing
- Done
- Released
- Open
- To Do
- Backlog
- In Development
- In Progress
- PR Review
- Code Review
- Ready for QA
- In Test
- UAT
- Closed
- Resolved
- Production
- Deployed
Jira statuses (top) differ from team to team. Each maps to one delivery stage, so “work waiting for review” means the same thing everywhere.
Every team names its Jira statuses differently; mapping them to one delivery model is what makes stages comparable at all.
Guides that apply this: Engineering bottlenecks, Software delivery metrics, Engineering delivery intelligence
What carryover isExample delivery data Sprint 10 · at close
- Issue ADone
- Issue BQA / testing
- Issue CCode review
- Issue DDevelopment
Sprint 11 · starts with
- Issue BCarryoverwas in QA
- Issue CCarryoverwas in code review
- Issue DCarryoverwas in development
- Sprint 10 scope
- 20
- Completed
- 17
- Carryover
- 3
Carryover is the unfinished work a sprint hands to the next one — and where it was sitting matters more than how much there is.
Carryover rate = carried over ÷ sprint scope = 3 ÷ 20 = 15%
Guides that apply this: Sprint health, Sprint carryover, Reduce carryover, Jira sprint report, Why work carries over
One-time vs chronic carryoverExample delivery data One-time carryover — carried once, then finished
- Sprint 10
- Sprint 11
Chronic carryover — carried three sprints in a row
- Sprint 8
- Sprint 9
- Sprint 10
- Sprint 11
An issue that carries once is timing; an issue that carries sprint after sprint is a decision nobody has made.
Guides that apply this: WIP debt, Epic carryover
Status at sprint close vs current statusExample delivery data - Sprint 10 endsABC-123Code review
- Sprint 11 startsABC-123Carryover
- TodayABC-123Released
Historical carryover analysis
Why did Sprint 10 carry this over?
Status at sprint close = Code review
Current sprint analysis
Where is our inherited work now?
Current status = Released
Why work carried over depends on where it was when the sprint ended — not where it is today.
Guides that apply this: Engineering delivery intelligence
Original commitment vs final scopeExample delivery data - Sprint starts64 issues committed
- Day 3+5 added
- Day 7+8 added
- Day 10+5 added
- Sprint ends82 issues in scope
- Original commitment
- 64
- Final scope
- 82
- Scope growth
- +28%
58 completed looks like 71% of final scope. Against the plan the team made, and the 18 issues that arrived after it, the story is different.
Comparing completed work only with final scope hides what happened during the sprint — compare with the original commitment too.
Scope growth = (final scope − original commitment) ÷ original commitment = (82 − 64) ÷ 64 = +28%
Guides that apply this: Sprint health, Sprint scope creep, Jira sprint report, Epic scope creep
Where the unfinished work sitsExample delivery data Team A · 31 unfinished
Most unfinished work is still in active development.
Team B · 48 unfinished
Most unfinished work is already downstream, waiting on review or testing.
Carryover is not automatically an engineering capacity problem — where the unfinished work sits tells you which conversation to have.
Guides that apply this: Reduce carryover, Why sprints fail, Engineering bottlenecks, Why work carries over
Count vs ageExample delivery data Code review · Team A
29 issues — and 19 of them older than 5 days.
Code review · Team B
23 issues — nearly all fresh and moving.
How many issues sit in a stage says little; how long they have been there — against the team’s own history — says a lot.
Guides that apply this: Aging WIP
Commitment rising, throughput flatExample delivery data Sprint 20
60 → 56gap 4
Sprint 21
65 → 57gap 8
Sprint 22
72 → 58gap 14
Sprint 23
78 → 59gap 19
- Committed ↑ +18
- Completed → +3
When commitment keeps rising and demonstrated throughput does not, carryover follows — plan against what the team has actually completed.
Expected carryover ≈ commitment − demonstrated throughput = 78 − 58 (median of 56, 57, 58, 59) ≈ 20 issues
Guides that apply this: Why sprints fail, Capacity vs velocity, Commitment vs capacity, Engineering throughput
Engineering complete is not deliveredExample delivery data Business Profile epic
- Development complete
- 92%
- QA complete
- 68%
- Released
- 42%
Engineering completion ≠ production delivery. Development complete counts work past development; QA complete counts done and released; released counts only what reached production.
A Jira “% done” can say 92% while only 42% of the epic has reached customers — delivery has milestones after engineering.
Production release % = released issues ÷ in-scope epic issues (42%); engineering completion = (done + released) ÷ in-scope (68%)
Guides that apply this: Jira epic progress, Initiative progress, Jira epic reporting
From story to delivery-ready requirementExample delivery data Original story
“As a user, I can update my business.”
Gaps VeloWise flags
- Who can update it?
- Which fields?
- Validation?
- Permissions?
- Audit history?
- Concurrent changes?
- Error handling?
Delivery-ready requirement
- Actors
- Permissions
- Acceptance criteria
- Validation
- Edge cases
- Audit behaviour
- Test scenarios
Most requirement-driven delay is visible before development starts, as questions the story does not answer.
Guides that apply this: Requirements quality
Evidence labels
- Observed Read directly from the export (or the sprint dates you entered).
- Inferred Derived with a stated assumption that could be wrong — the assumption is always shown.
- Unavailable The export does not contain what is needed. The product explains which fields or history would be required.
What a Jira export can support
| You provide | What becomes available |
|---|---|
| Issues CSV (key, status, sprint, created, resolved, points) | Sprint composition, carryover in/out, completion, throughput, lead time, current-status snapshot, aging (partial) |
| + Sprint start/end dates | Scope added after start (lower bound), completion inside the sprint window, sprint state |
| + Change-history CSV (status, Sprint, Epic Link / Parent changes) | Exact scope added/removed, stage at close, time in stage, cycle time, historical bottlenecks, extended review, late QA arrival; epic scope over time and the epic burn-up |
The change-history file uses one row per field change: Issue Key, Field, From, To, Changed. It is the flattened form of Jira’s issue changelog (/rest/api/3/issue/{key}/changelog), which scripts and marketplace apps can export.
Metric definitions
| Metric | Definition | Needs | Notes |
|---|---|---|---|
| Original commitment | Issues in the sprint at start, excluding additions after the planning grace period (and including issues later removed) | Sprint field; sprint start date; Sprint history for exactness | Without sprint dates, additions cannot be separated and the whole sprint is treated as the commitment. |
| Scope added | Issues added more than the grace period after start | Sprint field history (exact) or Created date (lower bound) | A created-date count cannot see older issues pulled in mid-sprint, so it is labelled a lower bound. |
| Scope removed | Issues whose Sprint field lost the sprint while it ran | Sprint field history | Not visible in a CSV export: removed issues no longer list the sprint. |
| Scope growth | (added − removed) ÷ original commitment | As above | Net change, so swapping work out is credited. |
| Completed | Resolved within the sprint window (resolved ≤ sprint end, or ≤ as-of for the active sprint) | Resolved date or status history | Without dates: Done and not listed in a later sprint (Jira only moves unfinished issues) — inferred. |
| Completion of commitment | Completed original issues ÷ original commitment | As above | Measured against the original commitment so additions cannot inflate it. |
| Carried in | Issue lists an earlier sprint in its Sprint field | Multi-value Sprint field | Observed. |
| Carryover (carried out) | Unfinished at close of a closed sprint ÷ final scope | Sprint field + completion | Closed sprints only. |
| Carryover reason | Workflow stage at sprint close | Status history (observed); current status for the latest closed sprint (inferred) | Older sprints without history are "Unknown" — the current status says nothing about where an issue was weeks ago. |
| Throughput | Issues (and points) completed in the sprint window | Resolved date | Includes work added mid-sprint. |
| Cycle time | First entry into an active stage → first entry into Done | Status history | Without history, lead time (Created → Resolved) is shown and labelled as such. Percentiles use linear interpolation. |
| Time in stage | Sum of time in each stage, clipped to the sprint window for sprint views | Status history | Never estimated from a CSV alone. |
| Outliers | Cycle time above Q3 + 1.5 × IQR | At least 5 completed issues | Tukey fence. |
| Work item age | As-of − work start | Status history (exact), Status Category Changed (good), Created (proxy) | Buckets: 0–2, 3–5, 6–10, more than 10 days (whole days). |
| Unusually old | Age greater than the team’s 85th percentile of completed cycle (or lead) time on the same basis | Completed history | Compares like with like. |
| Bottleneck level | Higher of: queue share at close vs thresholds; median time in stage ÷ team baseline vs thresholds | Stage at close; status history for time | Fewer than the minimum sample → not classified. Development queue is not classified while a sprint is still running. |
| Carryover in (capacity) | Original-commitment issues that list an earlier sprint | Multi-value Sprint field | Shown separately from new commitment: work already in flight competes with new work. |
| New commitment | Original commitment − carryover in | As original commitment | Work intentionally committed at planning for this sprint. |
| Final scope | Original commitment + scope added − scope removed (= members at close) | As scope added / removed | Without Sprint history, removals are unknown and final scope is current membership. |
| Completion vs final scope | Completed ÷ final scope | As completed | Answers a different question from completion of the original commitment; both are shown. |
| Planned / unplanned work | Completed work present at sprint start (planned) or added after start + grace period (unplanned) | Sprint dates; Sprint history for exactness | Issue type plays no part — a planned bug is planned work. Without history, unplanned work is a minimum. |
| Historical throughput | Previous sprint; mean of last 3 and 6 closed sprints; median and P75 over the capacity lookback | ≥ 3 closed sprints for median / P75 | The median is the planning anchor because one unusual sprint barely moves it. |
| Existing WIP | Unfinished issues in the active sprint, plus carried-in issues already in the next planned sprint | Sprint field | Counted at full estimate: the export cannot show how much of a started issue remains. |
| Capacity pressure | (existing WIP + proposed new work − median throughput) ÷ median | ≥ 3 closed sprints | Below / near (±10%) / above / significantly above (≥ 25% and above P75). The numbers are always shown with the label. |
| Work category | Label mapping, else component, else status, else issue-type mapping, else Other | Issue type; labels and components optional | Feature, Bug, Testing, Review, Technical debt, Production support, Operational, Research, Other — editable per browser. |
| Effective demand | Planned new work + carryover in + work added after start − work removed (= final scope) | Sprint dates for added work | Compared with median throughput. Work added is a minimum without Sprint history. |
| Added / interrupt load | Work added after start ÷ (original commitment + work added) | Sprint dates; Sprint history for exactness | Called "Interrupt load" only when additions are exact and ≥ 70% of added work has a category; otherwise "Added work load". Split into emergency (highest priorities), bug, support & operational, planned scope addition and unknown. |
| Work mix | Work in each category ÷ all work handled (or completed) | Work category mapping | Handled = original commitment (including later-removed issues) + added. |
| Context load | Distinct categories (excluding Other) handled by the team, and optionally by each current assignee | Assignee for the per-engineer view | Per-engineer view is opt-in, shows shares only, alphabetically. Jira exports the current assignee only. |
| Work-mix complexity | How many of four indicators exceed their rule: team categories, added work, carried-in share, engineers at the per-engineer threshold | At least two indicators with data | 0–1 low, 2 moderate, 3+ high. A summary of observable signals, not time lost to switching. |
| Carryover situation | First matching rule: added within the late window → added bug / support / operational → stage at close | Sprint dates; status history for older sprints | Describes the situation an issue was in, not what caused the miss. |
| Carryover age & WIP debt | Consecutive sprints an issue has been in, ending with this one; WIP debt = carried work with age ≥ 2 ÷ all carried work | Multi-value Sprint field | A gap (back to backlog) restarts the count. Different from issue age (days since created). |
| Carryover patterns | Six fixed rules over the capacity lookback: overcommitment, interruptions, WIP accumulation, testing and review constraints, fragmentation | ≥ 3 closed sprints | Each shows its rule, its numbers and the sprints involved. Several can be true at once. |
| Excluded from scope | Issues whose status at the sprint cutoff (or now) is one the user chose to exclude | Your choice of statuses; status history for exact timing | Left out of every scope, completion, carryover, capacity and epic figure — never counted as done or as remaining. Listed and reported separately by status. Nothing is excluded by default. |
| Epic membership | Epic Link, else Parent (by key, Issue id or epic name); a sub-task takes its parent story’s epic | Epic Link or Parent column | Work with no reference is “No epic” — never guessed. Epics missing from the export are named from Parent summary. Initiatives come from the epic’s Parent / Parent Link / Initiative field. |
| Epic progress | Engineering-complete (Done, Ready for release or Released) ÷ current scope, in issues and in story points | Epic membership + status | Current state. Scope excludes sub-tasks (counted with their story) and issues in statuses you excluded from scope. Neither unit is treated as more accurate. |
| Epic stage columns | In-scope issues by current mapping: Not Started, In Development, Code Review, QA/Test, Done (Done or Ready for release), Released (mapped “Released (in production)”), Blocked, Other (clarification, unmapped) | Status → stage mapping (editable), including Released | Columns add up to Total issues. Each count opens exactly those issues. Excluded-from-scope issues and sub-tasks are not counted. |
| Engineering Completion % / Production Release % | (Done + Released) ÷ in-scope issues; Released ÷ in-scope issues | A status mapped to Released for the second | Done does not mean Released. Without a Released mapping, Production Release % is unknown (—), not 0%. |
| Epic scope & burn-up | At each sprint close: issues in the epic then (replayed from Epic Link / Parent history) and how many were done by then | Epic Link / Parent change history; sprint dates | Without history: “Historical epic scope data unavailable”. Only a labelled minimum is shown — issues created after a date. |
| Epic sprint work | The sprint’s capacity measures (committed, added, sprint work, completed, carried out) filtered to one epic | As Capacity & Commitment | Kept apart from epic progress everywhere. Past sprints use the epic at the sprint’s close when history exists, otherwise the current epic. |
| Investment allocation | Share of completed (or sprint) work by class: an epic’s class (strategic by default, editable), else the work category of unlinked work | Epic membership; work-category mapping | Team level only. Strategic work expands into epics and initiatives. |
| Epic attention signals | Eight fixed rules: scope growing, recurring carryover, high active WIP, work concentrated in testing or review, no recent delivery, recently started, near completion | Varies by rule | Neutral prompts with their rule and issues; never a score or ranking. |
| Relationship with carryover | Of sprints above the median of a measure, how many were also above the median carryover rate | ≥ 5 closed sprints | Descriptive only. No statistical test or causal claim is made. |
| Commitment range | Load (proposed + existing WIP + optional median growth) vs P25 / median / P75 / max of completed work | ≥ 3 closed sprints | Reported as "in N of M past sprints the team completed at least this much" — never as a probability. |
Thresholds
Classifications use these defaults, which you can change in Data & settings. Bottleneck rules compare a team with its own history, so the defaults control sensitivity rather than encode an industry benchmark.
| Threshold | Default | Meaning |
|---|---|---|
| Queue share — warn | 15% | Share of sprint scope still sitting in a stage at sprint close that is worth a look. |
| Queue share — high | 25% | Share of sprint scope in one stage at close that marks it as the constraint. |
| Time in stage — warn | 1.5× | Median time in a stage this sprint vs the median across all sprints. |
| Time in stage — high | 2× | Median time in a stage this sprint vs the median across all sprints. |
| Minimum sample | 3 | Signals based on fewer issues than this are shown as "insufficient data". |
| Extended review | 3 days | Review time within a sprint above this counts as extended review in forensics. |
| Extended QA | 4 days | QA time within a sprint above this counts as extended QA in forensics. |
| Late-sprint window | 2 days | Work reaching QA within this many days of sprint end is "late arrival". |
| Planning grace period | 24 hours | Issues added within this many hours of sprint start count as original commitment. |
| Aging alert | 10 days | Active work older than this is highlighted. |
| Capacity — near median | 10% | Proposed demand within this share of historical median throughput is "near historical median". |
| Capacity — significantly above | 25% | Demand at least this far above the median, and above P75, is "significantly above historical range". |
| Capacity lookback | 6 sprints | Closed sprints used for historical median and P75 throughput in capacity planning. |
| Context load — high (per engineer) | 3 categories | An engineer handling at least this many work categories in one sprint counts toward high context load. |
| Work-mix complexity — team | 5 categories | The team handling at least this many work categories in one sprint is one fragmentation indicator. |
| Added / interrupt load — high | 20% | Share of work handled that was added after sprint start, at or above which it counts as high. |
| Stale work | 3 days | Unfinished work not updated in Jira for at least this many days is stale (from the Updated date). |
| In progress too long | 4 days | Sprint progress flags work in development, review or QA for at least this many days. |
| Sprint ending soon | 3 days | A running sprint with this many days or fewer left and work still open is at risk. |
| Behind pace | 25% | A running sprint whose share of work complete trails its share of time elapsed by at least this much is at risk. |
| Current stage share — watch | 22% | Share of all active work sitting in one stage right now that is worth watching. |
| Current stage share — bottleneck | 35% | Share of all active work in one stage right now that marks it as the bottleneck. |
| Stale share — watch | 30% | Share of a stage’s current work that is stale, worth watching. |
| Stale share — bottleneck | 50% | Share of a stage’s current work that is stale, marking it as a bottleneck. |
Executive summary rules
The summary is a fixed set of rules over the calculated metrics: completion of commitment; scope change beyond ±10%; carryover vs the previous closed sprint (changes under 3 points are “steady”); the largest queue at close (at least the minimum sample); stage time vs the previous three sprints (a change of at least 25% and at least one day); throughput vs the recent median (±15%). Recommendations come from contributing factors present in at least 20% of unfinished issues, ranked by how many issues show them.