Capa do Ebook gratuito Qualidade de Software com Métricas: Do Bug ao Indicador de Processo

Qualidade de Software com Métricas: Do Bug ao Indicador de Processo

Novo curso

20 páginas

Taxa de retrabalho e eficiência do processo de desenvolvimento

Capítulo 5

Tempo estimado de leitura: 0 minutos

+ Exercício

O que é taxa de retrabalho

Taxa de retrabalho é uma métrica que estima quanto do esforço de desenvolvimento foi gasto refazendo trabalho que já deveria estar “pronto” em algum nível (código, testes, documentação, configuração, requisitos), em vez de avançar com novas entregas. Na prática, retrabalho aparece quando uma mudança precisa ser reaberta, reimplementada, revalidada ou replanejada por causa de defeitos, lacunas de entendimento, inconsistências técnicas, falhas de integração, requisitos incompletos ou decisões de design que não se sustentaram.

O objetivo de medir retrabalho não é “caçar culpados”, e sim tornar visível o custo de fricções do processo. Retrabalho alto costuma indicar desperdício: tempo de engenharia consumido para voltar ao passado, reduzindo a capacidade de entregar valor novo e aumentando a variabilidade do fluxo.

Retrabalho não é o mesmo que iteração saudável

Nem toda mudança é retrabalho. Ajustes esperados por descoberta (por exemplo, refinar uma interface após feedback de uso) podem ser iteração legítima. Retrabalho, no sentido de métrica, é o esforço que poderia ter sido evitado com práticas e decisões melhores no momento certo. Para separar os dois, é útil classificar o motivo da mudança: “mudança de escopo/descoberta” versus “correção de erro/omissão”.

Como retrabalho se relaciona com eficiência do processo

Eficiência do processo de desenvolvimento, neste contexto, é a capacidade de transformar esforço (tempo, pessoas, atenção) em entregas que passam pelos critérios de pronto com o mínimo de desperdício. Retrabalho é um dos desperdícios mais caros porque:

  • Consome capacidade: horas gastas corrigindo e revalidando não geram novas funcionalidades.

    Continue em nosso aplicativo

    Você poderá ouvir o audiobook com a tela desligada, ganhar gratuitamente o certificado deste curso e ainda ter acesso a outros 5.000 cursos online gratuitos.

    ou continue lendo abaixo...
    Download App

    Baixar o aplicativo

  • Aumenta filas e interrupções: itens reabertos competem com trabalho em andamento, elevando troca de contexto.

  • Amplifica risco: correções urgentes tendem a reduzir rigor, criando ciclos de defeitos.

  • Reduz previsibilidade: o time planeja com base em “trabalho novo”, mas parte da capacidade é sugada por rework não previsto.

Uma forma prática de pensar: eficiência melhora quando o time aumenta a proporção de tempo em “trabalho de primeira passagem” (first-pass yield) e reduz retornos de fase (por exemplo, voltar de “pronto para teste” para “em desenvolvimento”).

Definindo retrabalho de forma mensurável

Para medir, é necessário definir o que conta como retrabalho no seu contexto. Abaixo estão definições comuns e como operacionalizá-las sem depender de interpretações subjetivas.

Eventos típicos que contam como retrabalho

  • Reabertura de item: história/tarefa/bug que foi marcado como concluído e depois voltou para desenvolvimento.

  • Correção pós-merge: commits de correção logo após integrar uma mudança (hotfix, follow-up fix) para a mesma funcionalidade.

  • Falha em testes/QA por defeito: item retorna por bug que deveria ter sido capturado antes (ex.: testes unitários ausentes, contrato quebrado).

  • Falha de integração: conflitos recorrentes, build quebrado, dependências incompatíveis que exigem refazer parte do trabalho.

  • Reescrita por decisão técnica tardia: refatoração grande motivada por arquitetura inadequada para o requisito já conhecido.

  • Correção de requisitos incompletos: retrabalho causado por critérios de aceitação insuficientes, ambiguidades ou casos de borda não mapeados.

O que normalmente não deve entrar como retrabalho

  • Refatoração planejada (com objetivo explícito e acordado) para reduzir dívida técnica.

  • Melhoria incremental baseada em feedback real de usuários, quando a necessidade não era conhecida no momento da implementação.

  • Trabalho exploratório (spikes) com aprendizado como entrega.

Se o time mistura esses casos, a métrica perde utilidade porque passa a punir evolução saudável do produto.

Formas práticas de calcular a taxa de retrabalho

Existem várias maneiras de medir. O ideal é escolher uma que seja: (1) simples de coletar, (2) consistente ao longo do tempo, (3) acionável. Abaixo estão três abordagens comuns.

1) Taxa de retrabalho por reabertura de itens

Boa quando o time usa um sistema de issues e o fluxo tem estados claros.

Fórmula (por período):

taxa_retrabalho_reabertura = itens_reabertos / itens_concluidos

Exemplo: em um sprint, 40 itens foram concluídos e 6 foram reabertos. Taxa = 6/40 = 15%.

Vantagens: coleta fácil; sinaliza problemas de definição de pronto, testes e entendimento.

Limitações: nem todo retrabalho reabre item (às vezes vira “ajuste rápido”); reaberturas podem ser por mudança legítima.

2) Taxa de retrabalho por esforço (horas/pontos)

Boa quando o time consegue registrar esforço de forma minimamente confiável (timesheet, apontamento leve, ou estimativas de correção).

Fórmula (por período):

taxa_retrabalho_esforco = esforco_em_retrabalho / esforco_total

Exemplo: 320 horas totais no mês; 70 horas em correções de defeitos, reaberturas e ajustes pós-merge. Taxa = 70/320 = 21,9%.

Vantagens: aproxima o custo real; permite comparar áreas (ex.: frontend vs backend).

Limitações: exige disciplina de registro; pode gerar distorções se o time “subnotifica” retrabalho.

3) Taxa de retrabalho por churn de código (proxy)

Boa quando você quer uma medida automatizável via Git, mesmo sem apontamento de horas.

Ideia: medir quanto código é reescrito em um intervalo curto após ser introduzido (ex.: linhas adicionadas e removidas na mesma área em até 14 dias).

Exemplo de proxy:

churn_curto_prazo = (linhas_removidas_em_ate_14_dias) / (linhas_adicionadas_no_periodo)

Vantagens: automatizável; detecta instabilidade.

Limitações: churn pode ser refatoração boa; linhas de código não equivalem a valor; precisa de interpretação cuidadosa.

Passo a passo para implementar a medição no time

O passo a passo abaixo prioriza baixo atrito e aprendizado rápido. A ideia é começar simples, estabilizar a coleta e só então sofisticar.

Passo 1: Escolha uma definição operacional mínima

Defina, em uma frase, o que será contado como retrabalho no primeiro ciclo de medição. Exemplo prático:

  • “Retrabalho é todo item reaberto após concluído, e toda correção de bug criada para algo entregue no mesmo sprint ou no sprint anterior.”

Essa definição cria um recorte temporal que ajuda a focar em problemas de primeira passagem, sem misturar manutenção de longo prazo.

Passo 2: Crie categorias de causa (taxonomia) simples

Para tornar a métrica acionável, registre o motivo do retrabalho. Use poucas categorias para evitar burocracia. Um conjunto inicial útil:

  • Requisito/escopo: critério de aceitação incompleto, regra de negócio ambígua, caso de borda não mapeado.

  • Implementação: bug lógico, validação ausente, erro de cálculo, tratamento de erro inadequado.

  • Teste: cobertura insuficiente, teste frágil, ambiente de teste inconsistente.

  • Integração/DevOps: pipeline, configuração, dependências, migração de banco, feature flag.

  • UX/Produto: fluxo confuso, texto, acessibilidade, comportamento inesperado.

Regra prática: se mais de 20% cai em “Outros”, revise as categorias.

Passo 3: Ajuste o fluxo de trabalho para capturar o dado

Evite planilhas paralelas. Use o que o time já usa (issue tracker e pull requests). Sugestões:

  • Ao reabrir um item, exigir seleção de “Motivo da reabertura”.

  • Ao criar bug, exigir campo “Origem”: “regressão”, “defeito de requisito”, “defeito de implementação”, “ambiente”.

  • Ao fazer merge de correção, referenciar a issue e marcar como “retrabalho” via label.

Passo 4: Defina a janela de medição e o ritmo de revisão

Escolha um período fixo (semanal, quinzenal ou por sprint). Em times ágeis, por sprint costuma funcionar bem. O importante é manter consistência para observar tendências.

Inclua uma revisão curta e objetiva, por exemplo 15–20 minutos, com três perguntas:

  • Qual foi a taxa de retrabalho do período?

  • Quais foram as 2–3 principais causas?

  • Qual experimento vamos fazer para reduzir a principal causa?

Passo 5: Estabeleça um baseline antes de “otimizar”

Meça por 3 a 6 ciclos sem grandes mudanças, apenas garantindo qualidade do dado. Isso cria um baseline. Sem baseline, qualquer intervenção pode parecer boa ou ruim por variação natural.

Passo 6: Conecte retrabalho a capacidade e planejamento

Para que a métrica influencie decisões, explicite o impacto na capacidade. Um método simples:

  • Calcule a taxa de retrabalho por esforço (ou use reaberturas como proxy).

  • Reserve capacidade para retrabalho esperado com base no baseline.

Exemplo: se o baseline é 20% de retrabalho, planeje apenas 80% da capacidade para trabalho novo. Isso reduz “atrasos surpresa” e torna o custo do retrabalho visível.

Indicadores complementares para entender eficiência

A taxa de retrabalho sozinha diz “quanto”, mas não explica “onde” e “por quê”. Combine com indicadores que apontem gargalos e qualidade de primeira passagem.

First-pass yield (FPY) por etapa

FPY mede a proporção de itens que passam por uma etapa sem voltar. Exemplo: quantos itens saem de “Em teste” para “Pronto” sem retornar para “Em desenvolvimento”.

FPY_teste = itens_que_passaram_no_teste_sem_retorno / itens_que_entraram_em_teste

FPY baixo em teste sugere problemas de critérios de aceitação, testes automatizados insuficientes ou revisão de código fraca.

Taxa de defeitos pós-release (quando aplicável)

Se o time tem releases frequentes, acompanhar defeitos detectados após disponibilização ajuda a separar retrabalho “interno” (antes de release) de retrabalho “externo” (após release), que costuma ser mais caro por envolver suporte, incidentes e interrupções.

Distribuição do retrabalho por tipo

Um gráfico simples (pizza ou barras) com as causas de retrabalho por período costuma revelar padrões. Exemplos de leituras:

  • Requisito/escopo alto: investir em refinamento, exemplos, critérios de aceitação testáveis, alinhamento com stakeholders.

  • Integração/DevOps alto: investir em pipeline, ambientes reproduzíveis, testes de contrato, migrações automatizadas.

  • Implementação alto: investir em revisão de código, pairing em partes críticas, testes unitários e de integração.

Exemplos práticos de retrabalho e como reduzir

Exemplo 1: Reabertura por caso de borda não especificado

Cenário: uma história “Aplicar cupom de desconto” é entregue, mas em produção descobrem que cupons não podem ser aplicados em itens já promocionais. O item é reaberto.

Como registrar: retrabalho por “Requisito/escopo”.

Ações de processo:

  • Adicionar checklist de refinamento: regras de combinação, exceções, exemplos numéricos.

  • Exigir critérios de aceitação com exemplos (tabela de casos) para regras de preço.

  • Adicionar testes automatizados para cenários de promoção.

Exemplo 2: Correções pós-merge por falta de testes de integração

Cenário: após merge de uma mudança em API, o frontend quebra porque o contrato mudou. Surge um “fix rápido” no mesmo dia.

Como registrar: retrabalho por “Integração/DevOps” ou “Teste” (dependendo da causa raiz).

Ações de processo:

  • Testes de contrato (consumer-driven) para endpoints críticos.

  • Versionamento de API e depreciação gradual.

  • Pipeline bloqueando merge quando contrato é quebrado.

Exemplo 3: Retrabalho por revisão de código tardia

Cenário: PR grande fica dias sem revisão. Quando revisado, pede mudanças estruturais e o autor precisa refazer boa parte.

Como registrar: retrabalho por “Processo de revisão” (pode ser subcategoria de Implementação).

Ações de processo:

  • Limitar tamanho de PR (ex.: até X arquivos ou X linhas).

  • Política de revisão em 24h para PRs pequenas.

  • Pairing ou mob review em mudanças de alto risco.

Armadilhas comuns ao usar taxa de retrabalho

Transformar a métrica em meta individual

Se a taxa vira cobrança por pessoa, o efeito típico é subnotificação: bugs viram “melhorias”, reaberturas viram tarefas novas, e a métrica perde credibilidade. Retrabalho é fenômeno sistêmico; o uso saudável é orientar melhorias no processo e decisões de investimento.

Comparar times sem contexto

Times que atuam em áreas diferentes (produto novo vs legado, sistemas críticos vs experimentais) têm perfis de retrabalho distintos. Comparações diretas geram incentivos errados. Prefira comparar o time com ele mesmo ao longo do tempo e, quando comparar times, normalize por tipo de trabalho e risco.

Ignorar severidade e custo

Dois retrabalhos podem ter o mesmo “1 item reaberto”, mas custos muito diferentes. Sempre que possível, complemente com esforço estimado ou com uma classificação simples de impacto (baixo/médio/alto).

Não separar retrabalho preventivo de corretivo

Algumas atividades parecem retrabalho, mas são investimento preventivo (por exemplo, reforçar testes antes de uma mudança grande). Se tudo entra no mesmo saco, o time pode evitar ações preventivas para “melhorar a taxa”, aumentando defeitos depois.

Como usar a métrica para melhorar eficiência: experimentos de curto prazo

Após identificar a principal causa de retrabalho no período, escolha um experimento pequeno, com duração de 1 a 2 sprints, e defina como avaliar. Exemplos:

  • Se retrabalho por requisito/escopo é alto: introduzir “exemplos obrigatórios” nos critérios de aceitação (pelo menos 3 casos: padrão, borda, erro) e medir redução de reaberturas por essa causa.

  • Se retrabalho por implementação é alto: exigir teste unitário mínimo para módulos críticos e medir queda de bugs de regressão no mesmo período.

  • Se retrabalho por integração é alto: adicionar etapa de teste de contrato no pipeline para 2 serviços mais problemáticos e medir redução de correções pós-merge.

  • Se retrabalho por revisão tardia é alto: limitar WIP de PRs abertas e medir redução de “refações” pedidas na revisão.

Para cada experimento, registre: hipótese, mudança aplicada, período, e resultado na taxa de retrabalho e na distribuição de causas. Mesmo quando a taxa não cai, o time aprende onde o problema não está.

Modelo de painel simples (dashboard) para acompanhar

Um painel enxuto, atualizado por sprint, costuma ser suficiente:

  • Taxa de retrabalho (reaberturas): % de itens reabertos.

  • Taxa de retrabalho (bugs recentes): número de bugs criados para itens entregues no sprint atual/anterior.

  • Top 3 causas: distribuição por categoria.

  • FPY em teste: % que não retorna de teste.

O valor do painel está menos no número absoluto e mais na tendência e no vínculo com ações concretas (experimentos) que o time decide executar.

Agora responda o exercício sobre o conteúdo:

Qual prática ajuda a manter a métrica de taxa de retrabalho útil e evitar que ela puna evolução saudável do produto?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Separar correção de erro/omissão de mudança de escopo/descoberta ajuda a distinguir retrabalho evitável de iteração legítima, mantendo a métrica acionável e evitando penalizar melhorias baseadas em aprendizado.

Próximo capitúlo

Densidade de defeitos e qualidade do produto em produção

Arrow Right Icon
Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.