Throughput

Purpose

Throughput shows a quantity of tasks a team delivers over time.  

How metric helps

First of all, this metric shows how productive a team is, how much they deliver [e.g. per week or month] in general. This gives an understanding of overall delivery capability of a team. 

Additionally, throughput can help prevent team overload by comparing a work put into a pipeline vs. finite team velocity - it's always better to know upfront about a risk of delays, risk of a team burnout.

Questions it answers:

  • what is team's capacity 

  • how a team handles requests

  • how many tasks a team can complete within a certain time period

  • how much work the team can take on/commit to

  • how fast a team is identifying/removing roadblocks

  • whether planning is mature enough

  • when we can complete backlog items having information on the team's lead time

How metric works

Chart overview

Series of "Created" and "Resolved" work on the chart are represented in natural amount of work items (e.g. support tickets or regular tasks), i.e. no any effort or sizing is taken into consideration here. A chart shows a number of created tasks in comparison to a number of resolved tasks by:

  • Week

  • Month

  • Quarter

So that the axis X shows calendar week dates; month names; and quarter order numbers correspondingly. By click on any column - a drill down will show appropriate list of created or resolved items respectively. 

TOP-5 problems metric identifies 

  1. Not ready for development backlog is taken into work

  2. Poor dependencies execution

  3. Uncontrolled scope volatility 

  4. Low productivity due to reduced agility 

  5. Testing starts late on time

Calculation 

Created items value: a number of items which were created within a selected period.

Resolved items value: a number of items moved to "Done" bucket (per Workflows in Project Configuration) over the same time range.

RAG thresholds: n/a.

PerfQL

WITH timeline AS ( SELECT generate_series( date_trunc('week', now()) - interval '12 weeks', date_trunc('week', now()), '1 week' ) as weeks ), created AS ( SELECT date_trunc('week', created) as created_date, count(*) as "Created Items" FROM ticket WHERE case when is_include_sub_items() then true else parent_task is null end GROUP BY created_date ), resolved AS ( SELECT date_trunc('week', done_date) as resolved_date, count(*) as "Resolved Items" FROM ticket WHERE case when is_include_sub_items() then true else parent_task is null end GROUP BY resolved_date ) SELECT to_char(t.weeks, 'DD Mon') || '-' || to_char(t.weeks + interval '6 days', 'DD Mon, yyyy') as "Week", coalesce(c."Created Items", 0) as "Created Items", coalesce(r."Resolved Items",0) as "Resolved Items", t.weeks FROM timeline t LEFT JOIN created c ON c.created_date = t.weeks LEFT JOIN resolved r ON r.resolved_date = t.weeks ORDER BY t.weeks asc;

-------DRILL DOWN--------

select case when url is not null then '['||key||']('||url||')' else key end as "Issue Id", type as "Type", priority as "Priority", summary as "Summary" from ticket where to_char(date_trunc('week',created), 'DD Mon') ||'-'|| to_char(date_trunc('week',created) + interval '6 days', 'DD Mon, yyyy') = clicked_x_value and case when is_include_sub_items() then true else parent_task is null end;
WITH timeline AS ( SELECT generate_series( date_trunc('month', now()) - interval '11 month', date_trunc('month', now()), '1 month' ) as months ), created AS ( SELECT date_trunc('month', created) as created_date, count(*) as "Created Items" FROM ticket WHERE case when is_include_sub_items() then true else parent_task is null end GROUP BY created_date ), resolved AS ( SELECT date_trunc('month', done_date) as resolved_date, count(*) as "Resolved Items" FROM ticket WHERE case when is_include_sub_items() then true else parent_task is null end GROUP BY resolved_date ) SELECT to_char(t.months, 'YYYY Mon') as "Month", coalesce(c."Created Items", 0) as "Created Items", coalesce(r."Resolved Items",0) as "Resolved Items", t.months FROM timeline t LEFT JOIN created c ON c.created_date = t.months LEFT JOIN resolved r ON r.resolved_date = t.months ORDER BY t.months asc;

-------DRILL DOWN--------

-------DRILL DOWN--------

If any item was re-opened (no matter how many times) - the last occurrence of a respective status is taken into the consideration.

By default sub-issues are not included into the calculation. To include them, check the checkbox on Project Settings>Data Sources>Task Tracking system>Workflows>Include sub items into metrics calculation.

Data Source

Data for the metric can be collected from a task tracking system (Jira, TFS/VSTS, Rally, etc.)