Como aprender a fazer melhores estimativas? [fechadas]

42

Eu sou péssimo em estimativas. Quando alguém me pergunta quanto tempo levará algo, nem me atrevo a adivinhar, pois estarei completamente enganado. Normalmente sou otimista demais e provavelmente deveria multiplicar meu palpite com algum fator X grande ...

Como posso aprender a fazer melhores estimativas? Não é ensinado na minha universidade, e mesmo que tenhamos prazos para todos os trabalhos, nunca penso em quanto tempo algo levará. O que eu deveria. Pelo bem de todos (especialmente o meu).

gablin
fonte

Respostas:

28

Ainda não sou muito bom nisso, mas descobri que acompanhar quanto tempo você estima para tarefas e quanto tempo você realmente leva pode ser uma grande ajuda. Dessa forma, você pode ter uma idéia sólida de quão longe você está. O software de gerenciamento de problemas com rastreamento de tempo (Jira no meu caso) ou uma planilha pode ser uma grande ajuda para isso.

Eu acho que mais do que tudo, é uma experiência.

aubreyrhodes
fonte
1
Este. É a maneira mais útil de estimar. Para melhorar, pode-se rastrear o tempo das tarefas ao executá-las, portanto, da próxima vez, uma estimativa melhor pode ser fornecida. A estrutura de detalhamento do trabalho é um conceito útil para isso.
Tamás Szelei
3
Esta é uma ótima resposta. Gostaria de acrescentar que, além de fazer anotações de suas estimativas, pode ser útil escrever algum tipo de "diário", em que você toma nota de decisões importantes, problemas que encontrou e resolveu etc. Se houver uma estimativa ficar 50% ou mais desativado, pode ser útil investigar o motivo e, em seguida, esses "registros do dia" serão de grande ajuda (consulte as páginas 64-69 em "Programador Pragmático" para obter mais detalhes sobre isso). Além disso, tenha cuidado com quem você mostra seus números; pessoas que não entendem o que você está fazendo podem tentar usá-las contra você.
Leif
Eu faço o que você faz - manualmente. É basicamente Evidence Based Scheduling ( en.wikipedia.org/wiki/Evidence-based_Scheduling ), como pioneira por Joel & implementado em fogcreek.com/fogbugz
MAWG
18

Lei da Gestão do Tempo de Murphy: Para descobrir quanto tempo algo vai tomar, descobrir quanto tempo ele deve tomar e duplicá-la.

Em seguida, vá para a próxima unidade de tempo mais alta. Assim, alocamos duas semanas para um projeto de um dia.

dsimcha
fonte
2
Detesto dizer isso, mas essa é provavelmente a métrica mais simples e eficaz que já vi aqui.
glenatron
3
Foi-me ensinado o suplemento e o quadrado. Se eu acho que vai demorar um dia, adicione um faz dois dias, o quadrado que faz 4 dias. Conheço outros que usam o movimento para aumentar a magnitude, mas sem a duplicação. então um dia se torna uma semana. Duas semanas e meia se tornam dois meses e meio, etc. Não importa o quão bom você seja, você deve adicionar preenchimento para as incógnitas que ocorrerão.
old_timer
9

Você pode aprender fazendo-os coletivamente .

Eu uso o Planning Poker . É uma técnica baseada em consenso para estimar.

Sua estimativa deve ser rastreada e comparada com o que você efetivamente fez. Você receberá a velocidade .

Cada vez que você estimar algo, multiplique pela sua velocidade recente para obter uma estimativa precisa .


fonte
A coisa do poker parece realmente interessante, você realmente faz esse IRL como descrito no seu link? Isso ajudou a criar estimativas mais precisas?
dr Hannibal Lecter
Sim. Isso torna a estimativa divertida! E seriamente preciso. Claro, você precisa praticar um pouco, mas depois de "entender", não poderá mais estimar com outros métodos.
Realmente soa divertido! :) Para pior, nunca poderei vender isso na minha empresa: - /
dr Hannibal Lecter
@dr Hannibal Lecter: use o truque da loja de animais. Diga a eles que não é definitivo, que você o usará apenas para testá-lo. Acredite em mim, será definitiva;)
9

A estimativa de software de Steve McConnell (MS Press) é uma boa leitura.

A principal coisa com estimativa de software é resumida pelo seguinte

Sem informações históricas, suas estimativas são inúteis.

Essa é uma das razões pelas quais os projetos iterativos têm muito mais sucesso do que os grandes projetos em cascata em fases. Eles não estão tentando elaborar um plano para um ano de cada vez com poucas informações além de algum vodu de caixa preta do que eles acham que deveria ser. A cada iteração, eles estão reestimando / replanejando e têm as últimas iterações nas quais basear suas estimativas.

Alguns outros pontos a serem lembrados:

  1. Só ficará mais lento . A aplicação da regra 80/20 significa que o trabalho mais árduo ocorrerá mais tarde, a menos que seu gerenciamento de projetos seja muito disciplinado.
  2. Estimação! = Planejamento. Estimativa é o processo de descobrir o esforço necessário para realizar algo. Planejamento é o processo de ajustá-lo a um cronograma.
  3. 60% de eficiência é tudo o que você pode esperar. 70% é utopia. Se você estiver calculando em dias, faça isso. Se estiver calculando em horas, não se esqueça de aplicá-lo mais tarde.
  4. Lembre-se da cauda longa . As estimativas são uma estimativa aproximada de quanto tempo "provavelmente" levará ajustado para algum nível de risco e incógnitas. A cauda longa entra em jogo porque a quantidade real de trabalho necessária nunca será menor que 0. OTOH, a quantidade máxima de tempo que levará será limitada apenas pelo tempo que você estiver disposto a gastar nela antes de desistir. Como disse um ex-chefe meu, "todas as estimativas são de +/- x% e nunca são de menos".
MIA
fonte
Você pode explicar de onde vem esse indicador de 60% (e 70% -utopia)? Há algum artigo sobre esse tópico disponível em algum lugar?
precisa
7

Estou surpreso que ninguém tenha mencionado a técnica de estimativa no estilo PERT descrita em The Clean Coder, de Robert Martin . Nesse método, você estima quanto tempo levará para três cenários: otimista ( O), nominal ( N) e pessimista ( P). Então a duração esperada = (O+4N+P)/6e você obtém um desvio padrão de (P-O)/6.

Isso parece funcionar muito bem, e eu o usei algumas vezes quando a gerência realmente se importa com quanto tempo provavelmente levará algo.

Como outros comentaram, também fiz estimativas examinando dados históricos ("Quanto tempo levou para fazer essa coisa semelhante?").

Mas meu método favorito é não fazer estimativas de tempo e apenas fazer estimativas pontuais e obter velocidade nas iterações. Se uma equipe é bastante consistente no dimensionamento e na conclusão do trabalho (histórias de usuários), você economiza uma tonelada de tempo nem perguntando quanto tempo cada coisa levará.

As estimativas de horas são terrivelmente difíceis de acertar e exigem muito trabalho para dividir as coisas em pedaços pequenos o suficiente para serem efetivamente medidos. E mesmo assim, eles raramente estão corretos porque há muitas variáveis ​​e esquecemos de explicar coisas como doenças, férias ou mesmo distrações.

Se eu tiver que fazer estimativas de horas, tento fazê-las apenas para tarefas pequenas dentro de uma iteração. Eu medo tudo nas estimativas de meio dia (4, 8, 12 horas), a menos que eu saiba que poderia ser menor. Mas eu raramente calculo algo em menos de 1 hora.

Allan
fonte
Desde que respondi a essa pergunta, também passei mais para o campo "sem estimativas". Algumas grandes idéias estão surgindo de lá.
Allan
5

Primeiro e mais importante, você precisa definir um processo e cumpri-lo. Inclua a revisão do plano no final de cada fase do processo. Você também pode revisar o processo, mas de maneira ordenada.

Segundo, faça algum tipo de design. O design é o primeiro passo para o planejamento, você não constrói uma casa sem desenhos.

Terceiro, acompanhar o tempo (esforço). Você deve pelo menos diferenciar:

  • Análise
  • desenhar
  • Código
  • Teste de unidade (inclui defeitos de correção)
  • Teste de integração (inclui correção de defeitos)
  • Teste de aceitação, com o usuário (inclui a correção de defeitos)

    Seria ótimo se você medisse os esforços de correção de defeitos para cada tipo de teste, mas isso adiciona complexidade, para que você possa fazer isso mais tarde.

Quarto, identifique os principais itens básicos para estimativa. Por exemplo:

  • Número de processos a serem automatizados (Análise)
  • Número de entidades de modelo de domínio (Design)
  • Número de formulários e relatórios (código)

Quinto, correlacione itens de base e esforço. Por exemplo:

  • Esforço de análise = X horas-homem / processo a ser automatizado
  • Esforço de design = Y homem-hora / entidade do modelo de domínio
  • Esforço do código = Z horas-homem / formulário (ou relatório); número de formulários = A * entidades de modelo de domínio
  • Esforço de teste de unidade = M% * Esforço de código
  • Esforço de teste de integração = N% * Esforço de código
  • Esforço de teste de aceitação = P% * Esforço de código

Sexto, acompanhe o desempenho e o desvio das estimativas para cada projeto. Assim, você pode ajustar seus fatores de correlação.

Sétimo, repita e melhore. Você obterá muitas informações apenas no final do primeiro projeto; no terceiro, sentirá-se à vontade para planejar e estimar.

Dê uma olhada em http://en.wikipedia.org/wiki/Personal_Software_Process , realmente funciona.

Miguel Veloso
fonte
3

Sempre que encontrar um problema de estimativa, tente dividi-los em pedaços menores. Então veja se você já fez coisas semelhantes às peças. Se você tiver, já deve ter uma boa idéia de quanto tempo cada peça leva. Caso contrário, você deve começar a acompanhar ativamente o tempo gasto para vários tipos de tarefas. Isso o ajudará em estimativas futuras.

O tempo total necessário será mais do que a soma das peças individuais, pois você precisa de algum tempo para integração e teste.

Se você não fez algo semelhante, provavelmente pode confiar na experiência de outras pessoas e obter uma estimativa delas. Não tome isso pelo seu valor nominal. Nada ensina você a gostar de experiência.

É como atirar em um alvo. As fotos anteriores na estimativa devem dizer o quanto você está fora da marca, para que você possa corrigi-la.

aufather
fonte
3

Acho mais fácil executar o processo de divisão com as tarefas mínimas mencionadas acima, elaborando cada uma delas e depois duplicando essa estimativa. Então eu os adiciono e adiciono cinquenta por cento. Isso me dá um tempo aproximado de projeto em condições ideais. Se o trabalho estiver praticamente acontecendo paralelamente aos outros, precisará de mais tempo. Se você tiver que esperar por outras pessoas, espere que elas levem o dobro do tempo que achar necessário. Esperar por conteúdo, feedback ou outras informações geralmente leva muito mais tempo do que parece possível.

Onde trabalho, elaboramos uma estimativa de melhor caso / caso esperado / pior caso para cada etapa do processo, o que é útil como um guia e também para avaliar como suas estimativas funcionaram.

A técnica nem sempre é tão importante, exceto que você precisa ser capaz de combater a tentação do programador de subestimar as tarefas, mas o importante é ser cauteloso quando você pode entregar algo. Se você precisar de sete semanas para construir algo e prometeu oito semanas, poderá chegar um pouco mais cedo e ficar bem com isso ou fazer alguns testes extras e ter certeza da confiabilidade. Se você prometeu seis semanas, pode parecer ruim, mesmo que não seja absolutamente sua culpa. Em caso de dúvida, adivinhe de maneira conservadora.

glenatron
fonte
1

Você pode tentar criar um histórico do que era a estimativa e qual era o real de várias tarefas para criar um registro suficiente para saber qual multiplicador ter para coisas específicas que se repetem na sua lista. Concedido que este é um exercício de tentativa e erro, mas pareceu funcionar bem para mim. Também há algo a ser dito em muitos ensaios antes que o padrão surja provavelmente. Provavelmente, isso é semelhante a muitas outras respostas que diriam que alguém poderia se resumir a "Just do it!" pois é assim que a maioria de nós desenvolveu a habilidade. É uma grande dor ver como alguém pode estar errado ao fazer estimativas? Sim, mas se as estimativas melhorarem, todos poderão ser felizes eventualmente.

JB King
fonte
1

Se você pode decompor o projeto em tarefas menores e fazer estimativas para aqueles, será mais preciso em geral. Qualquer tarefa maior que alguns dias deve ser dividida ainda mais. Se você não pode decompô-lo mais do que provavelmente tem uma lacuna de requisitos. Se você precisar fazer uma estimativa de back-of-the-guardanapo para um requisito de uma linha bem ... nada pode realmente ajudá-lo muito. Infelizmente, muitas lojas funcionam dessa maneira a maior parte do tempo.

Jeremy
fonte
1

Em vez de escrever um livro, vou oferecer apenas alguns conselhos sobre como usar o método de estimativa "decomposto":

  • Divida sua tarefa em tarefas menores de componentes. Estime cada tarefa da melhor maneira possível.

  • Adicione uma tarefa para planejamento e design (que inclui o que você está fazendo agora.) Faça uma estimativa.

  • Se você ainda não possui uma, adicione uma tarefa para "reunir as tarefas". Esta tarefa pode não parecer útil a princípio. No entanto, quando você usa esse método de estimativa "detalhado", sempre há coisas demoradas para fazer, que "caem entre tarefas" e que "juntam as tarefas". Este pode ser complicado de estimar. Tenta o teu melhor.

  • Adicione uma tarefa para teste e documentação. Sua tarefa pode não exigir muitos testes e documentação, mas você deve dedicar um pouco de tempo a pensar nisso.

  • Adicione as estimativas de tarefa para obter uma estimativa geral.

  • Vá em frente e multiplique essa estimativa total por dois ††. Isso lhe dará tempo de preenchimento para:

    1. Conclua as coisas que você ignorou em sua lista de tarefas original
    2. Termine coisas que você não sabia antes de começar
    3. Incorpore feedback de outras pessoas e faça alterações
    4. Seja interrompido por outras coisas acontecendo ao seu redor, como reuniões
    5. Conclua antes da estimativa com mais frequência do que atrás dela

E por último, mas não menos importante, não tenha medo de esboçar estimativas para si mesmo que provavelmente estão totalmente erradas. Às vezes, apenas esboçar tudo, não importa quão potencialmente impreciso, pode ajudá-lo a começar o caminho para obter uma melhor noção do que está envolvido.

†† À medida que você ganha mais e mais experiência, esse "fator de falsificação" pode ser ajustado para se adequar ao seu estilo pessoal e ao seu ambiente de trabalho.

Mike Clark
fonte
1

A fórmula que funciona ao trabalhar para mim:

  1. faça uma divisão de tarefas em uma granularidade de 1 a 4 horas. Acho que geralmente sou preciso com esses

  2. o 'fator de incógnitas': multiplique por um fator de 2 elevado ao número de incógnitas. Ou seja, se você deseja desenvolver um aplicativo couchdb, mas agora sabe alguma coisa sobre javascript e http .. adicione 2 ^ 2 como fator múltiplo.

  3. fator de troca de contexto: múltiplo por 1,5, se você trabalhar em ambiente perfeito (em casa, na área de estudo, etc.) ou 2,5, se você trabalhar em ambiente inadequado (escritório / local lotado, etc.)

Acho que isso é dentro de +/- 20% do tempo real!

vrdhn
fonte
0

Aprenda seu próprio viés. Se sua última estimativa tiver sido muito baixa pelo fator dois, da próxima vez, duplique sua estimativa inicial. (É claro que a lei de Hofstadter torna difícil fazer isso direito ...)

Também é sempre uma boa ideia lembrar quanto trabalho foi necessário após a liberação inicial do trabalho anterior e adicioná-lo à próxima estimativa. Por exemplo, sua última tarefa levou 2 meses para ser concluída, mas após a ativação, o suporte, os hotfixes e as alterações adicionais custaram mais um mês. Portanto, na próxima vez, estime 3 meses para uma tarefa semelhante.

user281377
fonte
0

Para abridores, leia "Economia de engenharia de software", de Barry Boehm, e "Controlling Software Projects", de Tom DeMarco. Depois de ler e digerir os dois, leia "Estimativa de custo de software com COCOMO 2", de Barry Boehm.

Pelo que tenho a dizer a seguir, ajudará MUITO a ter uma aula de probabilidade e estatística, mesmo uma de um livro de receitas básico.

Nenhuma estimativa é perfeita. Há alguma probabilidade de chegar cedo, e alguma probabilidade de chegar tarde. O modelo COCOMO detalhado original de Boehm forneceu previsões que se mostraram dentro de 30% do resultado real, melhores que 60% das vezes. Isso foi muito melhor do que o comum quando ele escreveu e publicou o livro.

Quando você adota o seu melhor palpite (e isso é tudo uma estimativa), você inclui essas probabilidades. Se você puxar a estimativa, está aumentando a probabilidade de chegar tarde. Se você aumentar a estimativa, aumentará a probabilidade de chegar mais cedo ou terminar a tempo. Quanto você puxa para dentro ou para fora controla como a probabilidade muda e deve necessariamente depender das penalidades por chegar cedo ou tarde. (Insira histórias de terror aqui - e houve muitas delas ao longo dos anos!)

DeMarco aborda isso até certo ponto. Ele também aponta que existe uma "região de impossibilidade": alguns horários são muito apertados para serem feitos, não importa que tipo de heroísmo seja tentado.

John R. Strohm
fonte