Quando fica pronto? Quanto vai custar? Embora não sejam as perguntas mais importantes, são perguntas que costumamos ouvir com certa recorrência. Quando estudamos e utilizamos Kaban, o nosso Customer Lead Time é um bom indicador de quanto tempo levamos para entregar 1 item do nosso backlog. Se adicionarmos métricas como taxa de entrega e gráficos como Histograma e outras ferramentas, podemos ter uma boa ideia de quanto tempo levará para entregarmos alguns itens do nosso backlog.
Neste artigo
Alguns avisos importantes sobre previsão (forecasting)
Entretanto, em muitos casos precisamos de uma estimativa um pouco mais precisa e fazer uma previsão (forecasting) com bastante antecedência. Antes de prosseguir nesse assunto gostaria de fazer alguns avisos importantes:
1) Toda estimativa é uma estimativa, não uma assertiva, logo sempre haverá margem de erro;
2) Toda previsão é no máximo uma distribuição de probabilidades baseada nos dados históricos disponíveis, sem histórico a previsão será incipiente;
3) As perguntas e respostas que podem ser feitas dependem inteiramente dos dados históricos disponíveis. Por exemplo, se você não tem dados de onde possam ser extraídas informações sobre a performance do seu time, nem Monte Carlo ou qualquer outro método, inclusive Inteligência Artificial, conseguirá responder perguntas sobre a performance do seu time.
3) A resposta nunca será determinística (exata), por exemplo: O projeto terminará no dia 25/08/2024 com o custo de $132.456,67;
4) A resposta será sempre um intervalo probabilístico, por exemplo: Com 85% de probabilidade, o projeto terminará entre as últimas semanas de agosto e o início de setembro custando algo em torno de $100K e $150K. Qualquer previsão que fuja desse formato de resposta é mentirosa.
Para que serve Monte Carlo?
Ele se baseia em amostragens aleatórias massivas para obter resultados numéricos. Basicamente, em situações de grande incerteza como construção de produtos, nós informamos ao algoritmo dados históricos e ele nos dá como resultado previsões do que pode acontecer. Em projetos normalmente ele é utilizado para responder perguntas de prazo e custo, mas também pode ser utilizado para prever potencial de clientes de produtos, comportamento de compra, distribuição demográfica de clientes entre outros.
A origem de Monte Carlo
O algoritmo foi criado durante a Segunda Guerra Mundial, mais especificamente, durante o famoso Projeto Manhattan. O objetivo era melhorar a tomada de decisões em condições incertas. Monte Carlo é uma homenagem à cidade de Mônaco, famosa pelos seus cassinos, pois o acaso é um elemento principal na abordagem de modelagem, semelhante a um jogo de roleta.
Como funciona Monte Carlo?
Simplificando bem o funcionamento, podemos dizer que ele funciona da seguinte forma:
- Você informa os dados históricos que servem de insumo para responder à pergunta que você deseja.
- O Algoritmo fará centenas, milhares, milhões de jogadas aleatórias baseadas nos dados que você forneceu.
- Após terminar as jogadas ele mostrará a resposta para a sua pergunta baseada nas jogadas que ele realizou, respeitando as restrições que escrevi no início do texto.
Exemplo: dados de entrada
Vamos direto ao ponto através de um exemplo. Imagine que você trabalha no Time Las Vegas. Você tem apenas as seguintes informações:
- O seu backlog possui 50 itens.
- A sua taxa de entrega nos últimos três meses foi de no mínimo 2 itens entregues por semana e no máximo 5 itens entregues por semana.
- Hoje é o dia 05/02/2024 (segunda-feira)
Exemplo: Executando 1 rodada
Vamos simular uma rodada de execução do Algoritmo de Monte Carlo jogando aleatoriamente com os dados de entrada. A tabela se lê da seguinte forma: a primeira coluna é a segunda-feira de cada semana. A segunda coluna é o número da semana. A terceira coluna são quantos itens faltam no início da semana. A quarta coluna é o algoritmo de Monte Carlo fazendo uma jogada totalmente aleatória baseada na taxa de entrega que obtemos do nosso histórico (no mínimo 2 e no máximo 5). A última coluna são quantos itens permanecem no backlog após o término da semana.
Dia | Semana | Quantos itens faltam | Jogada Aleatória | Quantos itens faltam após a jogada |
---|---|---|---|---|
05/02/2024 | 1 | 50 | 2 | 48 |
12/02/2024 | 2 | 48 | 3 | 45 |
19/02/2024 | 3 | 45 | 2 | 43 |
26/02/2024 | 4 | 43 | 3 | 40 |
04/03/2024 | 5 | 40 | 4 | 36 |
11/03/2024 | 6 | 36 | 2 | 34 |
18/03/2024 | 7 | 34 | 4 | 30 |
25/03/2024 | 8 | 30 | 3 | 27 |
01/04/2024 | 9 | 27 | 3 | 24 |
08/04/2024 | 10 | 24 | 4 | 20 |
15/04/2024 | 11 | 20 | 3 | 17 |
22/04/2024 | 12 | 17 | 3 | 14 |
29/04/2024 | 13 | 14 | 3 | 11 |
06/05/2024 | 14 | 11 | 4 | 7 |
13/05/2024 | 15 | 7 | 5 | 2 |
20/05/2024 | 16 | 2 | 2 | 0 |
Exemplo: Executando N rodadas
Após 1 rodada de jogadas aleatórias, desconsiderando os feriados, podemos dizer que esse backlog não será totalmente consumido até o dia 20/05/2024. Entretanto, essa foi apenas 1 rodada e seria temeroso dar uma resposta com tão poucas repetições, vamos aumentar a quantidade de repetições e ver o que acontece. Removi a última coluna, quantos itens sobraram na sexta-feira, pois essa informação já aparece na linha debaixo de quantos itens faltam.
Dia | Semana | Rodada 1 | Rodada 2 | Rodada 3 | Rodada 4 | Rodada 5 | Rodada 6 | Rodada 7 | Rodada 8 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Quantos itens faltam | Jogada Aleatória | Quantos itens faltam | Jogada Aleatória | Quantos itens faltam | Jogada Aleatória | Quantos itens faltam | Jogada Aleatória | Quantos itens faltam | Jogada Aleatória | Quantos itens faltam | Jogada Aleatória | Quantos itens faltam | Jogada Aleatória | Quantos itens faltam | Jogada Aleatória | ||
05/02/2024 | 1 | 50 | 2 | 50 | 5 | 50 | 5 | 50 | 5 | 50 | 4 | 50 | 5 | 50 | 4 | 50 | 5 |
12/02/2024 | 2 | 48 | 3 | 45 | 4 | 45 | 3 | 45 | 4 | 46 | 4 | 45 | 4 | 46 | 2 | 45 | 5 |
19/02/2024 | 3 | 45 | 2 | 41 | 5 | 42 | 5 | 42 | 3 | 42 | 4 | 41 | 4 | 44 | 2 | 40 | 3 |
26/02/2024 | 4 | 43 | 3 | 36 | 2 | 37 | 5 | 40 | 5 | 38 | 5 | 37 | 2 | 42 | 2 | 37 | 5 |
04/03/2024 | 5 | 40 | 4 | 34 | 3 | 32 | 4 | 36 | 3 | 33 | 4 | 35 | 3 | 40 | 2 | 32 | 2 |
11/03/2024 | 6 | 36 | 2 | 31 | 2 | 28 | 3 | 31 | 5 | 29 | 3 | 32 | 4 | 38 | 2 | 30 | 5 |
18/03/2024 | 7 | 34 | 4 | 29 | 4 | 25 | 2 | 28 | 4 | 26 | 5 | 28 | 2 | 36 | 3 | 25 | 3 |
25/03/2024 | 8 | 30 | 3 | 25 | 5 | 23 | 2 | 26 | 4 | 21 | 5 | 26 | 2 | 33 | 5 | 22 | 3 |
01/04/2024 | 9 | 27 | 3 | 20 | 5 | 21 | 2 | 23 | 2 | 16 | 3 | 24 | 4 | 28 | 2 | 19 | 5 |
08/04/2024 | 10 | 24 | 4 | 15 | 3 | 19 | 2 | 18 | 2 | 13 | 3 | 20 | 5 | 26 | 2 | 14 | 5 |
15/04/2024 | 11 | 20 | 3 | 12 | 3 | 17 | 5 | 13 | 2 | 10 | 4 | 15 | 4 | 24 | 4 | 9 | 3 |
22/04/2024 | 12 | 17 | 3 | 9 | 5 | 12 | 4 | 9 | 5 | 6 | 5 | 11 | 4 | 20 | 5 | 6 | 5 |
29/04/2024 | 13 | 14 | 3 | 4 | 2 | 8 | 5 | 7 | 3 | 1 | 1 | 7 | 2 | 15 | 4 | 1 | 1 |
06/05/2024 | 14 | 11 | 4 | 2 | 2 | 3 | 3 | 3 | 2 | 5 | 5 | 11 | 3 | ||||
13/05/2024 | 15 | 7 | 5 | 1 | 8 | 3 | |||||||||||
20/05/2024 | 16 | 2 | 2 | 3 | 5 | 5 |
Exemplo: Simplificando os resultados
Agora temos 8 rodadas e podemos resumir o resultado da seguinte forma:
Rodada | Quantas Semanas | Segunda-feira da semana de término |
---|---|---|
Rodada 1 | 16 | 20/05/2024 |
Rodada 2 | 14 | 06/05/2024 |
Rodada 3 | 14 | 06/05/2024 |
Rodada 4 | 15 | 13/05/2024 |
Rodada 5 | 13 | 29/04/2024 |
Rodada 6 | 14 | 06/05/2024 |
Rodada 7 | 15 | 13/05/2024 |
Rodada 8 | 13 | 29/04/2024 |
Com isso já temos algumas informações valiosas. Primeiro, não prometa nada antes de 29/04/2023, pois nenhuma das simulações realizadas conseguiu ser encerrada antes dessa data. No pior caso, esse backlog será totalmente entregue até a 16ª semana. Já são informações relevantes, mas dá para melhorar, vamos reordenar os itens e observar a frequência cumulativa que cada término representa.
Exemplo: Avaliando a frequência do resultado
Quantas Semanas | Segunda-feira da Semana de Término | Quantidade de Rodadas com esse encerramento | Frequência cumulativa |
---|---|---|---|
13 | 29/04/2024 | 2 | 25 |
14 | 06/05/2024 | 3 | 62,5 |
15 | 13/05/2024 | 2 | 87,5 |
16 | 20/05/2024 | 1 | 100 |
A conta da frequência é: Quantidade de Rodadas com o encerramento dividido pelo total de rodadas. Por exemplo: 2 rodadas terminaram no dia 29/04/2024, então 2 ÷ 8 x 100 = 25%. 3 rodadas terminaram no dia 06/05/2024, a conta é 3 ÷ 8 x 100 = 37,5. Como são cumulativos, então temos que somar os 25% do dia 29/04/2024 e por isso o resultado é 62,5%. A mesma regra se aplica ao dia 13/05/2024. 2 itens terminaram nesse dia 2 ÷ 8 x 100 = 25%, como é cumulativo, temos que somar com o 62,5% e o resultado é 87,5% e assim por diante.
Quando fica pronto?
Imagina que o meu chefe, Sr. Corleone, pediu um prazo para terminarmos esse backlog. Qual seria a resposta mais adequada?
Se eu falar que nosso time terminará o backlog até o dia 29/04/2024, segundo o algoritmo de Monte Carlo, eu tenho apenas 25% de chance que isso ocorra e uma possibilidade de 75% de eu estar errado. Se eu prometer que termino até o dia 06/05/2024 eu ainda tenho uma chance de errar muito alta, pois a probabilidade de acontecer é de apenas 62,5%. São 37,5% de estar errado.
O próximo resultado é bem interessante, pois a probabilidade é bem alta. Com ela já podemos responder ao Sr. Corleone da seguinte forma: Chefe, com 87,5% de PROBABILIDADE nós devemos terminar esse backlog em ATÉ 15 semanas o que seria algo em torno do dia 13/05/2024 (segunda-feira) e 17/05/2024 (sexta-feira).
Perceba as ênfases do texto nas palavras: probabilidade e até. Probabilidade, porque mesmo com Monte Carlo ainda podemos errar. No caso, temos 100% – 87,5% = 12,5% de probabilidade de errarmos e só terminarmos na 16ª semana. Já o “até” significa que podemos acabar antes, pois a resposta é um período de 1 semana e não uma data específica.
Monte Carlo na realidade
É importante ressaltar que aqui fizemos apenas 8 rodadas para fins didáticos, o mínimo exigido e mesmo assim não recomendado para Monte Carlo já começa em centenas de rodadas. Algo entre dezenas de milhares e milhões de rodadas costuma ser aceitável.
Outra coisa é que entramos apenas com informações de limite de taxas de entrega do time e isso pode induzir o algoritmo ao erro. Por exemplo, se nos últimos 3 meses só alcançamos o limite superior uma única vez, é improvável que ele volte a se repetir. O ideal seria fornecer para o algoritmo as taxas de entrega reais semana a semana, assim ele poderia ponderar a frequência de entrada também.
Além disso, há outros dados que podem ser informados para trazer um cálculo mais preciso, como feriados longos (Carnaval, Semana Santa)e férias dos membros do time. Até mesmo dados de correlação que podem impactar na taxa de entrega como, por exemplo, pessoas que ficam apenas uma parte do tempo no time ou turnover (saídas de pessoas do time).
Softwares para te auxiliar a fazer Monte Carlo.
Planilha do Troy Magennis
Já é um tanto lendária a Planilha de Simulação de Monte Carlo do Troy Magennis e você pode obtê-la neste link. As instruções estão em inglês, mas é uma planilha bem interessante e gratuita para você começar a fazer suas simulações.
@Risk
O @Risk (lê-se: at risk) é o produto que eu mais utilizei para fazer simulações de Monte Carlo. Com ele você consegue realizar as milhões de rodadas, indicar qual o formato da distribuição estatística dos dados de entrada e conectá-los com correlações. É um produto bem completo que utiliza o Microsoft Excel como base.
Riskamp
O Riskamp possui uma versão de teste por 30 dias e também roda em cima do Microsoft Excel. Confesso que utilizei bem pouquinho, mas parece ser completo também.
Dá para fazer Monte Carlo sem software de apoio?
A resposta é depende. Se o prazo que você der for algo que não afetará muito a sua imagem e nem a do seu time, as funções dos pacotes de Análise de Dados disponíveis tanto no Excel quanto no Google Spreadsheet podem ajudar bastante. Todavia, se ao dar um prazo no seu contexto é a mesma coisa que assinar um contrato com sangue dando a família como garantia, eu só o faria com uma ferramenta robusta e muitos dados no histórico. Na maioria dos casos, a planilha do Troy já resolve numa boa.
Minha dica, utilize a planilha do Troy e vá para uma ferramenta como o @Risk ou Riskmap quando você, seu time e a empresa tiverem maturidade nas decisões direcionadas por dados e estatística. Essas ferramentas são relativamente caras para serem utilizadas logo no início.
Até a próxima!