Estimation Is a Core Competency

A few uncomfortable truths, and keys for success, for people who build software.

Illustration by Stephen Carlson
  • The more projects you will work on that run over time and budget, and not by just a little bit.
  • The more pressure you’ll feel to ship on time.
  • The more pain you’ll feel watching deadlines whiz by unmet.
  • The more complex or vague tasks you will be asked to estimate.
  • The better you’ll want to get at giving estimates and expressing how certain you are about them.

The Mistake Many Engineers Make

Uncomfortable Truths

  • information your PM and business leaders need to plan a project and prioritize features.
  • an informed guesstimate.
  • an opportunity to prove you’re a 10x engineer.
  • a commitment to complete the task.

I’ve always been far too optimistic in my estimates, and it can put a lot of stress into your life, especially when you are a young programmer without the experience and self-confidence to tell bosses uncomfortable truths.

Stack Overflow user RB

xkcd on estimating projects

1. Make It Smaller

T-shirt sizing tickets, Postlight style.

2. Narrow the Cone of Uncertainty

“Software organizations routinely sabotage their own projects by making commitments too early in the Cone of Uncertainty. If you commit at Initial Concept or Product Definition time, you will have a factor of 2x to 4x error in your estimates.”

— Steve McConnell, Software Estimation: Demystifying the Black Art

3. Err on the Side of Overestimating

Watch Out For “Just”

  • “That’ll just take a few minutes”
  • “Just write a script”
  • “Just cache it”
  • “Just create a batch process”

That Will Take Longer Than You Think

  • Dates are hard: Dealing with time zones, leap years, recurring events (“third Friday of the month”, “twice monthly on the 15th and 30th”) almost always involve edge cases you don’t realize till you’re waist-deep in missed deadlines.
  • Internationalization: Translation support across alphabets with various directionality, localization, character encoding, and geo-IP targeting introduce complexity across the stack, from the server architecture to the wireframes.
  • Syncing: Keeping multiple copies of a changing dataset up-to-date— whether that’s providing offline support on the client, or setting up server-side caching — and propagating those changes quickly and smartly so no source is out of date is non-trivial.
  • Third-party libraries or APIs: There’s always the risk of an unexpected gotcha, performance problem, or security vulnerability with a third-party service or tool.
  • Sending mass email: Spam filters are highly-evolved and basically sentient at this point. This is why businesses like Mailchimp and Sendgrid exist.
  • DevOps: Mature cloud services and tooling make it really easy to say, “We’ll just spin this up on AWS.” (Just!) But despite incredible tools and services, devops can easily take more effort than you think (which is why managed hosting services are also a thriving business).

4. Back It Up with Research

  • A time-boxed spike: If you’re not sure a particular library or tool or technical implementation will work, set a timer for 30 or 60 minutes and throw together a quick-and-dirty prototype. Code the simplest and smallest thing possible to see if you’re on the right track, if things work the way you think they will.
  • Talk to other engineers: If anyone on your team or in your network has built something similar or has experience in an area you don’t, ask for their thoughts, or what they learned in their work. You’ll be surprised at how productive a quick chat with another engineer can shed light on things you hadn’t thought of.
  • Rubber-duck it: Just as rubber-ducking can help with debugging, try explaining the thought process behind your estimate to another engineer. “I think it will take 3 months. Here’s my breakdown” can increase the accuracy of your estimate and spread good practices around building rationale behind estimates within your team.

--

--

Technology, culture, representation, and self-improvement. Once upon a time I started Lifehacker.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gina Trapani

Technology, culture, representation, and self-improvement. Once upon a time I started Lifehacker.