I am convinced that the amount of routine work in software development is - and should be - relatively small, if not negligible, and that this is the fundamental problem of software estimation.
Let me describe how I come to this conclusion and tell me if the argumentation has any serious flaws:
All that can be estimated with high accuracy is routine work, meaning things that have been done before. All other kinds of work involving research and creativity cannot really be estimated, at least not with an accuracy of, let's say, +/- 20 percent.
Software development is all about avoiding repetitive tasks. One of its basic principles is DRY (don't repeat yourself). Whenever a programmer finds himself doing repetitive stuff, it's time to find an abstraction that avoids this repetition. These abstractions can be simple things like extracting the repeated code into a function or putting it in a loop. They can also be more complex like creating a domain specific language. In any case, implementing them will involve research (has anyone done this before?) or creativity.
From these two points I draw the above conclusion.
Actually I have been wondering for quite a while why this relationship is not mentioned in every other discussion, blog post or article about software estimation. Is it too theoretical? Are my assumptions wrong? Or is it too trivial - but then, why do most developers I know believe that they can do estimates with an accuracy of +/- 20 percent or better?