Produtividade de times ágeis

Ana Carolina Martins de Freitas
TOTVS Developers
Published in
6 min readNov 12, 2020

Por que métodos ágeis? Qual é a expectativa?

Sabemos que um dos principais motivadores para adoção dos métodos ágeis é justamente a expectativa do aumento da produtividade nos times de desenvolvimento.

Quando falamos de agilidade, logo vem em mente um modelo de trabalho mais humanizado e mais colaborativo, e quando falamos de desenvolvimento de software estamos falando de trabalho do conhecimento. Dentro desse contexto, o que é de fato produtividade? Quais fatores influenciam a produtividade? Como medir a produtividade?

Antes de respondermos essas perguntas, é muito importante esclarecermos as diversas definições que temos: produtividade, eficácia, eficiência e performance:

Performance = Está relacionada à capacidade de melhorar sempre como time. Aqui envolve aspectos como qualidade do serviço/produto e dos processos, flexibilidade (capacidade de adaptar às necessidades), autonomia (menos dependências) e velocidade de entrega (time-to-market);

Eficiência = É a capacidade de produzir saídas com qualidade (efetividade) com o melhor aproveitamento dos recursos de entrada (eficiência). MESMO as não tão importantes para o trabalho (que não agregam valor), ou seja, fazer as coisas do jeito certo.

Eficácia = É a capacidade de oferecer produtos ou serviços adequados a públicos específicos, ou seja, fazer a coisa certa.

Produtividade = É a relação entre a quantidade produto produzido corretamente que satisfaz as especificações e a quantidade de recursos que são utilizados na produção. Ou seja, é a busca por fazer mais com o mesmo agregando valor.

A produtividade de um time ágil está muito relacionada à capacidade de entregar funcionalidades de alto valor para o cliente o mais cedo possível. Então, vejam que não estamos falando só de “tempo” mas também de “valor”. Podemos ter um time entregando muito, mas, muitas coisas que os clientes talvez nunca usem.

Quando falamos de produtividade, o intuito é reduzir custos de desenvolvimento e melhorar o tempo gasto para entregar um produto que agregue valor ao cliente (time-to-market).

Todos esses conceitos se complementam, não adianta fazer do jeito certo a coisa errada ou a coisa certa do jeito errado e, por isso, a ambidestria organizacional visa manter o equilíbrio desses conceitos buscando objetivos e demandas eficazes e um fluxo de desenvolvimento eficiente.

Desperdícios

“Um time se torna mais produtivo quando ele conhece o que o deixa improdutivo”

Roberto Brasileiro

Um ponto importante quando falamos de produtividade é entender quais são os principais fatores que influenciam a produtividade dos times, desde aspectos humanos dos membros, até fatores externos ao projeto que está sendo desenvolvido. Entendendo os fatores, os membros de time, líderes e gerentes ganham maior sensibilidade para notar quando algo errado está acontecendo, o que permite uma ação mais rápida sobre o problema.

E uma maneira de conhecer esses fatores, é identificando os desperdícios

Quando falamos em melhoria contínua no Lean, estamos falando em eliminar desperdícios. Desperdício é tudo aquilo que não agrega valor ao fluxo produtivo.

Segundo Poppendieck (2011, p.87) Um forte candidato à causa raíz do desperdício no desenvolvimento de software é a complexidade do código. A complexidade calcifica e faz com que o código se torne frágil e quebradiço e isso faz com que seja praticamente impossível modificá-lo de maneira segura.

E o que fazer quando já se tem um legado extremamente complexo?

Controlar a Complexidade

Como?

Escrevendo menos código!

Por que?

O custo da complexidade é exponencial. Quanto mais código, maior a complexidade….

Por isso, a maior prioridade de um time de desenvolvimento deve ser manter a base do código simples, limpa e pequena.

Poppendieck (2011, p.89) descreve 3 passos para o controle da complexidade:

Justifique toda a funcionalidade, ou seja, limitar de forma agressiva as características e funções que serão colocadas no produto. Toda linha de código custa dinheiro para ser escrita e mais dinheiro ainda para mantê-la.

Conjunto mínimo de funcionalidades úteis — É aquele que ajuda o cliente a fazer uma parte útil dos seus trabalhos. Ele usa o produto mais depressa, e mais depressa a gente descobre como ele realmente gostaria que o produto funcionasse.

Não automatize a complexidade
Qualquer processo que seja candidato à automação deve, primeiramente, ser esclarecido e simplificado.

Os 8 desperdícios do Lean

No fluxo do desenvolvimento de software existem ainda outros desperdícios que precisam ser descobertos e eliminados para redução de custos, mais fluidez e, consequentemente, produtos mais efetivos.

Trabalho inacabado:

É todo o estoque do desenvolvimento de software. Documentação ainda não codificada, código ainda não sincronizado, código ainda não testado, código ainda não documentado, código ainda não instalado.

Funcionalidades Extras:

Adicionar funcionalidades que não são necessárias para que o trabalho do cliente seja realizado é considerado o pior dos 8 desperdícios. Se não existe necessidade, não DEVE ser desenvolvida!

Trabalho Desnecessário:

Fazer coisas demais que não agregam valor. Pode ser, por exemplo, um processo inchado, onde as pessoas fazem coisas que não sabem nem por que.

Transferência de controle:

Entregar uma documentação na mão do programador e esperar que ele entregue o que o cliente realmente quer. Quando fazemos isso, muito conhecimento é deixado para trás. Estima-se que a cada transferência perde-se aproximadamente 50% do conhecimento.

Troca de Tarefas

Quando profissionais do conhecimento possuem três a quatro tarefas para serem realizadas ao mesmo tempo, eles passam mais tempo reinicializando suas mentes para trocar de uma tarefa para outra do que de fato trabalhando nelas.

O estudo de Gerald Weinberg quantifica a perda em função de trocas de contexto de projetos.

Atrasos:

Todo tipo de espera e/ou dependências. Filas dentro do fluxo de desenvolvimento. Esperar pelos outros para tomar decisões, esperar pela aprovação, esperar para a alocação de pessoas/recursos, esperar que todo o sistema fique pronto, esperar que o código seja testado.

Defeitos:

São os defeitos propriamente ditos. Uma equipe boa e ágil tem uma taxa de defeitos extremamente baixa, pois o foco está em produzir código à prova de falhas. Achar defeitos o mais rapidamente possível e procurar formas de impedir que aquela espécie de defeito ocorra novamente.

Intelectual

O desperdício intelectual acontece quando não utilizamos adequadamente as habilidades e os conhecimentos das pessoas de nossa equipe. Qualificação não utilizada é recurso desperdiçado.

“Velocidade é ausência de desperdício”

Quando trabalhamos para eliminar os desperdício, aumentamos a porcentagem de tempo gasto adicionando valor durante cada ciclo do processo e entregamos mais rápido — provavelmente muito mais rápido.

Eficiência de Fluxo

A eficiência de fluxo é uma métrica que nos mostra quão eficiente é o nosso fluxo e por meio dela é possível identificar os pontos de desperdícios (ineficiência) para removê-los.

Ela examina dois componentes básicos que compõem o nosso lead time: tempo de trabalho e tempo de espera.

O tempo de espera acontece por vários motivos: dependências/impedimentos, mudança de prioridade, Falta de controle de WIP, falta de objetivo, falha de comunicação e por ai vai… Ou seja, o trabalho em andamento nem sempre está em andamento.

Como ela é calculada?

Verifica-se tudo que foi concluído dentro de um período (um sprint, um ciclo, uma iteração) e divide-se o tempo de trabalho ativo pelo tempo de processamento geral.

No mercado, as empresas que não estão prestando atenção a este conceito geralmente têm uma eficiência de fluxo de 15%, ou seja, o trabalho normalmente gasta 85% do seu ciclo de vida esperando por algo.

David Anderson diz que uma boa eficiência de fluxo é acima de 40%.

Performance

Já falamos que a performance está relacionada a melhorar sempre como time. E como podemos definir uma equipe de alta-performance?

“Uma equipe de alta performance pode ser definida como um grupo de pessoas que possuem talentos e competências que se complementam, que estão alinhados e comprometidos com um objetivo em comum.”

Roberto Brasileiro

Equipes de alta-performance possuem objetivos claros e tangíveis e desenvolvem a autonomia, multidisciplinariedade e foco para atingi-los. São equipes extremamente ativas, que não esperam para resolver os problemas, compartilham conhecimento e possuem uma liderança focada na evolução das pessoas e na relação de confiança. E equipes de alta-performance querem criar uma história, deixar um legado.

--

--