Forecast vs Estimation - A clarification

Is there a difference between estimating and forecasting? I think there is.

After my previous article on forecasting there was a discussion about whether I used these terms properly. I was referred to Wikipedia for „forecasting“ with the comment „Every forecast is an estimate“:

Forecasting is the process of making predictions of the future based on past and present data and most commonly by analysis of trends. A commonplace example might be estimation of some variable of interest at some specified future date. Prediction is a similar, but more general term.

And I was pointed to this article which is very strict about the use of the term „estimate“:

An Estimate is a value inferred for a population of values based on data collected from a sample of data from that population. […] Estimates can be about the past, present, or future. […] In the project domain, an estimate is a calculated approximation of some desired measurement.

Forecasts speculate future values for a population of possible values with a level of confidence, based on the current and past values as an expectation (prediction) of what will happen.

Finally the Wikipedia entry for „estimation“:

Estimation (or estimating) is the process of finding an estimate, or approximation, which is a value that is usable for some purpose even if input data may be incomplete, uncertain, or unstable. The value is nonetheless usable because it is derived from the best information available.

What can I say? That’s heavyweight authorities.

Does that mean, though, I used the terms in a wrong way? Have I fallen into some „#noestimates trap“?

Let me answer by clarifying what I meant to say. My intention was/is not to oppose any long standing formal definitions of the terms used in certain industries. Rather I’m trying to make my thoughts or an approach digestable for as many developers as possible by using terms in a way how I think they are understood commonly.

Maybe that’s just a good intention, but does not work? You decide. But let me explain at least:

Prediction

When confronted with the question „How long will it take?“ a prediction is requested. „Prediction“ is defined by Merriam-Webster as:

a statement about […] the future

This also matches what Wikipedia is saying about forecasting:

[which] is the process of making predictions […]

I hope we all can agree about that much.

Developers are asked to make statements about the future - which is notoriously uncertain regardless which method you use to predict it. Use a glass ball or use your gut feeling or use some fancy calculation or simulation… In the end the future might look quite different from your prediction.

Since there are different approaches to predicting the future it seems useful to distinguish them with different terms.

Estimation

The term „estimation“ when used in software development refers to a prediction. At least very often and especially in the context of the #noestimates movement.

Developers don’t feel burdened much when asked „What do you think, how many requests per second will this server be able to handle?“ They’d answer with a guess, an estimate, and a discussion might ensue, but usually no stress.

On the other hand developers hate it when asked „What do you think, when will those user stories be done?“ This question immediately causes stress. And any estimate given will also cause stress later.

It’s the second question my previous article revolved around. The kind of answer usually given to that question is what I’m calling an estimate. It’s a prediction, but a very special one.

  • It’s a prediction based on a gut feeling.
  • It’s a prediction delivered as a single number, e.g. a date or a number of days or some abstract value (e.g. story points).
  • It’s a prediction which does not communicate any probability of its occurrence.

A prediction with these kind of attributes I’m calling an estimation in the context of the question „When will it be done?“

The term „estimation“ means much more in general. But I’m just concerned with a special case here.

I’m using the term along what Merriam-Webster defines:

a judgment or opinion about something

„Judgement“ as well as „opinion“ refer to subjective statements. And that’s what software estimations are, I think, when someone says „That’s 15 story points“ or „That will take 5 days to finish“.

Subjective statements defy explanation and reasoning. The estimate given is like it is; better not ask „Why?“

Forecast

Forecasts also are predictions. But they are completely different in my view.

Have you ever watched a „weather estimation“ on TV? I doubt it. But you’ve watched a „weather forecast“. This alone should make it obvious that there is a big difference between the terms „estimation“ and „forecast“.

Let me repeat what „Herding Cats“ says:

Forecasts speculate future values […] based on […] current and past values

The definitions of forecasting all refer to „past and present data“ in some way. Forecasting by definition thus is about observations and facts.

A weather service does not predict how a storm will evolve by translating gut feelings into a single number. Instead it will feed objective data into a model to arrive at a set of possible futures with different probabilities.

That’s what I’m referring to in the context of the question „How long will it take?“

To answer the question with a forecast means:

  • To make a prediction based on historical data.
  • To deliver a prediction as a range of values.
  • To communicate probabilities of those values as part of the prediction.

In short: a forecast is not a single number, but a distribution calculated from observations of pertinent events.

A forecast in thus is objective (even though it might be far off in the end). You are encouraged to ask „Why?“

Summary

Different meanings expressed by different terms based on an understanding commonly found among the target group of my article. I hope that is reasonable, and neither ignorant nor naive nor counter-productive.

But if anyone objects I’d be most happy to learn more appropriate terms for the two sets of attributes I described.