{"id":6431,"date":"2017-06-12T13:48:40","date_gmt":"2017-06-12T16:48:40","guid":{"rendered":"http:\/\/blog.plataformatec.com.br\/?p=6431"},"modified":"2017-06-12T13:44:46","modified_gmt":"2017-06-12T16:44:46","slug":"por-que-usamos-simulacoes-de-monte-carlo-para-gerenciar-projetos","status":"publish","type":"post","link":"https:\/\/blog.plataformatec.com.br\/2017\/06\/por-que-usamos-simulacoes-de-monte-carlo-para-gerenciar-projetos\/","title":{"rendered":"Por que usamos Simula\u00e7\u00f5es de Monte Carlo para gerenciar projetos"},"content":{"rendered":"
Ultimamente, temos usado uma abordagem mais probabil\u00edstica do que determin\u00edstica para gerenciar nossos processos. Isso significa que usamos diferentes m\u00e9todos estat\u00edsticos para prever o futuro ao inv\u00e9s de estimativas cegas. Mas… imprevisibilidade n\u00e3o era exatamente uma das raz\u00f5es de termos mudado de Waterfall para \u00c1gil?<\/p>\n
Sim, imprevisibilidade \u00e9 inerente ao desenvolvimento de software. Seria imposs\u00edvel prever todas as features<\/em> de um sistema no come\u00e7o de um projeto, por exemplo.<\/p>\n Mas e se n\u00f3s pud\u00e9ssemos prever como as pr\u00f3ximas semanas<\/strong> se comportariam?<\/p>\n Isso \u00e9 o que tentamos alcan\u00e7ar ao compilar m\u00e9tricas e rodar simula\u00e7\u00f5es de Monte Carlo.<\/p>\n Para entender mais sobre as m\u00e9tricas que utilizamos, veja:<\/p>\n A maioria das pessoas n\u00e3o usa m\u00e9trica alguma para gerenciar projetos. Ent\u00e3o, imagine quantas usam modelos estat\u00edsticos complexos para prever o fim de um projeto. No entanto, aplicar esse conhecimento em seu projeto ajudar\u00e1 entregar mais r\u00e1pido e melhor.<\/p>\n Neste post, voc\u00ea ver\u00e1 como evolu\u00edmos de uma abordagem ing\u00eanua de predi\u00e7\u00e3o para uma mais precisa e robusta utilizando a simula\u00e7\u00e3o de Monte Carlo. Mais ainda, explicarei de uma maneira f\u00e1cil como esta simula\u00e7\u00e3o funciona, fazendo analogia entre um jogo de dados e projeto de desenvolvimento de software. Saber quando o projeto, provavelmente, vai acabar pode ajudar voc\u00ea a gerenciar as despesas da empresa, melhorar feedbacks a stakeholders<\/em> e passar mais confian\u00e7a de que voc\u00ea est\u00e1 no controle do projeto.<\/p>\n N\u00f3s passamos por diferentes m\u00e9todos de predi\u00e7\u00e3o desde o in\u00edcio da empresa, e todos eles tinham algum ponto fraco. Aqui, listei alguns deles e o porque optamos por abandon\u00e1-los.<\/p>\n Alguns podem pensar em um m\u00e9todo simples, no qual usaria o throughput<\/em> m\u00e9dio para prever o final de um projeto. No entanto, como voc\u00ea pode ver neste post Power of the metrics: Don\u2019t use average to forecast deadlines<\/a>, isso seria um m\u00e9todo ing\u00eanuo e n\u00e3o funcionaria.<\/p>\n Este foi nosso primeiro m\u00e9todo. Regress\u00e3o linear baseada no throughput<\/em> acumulado para prever quando um projeto seria finalizado:<\/p>\n <\/p>\n No entanto, identificamos dois pontos diferentes que n\u00e3o est\u00e1vamos considerando quando faz\u00edamos esse tipo de an\u00e1lise:<\/p>\n Primeiramente, focamos em evitar erros estat\u00edsticos, como o caso da regress\u00e3o linear. Come\u00e7amos a utilizar um modelo mais compreens\u00edvel, que usa m\u00e9todos que sabemos que est\u00e3o enviesados, mas que podemos controlar de acordo com o contexto do projeto.<\/p>\n <\/p>\n Adicionamos manualmente diferentes retas de predi\u00e7\u00f5es de throughput<\/em> baseados em percentis do hist\u00f3rico do projeto.<\/p>\n N\u00f3s tivemos melhores resultados com isso, j\u00e1 que pod\u00edamos mudar a previs\u00e3o manualmente e, portanto, ajust\u00e1-la de acordo com o contexto espec\u00edfico do projeto. Por\u00e9m, o fato de desconsiderarmos mudan\u00e7as no backlog, nos motivou a dar um passo a mais e testar Simula\u00e7\u00f5es de Monte Carlo.<\/p>\n Planilha Simula\u00e7\u00e3o de Monte Carlo Wikipedia<\/a> define Monte Carlo como:<\/p>\n Qualquer m\u00e9todo de uma classe de m\u00e9todos estat\u00edsticos que se baseiam em amostragens aleat\u00f3rias massivas para obter resultados num\u00e9ricos, isto \u00e9, repetindo sucessivas simula\u00e7\u00f5es um elevado n\u00famero de vezes, para calcular probabilidades heuristicamente.<\/cite><\/p><\/blockquote>\n Pode parecer complexo ou dif\u00edcil inicialmente, mas \u00e9 muito mais simples do que parece. Voc\u00ea pode considerar que \u00e9 o m\u00e9todo de for\u00e7a bruta das previs\u00f5es. Vou apresentar um simples exemplo, e ent\u00e3o, mostrar como n\u00f3s aplicamos na vida real. Existe uma simula\u00e7\u00e3o feita por Larry Maccherone,<\/a> que pode facilitar o entendimento ainda mais.<\/p>\n Imagine que voc\u00ea est\u00e1 jogando um jogo de dados, no qual o objetivo \u00e9 alcan\u00e7ar a soma de 12 pontos com o menor n\u00famero de jogadas. A melhor jogada, no caso, seria jogar 2 dados consecutivos nos quais voc\u00ea tiraria o n\u00famero 6 em ambos. A pior seria jogar o dado 12 vezes e ca\u00edsse no 1 todas as vezes. O que queremos calcular com Monte Carlo \u00e9 a probabilidade de finalizar o jogo depois de N rodadas.<\/p>\n Considerando que temos 6 poss\u00edveis resultados para cada jogada de dado (6 faces) qual \u00e9 a probabilidade de terminar o jogo na primeira rodada?<\/p>\n Zero. J\u00e1 que \u00e9 imposs\u00edvel tirar 12 pontos se o dado vai at\u00e9 6.<\/p>\n E na segunda rodada?<\/p>\n \u00c9 a probabilidade de conseguir dois 6 consecutivos, e que, em estat\u00edstica b\u00e1sica, \u00e9:<\/p>\n <\/p>\n E na terceira rodada?<\/p>\n Voc\u00ea pode alcan\u00e7ar 12 pontos de diferentes maneiras: (3,3,6), (3,4,5), (3,5,4), (3,4,6), (5,5,2), (4,4,4), etc. Agora, o c\u00e1lculo estat\u00edstico n\u00e3o s\u00e3o t\u00e3o f\u00e1ceis, certo? \u00c9 a\u00ed que entra a simula\u00e7\u00e3o de Monte Carlo.<\/p>\n O que Monte Carlo faz \u00e9 simular milhares de rodadas de dados, para ent\u00e3o, analisar o resultado. Por exemplo, para saber a probabilidade de terminar o jogo na terceira rodada, a simula\u00e7\u00e3o rodaria o dado tr\u00eas vezes, somaria os pontos, e guardaria o resultado. Depois disso, iria repetir esses passos 5000 vezes e resumir quantas rodadas cada soma de pontos obteve:<\/p>\n\n
Por que n\u00e3o outros m\u00e9todos?<\/h2>\n
Throughput<\/em> m\u00e9dio<\/h3>\n
Regress\u00e3o Linear<\/h3>\n
\n
Configura\u00e7\u00e3o Manual<\/h3>\n
BAIXAR PLANILHA GR\u00c1TIS<\/span><\/a><\/p>\nSimula\u00e7\u00e3o de Monte Carlo<\/h3>\n
Jogo de dados<\/h4>\n