Estou convencido de que a quantidade de trabalho rotineiro no desenvolvimento de software é - e deve ser - relativamente pequena, se não desprezível, e que esse é o problema fundamental da estimativa de software.
Deixe-me descrever como chego a essa conclusão e me diga se a argumentação tem alguma falha séria:
Tudo o que pode ser estimado com alta precisão é um trabalho de rotina, ou seja, coisas que foram feitas antes. Todos os outros tipos de trabalho que envolvem pesquisa e criatividade não podem realmente ser estimados, pelo menos não com uma precisão de, digamos, +/- 20%.
O desenvolvimento de software visa evitar tarefas repetitivas. Um de seus princípios básicos é SECO (não se repita). Sempre que um programador se vê fazendo coisas repetitivas, é hora de encontrar uma abstração que evita essa repetição. Essas abstrações podem ser coisas simples, como extrair o código repetido em uma função ou colocá-lo em um loop. Eles também podem ser mais complexos, como criar um idioma específico do domínio. De qualquer forma, implementá-las envolverá pesquisa (alguém já fez isso antes?) Ou criatividade.
Destes dois pontos, chego à conclusão acima.
Na verdade, eu me pergunto há bastante tempo por que esse relacionamento não é mencionado em todas as outras discussões, post de blog ou artigo sobre estimativa de software. Isso é teórico demais? Minhas suposições estão erradas? Ou é muito trivial - mas então, por que a maioria dos desenvolvedores que conheço acredita que pode fazer estimativas com uma precisão de +/- 20% ou melhor?