June 5, 2018

Why I am Terrible at Estimating

I'm working on developing a small web application for work. It's a pretty simple application. Essentially, it's a create, read, update, delete (CRUD) database webapp with a few different screens for different roles of people.

I've been working with sofware now (developing, consulting, and integrating) for over 20 years, and I am STILL bad at estimating the time it will take me to write web applications like this.

I've been reflecting on why I'm still so bad at estimating.

Btw, if you're interested, one of the most enlightening books I've ever read on this subject is the "Mythical Man Month" by Frederick P. Brooks Jr. I definitely recommend it to anyone with a job related to software.

Did you notice how I refered to the current web application that I'm building is "simple"?

If you asked any software developer, this web application is, indeed, "simple". There are a few screens written in html, javascript and css, and these screens communicate to a few tables in a database.

So, if this is such a simple project, then how is that it's so difficult for me to estimate how long it will take me?

I think a big part of my problem with estimating is confusing simple with easy. As we know, simple is definitely NOT the same as easy!

I have been doing web application development similar to this for a long time now. I have a deep understanding of how it all works.

As a result, since I know exactly how to do all the steps, I underestimate the amount of time it will take to actually sit down and do them.

All the tasks might be familiar and simple, but they still take time.

For example, I've been mowing lawns for 30 years. I think it's safe to say I've got it figured out! Yet, it still takes me 2 hours to mow the lawn no matter how familiar or comfortable or simple.

Also, when I'm asked to provide an estimate, I primarily focus on writing the code, and inevitably forget about all the other stuff that life throws at me.

In my fairy tale ideal world, I estimate like I have nothing else to do but code for 8 hours each day.

But in reality, my days are mixed with meetings, other projects, technical support, email, helping colleagues, errands, family, etc, etc.

Another problem is fear. I think, unfortunately, I have the misguided belief that unless I give a rediculously short estimate, people will view me as incompetent.

The fear of hearing "Really? You think it will really take that long?" causes me to underestimate to save face.

Here's a list for me to remember the next time I have to provide an estimate:

  1. Simple != Easy != Comfortable != Fast
  2. Even simple, familiar tasks often take a good amount of time to complete
  3. Remember to factor in all other distractions
  4. Be confident in my skills and lessons learned from experience
Tags: management software