Skip to main content

Reporting · Integration

Team KPI dashboard from the Jira API

Answering 'what did the team get done this week?' with data instead of words

RoleIT Business Analyst

Documents from this case: KPI definitions, API request
automated data source
Jira API
Jira issues on the tracked board
1,333
client-reported bugs ticketed the same day (sprint 29)
100%
committed work completed (sprint 33)
84%

Client names are withheld; examples and data are simulated. The process, methods and result figures are real.

The problem

The client asked about progress every week. Compiling it by hand from Jira took time and was easy to get wrong because statuses were miscounted. Internally it was also hard to see who was overloaded and which bugs had been open the longest.

Before the dashboard
  1. Client asks about progressevery week
  2. Compiled by hand from Jiraslow, statuses easy to miscount
  3. Figures nobody trusts

Context and role

  • I created 624 of the 1,333 issues on the project board, the most on the team.
  • The client did not want to have to open Jira to know the progress.
  • My role: agreeing the KPI definitions, pulling the data through the API, building the dashboard and writing reports for the client and management.
  • Constraints: the API key is read-only; no personal information is exposed outside the team.

Step 1: Agree the KPI definitions before pulling data

If a KPI is vague, the dashboard is meaningless. Each KPI needs a question it answers, a formula and a data source.

KPI definitionsEach indicator answers exactly one question
Question it answersFormula
Sprint completionHow much of what was committed got done this sprint?Points done divided by points committed
ThroughputHow many tickets are finished each week?Number of tickets moved to Done in the week
Cycle timeHow long does a ticket take from start to finish?Median time from In Progress to Done
BlockedIs anything stuck?Tickets flagged as blocked for more than one day
Bug ageHow many days has the oldest bug been open?Today minus created date, for open bugs
Bug rateHow many bugs per completed story?New bugs divided by completed stories
Outstanding client feedbackIs any feedback still unhandled?Tickets labelled client feedback that are not Done
Workload per personWho is holding how much work?Open tickets by assignee

Step 2: Pulling data through the Jira REST API

API requestSearch tickets with their change history
GET /rest/api/3/search
  jql     = project = PRJ AND updated >= -14d
  fields  = summary, status, issuetype, assignee, created, labels, story points
  expand  = changelog
How the data flows
  1. Jiracall page after page until all tickets are retrieved
  2. Change historywhen a ticket entered In Progress and Done
  3. Compute KPIsusing the agreed formulas
  4. Anonymiseassignees become Dev A, Dev B
  5. Dashboard and weekly report
One ticket in the change historyCycle time comes from the history, not the closed date
  1. Created
  2. In Progressclock starts
  3. Donedragged across, no closed date
  4. cycle time

Step 3: Dashboard and weekly report

A one-page dashboard: a row of KPIs at the top, charts in the middle, detail tables at the bottom. The weekly report is written from the same data.

LayoutOne-page dashboard
Row 1
Sprint completion
Weekly throughput
Cycle time
Blocked
Row 2
Throughput by week
Bug age by day bucket
Row 3
Blocked ticketswith reasons
Unhandled client feedback
Workload per person

Step 4: Using the dashboard to make decisions

In client meetingsSignal on the dashboard, decision that follows
Decision
Bug age concentrated in one moduleSet time aside to clear bugs before taking on new stories
Workload piling up on one personRedistribute during sprint planning
Outstanding client feedback rising steadilyAdd a fixed weekly slot to triage feedback

Step 5: A bug register for the client

The client needed a place to follow bugs without opening Jira. I built a pipeline that pushes bugs from Jira into a Google Sheet with a dashboard and a column tracking recurring bugs, together with an operating SOP.

Bug register
  1. Bugs in Jira
  2. Data export and dashboardruns automatically
  3. Write into tabs the client edits by handruns only with confirmation

Results

Sprint reports with figures that can be checked:

Items past development, sprint 2974.1%43 of 58 items
Client-reported bugs ticketed the same day, sprint 29100%
Committed work completed, sprint 3384%
  • The team’s progress and KPIs are reported to the client through a dashboard that takes its data directly from Jira.
  • Every KPI has a definition and a formula agreed by the client and management.
  • The weekly report no longer depends on compiling figures by hand.

What I learned

  • Agree the KPI definitions with the client before pulling data. Otherwise you end up with a good-looking dashboard that nobody trusts.
  • In Jira, the status change history is the most reliable data source.
  • Putting problems at the top of the report is the fastest way to earn the client’s trust.
  • Jira API
  • REST API
  • KPI
  • Dashboard
  • Sprint report

Want to talk about this case?

Contact