Line up the most difficult things in software development and estimating will be near the top. Yea I know, cache invalidation and naming things. But even if you’re good at estimating, you would have to admit that learning how to estimate well was a long hard road of mistakes and horribly inaccurate estimates.

When we start out estimating, we are typically asked by someone how long some task will take. Our first reaction is to think in hours. Something along the lines of this should take me about two hours. Of course that is extremely optimistic, and assumes all external factors line up perfectly. They never do, and we fail to complete the task in our estimated time.

After doing this for possibly years, we start to think in points because we heard another developer talk about how their team uses points. Or maybe you read an article about estimating in an agile format.

The problem still exists. When someone looks at the points, they ask how long will this take?. That puts points to hours and we are back to the beginning. A slightly better version of how many hours will this take.

I’ve been through both systems. I think most developers have. I didn’t get good at estimating until I started to think about effort in days. Rather than estimate in points, I started to estimate in relative sizes. I had a fellow developer mention estimating effort in terms of small, medium, large, and extra large and I ran with it.

That combined with estimates in days has been the best system I have found for figuring out how long a project is going to take. It breaks down like this.

Small = Half day
Medium = Full day
Large = A couple of days
XL = Close to a week

It’s not a perfect system. Each size is designed to double the previous, but XL isn’t exactly double the large estimate. Overall, it seems to work well for me.

The important thing to grasp onto here is that nothing is less than a half day. Naturally some things go faster than I expect. But this works itself out with the things that take longer than I expect. This system has a way of balancing itself. The key takeaway is effort.

Looking at a list of requirements becomes easier to estimate when you start think how large the tasks is and how many days it will take you to complete.