Percentile over Average/Mean
The average comes from mathematics. The mean comes from statistics. It doesn’t matter in the context of this post. What matters is… percentile comes from usefulness.
When analysing or displaying the data in the dashboard, we often use Average.
Imagine cycle times of 10 user stories:
Story_1 = 3 hours
Story_2 = 4 hours
Story_3 = 5 hours
Story_4 = 5 hours
Story_5 = 6 hours
Story_6 = 7 hours
Story_7 = 7 hours
Story_8 = 10 hours
Story_9 = 75 hours
Story_10 = 80 hours
Average
Average = (3+4+5+5+6+7+7+10+75+80) / 10 = 20.2
The conclusion might be that the average time it takes to get something done after we start working on it is 20.2 hours.
But maybe Story_9 and Story_10 had external dependencies that forced us to wait. And it is more like an exception, not a standard?
That’s better to move forward than to start optimising the (20.2 hours) number.
Percentiles
Let’s try to use percentiles.
The Percentile function works in a way:
It sorts the dataset.
It splits the whole dataset in a place set by a param of the percentile.
So if a dataset has 10 items and we look for the 50th percentile, we split that after the 5th element.
And we get a value between the 5th and 6th elements.
In fact, the 50th Percentile is a median.
Examples based on our dataset above:
50th percentile (median, between Story_5 and Story_6) = 6.5 hours
70th percentile (between Story_6 and Story_7) = 7.9 hours
90th percentile (between Story_9 and Story_10) = 75.5 hours
How do we read that?
Cycle time of 50% of the stories is less than or equal to 6.5 hours.
Cycle time of 70% of the stories is less than or equal to 7.9 hours.
Cycle time of 90% of the stories is less than or equal to 75.5 hours.
With that data, making more accurate decisions with the team is easier.