Você está aqui

Quão difícil pode ser isso?

Por bastante tempo eu pensei que os erros de estimativa de desenvolvimento de software fossem um sintoma de inexperiência. Eu não conseguia acertar nenhuma, mas achava sinceramente que estudando meus erros eu fosse ter estimativas cada vez melhores...

Hoje eu já cometi vários erros de estimativa e bem, já posso concluir que eu estava errado. Por exemplo, durante meu mestrado, pouco depois de sair da faculdade, eu desenvolvi uma biblioteca de correspondência estéreo de imagens. Lá pela terceira semana de desenvolvimento, eu fui falar com meu orientador, que me sugeriu reescrever a biblioteca em C++ (ela estava escrita em C). Eu saí de lá pronto a ignorar essa sugestão, afinal, eu já estava escrevendo em C a mais de duas semanas, quanto tempo eu ia gastar para passar tudo para C++? Bom, por causa desta sugestão me ocorreu que eu poderia usar o namespace extra que eu ganharia colocando meu código dentro de uma classe para fazer com que ele seja recursivo e muito mais fácil de entender. Eu certamente ia perder um pouco de performance, mas com este namespace extra eu podia minimizar esta perda e ainda ter um código organizado. Isso iria economizar mais do que algumas semanas de tempo no futuro, então comecei a traduzir o programa. Tempo total para a tradução? Em torno de 1 hora e meia! Depois foram mais umas 4 horas medindo a performance do novo programa, que diminuiu em 8%, mas o computador fez essa parte sozinho. Pouco depois eu encontrei um bug na função mais central do programa... Ela era uma função pequena, menos de 30 linhas, representava uma função matemática bem conhecida; não pode ser que eu demorasse muito para corrigir. Demorei uma semana.

Bom, isso foi naquela época. Eu não tinha muita experiência. Agora, é claro, as coisas são bem diferentes. Por exemplo, estou fazendo este site, o comemcasa, onde eu quero relacionar restaurantes que entregam em domicílio por local de entrega. É simples, não tenha dúvida, mas quão simples? Quando decidi fazer o site, eu comecei a olhar formas de colocar ele no ar, mas sem muita pressa. Afinal não pretendia passar uma parcela grande do meu tempo fazendo ele, então ia demorar até ter alguma coisa pronta. Mais ainda porque resolvi fazer o site em uma linguagem em que nunca tinha feito nada grande (Python), com um framework de web que eu nem sabia que existia (Django). Esperava demorar uns três meses antes de colocar qualquer coisa no ar. Realmente, demorei... três dias. Finalmente, eu comecei a criar a toda a estrutura necessária para cadastrar restaurantes. Comecei em um dia em que eu tinha um compromisso em que teria que passar duas horas sem fazer nada; então levei o laptop. Não pretendia fazer tudo nestas duas horas, mas esperava fazer a maior parte do trabalho. Isso foi em outubro, estou escrevendo este post porque agora, em fevereiro, eu acabei! Ainda não está no ar, estou fazendo QA ainda :)

Mas então a experiência é inútil? Não, claro que não. A experiência não faz com que os erros desapareçam, mas reduz eles tendendo a um certo mínimo que aparentemente é maior do que zero. Mas esse não parece ser o seu efeito mais importante; se você além do tempo tentar também estimar a confiabilidade da estimativa de tempo, esta segunda estimativa melhora muito mais rápido do que a primeira com a experiência. Bom, essa frase ficou um pouco complicada, então vamos aos exemplos:

Nos dois primeiros erros acima (de quando eu estava no mestrado), eu nem pensei no caso quando fiz minhas estimativas, mas se alguém ouvisse estas estimativas e me perguntasse "Você tem certeza deste tempo?" eu provavelmente diria que sim, eu tinha certeza. Ou seja, eu estimava que o tempo que eu encontrei fosse confiável, quando ele não era. Minha estimativa da confiabilidade estava errada. Nos dois últimos erros (do comemcasa) se alguém me fizesse a mesma pergunta (e neste caso eu me fiz esta pergunta) as respostas seriam respectivamente "Eu não faço a menor idéia" e "Não estou muito confiante". Ou seja, eu estimava que o tempo pudesse estar errado, e estava mesmo.

Comentar