When asking software engineers for an estimate of the time required to build
something, I often find them guessing the time taken instead of doing the work
to *estimate* it. Yes, estimates come with their own caveats but, like
planning, if you don’t estimate well, you may not have an idea of what you’re
actually dealing with.

Here is something that I did with my kid yesterday that illustrates the difference between estimation and guessing.

We had a family event last evening at which my kids picked up a couple of helium filled balloons and brought them home. As they were playing with it, I told my older son that if he got enough number of balloons, they can carry him up. As kids go, he added another pair of balloons and wondered why they weren’t carrying him.

So we *had* to find out how many balloons it would take to lift his entire
weight. It wasn’t enough to say “thousands of balloons”. That would be
*guessing*. It could be 1000 or it could be 1000000. How do we then *estimate*
how many balloons it would take to lift my son.

Estimation is about making use of what you already know reasonably well in order to calculate something that you didn’t know about before.

What did we know in this case? My son weighs about 25kg. If we knew how much weight each balloon could lift, then we can divide his weight by the weight each balloon could lift and get an idea of the number of balloons needed.

How do we measure the weight each balloon can lift? For sure, it is a small number. I don’t have small known weights just lying around the house waiting to be used in such a quest … maybe I should, but that’s beside the point.

What known small weight did I have? One of my notebooks has 80gsm paper. That’s 80 grams per square metre. That’s something we could use.

I tore up a sheet of this paper and tied it to a pair of balloons (they were already paired up). The balloons sank. So we knew that without the paper, the balloons rise and with the sheet, the balloons sink. So the weight they carry must be smaller than the weight of the sheet of paper, which is much smaller than any of our own body weights.

So we snipped away at the paper until the balloons and the paper balanced each other precisely. This was fun in itself - both the snipping process, and just the end result of a balloon just hovering in mid air - neither rising up nor falling down. The kids were amused by just that much. We could’ve done this mentally, but it is much more fun to actually do it … and with kids.

We then measured with a ruler the area of the paper that the balloon’s pull balanced exactly. This turned out to be 159.6 sqcm - which we took to be 160 sqcm approximately.

The paper therefore weighed 80 x 160 / 100000 grams = 1.28 grams. Well, that’s
its *mass*, but we ignore the conceptual difference between mass and weight.
I’m dealing with kids here. Awesome, we’re almost there. So each balloon (we
had a pair, remember) could lift 0.64 grams of weight.

How many balloons would it take to lift 25000 grams? To calculate this
mentally, I approximated my son’s weight to 25.6kgs, to get 25600 / 0.64
balloons = 40000 balloons. It’s worth overestimating his weight a bit to ensure
that he’ll *definitely* be lifted by the number of balloons we’re estimating
it’ll take … not that I’m actually going to buy that many balloons any time
soon.

“This is great.”, I thought. “Now my son has an idea of how many balloons to buy in order to float away from his dad who’d talk fractions to him at 9pm instead of reading him a story.”

## Back to estimating vs guessing

Estimating is a creative act. While it may be possible to guess fairly accurately after long experience in an area, the effort to estimate well goes a long way to build understanding of a space. If you do provide an estimate, it would then demonstrate how well you understand the task at hand.

While “thousands of balloons” turned out to not be a bad guess, it is imprecise
and the answer wouldn’t have varied much had the balloon been a different one.
The estimate, on the other hand, is relatively precise in stating “about 40000
of *these particular* balloons inside *this particular* house”.

Also, when a guesser is asked why they came up with the number, no explanation can be offered. With estimates, it is possible to critically probe further to gain some insight into the problem at hand. For example, we can now ask “if we replaced helium with hydrogen and the same balloons were filled to the same volume, would it require different number of balloons?”

## Some characteristics of estimates

**Model**: In order to estimate anything, you need to have a model that
captures your understanding of the system whose property you’re estimating. In
the case of the balloons, we had to have a minimal grasp of how balloons are
lighter than air and we could treat the helium-balloon vs paper like a see-saw
balance to determine the “upward weight” of the balloon. Not a complicated
model, but a model nonetheless.

**Precision**: is a characteristic of a good estimate. By precision, I’m not
referring to number of decimal places you give in your final number, though
that is one aspect, but in the factors that you’ve accounted for in your
calculation. This precision is a consequence of having a model. It may be so
that many of your model’s parameters are redundant in the estimate, but the
point is that that redundancy is made explicit. For example, in this balloon
case, the *acceleration due to gravity* is a model parameter that is redundant.
The estimation process should always yield a *precision* value that indicates
how well we can pin point the value. In our case, it could be stated as “40000
balloons give or take about 2000” because that’s the precision with which I
knew my son’s weight, which was a parameter in the model.

**Measurement**: Given a model, usually there is some unknown about the
current circumstance that needs to be found out before the model can be
used to calculate the number(s) we need to know. So typically estimates
entail measurement of some unknown. The measurement could serve to either
find out something we didn’t know earlier, or to improve the precision
of some already known thing given the context. We may also be able to use
measurements that were already made by others.

**Prediction**: A good estimate exposes the model in a way that can be used
to answer other questions. For example, in the balloon case, we could now
ask how many balloons would it take to lift me, or how much space would it
take to house all these balloons. The result can then be plugged into other
models. In doing so, however, we need to be aware of how we’re propagating
errors in the process.

**Balance of errors**: While estimating, it is good to show some care towards
the balance of errors. Sometimes, overestimation is desirable to
underestimation, and sometimes the other way around. Sometimes errors cancel
out to give a surprisingly accurate result (in hindsight) … but we should’nt
rely on that happening and truly understand the errors that might be involved.

## Fermi problems

The physicist Enrico Fermi was such a master of the art of estimation that the problem of estimating in a “back of the envelope calculation” kind of way is called a Fermi problem.

In our case, had we assumed that the balloon will hold up the entire sheet of paper, we could’ve come up with an answer that is at the right order of magnitude, perhaps in the 20000 balloons range. However, in this case, we’re not generally good with estimating small-in-our-experience numbers as well as large-in-our-experience numbers. Both “microgram” and “kiloton” would take some imagination before we can relate to them. So it is a good habit to realize this deficiency, shut up and measure .. when we can. However, even a 50% error is not bad as it is in the right order of magnitude which suffices for many purposes. Also, we know all the parameters invoved in our model the other aspects listed above continue to apply. If you need more precision in the result, you know where to go and improve the precision.

## So …

The next time you’re asked for an *estimate*, do not *guess*.