Por que melhorar a restrição importa—e todo o resto não.
Na década de 1980, Eli Goldratt desenvolveu a Teoria das Restrições (TOC). A ideia central é simples, mas profunda:
Todo sistema tem uma restrição—uma etapa que limita a capacidade de entrega do todo.
Pense em uma rodovia: se um trecho está congestionado, toda a rodovia fica mais lenta. Alargar os trechos livres não ajuda. Você precisa resolver o trecho congestionado.
O mesmo se aplica aos fluxos de valor. Se a revisão de código é o gargalo, tornar o desenvolvimento mais rápido apenas cria uma pilha maior na revisão de código. Se os testes são a restrição, contratar mais desenvolvedores apenas significa mais trabalho esperando pelo QA.
O sistema só pode avançar tão rápido quanto sua restrição mais lenta.
Isso tem implicações poderosas para a melhoria: melhorar qualquer coisa que não seja a restrição é teatro. Pode parecer produtivo, mas não tem efeito na capacidade de entrega geral.
O Poder do Foco
A TOC diz exatamente onde focar: a restrição. Ignore todo o resto até que a restrição seja quebrada. Depois encontre a nova restrição e repita. Isso evita a armadilha comum de otimizar em todos os lugares sem resultados.
Como você encontra a restrição? Procure onde o inventário (trabalho) se acumula.
A restrição tem uma pilha de trabalho esperando na frente dela. Se a revisão de código sempre tem um backlog, a revisão de código provavelmente é a restrição. Se os testes têm semanas de trabalho na fila, os testes provavelmente são a restrição.
Outros sinais de restrições:
Restrições comuns em software:
Observação: a restrição frequentemente não é uma etapa "produtiva". Pode ser um tomador de decisões. Pode ser um processo de aprovação. Pode ser um recurso compartilhado.
Uma equipe mede e encontra trabalho se acumulando no deploy. Apenas uma pessoa sabe como fazer deploy. Ela tem tempo para um deploy por semana. Todo o resto espera. Solução: automatizar o deploy e disseminar o conhecimento. A capacidade de entrega dobra.
A gestão vê desenvolvedores 'subutilizados' (90% vs. 100%) e atribui mais trabalho. Os desenvolvedores aceleram. Mas o deploy é a restrição—ainda é uma vez por semana. O lead time não melhora. O inventário na frente do deploy cresce.
A TOC prescreve um processo de cinco etapas:
1. Identificar a restrição: Encontre onde o trabalho se acumula.
2. Explorar a restrição: Maximize a capacidade de entrega através da restrição sem adicionar recursos. Se a revisão de código é a restrição, priorize revisões em vez de novo desenvolvimento. Certifique-se de que os revisores não estão distraídos. Reduza o tamanho dos PRs para que as revisões sejam mais rápidas.
3. Subordinar todo o resto: As não-restrições devem servir à restrição. Se o QA é a restrição, não empurre mais trabalho para o QA—ajuste o ritmo do desenvolvimento para corresponder à capacidade do QA.
4. Elevar a restrição: Se a exploração e a subordinação não forem suficientes, adicione capacidade à restrição. Treine mais revisores. Automatize os testes. Contrate mais da habilidade restrita.
5. Repetir: Uma vez que você quebra uma restrição, outra emerge. A restrição se move. Encontre-a e repita.
Isso é melhoria contínua e iterativa. Você está sempre focado na restrição atual, não disperso por todas as etapas.
A metáfora tambor-pulmão-corda: A restrição é o "tambor" que define o ritmo. O trabalho antes da restrição é o "pulmão". A "corda" puxa o trabalho para o sistema no ritmo que a restrição pode lidar—não mais rápido.
A Restrição Errante
Quando você quebra uma restrição, outra etapa se torna a nova restrição. Isso é normal. Mas se a restrição vagueia aleatoriamente (às vezes dev, às vezes QA, às vezes deploy), seu sistema está instável. Estabilize primeiro, depois otimize.