Mathematical Limits to Software Estimation (2013)
scribblethink.org
scribblethink.org
And while that's true, it's not a very useful result. There is a large subset of programs that are easy to estimate. If someone says, "write 20 standard CRUD services," most people can accurately estimate how long that will take. There is nothing tricky there. If someone says, "write a program to solve Goldbach's conjecture," then it is true, you can't estimate how long that will take (maybe someone can, I don't know how).
In practice, for the kinds of tasks programmers usually do, experience shows that 90% of the time we can estimate correctly.
Most teams fail because management uses estimates as a way to get underlings to work harder. When that happens, estimates will never be accurate.
It is still usually necessary to at least try to estimate as well as we can. And the higher level the task, the more the "detailed crap" averages out. But it is still not easy. And delivering software on time is usually as much about changing the spec as it is about doing the coding.
For example: we launched into an embedded project and were ticking along nicely, and suddenly discovered that we actually had to program a whole extra device, which we had thought came with all built-in firmware.
I think that the way a software engineering estimation problem feels is that you begin with N component that will combine to create the cost. You add or multiply the components together to get your estimate. It seems reasonable. Then suddenly one of those components turns out to contribute ten times as much to the cost and your estimate is doubly shot, shot in terms of time and shot in terms of what you will be spending your time on. These two parts things together tend to make bosses and customers unhappy.
It would be nice if one had mathematical insight into such process. Unfortunately, I'm not sure how much big-O-type analyses give us, since they're worst case scenarios. By the halting problem, we know there's no general way to determine if a given program we start is going to crash. Yet we produce mostly bug-free programs, at least sometimes.
For large scale software projects management and governance are often the determining factors for quality, cost and timeliness.