Aim at an ideal that's beyond you, but don't aim at an ideal that's so magnificent that you get crushed by it.[1]

In the same way that self-improvement is better tackled incrementally [2], a large task should be approached carefully and methodically. Before you have quantified each aspect and determined what should be and what should not be, a new project is nothing but potential. Being the estimator means creating habitable order out of unmitigated chaos and this can be a very confronting prospect, especially to newer developers. It is for this reason that "accurate estimations" continues to be a good answer to the "what is your greatest weakness?" question and some people have condemned the estimation game entirely.

In the real world, the stakes of an error in estimation are quite high. By overestimating a project, the client may over-hire and over-spend to compensate, thus harming your reputation and credibility. By underestimating you risk either not meeting the deadline or having to cut corners unnecessarily. In the case of the latter, the business still sees a successful delivery, so you risk being constrained to similar estimations for similar sized projects because you managed to prove your estimate true by the skin of your teeth. This all assumes you're given an accurate specification to begin with, of course.

What if there was a way to skirt the inaccuracy issues inherent to spreadsheet estimations? What if there was a way you could make accurate estimations without having extremely dense experience making estimations? It just so happens that that exists today, and it’s called Guesstimate.io. Guesstimate was born in pursuit of a solution for these problems and addresses them by breaking away from traditional estimation methods. Even the best spreadsheet templates have hard limits on the level of detail you can go to. With Guesstimate you can approach a problem as if it's a fractal, where you can continue zooming in and finding distinct parts until you are at a comfortable level of granularity to estimate. With each task you are given the choice to either assign an estimate, or expand it and add sub-tasks. This is roughly the same concept of "divide and conquer" which inspired an algorithmic concept of the same name that breaks a problem into similar/more solvable problems and enables you to solve problems more reliably across the set of all problems.

A demonstration of a basic task tree in Guesstimate.io

Breaking tasks down like this has the added benefit of unlocking progressive discovery, meaning that as you break a task down into its constituent parts, you are likely to discover something you didn't consider at first glance [3] (which could be where under-estimation takes root, given that the un-estimated minutiae is likely to add up over the course of a large project). Take the search bar for example. The search bar has become so ubiquitous that pretty much every WordPress site has one, and there’s likely one incorporated into your browser URL bar, but it’s one of the most complicated and dense interactive elements (in particular, the lookup field style you would see on Facebook for example). Some of the many considerations include:

  • When I type, the letters should appear in the box
  • Should you have a button to clear letters
  • How many letters should be typed before a request is fired?
  • How long should you wait from the last input to fire a request?
  • What should the user see while the request is executing? (Probably a spinner)
  • What does a result look like?
  • What does it look like when there’s too many results to display at once?
  • What does it look like when there’s no results?
  • What does it look like when a server error occurs?

All of this requires crystal clear communication between your UI and the user, and this is not an exhaustive list by any means. It also doesn’t even address the server-side considerations (which you can see more about in this great post).

A case study

The Guesstimate project list

Let's say you're working on a content only website. An easy way to break up a simple website would be into the 3 major chunks: header, body, and footer.

Getting started with a flat task hierarchy
What you might find when drilling down into the header
The collapsed view with your estimates so far summed up

The result is a deep tree of accurate micro-estimations that get summed up for you. With enough discipline you can break your project into provably accurate blocks and confidently embark on the journey to ship it™.

References