← Field notes
Estimation

Story points can’t forecast a date — and were never meant to

Velocity is a useful planning heuristic and a terrible crystal ball. If you are turning a story-point average into a delivery date, here is why it keeps betraying you — and what to denominate your forecast in instead.

KalMatrix·July 10, 2026·7 min read

Story points were invented to do one modest, useful thing: let a team compare the relative size of two pieces of work without arguing about hours. They were never designed to be multiplied, averaged, and projected into a calendar date you promise a customer. Yet that is exactly what most roadmaps do — take a velocity average, divide it into the backlog, and read off a date as if the number were a measurement rather than a shared guess. Then the date slips, everyone blames "bad estimation," and the team re-estimates harder next quarter. The problem is not the estimating. It is asking points to be something they are not.

Points measure size, and size drifts

The first crack is that estimates are most accurate when done by comparison and least accurate when done in isolation — and they only stabilize after a team has been together for several sprints. Even then, "stable" often just means the same degree of inaccuracy is applied consistently. Points are a snapshot of what the team understood at commitment. And what a team understands about a ticket almost always moves in one direction as reality arrives: upward. The 3 becomes a 5 mid-sprint when the edge cases surface. Nobody re-estimates down.

Estimates only churn one way under pressure — up. Which means committed points are denominated in hope, and until you convert hope to history, every forecast built on them inherits the bias.

Velocity quietly counts the same work twice

The second crack is carryover. When a ticket spills from one sprint to the next, naive velocity credits its points in both sprints it touched — so a team that recycles a fifth of its work every sprint looks roughly 20% faster than it is. Your roadmap consumes that inflated number and over-promises accordingly. The honest measure — "fresh velocity" — counts each ticket once, in the sprint it actually completes. It is almost always lower than the number on the velocity chart, and it is the only one you can safely plan a date around.

The commitment you measure isn’t the commitment you shipped

The third crack is the sneakiest, and it is baked into the tools. Jira computes "committed" as the total at the instant the sprint starts; scope added after that is not counted against the commitment, and scope quietly removed is not counted either. So the number you retrospect against is not the work the team actually carried — it is a frozen snapshot that drifted from reality the moment the sprint began. Any calibration you do against it is calibrating against fiction. You need a scope-change ledger that records what was added and removed after commitment, or your "estimate vs actual" is comparing the estimate to a different sprint.

What to denominate a forecast in instead

None of this means estimation is worthless — it means the forecast should be denominated in outcomes, not points. Three numbers do the real work, and a team can recompute all of them by hand from its own history:

  • Optimism factor — final estimate ÷ original estimate, over your closed work. If it is 1.15×, your points are 15% "hope points"; pad the roadmap by that, not by folklore.
  • Fresh throughput — each ticket counted once, on final completion, so recycled carryover stops inflating the plan.
  • Cycle time, in business days — how long work actually takes from start to shipped, so a date rests on measured flow instead of a size proxy.
The point of calibration is not to shame the estimators. It is to convert a team’s honest, human optimism into a correction factor you can defend to a steering committee — instead of discovering it, again, at the retro.

A story-point average will always be a comforting single number, and single numbers are exactly what a probabilistic future refuses to be. If you want a date you can actually stand behind, stop asking points to predict it. Measure the drift, count the throughput honestly, and forecast in a range with a probability attached — the approach in "Monte Carlo vs velocity." KalMatrix computes each team’s optimism factor, fresh velocity, and cycle time automatically from the Jira and Git history you already have, and shows you exactly which numbers to trust and which to caveat.

Curious about your own numbers? The free estimate optimism-factor calculator and honest velocity calculator give you both in about a minute — no signup, nothing leaves your browser.
Stop reading about it. Read your own brief.

The demo is a fully-populated workspace — real sprints, real forecasts, the same daily diagnosis this post describes. No signup, nothing to configure.

← Back to the blog

Keep reading

All field notes
Delivery truth

Your Jira board is lying to you

Every “Done” column hides a question the board can’t answer: is there merged code behind it? The gap between board-done and code-done is where slipping sprints quietly wait — until demo day makes them loud.

Read the note
Forecasting

Why late work hurts more: the S-curve nobody plans for

Sprint work does not finish in a straight line — it finishes on an S-curve. That single fact is why a late epic hurts far more than its point count suggests, and why naive burndown lies to you at exactly the wrong moment.

Read the note
Product

From dashboards to decisions

A dashboard reports the past and leaves the thinking to you. A chief-of-staff brief does the thinking and hands you a decision. Here is why one clear call a day beats ten charts that make you feel informed.

Read the note
Delivery

Why your sprints keep slipping — and the four causes hiding in your data

Roughly four in five agile teams roll work over every sprint. It is almost never a capacity problem. It is four specific, findable causes — and they are already sitting in your Jira and Git history.

Read the note
Leadership

How a CTO can actually know if the team will hit the deadline

Most status turns red overnight in week eleven — after the recovery options have expired. Here is how to get a defensible read on a deadline early enough to change the outcome, without micromanaging a single engineer.

Read the note
Delivery truth

Watermelon status: how to catch a project that’s green outside, red inside

Watermelon reporting is the most expensive lie in delivery because it is comfortable. Here is how green-on-the-outside, red-on-the-inside status forms, and how to catch it with evidence instead of accusation.

Read the note
Forecasting

Monte Carlo vs velocity: how to forecast a delivery date you can defend

A single-date forecast from a velocity average is a promise you will almost certainly break. A probabilistic forecast gives you a range and the odds. Here is the difference — and why leaders trust the range.

Read the note
Leadership

Engineering metrics that matter — without surveilling your developers

The metrics that predict delivery and the metrics that destroy trust are not the same list. Here is how to measure the system without measuring the people — and why the distinction is the whole game.

Read the note