I hate software estimation.

We have to plan. I get that. But we usually need an estimate before we know much about the work, and “I don’t know yet” rarely gets us very far.

Then the number gets sent up the rungs, loses every caveat attached to it, and comes back down as a date. The engineers curse themselves for not padding it by 50% more.

Someone always says estimates aren’t commitments. Everyone nods. A roadmap gets built around the estimate anyway and, through some organizational alchemy I don’t fully understand, it becomes a commitment.

“Somewhere between a month and several months… depends what we find” looks bad in the cell. We all know estimation is inexact, but I’m not convinced any of us actually behaves as though it is.


Donald Rumsfeld (please keep reading) was unfortunately onto something with the known knowns, known unknowns, and unknown unknowns. Even a broken clock is right twice a day.

At the start, you know roughly what the project should do. You know some of the questions too. Discovery answers a few of them and introduces you to several others you hadn’t thought to ask. Very considerate of it.

If complete knowledge were required before estimating, we could provide beautifully accurate estimates immediately after finishing the work.

Which brings me, somehow, to the coastline of Britain.


How long is the coast of Britain?

It sounds like a boring question with a boring answer. But it’s nuanced! Somebody measured it. Then several other people measured it. AND THEY GOT DIFFERENT NUMBERS.

Lewis Fry Richardson found the same problem while studying whether shared borders made countries more likely to fight. Spain reported that its border with Portugal was 987 kilometers. Portugal said the same border was 1,214 kilometers.

Richardson’s work appeared posthumously in 1961 as The Problem of Contiguity. Benoit Mandelbrot later interpreted it in terms of fractional dimension in his 1967 paper, How Long Is the Coast of Britain?. Classic Mandelbrot.

Imagine walking a divider along a map of a coastline. Take long strides and you step past bays and inlets. The measurement comes out fairly short. Make the stride smaller and the divider follows some of the bays it skipped. Smaller again and it catches smaller bends, rocks, and whatever else the map can resolve. The measured coast gets longer.

If you keep going, eventually you run into tides, grains of sand, and atoms. There isn’t one useful answer at every possible scale. The length means very little unless you know how it was measured.

Here’s the same idea with a ruler you can drag:

Drag the ruler toward fine and watch the measured length grow.

Most projects start with a long ruler. “Add an export button” is one stride. It sounds simple enough.

Then the ruler gets shorter. Export which records? Can everyone see the same fields? What happens when the file is too big for the request to finish? Does it need to reflect the data when the user clicked the button or when the export finally runs? The button itself may be the easiest part.

Leave the uncertainty out of the estimate and it still shows up later, usually with interest and during a status meeting.

This doesn’t make every early estimate secretly good. Some estimates are lazy. Some are politically convenient. Sometimes an engineer hears a date hidden inside the question and reverse-engineers an answer that won’t make the meeting uncomfortable.


Richardson also noticed that coastlines don’t all react the same way when the ruler shrinks. A fairly smooth one settles down. A jagged one keeps revealing more bends, so its measured length grows much faster.

Three of the borders Richardson measured, drawn at one scale from modern outlines (Natural Earth) and walked with the same divider. Shorten the ruler and Britain nearly triples, while South Africa barely moves.

Some work stays roughly the same size as you inspect it. A small change in a familiar system, with settled requirements and no new dependencies, might actually be as boring as it looks.

Other work gets bigger fast: a new integration, a whole new product, or some COBOL undergirding our entire financial system (or so I’ve heard). The same feature can be easy to estimate for the team that built the platform and much harder for a team still learning how it works. How long the coast is depends a lot on who’s holding the ruler.

Eventually, a project stops. A coastline doesn’t. Once the work is over, we know how long that version took. We still don’t know how long it had to take.


That leaves an awkward question. If looking closer keeps revealing more work, when do we stop looking? One discovery ticket produces several more. The board gets very organized. The thing still doesn’t exist.

“Understand the project” is a lot to ask of a ticket. I’d rather know what decision we’re trying to make. Can this approach handle the expected volume? Do we need a different data model? Give the investigation a budget and a point to decide what comes next. Reaching Friday doesn’t mean we know enough. It means we have to decide whether another week is worth spending.

More questions can still be progress. Ruling out an approach that would have failed is useful. But finding something doesn’t automatically make it part of the project. Is it necessary for the outcome we’re promising? Can it wait? Somebody has to choose, or the scope grows every time anyone learns anything.

Some questions need an answer before we build. Others are cheaper to answer by building a small piece. We need enough confidence to take a next step whose consequences we can tolerate if we’re wrong. We can budget that step even if the whole project is still hard to estimate. If we can’t find one, perhaps the work needs narrowing or the approach needs changing.

And whoever asks a team to proceed with unanswered questions has to let the answers change the plan. Tell people to get started, then hold them to a date that assumes no surprises, and you’ve given them a pretty good reason to keep discovering things until retirement.


Refusing to estimate is generally unwise. Somebody else will make the guess, and now you have an estimate you don’t believe and no say in it.

So give the estimate. Just send the ruler up with it: how closely you’ve looked, and what’s most likely to make it grow. Decide what is worth looking at next. When the work grows anyway, reopen the date, the approach, or the scope instead of quietly eating the difference.