Story points do not measure time. They measure uncertainty, complexity and relative risk. If the team uses them as “disguised hours”, they miss the point.
Guided practical case
History: “Add retry policy to notification service.”
Evaluation by axes:
- Technical complexity: medium
- Domain uncertainty: low
- Integration risk: high
Compared to the team’s reference stories, it ends at 8 points (not by hours, due to relative risk).
##Simple framework
Evaluate each story on 3 axes:
- technical complexity,
- domain uncertainty,
- integration risk.
Then assign relative point comparing with reference stories.
Anti-pattern
“This assignment is 3 points because it is 6 hours.”
That destroys real speed learning and ends up biasing planning.
Recommended practice
- review estimates at the end of the sprint,
- capture causes of deviation,
- adjust base references.
Simple TypeScript helper for workshops
type StoryScore = {
complexity: 1 | 2 | 3;
uncertainty: 1 | 2 | 3;
integrationRisk: 1 | 2 | 3;
};
function suggestPoints(score: StoryScore): number {
const total = score.complexity + score.uncertainty + score.integrationRisk;
if (total <= 3) return 1;
if (total <= 5) return 3;
if (total <= 7) return 5;
if (total <= 8) return 8;
return 13;
}
It does not replace team judgment, but it helps align discussions.
Happy reading! ☕
Comments