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.

  1. The normalized delivery modelExample delivery data
    1. Not started
    2. Development
    3. Code review
    4. QA / testing
    5. Done
    6. Released
    • Open
    • To Do
    • Backlog
    Not started
    • In Development
    • In Progress
    Development
    • PR Review
    • Code Review
    Code review
    • Ready for QA
    • In Test
    • UAT
    QA / testing
    • Closed
    • Resolved
    Done
    • Production
    • Deployed
    Released

    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.

  2. 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%

  3. One-time vs chronic carryoverExample delivery data

    One-time carryover — carried once, then finished

    1. Sprint 10
    2. Sprint 11

    Chronic carryover — carried three sprints in a row

    1. Sprint 8
    2. Sprint 9
    3. Sprint 10
    4. Sprint 11

    An issue that carries once is timing; an issue that carries sprint after sprint is a decision nobody has made.

  4. Status at sprint close vs current statusExample delivery data
    1. Sprint 10 endsABC-123Code review
    2. Sprint 11 startsABC-123Carryover
    3. 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.

  5. Original commitment vs final scopeExample delivery data
    1. Sprint starts64 issues committed
    2. Day 3+5 added
    3. Day 7+8 added
    4. Day 10+5 added
    5. 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%

  6. Where the unfinished work sitsExample delivery data

    Team A · 31 unfinished

    Development24
    Code review4
    QA / testing3

    Most unfinished work is still in active development.

    Team B · 48 unfinished

    Development8
    Code review19
    QA / testing21

    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.

  7. Count vs ageExample delivery data

    Code review · Team A

    0–2 days6
    3–5 days4
    6–10 days8
    10+ days11

    29 issues — and 19 of them older than 5 days.

    Code review · Team B

    0–2 days18
    3–5 days4
    6–10 days1
    10+ days0

    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.

  8. 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

  9. 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%)

  10. 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.

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 provideWhat 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 datesScope 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

MetricDefinitionNeedsNotes
Original commitmentIssues 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 exactnessWithout sprint dates, additions cannot be separated and the whole sprint is treated as the commitment.
Scope addedIssues added more than the grace period after startSprint 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 removedIssues whose Sprint field lost the sprint while it ranSprint field historyNot visible in a CSV export: removed issues no longer list the sprint.
Scope growth(added − removed) ÷ original commitmentAs aboveNet change, so swapping work out is credited.
CompletedResolved within the sprint window (resolved ≤ sprint end, or ≤ as-of for the active sprint)Resolved date or status historyWithout dates: Done and not listed in a later sprint (Jira only moves unfinished issues) — inferred.
Completion of commitmentCompleted original issues ÷ original commitmentAs aboveMeasured against the original commitment so additions cannot inflate it.
Carried inIssue lists an earlier sprint in its Sprint fieldMulti-value Sprint fieldObserved.
Carryover (carried out)Unfinished at close of a closed sprint ÷ final scopeSprint field + completionClosed sprints only.
Carryover reasonWorkflow stage at sprint closeStatus 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.
ThroughputIssues (and points) completed in the sprint windowResolved dateIncludes work added mid-sprint.
Cycle timeFirst entry into an active stage → first entry into DoneStatus historyWithout history, lead time (Created → Resolved) is shown and labelled as such. Percentiles use linear interpolation.
Time in stageSum of time in each stage, clipped to the sprint window for sprint viewsStatus historyNever estimated from a CSV alone.
OutliersCycle time above Q3 + 1.5 × IQRAt least 5 completed issuesTukey fence.
Work item ageAs-of − work startStatus history (exact), Status Category Changed (good), Created (proxy)Buckets: 0–2, 3–5, 6–10, more than 10 days (whole days).
Unusually oldAge greater than the team’s 85th percentile of completed cycle (or lead) time on the same basisCompleted historyCompares like with like.
Bottleneck levelHigher of: queue share at close vs thresholds; median time in stage ÷ team baseline vs thresholdsStage at close; status history for timeFewer 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 sprintMulti-value Sprint fieldShown separately from new commitment: work already in flight competes with new work.
New commitmentOriginal commitment − carryover inAs original commitmentWork intentionally committed at planning for this sprint.
Final scopeOriginal commitment + scope added − scope removed (= members at close)As scope added / removedWithout Sprint history, removals are unknown and final scope is current membership.
Completion vs final scopeCompleted ÷ final scopeAs completedAnswers a different question from completion of the original commitment; both are shown.
Planned / unplanned workCompleted work present at sprint start (planned) or added after start + grace period (unplanned)Sprint dates; Sprint history for exactnessIssue type plays no part — a planned bug is planned work. Without history, unplanned work is a minimum.
Historical throughputPrevious sprint; mean of last 3 and 6 closed sprints; median and P75 over the capacity lookback≥ 3 closed sprints for median / P75The median is the planning anchor because one unusual sprint barely moves it.
Existing WIPUnfinished issues in the active sprint, plus carried-in issues already in the next planned sprintSprint fieldCounted 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 sprintsBelow / near (±10%) / above / significantly above (≥ 25% and above P75). The numbers are always shown with the label.
Work categoryLabel mapping, else component, else status, else issue-type mapping, else OtherIssue type; labels and components optionalFeature, Bug, Testing, Review, Technical debt, Production support, Operational, Research, Other — editable per browser.
Effective demandPlanned new work + carryover in + work added after start − work removed (= final scope)Sprint dates for added workCompared with median throughput. Work added is a minimum without Sprint history.
Added / interrupt loadWork added after start ÷ (original commitment + work added)Sprint dates; Sprint history for exactnessCalled "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 mixWork in each category ÷ all work handled (or completed)Work category mappingHandled = original commitment (including later-removed issues) + added.
Context loadDistinct categories (excluding Other) handled by the team, and optionally by each current assigneeAssignee for the per-engineer viewPer-engineer view is opt-in, shows shares only, alphabetically. Jira exports the current assignee only.
Work-mix complexityHow many of four indicators exceed their rule: team categories, added work, carried-in share, engineers at the per-engineer thresholdAt least two indicators with data0–1 low, 2 moderate, 3+ high. A summary of observable signals, not time lost to switching.
Carryover situationFirst matching rule: added within the late window → added bug / support / operational → stage at closeSprint dates; status history for older sprintsDescribes the situation an issue was in, not what caused the miss.
Carryover age & WIP debtConsecutive sprints an issue has been in, ending with this one; WIP debt = carried work with age ≥ 2 ÷ all carried workMulti-value Sprint fieldA gap (back to backlog) restarts the count. Different from issue age (days since created).
Carryover patternsSix fixed rules over the capacity lookback: overcommitment, interruptions, WIP accumulation, testing and review constraints, fragmentation≥ 3 closed sprintsEach shows its rule, its numbers and the sprints involved. Several can be true at once.
Excluded from scopeIssues whose status at the sprint cutoff (or now) is one the user chose to excludeYour choice of statuses; status history for exact timingLeft 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 membershipEpic Link, else Parent (by key, Issue id or epic name); a sub-task takes its parent story’s epicEpic Link or Parent columnWork 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 progressEngineering-complete (Done, Ready for release or Released) ÷ current scope, in issues and in story pointsEpic membership + statusCurrent 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 columnsIn-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 ReleasedColumns 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 issuesA status mapped to Released for the secondDone does not mean Released. Without a Released mapping, Production Release % is unknown (—), not 0%.
Epic scope & burn-upAt each sprint close: issues in the epic then (replayed from Epic Link / Parent history) and how many were done by thenEpic Link / Parent change history; sprint datesWithout history: “Historical epic scope data unavailable”. Only a labelled minimum is shown — issues created after a date.
Epic sprint workThe sprint’s capacity measures (committed, added, sprint work, completed, carried out) filtered to one epicAs Capacity & CommitmentKept apart from epic progress everywhere. Past sprints use the epic at the sprint’s close when history exists, otherwise the current epic.
Investment allocationShare of completed (or sprint) work by class: an epic’s class (strategic by default, editable), else the work category of unlinked workEpic membership; work-category mappingTeam level only. Strategic work expands into epics and initiatives.
Epic attention signalsEight fixed rules: scope growing, recurring carryover, high active WIP, work concentrated in testing or review, no recent delivery, recently started, near completionVaries by ruleNeutral prompts with their rule and issues; never a score or ranking.
Relationship with carryoverOf sprints above the median of a measure, how many were also above the median carryover rate≥ 5 closed sprintsDescriptive only. No statistical test or causal claim is made.
Commitment rangeLoad (proposed + existing WIP + optional median growth) vs P25 / median / P75 / max of completed work≥ 3 closed sprintsReported 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.

ThresholdDefaultMeaning
Queue share — warn15%Share of sprint scope still sitting in a stage at sprint close that is worth a look.
Queue share — high25%Share of sprint scope in one stage at close that marks it as the constraint.
Time in stage — warn1.5×Median time in a stage this sprint vs the median across all sprints.
Time in stage — high2×Median time in a stage this sprint vs the median across all sprints.
Minimum sample3Signals based on fewer issues than this are shown as "insufficient data".
Extended review3 daysReview time within a sprint above this counts as extended review in forensics.
Extended QA4 daysQA time within a sprint above this counts as extended QA in forensics.
Late-sprint window2 daysWork reaching QA within this many days of sprint end is "late arrival".
Planning grace period24 hoursIssues added within this many hours of sprint start count as original commitment.
Aging alert10 daysActive work older than this is highlighted.
Capacity — near median10%Proposed demand within this share of historical median throughput is "near historical median".
Capacity — significantly above25%Demand at least this far above the median, and above P75, is "significantly above historical range".
Capacity lookback6 sprintsClosed sprints used for historical median and P75 throughput in capacity planning.
Context load — high (per engineer)3 categoriesAn engineer handling at least this many work categories in one sprint counts toward high context load.
Work-mix complexity — team5 categoriesThe team handling at least this many work categories in one sprint is one fragmentation indicator.
Added / interrupt load — high20%Share of work handled that was added after sprint start, at or above which it counts as high.
Stale work3 daysUnfinished work not updated in Jira for at least this many days is stale (from the Updated date).
In progress too long4 daysSprint progress flags work in development, review or QA for at least this many days.
Sprint ending soon3 daysA running sprint with this many days or fewer left and work still open is at risk.
Behind pace25%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 — watch22%Share of all active work sitting in one stage right now that is worth watching.
Current stage share — bottleneck35%Share of all active work in one stage right now that marks it as the bottleneck.
Stale share — watch30%Share of a stage’s current work that is stale, worth watching.
Stale share — bottleneck50%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.