Lead and Cycle Time

Purpose

Lead time clock starts when a a feature is "ordered" (i.e. a ticket is created) and ends at delivery of a result (i.e. feature released to production). Cycle time clock starts when the work begins (e.g. implementation) - and ends in the same way as Lead time does. Cycle time is a more mechanical measure of process capability. Lead time is what the customer sees.

Lead time depends on cycle time, but also depends on your willingness to keep a backlog, the customer’s patience, and the customer’s readiness for delivery.

How metric helps

Lead and Cycle Time are most useful if a project has restrictions for fulfilling requests within a certain time.

Cycle Time values should be as close as possible to Lead Time values to ensure time spent in a most effective way with no waste on delays throughout the value chain. Lead Time might be a KPI (Key Performance Indicator) to confirm a development cycle duration.

Questions it answers:

  • whether there are any process issues to trigger a deep investigation

  • whether changes in the process and/or team are needed

  • whether planning is mature enough

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

  • how a team handles requests

  • how long does it take to complete a request (probability)

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

  • how fast a team is identifying/removing roadblocks

  • how stable the flow is and where you need to improve

How metric works

Chart overview

Trend view

Lead and Cycle Time is measured in hours. A chart shows an average value for lead and cycle time by:

  • Week

  • Month

  • Quarter

So that the axis X shows calendar week dates; month names; and quarter order numbers correspondingly. By click on series a drill down opens which shows lead an cycle time for every issue included in the chart.

Average view

Lead and Cycle Time is measured in days. A chart shows the following statistics for lead and cycle time:

  • average value

  • maximum value

  • minimum value

  • median

  • average flow efficiency - ratio between average lead time and cycle time (the closer it to 100% the better)

The values can be seen for the following time intervals:

  • Last 7 days

  • Last 30 days

  • Last 90 days

  • Custom time interval

The statistics is available by issue types used in a project.

TOP-5 problems metric identifies 

  1. Testing starts late on time

  2. Not ready for development backlog is taken into work

  3. Poor dependencies execution

  4. Uncontrolled scope volatility

  5. Uncommitted Tasks sneaking into Scope during execution

Calculation 

Average Lead Time

For a single issue:

Lead time = T done - T created, where

  • T done - moment in time the ticket is put into a status belonging to "Done" bucket. 

  • T created - moment in time when the ticket is created.

For all issues:

Average Lead Time = Σ Lead Time / N, where

  • Lead Time - time for a single issue at the date;

  • N - number of issues transferred to Done bucket at the date.

Average Cycle Time

For a single issue:

Cycle time = T done - T progress, where

  • T done - moment in time the ticket is put into a status belonging to "Done" bucket.

  • T progress - moment in time the ticket is put in a status belonging to "In progress" bucket.

For all issues:

Average Cycle Time = Σ Cycle Time/N, where

  • Cycle Time - time for a single issue at the date;

  • N - number of issues transferred to Done bucket at the date.

Maximum, minimum and median values are calculated according to common mathematical formulas.

The metric summarizes all periods when an item is in progress. If any item was re-opened (no matter how many times) - the all occurrences of a respective status is taken into the consideration.

It is useful to know how Lead/Cycle Time is connected with other time usage metrics:

PerfQL

with
month as (
select
generate_series (date_trunc(''month'', now()) - interval ''11 month'', -- Change the number of month if needed
date_trunc(''month'', now()), ''1 month'') as month -- it will be displayed ''N'' previous months + current e.g. 5+1 = 6 month
)

select
to_char(m.month, ''yyyy Mon'') as "Month",
round(avg(t.cycle_time::numeric/1440),0) as "Cycle time",
round(avg(t.lead_time::numeric/1440),0) as "Lead time"
from month m
left join ticket t
on date_trunc(''month'', t.done_date) = m.month
group by m.month

Data Source

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