Академический Документы
Профессиональный Документы
Культура Документы
2) Acompanhe o cronograma
É difícil conseguir estimativas individuais exatas. Como levar em conta as interrupções, bugs
imprevisíveis, reuniões de status, e o dia do Dízimo Semi-anual do Windows quando você tem que
reinstalar tudo na sua máquina? Pro inferno, mesmo sem nada disso, como você vai dizer
exatamente a duração do desenvolvimento de uma subrotina?
Realmente, não dá.
Porisso, marque o tempo gasto. Registre quanto tempo gastou em cada tarefa. Assim você pode em
retrospecto verificar o quanto se desviou da estimativa. Você vai coletar dados como estes para cada
desenvolvedor:
Cada ponto no gráfico indica uma tarefa encerrada, com seus tempos estimado e real. Dividindo o
tempo estimado pelo real, você acha a velocidade: quão rapidamente a tarefa foi feita comparada
com a estimativa. Com o tempo, você terá o histórico de velocidades de cada desenvolvedor.
• O mito do estimador perfeito, que existe somente na sua imaginação, sempre acerta nas
estimativas. Sua velocidade é {1; 1; 1; 1; 1; ....}
• Um mau estimador tem velocidades por todos os cantos do gráfico, por exemplo {0,1; 0,5;
1,7; 0,2; 1,2; 0,9; 13,0}
• A maioria dos estimadores erram na escala mas acertam na estimativa. Tudo demora mais do
que o esperado, pois a estimativa não levou em conta a solução de bugs, reuniões de comitê,
intervalos para o cafezinho, e o maluco do gerente a interromper o tempo todo. O estimador
normal consegue velocidades consistentes, mas elas estão sempre abaixo de 1,0. Por
exemplo: {0,6; 0,5; 0.6; 0,6; 0,5; 0,6; 0,7; 0,6}
Quanto mais experiência ganham os estimadores, melhor ficam suas estimativas. Porisso esqueça as
estimativas mais velhas que, digamos, seis meses.
Se receber na equipe um estimador novo, sem histórico, assuma o pior: atribua-lhe um histórico
qualquer com grande variação de velocidades, até que cumpra meia dúzia de tarefas reais.
3) Simule o futuro
Ao invés de somar as estimativas para conseguir uma data única, que pareça correta mas que resulte
num resultado profundamente errado, você vai usar o método de Monte Carlo para simular vários
futuros possíveis. Numa simulação de Monte Carlo podem ser criados 100 possíveis cenários
futuros. Cada destes possíveis futuros tem 1% de probabilidade, deste modo você pode mapear a
probabilidade de cumprir qualquer data.
Para calcular cada futuro possível de um desenvolvedor particular, você divide cada estimativa de
tarefa por uma velocidade aleatoriamente selecionada do histórico deste desenvolvedor, que foi
coletado no passo 2 acima. Veja uma amostra de futuro:
Estimativa: 4 8 2 8 16
Velocidade Aleatória: 0.6 0.5 0.6 0.6 0.5 Total:
E/V: 6.7 16 3.3 13.3 32 71.3
Faça isto 100 vezes; cada total tem 1% de probabilidade, e aí você pode deduzir a probabilidade de
cumprir uma dada data.
Agora observe o que acontece:
• No caso do mítico estimador perfeito, todas velocidades são divididas por 1. Dividir uma
velocidade qualquer por 1 não muda nada. Assim, todas rodadas da simulação resultam na
mesma data, e esta tem 100% de probabilidade. Assim como nos contos de fada!
• As velocidades do mau estimador estão por todo mapa 0,1 e 13,0, têm a mesma
probabilidade. Cada rodada da simulação vai produzir resultados muito diferentes, pois
quando são divididas por velocidades aleatórias resultam em números muito diferentes de
cada vez. A distribuição de probabilidade resultante será bem achatada, o que mostra que a
chance de terminar amanhã ou em qualquer data no futuro distante é a mesma. Esta é uma
informação útil, aliás: pois lhe diz que você não deve confiar nas datas previstas.
• O estimador normal consegue uma porção de velocidades muito próximas, por exemplo
{0,6; 0,5; 0,6; 0,6; 0,5; 0,6; 0,7; 0,6}. Ao usar estas velocidades você aumenta o tempo que
que leva para fazer qualquer coisa, assim em uma iteração um trabalho de 8 horas vai levar
13; em outra pode levar 15 horas. Isto compensa o otimismo constante destes estimadores. E
compensa precisamente, baseado exatamente no otimismo histórico, provado, real destes
desenvolvedores. E, como todas as velocidades históricas estão muito próximas, rondando
0,6, em cada rodada da simulação, você chega a valores similares, com isso você acabará
num intervalo estreito de possíveis datas para o término do desenvolvimento.
É claro que a cada rodada da simulação de Monte Carlo você terá que converter o resultado em
horas para uma data calendário, isto significa que vai ter que levar em conta o horário de trabalho
de cada desenvolvedor, suas férias, feriados, etc. E, a cada rodada, você terá que notar qual
desenvolvedor termina mais tarde, pois ele determina quando o trabalho estará pronto. Estes estes
são cálculos meticulosos mas, felizmente, os computadores são bons nisto.
Bom, sim, você pode fazê-lo se quiser. E o Planejamento Baseado em Evidências vai funcionar.
Mas você não precisa disso.
O fato é que o EBS funciona tão bem que tudo que você precisa é manter o relógio contando o
tempo do que você estava fazendo quando ocorreu a interrupção. Desconcertante como possa
parecer, o EBS produz melhores resultados quando você age assim.
Vou conduzi-lo num exemplo rápido. Para fazê-lo o mais simples possível, vamos imaginar, John,
um programador bastante previsível, cujo trabalho é escrever códigos de uma linha para as funções
de ler e escrever em linguagens de baixo nível. O dia todo é isto que ele faz:
private int width;
public int getWidth () { return width; }
public void setWidth (int _width} { width = _width; }
Eu sei, eu sei... este é um exemplo deliberadamente bobo, mas você sabe você já encontrou alguém
assim.
De qualquer maneira, cada leitura e escrita lhe toma 2 horas. Assim suas estimativas para o trabalho
parece-se com isto:
{2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; … }
Agora, este infeliz tem um gerente que o interrompe o tempo
todo com uma conversa mole de duas horas sobre pescaria de
merlin. Ora, é certo que John poderia ter uma tarefa no seu
elenco chamada “Papos chatos sobre merlins”, e registrar o
tempo gasto, mas isto não seria politicamente prudente. Em
vez disso, John deixa o relógio correr. Assim, seus registros aparecem como:
{2; 2; 2; 2; 4; 2; 2; 2; 2; 4; 2; … }
E suas velocidade são:
{1; 1; 1; 1; 0,5; 1; 1; 1; 1; 0,5; 1; … }
Pense agora no que acontece. Na simulação de Monte Carlo, a probabilidade de cada estimativa ser
dividida por 0,5 é exatamente a mesma que a probabilidade de o chefe de John interrompê-lo. E
assim o EBS produz um plano correto!
Na realidade, é muito mais provável que o EBS resulte numa evidência exata sobre estas
interrupções que o desenvolvedor mais obsessivo por registros. E esta é exatamente a razão porque
ele funciona tão bem. Veja como explico este fato. Quando os desenvolvedores são interrompidos
eles podem
1. fazer uma grande confusão sobre registrar a interrupção nas suas estimativas de modo a que
a gerência veja quanto tempo está sendo gasto em conversas sobre pescarias, ou
2. fazer uma grande confusão para não registrá-la, e deixar que a funcionalidade em que
estejam trabalhando atrase, pois eles se recusam a calibrar suas estimativas, que eram
totalmente corretas, com a inclusão de conversas bobas sobre pescarias para as quais eles
nem foram convidados.
... e em ambos os casos, o EBS resulta no mesmo resultado correto, Não interessa se você é um
desenvolvedor do tipo passivo ou agressivo.
Você pode também observar a distribuição dos prazos por cada desenvolvedor:
Desenvolvedores (como Milton na figura) podem causar problemas com seus prazos tão incertos:
eles precisam aprender a fazer melhores estimativas. Outros desenvolvedores (como Jane) fornecem
prazos bem precisos mas que ocorrem muito tarde: eles precisam que algum trabalho seja removido
da sua lista. Outros desenvolvedores (eu! sim!) não estão no caminho crítico, e podem ser deixados
em paz.
Crescimento do escopo
Assumindo que você tenha planejado tudo nos ínimos detalhes antes do início do trabalho, o EBS
funciona muito bem. Para ser honesto, porém, você vai implementar algumas funcionalidades que
não planejou. Você tem novas idéias, os vendedores prometem funcionalidades que você não
oferece, e algum diretor aparece com a nova concepção de fazer um aplicativo para que o GPS do
carrinho de golfe funcione como um eletrocardiógrafo enquanto o golfista se movimenta pelo
campo. Tudo gera atrasos não poderiam ser previstos quando você fez o plano original.
Idealmente você colocou alguma reserva para isso. Deste modo, vá em frente e coloque alguma
proteção (buffer) no seu plano para:
1. Novas funcionalidades
2. Resposta à competição
3. Integração (fazer com que os códigos de todos desenvolvedores funcionem quando
consolidados)
4. Tempo de depuração
5. Teste de usabilidade (e incorporação do resultado destes testes no produto)
6. Testes Beta
E assim, quando novas funcionalidades aparecerem, você pode usar um pouco da proteção
adequada e usá-la na implementação da novidade.
O que ocorre se ainda existirem funcionalidades para adicionar e você não tem mais proteção
sobrando? Bem, aí as datas que o EBS estimou começam a deslizar para a frente. Você deve tirar
uma foto da distribuição de confiança dos prazos toda noite, para acompanhá-los ao longo do
tempo:
A abcissa indica quando o cálculo foi feito; a ordenada é a data de entrega. Há três curvas aqui: a de
cima é a data com 95% de probabilidade, a do meio a com 50% e a inferior é a de 5%. Quanto mais
próximas as curvas mais estreito o intervalo de datas possíveis para a entrega.
Se observar que as datas estão atrasando cada vez mais (a curva está subindo), você está em perigo.
Se estiverem atrasando mais de um dia a cada dia, significa que o trabalho está crescendo mais
depressa do que sua capacidade de realizá-lo, e você nunca vai terminá-lo. Você pode também
observar se a distribuição de confiança na data da entrega está se apertando (as curvas estão se
aproximando), que é o que deve ocorrer se você estiver convergindo para uma data.
Sumário
Usar o Planejamento Baseado em Evidências é muito simples: produzir estimativas detalhadas vai
lhe tomar um dia ou dois no começo, e alguns segundos todo dia para registrar quando você
começar a trabalhar numa tarefa diferente. Os benefícios, todavia, são imensos: planos realistas.
Planos realistas são fundamentais para criar software de qualidade. Eles o forçam a desenvolver as
melhores funcionalidades primeiro e lhe permitem tomar as decisões corretas sobre o que deve ser
feito. Isto torna seus produtos melhores, seu chefe mais feliz, delicia seus clientes, e – melhor de
tudo – deixa você ir para casa as 17 horas.
P.S.
Planejamento Baseado em Evidências é parte do FogBugz 7.0.
Sobre o Tradutor: Paulo André de Andrade é Engenheiro Eletrônico e Diretor da OLYMPYA TI,
responsável, no Brasil, pela comercialização dos softwares da Fog Creek - www.fogcreek.com.br -
Paulo André atua em Informática desde 1971 em setores que vão de Engenharia de Qualificação de
Componentes para Hardware, Engenharia de Produtos de Hardware, Desenvolvimento de Hardware
e Software, Desenvolvimento de Negócios, Marketing e Vendas de Software e Consultoria em
Gerência de Projetos e em Serviços de Informática.
Você pode usar gratuitamente por 45 dias o produto FogBugz, totalmente web, para
gerencia de projetos e outras funcionalidades, visitando o link
http://try.fogbugz.com
Para treinamento em como fazer melhores softwares você pode aprender mais sobre outro
produto da FogCreek, já em Português:
http://www.scribd.com/doc/29112680/Make-Better-Software-V1