There’s a great quote that floats around the development community, attributed to Phil Karlton (a former Netscape developer): “There are only two hard things in Computer Science: cache invalidation and naming things.”
I would contend that “estimating tasks” belongs on the list.
It is logical and expected that business people will want to know when their project will be finished. That doesn’t change the fact that it’s darn near impossible to provide.
I recently read two articles via Medium that pertained to estimates and deadlines for software projects.
I’ve been reading statements like this for years, but in spite of my acceptance of its truthfulness (based on personal experience!), it still feels awkward when I have to tell it to a client.
I loved how it was summed up in the other of the aforementioned articles:
The problem with “When will you be done?” is that it assumes software development is something like manufacturing — a predictable set of steps that each take a known set of time. You design some code, you write some code, you test some code, you deploy some code, and you’re done.
Unfortunately, software development is not a set of predictable steps. It is a tangled web of possible paths, with branches, loops, dead ends, and even steps you don’t know are necessary until you hit them. This is why software development is more akin to the process of scientific discovery or invention as opposed to manufacturing. How long will it take to discover the Theory of Everything? Maybe next year, maybe never, who knows? Like scientific discovery, software development is unpredictable, messy, impediment-prone, full of unforeseen issues, sidetracks, dead ends, and bad ideas that seemed like they would work at the time.The Worst Question You Can Ask a Software Developer | by Blake Norrish | May, 2021 | Better Programming
We understand how important it is for business owners to be able to plan. Software development is one of the most difficult things that humans do, however, and almost every project is different in some way.
But hey, it’s not exactly brain surgery, is it?!
No, it’s not… it might actually be more difficult! But hey, it’s not exactly rocket science. (Mostly because people don’t die if we have a bug in our website code.)
Modern software development requires reliance on dozens or even hundreds of libraries of other people’s code and APIs. We not only need to know how to code in multiple languages, but we also need to understand the nuances of many other modules and services. It becomes increasingly more complex as the underlying technologies rapidly continue to advance.
At Webinology, we provide estimates with padding, and we almost always come in under the projected hours. We do this because quicker and within budget is always better than later and over budget.
Nevertheless, there’s no “science” that helps any of us with estimating software development. Experience helps a lot, but the fact is, there are always unknowns.
We understand the importance of being able to plan, and that’s why we do our best to provide reasonably accurate estimates. But it’s still kind of a shot in the dark, even for those of us who have had decades of experience.