December 9, 2025 / admin

Velocity” tells you last sprint’s weather when you need tomorrow’s forecast. We share the six leading indicators our Micro-GCC squads feed into SteadCAST to flag scope creep, burnout, tech-debt drift, and pipeline drag up to two sprints before they explode. Copy-paste JQL / SQL queries included, plus a Grafana dashboard JSON you can import in five minutes.

Velocity Is a Rear-View Mirror 

Velocity answers one question: “How many story-points did we ship?”
Great for history, useless for the future—because it can be high and unhealthy:

  • 40 SP velocity hides that half the backlog was defect re-work.
  • Surge of story completions could be burnout peaking.
  • New dependencies balloon build times, masked by “same” velocity.

Predictability demands forward-looking signals—leading indicators that move before deadlines slip.

The Six Indicators (Overview Table, ≈ 220 w)

#IndicatorWhy It Predicts FailureTarget
1Risk-High WIP %Too many high-risk stories → re-work spike≤ 25 % of sprint cards
2Time-to-First-Review (TTFR)Review wait ⟹ merge pile-up, QA squeeze< 2 h median
3Build Time DeltaCI drifting ⟹ less iteration, dev frustration≤ 10 % MoM increase
4SBOM Size DeltaGrowing dep tree → bigger attack surface, perf hit≤ 5 % per sprint
5Code Re-open RateStories re-opened in sprint ⟹ spec or quality gap< 2 re-opens/sprint
6Unplanned Work %Prod bugs & urgent asks hijack sprint≤ 10 % of capacity

SteadCAST ingests these via Jira API, GitHub Actions, and CI logs—alerting amber/red in Slack every Friday.

How to Capture Each Metric 

3.1 Risk-High WIP %

Process

  1. Add “risk-high” label during Plan-Left risk-matrix.
  2. Daily cron queries Jira:

JQL

CopyEdit

project = ABC AND sprint in openSprints() AND labels = risk-high

Formula = (# risk-high cards in sprint) ÷ (total cards).
SteadCAST threshold: amber at 25 %, red at 35 %.


3.2 Time-to-First-Review (TTFR)

GitHub GraphQL:

graphql

CopyEdit

{

  repository(name:”app”, owner:”org”) {

    pullRequests(last:20){

      edges{

        node{

          createdAt

          reviews(first:1){ edges{ node{ createdAt } } }

        }

      }

    }

  }

}

Compute median ∆ between PR create and first review.
Pulse every hour; ping #dev-ops if > 2 h.


3.3 Build Time Delta

CI logs upload to S3. Athena query compares week-over-week average:

sql

CopyEdit

WITH w1 AS (SELECT avg(duration) d FROM builds WHERE week = current_week-1),

     w2 AS (SELECT avg(duration) d FROM builds WHERE week = current_week)

SELECT (w2.d – w1.d)/w1.d AS delta

Amber at 10 %, red at 20 %.


3.4 SBOM Size Delta

CycloneDX JSON keyed by hash. Lambda compares component count versus last green build; pushes metric to CloudWatch.


3.5 Code Re-open Rate

Jira workflow places “Re-opened” status. Query last sprint:

JQL

CopyEdit

status CHANGED TO “Re-opened” DURING (startOfSprint(), endOfSprint())


3.6 Unplanned Work %

Tag hot-fixes & BAU as “unplanned.” Capacity = SP committed.
SteadCAST shows bar chart: planned vs. unplanned burndown.

Grafana Dashboard JSON (copy block, ≈ 90 w)

(Truncated for brevity—provide file download in resource center)

json

CopyEdit

{

 “panels”:[

  {“title”:”Risk High WIP %”,”type”:”gauge”,”targets”:[{“expr”:”risk_high_wip_percent”}]},

  {“title”:”TTFR Median (h)”,”type”:”timeseries”,”targets”:[{“expr”:”ttfr_seconds/3600″}]},

  {“title”:”Build Time Δ”,”type”:”stat”,”targets”:[{“expr”:”build_time_delta”}]}

 ]

}

Import → set Prometheus data-source → watch live metrics.

Real-World Case Study (Retail Client) 

Before indicators: sprint rollover 34 %, two hot-fix Fridays per month.
After 3 sprints:

MetricBaseline3 Sprints Later
Risk-High WIP %40 %18 %
TTFR5.3 h1.7 h
Build Time+18 % MoM–2 %
Hot-fixes2 / mo0

Velocity went down 5 % (fewer “easy points”), yet predictability soared—zero missed releases in next six months.

 Pitfalls & Pro Tips 

PitfallFix
Noisy alertsUse amber → Slack, red → PR block; silence during retro.
Label drift (“risk-high” missing)Jira automation: flag ≥ 8 SP stories as risk-high by default.
Developer gaming metricsMake dashboard public; add dev-voted metric of the month.
Over-focusing on one indicatorDashboard shows composite “Predictability Score” (weighted).

Adoption Roadmap 

SprintAdd Indicator
1TTFR & Build Time Δ
2Risk-High WIP % & Code Re-open
3SBOM Size Δ
4Unplanned Work % & composite score

Hold “Predictability Retro” month-end; kill one amber metric per retro.

Take-Home Checklist 

  1. Add risk-high labels & DoR.
  2. Query TTFR via GitHub GraphQL.
  3. Track build Δ using CI logs → Prometheus.
  4. Diff SBOM component counts.
  5. Surface metrics in Grafana & Slack.
  6. Retro monthly—focus on amber trend.