Muitas pessoas gestoras gostam de falar de produtividade e assertividade. “Quando minha demanda estará pronta?”, “Como ajudar meu time a entregar mais?”, são perguntas recorrentes em algumas organizações.
Um dos significados de produtividade diz respeito à capacidade de gerar resultados. Em muitos casos, acredita-se que para aumentá-la é necessário maximizar a utilização de recursos de um sistema para eliminar ou reduzir os desperdícios. E qual o problema disso? Essa é a definição do que é eficiência e otimizá-la é sempre positivo, não é mesmo?
Bom, depende. Quando falamos sobre melhorar a eficiência de um sistema, esquecemos que ela existe em diferentes tipos. As mais conhecidas são a eficiência de recursos e eficiência de fluxo.
Paradoxo da utilização de recursos
A eficiência de recursos contempla a visão analítica do seu sistema. Nela o foco é manter a ocupação máxima e, por isso, as demandas são alocadas por recursos. Pensar numa utilização próxima dos 100% até faz sentido se você estiver num contexto em que os recursos do trabalho são máquinas, ferramentas e dispositivos, por exemplo.
Mas e quando consideramos pessoas entregando valor através de software? Com certeza, o impacto da variabilidade humana é mais visível no resultado. Um exemplo que pode ser comparado a esse cenário é o do fluxo do trânsito.
Vamos considerar que a métrica de eficiência do sistema seja a vazão de carros por hora. Um congestionamento implica em menor vazão de carros e mais tempo de permanência deles na via. O que acontece, então, quando um motorista mexe no celular e perde o tempo do semáforo? Ou quando um carro que falha na hora da partida? Nessa situação, a influência da variabilidade humena é muito maior. Quando maximizamos a utilização das pistas, não há espaço de manobra e esse efeito fica ainda pior.
Ao permanecer em um congestionamento o desperdício de tempo e combustível aumenta, e a vazão de carros normalmente diminui. A partir do exemplo utilizado para o contexto de transporte, será que estamos sendo realmente eficientes utilizando o máximo da capacidade do fluxo para a entrega de software?
Por mais que seja uma ideia contraintuitiva, otimizar o fluxo pode envolver a limitação do uso de recursos e a geração de uma folga sistêmica para margem de manobra. Ficou confuso? Vou explicar melhor.
Otimização de fluxo
Ao pensar em eficiência de fluxo, no exemplo do tráfego, o objetivo não é manter todas as vias ocupadas, mas sim garantir que haja uma fluidez saudável, constante e que a vazão de carros seja maior. Por mais que a nossa primeira ideia seja pensar que ocupar 100% do espaço ajudaria, com o impacto do fator humano, teríamos mais congestionamento e menos vazão.
Olhando para o cenário de entrega de software, temos o impacto da variabilidade da demanda, da complexidade do trabalho e do fator humano. Utilizar o máximo da capacidade, então, não significa maior vazão e nem maior entrega de valor. Ao contrário disso, implica diretamente no tempo que as demandas levam para percorrer o fluxo todo.
Caso tenha ficado curioso(a) sobre o assunto, indico esse artigo do Troy Magennis sobre o impacto da utilização máxima da capacidade na métrica de lead time.
Eficiência de fluxo: por que medir?
Quando focamos em eficiência de recursos estamos atuando em um nível individual. Se o objetivo for realizar o máximo de tarefas possível por pessoa, a chance de haver um acúmulo de demandas incompletas sendo empurradas de um lado para o outro é grande.
Alguns problemas que podem ocorrer são:
- Silos de informação;
- Diminuição da colaboração;
- Várias demandas parcialmente completas e pouco valor entregue ao cliente.
Levando em consideração o aspecto dos times, trazer a medição baseada na otimização do fluxo pode ajudar as pessoas a terem um objetivo compartilhado e concentrarem-se na melhoria dos processos, além de entregarem as atividades que estão executando o mais rápido possível. A visão sistêmica é uma parte fundamental disso tudo e ajuda a equipe a ter embasamento e autonomia para tomar suas decisões.
Como fazer?
Visualize seu fluxo de trabalho
Esse primeiro passo é muito importante para proporcionar uma visão sistêmica para o seu time. Sem isso, tendemos a otimizar os lugares “errados” e não enxergar a causa raiz dos problemas recorrentes.
A visualização vai proporcionar às pessoas a análise de como as demandas caminham no fluxo e quais as possíveis decisões para aumentar a vazão de entregas de valor.
Depois de trazer essa visibilidade, analise se seu fluxo funciona assim:
Uma demanda entra, passa por algumas etapas de processamento e depois de algum tempo é entregue para o seu usuário. O problema é que muitas vezes não temos visibilidade do tempo e etapa em que as demandas estão esperando para serem trabalhadas. Nesse caso, faz sentido criar etapas de filas que mapeiem melhor os itens que estão aguardando. Isso vai ajudar a identificar quais etapas estão tendo mais acúmulo de trabalho e quanto tempo as demandas estão passando nessas filas.
Como já falamos, o tempo de espera pode ser causado por diversas razões, incluindo mudanças de prioridade, dependências, requisitos com alta incerteza, entre outros. Alguns desses aspectos podemos controlar e outros não.
Em alguns momentos, nem temos consciência de que essas esperas estão acontecendo. O Guilherme Fré abordou alguns bons exemplos sobre estoques no desenvolvimento de software nesse texto e, em resumo, eu trouxe os cenários que você pode encontrar por aí:
Outro cenário muito comum que configura uma espera são os bloqueios que encontramos durante o desenvolvimento. Porém, muitas vezes, isso ocorre nas próprias etapas de trabalho e fica complicado medir quanto tempo a demanda ficou bloqueada e quanto tempo houve trabalho aplicado.
Tendo esse custo de coordenação em vista, eu não recomendo que esse cálculo entre na eficiência de fluxo. Nesse caso, faz-se muito mais importante a visibilidade de uma métrica que mostre quantas demandas estão ficando bloqueadas por etapa e se existe alguma coluna em que isso acontece mais frequentemente. Assim, vai ser possível mapear as possíveis causas raiz desses problemas.
E vale lembrar que, haja o que houver, não crie uma coluna de “bloqueado” no seu fluxo. 🙂 Leia mais aqui.
Calcule a eficiência de fluxo
Para calcular a eficiência de fluxo atual vamos usar o lead time como métrica base. Já falamos bastante aqui no blog sobre lead time. Para os itens terminados, levaremos em consideração a quantidade de trabalho aplicado e quantidade de espera no fluxo. Mais ou menos assim:
No exemplo acima, é possível observar uma eficiência de fluxo de 37,5%. Isso nos diz que 62,5% do tempo em que nossas demandas estão em progresso, elas estão em etapas de espera. Mas como otimizar isso?
Tempos de espera ou em filas, muitas vezes, são inevitáveis em nosso sistema. Acontece de não podermos controlar algumas variáveis. É a vida. 🙂 Mas e quanto ao que podemos administrar?
A ideia é que consigamos visualizar nossas etapas de espera e otimizar as que temos possibilidade de manejo. Uma das formas de agir ativamente no que temos controle é começar a limitar o trabalho em progresso.
Limite o trabalho em progresso
Por mais contraintuitivo que pareça ser, controlar o seu trabalho em progresso (WIP) pode ajudar a trazer um equilíbrio saudável entre eficiência de fluxo e de recursos. Como? Limitar o WIP consolida a ideia de que as demandas sejam puxadas de acordo com a capacidade para sua execução e não simplesmente sejam empurradas de uma etapa para outra.
De acordo com David J. Anderson, em seu famoso livro azul, “existe causalidade entre a quantidade de trabalho em progresso e o tempo médio de espera, e essa relação é linear.” Ou seja, quanto mais acúmulo de demandas não terminadas, maior o tempo em filas, por exemplo. Esse é um estudo também corroborado pela Lei de Little ,que já conversamos aqui no Contágil podcast, e pode ser melhor compreendida nesse artigo.
Olhando pela perspectiva da colaboração, o controle do trabalho em progresso ajuda as pessoas a se dividirem melhor entre o que precisa ser feito. Afinal, quando o limite é atingido a equipe não pode começar nada novo, mas sim ajudar nas demandas no sistema que estão mais próximas de sair do fluxo.
Para iniciar o limite de WIP, minha dica é começar com o fluxo como está hoje e ir definindo os limites aos poucos. Além disso, colha feedback com a equipe para entender como eles tem visto a mudança.Aqui no blog também temos diversos artigos que vão te ajudar a começar.
Recapitulando
- Tente não cair na tentação de focar suas energias em otimizar apenas os elementos de um sistema, ter uma visão mais ampla pode te ajudar a chegar à raiz dos problemas.
- Visualize seu fluxo de trabalho como ele é hoje (não como você desejaria que fosse) e meça sua eficiência de fluxo.
- Tente limitar seu trabalho em progresso e avalie como está sendo o comportamento durante algumas semanas.
E vocês, já possuem a prática de medir o fluxo? Caso sim, como tem sido a experiência? Vou deixar abaixo algumas referências e, caso tenha se interessado pelo assunto, compartilhe conosco nos comentários ou nos encaminhe por email: contagil@plataformatec.com.br. Até breve! 😀
Referências
- Actionable Agile Metrics for Predictability: An Introduction by Daniel S. Vacanti . Page 34.
- The resources utilization paradox;
- The resources utilization trap;
- Flow efficiency – A great metric you probably aren’t using.