Uncle Bob suggested a small software estimation exercise in a recent blog post, Why is Estimating So Hard?
My best-case, nominal, and worst-case estimates were x, 2x, and 4x, respectively. My actual time spent was 3.4x, and while the final code worked I wasn’t real happy with it.
I had never thought before about the distinction between how long it takes to do something and how long it takes to describe how to do something. Uncle Bob uses the example of tying shoes – takes a few seconds to do, but I’ve heard of college communication classes being centered around how to describe how to do it. Everyone failed that assignment.
The accounting world would have other similar examples. How long does it take to reconcile a checkbook, assuming no major discrepancies? Compare that with how long it would take to write a step-by-step procedure describing how to reconcile a checkbook — one that could be used by someone who didn’t have any familiarity with checkbooks.
In some ways, that’s what computer programming is: writing detailed, step-by-step procedures for a machine — and this machine has absolutely zero intelligence on its own — no problem solving skills, no deductive capabilities and no intuition.