Pular para o conteúdo
Engenharia e DevOps

O que é Dívida Técnica?

Também conhecido como: Technical Debt, Débito Técnico

Dívida Técnica nomeia escolhas ou limitações internas que tornam mudanças futuras mais difíceis e exigem decisão sobre quando corrigir.

Dívida Técnica é a metáfora para limitações de design e implementação que tornam mudanças futuras em software mais difíceis do que precisariam ser. O esforço extra para evoluir uma parte afetada equivale aos “juros”; melhorar sua estrutura equivale a pagar o principal. Pode ser deliberada ou descoberta depois, e seu impacto depende de onde o sistema muda.

Origem

Ward Cunningham introduziu a metáfora da dívida no contexto de desenvolvimento de software em um relato apresentado na OOPSLA em 1992. A imagem ajudava a explicar por que uma implementação inicial pode permitir aprendizado e entrega, mas exige consolidação quando o entendimento do domínio melhora.

Martin Fowler ampliou o debate sobre tipos deliberados e inadvertidos de dívida e sobre os limites da analogia financeira. Seu texto esclarece que o custo extra costuma aparecer quando uma área do software precisa mudar; não cresce necessariamente a cada dia apenas pela passagem do tempo.

Fonte primária: The WyCash Portfolio Management System

Na prática

Imagine uma parte do sistema com regras duplicadas em quatro lugares. Uma mudança de política que poderia ser feita em um ponto exige localizar as cópias, alterar cada uma e testar se todas continuam coerentes. O trabalho extra é o juro da dívida. Refatorar para representar a regra uma vez pode reduzir esse custo futuro, mas também consome tempo agora. A decisão pede olhar para frequência de mudança, risco e benefício, não apenas para a aparência do código.

O que acontece quando falta

Sem tornar limitações técnicas visíveis, o time repete o mesmo esforço extra em cada alteração e o planejamento parece cada vez menos confiável. Uma dependência envelhecida pode virar urgência numa atualização de segurança. A organização percebe a lentidão, mas não enxerga a causa nem a escolha que está fazendo ao adiar a melhoria.

Uma lista enorme de pendências também não resolve o problema. O valor está em ligar cada item a uma consequência e em escolher intervenções proporcionais. Algumas dívidas podem esperar; outras precisam ser tratadas agora para manter o produto capaz de mudar e operar.

Como a Dívida Técnica gera custo de mudança

Imagine uma parte do sistema com regras duplicadas em quatro lugares. Uma mudança de política que poderia ser feita em um ponto exige localizar as cópias, alterar cada uma e testar se todas continuam coerentes. O trabalho extra é o juro da dívida. Refatorar para representar a regra uma vez pode reduzir esse custo futuro, mas também consome tempo agora. A decisão pede olhar para frequência de mudança, risco e benefício, não apenas para a aparência do código.

Nem toda dívida nasce de pressa. Um time pode escolher conscientemente uma solução limitada para testar uma hipótese e anotar quando revisá-la. Também pode descobrir depois que uma estrutura antes adequada não suporta novas necessidades. Mudança de biblioteca, de requisitos ou de conhecimento do domínio pode expor uma limitação. O importante é tornar o custo visível e escolher como lidar com ele.

A metáfora tem limites. Num empréstimo financeiro, os juros são cobrados segundo um contrato e calendário. Em software, uma área confusa pode ficar meses sem ser tocada, sem impor esforço de alteração nesse período. Outra pode mudar toda semana e consumir horas extras repetidas vezes. Segurança e obsolescência podem criar custos mesmo sem novas funcionalidades, pois exigem manutenção, resposta a vulnerabilidades ou migração de plataforma. Por isso, “toda dívida aumenta exponencialmente” é uma afirmação forte demais.

Localize o efeito. Em vez de escrever “código ruim” no Backlog, descreva a parte afetada, que mudanças ficaram lentas ou arriscadas e qual melhoria é proposta. Uma dependência antiga impede atualização de segurança? Uma suíte frágil exige verificação manual a cada release? Um módulo complexo gera defeitos quando toca determinada regra? A consequência conecta a conversa técnica ao resultado de produto.

Separe dívida de defeito e de hipótese futura. Um bug que impede comportamento acordado exige correção; uma estrutura difícil de manter pode ser dívida; um framework imaginado para uma necessidade que ainda não existe não é automaticamente dívida por não ter sido construído. A Definition of Done estabelece o padrão mínimo do Incremento. Chamar de “dívida” o trabalho que falta para cumprir a DoD não torna o item pronto no Scrum.

Priorize por risco e frequência. Uma parte muito alterada e com alto custo de mudança merece atenção próxima. Uma parte estável pode esperar, desde que segurança e operação estejam adequadas. Algumas melhorias cabem em refatorações pequenas ao tocar a área; outras exigem iniciativa planejada e coordenação com produto. Decidir não pagar agora pode ser racional se a consequência for compreendida e monitorada.

Evite a falsa troca entre qualidade e velocidade. Remover testes ou revisão para terminar hoje pode atrasar a própria entrega se defeitos e retrabalho aparecerem imediatamente. Por outro lado, exigir arquitetura para todas as possibilidades imagináveis pode consumir meses antes de aprender com usuários. A escolha prudente preserva o necessário para mudar com segurança e adia o desenho que ainda não tem justificativa.

Práticas como TDD, pair programming e CI/CD podem ajudar a manter feedback sobre qualidade, mas nenhuma ferramenta impede automaticamente dívida. Um sistema com testes pode ter uma modelagem difícil de evoluir; um pipeline rápido pode entregar defeitos rapidamente. Observe o custo real de mudar e a qualidade do produto, não apenas a presença de práticas.

O Product Owner pode ajudar a ordenar melhorias ao entender seu impacto sobre valor, risco e próximas entregas. Os Desenvolvedores explicam consequências técnicas e opções. Essa colaboração evita dois extremos: esconder trabalho técnico como se não tivesse custo, ou tratá-lo como pedido de tempo sem relação com o produto. A discussão deve incluir quando o benefício será percebido e como verificar se a melhoria reduziu atrito.

Exemplo de dívida técnica em uma migração de biblioteca

Imagine um sistema hipotético de inscrições que usa uma biblioteca antiga. A equipe consegue entregar novas telas, mas uma atualização de segurança exige migrar a integração. Nos 3 meses anteriores, cada alteração naquela área levou cerca de 5 dias, dos quais 2 foram usados em testes manuais e ajustes decorrentes da dependência. Os números são apenas do exemplo.

Antes, o time trata cada atraso como caso isolado e mantém a migração fora da conversa de produto. Quando surge uma exigência de segurança, o trabalho precisa ser feito com pressa e risco. Depois, registra a dependência, os custos observados e as opções: migrar tudo de uma vez, criar uma camada que permita troca gradual ou reduzir primeiro os passos manuais de teste. Discute com responsáveis por segurança e produto o risco de cada caminho.

O grupo escolhe uma migração incremental em 4 partes, com testes de integração que cubram as regras essenciais. A primeira parte custa mais do que uma alteração comum, mas reduz incerteza sobre o restante. Após concluir a mudança, compara o tempo de futuras alterações e a frequência de incidentes. Se não houver novas mudanças naquela área, talvez não seja possível demonstrar economia imediata em prazo; o risco de segurança, porém, também fazia parte da decisão.

Este cenário mostra por que pagar dívida não é simplesmente “limpar código”. É escolher um investimento técnico com uma consequência esperada, reconhecer incerteza e verificar depois se o sistema ficou mais seguro ou mais fácil de alterar. Um exemplo semelhante pode surgir num processo de dados, numa configuração manual ou numa integração que poucas pessoas compreendem.

Como gerir Dívida Técnica no produto

  1. Descreva o problema observável

    Indique qual parte do sistema está afetada e que mudança, incidente ou obrigação se tornou difícil. Evite registros vagos como “refatorar tudo”.

  2. Estime impacto e exposição

    Veja a frequência com que a área muda, o esforço adicional, os riscos de segurança e a dependência de pessoas ou tecnologias. Use faixas e evidências, não falsa precisão.

  3. Distinga correção de melhoria

    Verifique se há defeito ou requisito da DoD não cumprido. Separe isso de alterações internas que reduzem custo futuro de mudança.

  4. Escolha a menor intervenção útil

    Considere melhorar enquanto toca a área, criar testes que permitam mudanças seguras ou planejar uma migração maior. Compare custo agora e consequência de adiar.

  5. Combine com decisões de produto

    Explique ao Product Owner e às partes afetadas o efeito sobre entregas e riscos. Registre o acordo e não esconda trabalho técnico dentro de estimativas opacas.

  6. Verifique o resultado

    Depois da mudança, observe se alterações ficaram mais simples, se falhas diminuíram ou se riscos foram removidos. Revise a lista conforme o produto evolui.

Erros comuns com Dívida Técnica

  • Chamar qualquer trabalho técnico de dívida. Defeitos, manutenção regular e ideias futuras têm natureza e urgência diferentes.
  • Afirmar que juros crescem sempre. O custo de mudança depende do uso da área e do risco; a analogia financeira tem limites.
  • Esconder dívida do produto. Sem impacto claro, a melhoria compete no escuro com novas entregas e costuma ser adiada.
  • Exigir reescrita total. Mudanças pequenas e graduais podem reduzir risco sem interromper todo o serviço.
  • Ignorar área pouco alterada e crítica. Baixa frequência de mudança não elimina risco de segurança, conformidade ou operação.
  • Cortar a DoD para criar velocidade. Trabalho sem qualidade mínima não vira Incremento pronto apenas porque foi rotulado como dívida futura.

Visão K21

O que a gente aprendeu na prática sobre Dívida Técnica

Avelino Ferreira Gomes Filho, em Dívida Técnica: o que é, como surge e como resolver, relata dificuldades numa migração tecnológica e lembra que a dívida pode aparecer por mudança do ambiente, mesmo quando a implementação original fazia sentido. A gente considera esse tipo de risco na conversa com produto, sem reduzir toda manutenção a um erro do time.

Rodrigo de Toledo, em Dívida Técnica e Juros Compostos, alerta para o extremo oposto: construir estrutura antecipada que ainda não é necessária também custa. Avelar Leão, em Liquidando Dívidas Técnicas, usa imagens de pagamento para discutir a continuidade da melhoria. São metáforas úteis, desde que não se assuma que toda dívida cresce exatamente como um empréstimo financeiro.

Baseado nos posts: Dívida Técnica: O que é, como surge e como resolver; Dívida Técnica e Juros Compostos; Liquidando Dívidas Técnicas

Para se aprofundar

No blog da K21

Fontes primárias

Termos relacionados

Perguntas frequentes

Quem criou o conceito de Dívida Técnica?

Ward Cunningham introduziu a metáfora em um relato de 1992 sobre desenvolvimento de software. A ideia relaciona uma solução inicial que permite avançar e o custo posterior de consolidar o entendimento no código. Depois, autores como Martin Fowler exploraram tipos e limites da comparação com dívida financeira. O termo não significa que toda decisão rápida seja prudente.

Dívida Técnica sempre precisa ser paga?

Não da mesma forma nem imediatamente. Uma área que quase não muda pode impor pouco custo de alteração, enquanto outra muito usada pode cobrar esforço extra constantemente. Riscos de segurança e operação também contam. Decida com base em impacto e exposição, registre a escolha e revise quando o contexto mudar. Algumas melhorias cabem em pequenos passos.

Qual é a diferença entre bug e Dívida Técnica?

Um bug é um comportamento que não atende ao resultado esperado. Dívida Técnica descreve uma limitação interna que torna futuras mudanças mais difíceis ou arriscadas. Eles podem coexistir: uma estrutura confusa pode favorecer defeitos. Corrigir o comportamento não elimina necessariamente a causa, e refatorar a estrutura não dispensa corrigir o bug observado.

Como mostrar Dívida Técnica para o Product Owner?

Descreva uma consequência de negócio ou de entrega: alterações que levam tempo extra, risco de segurança, dificuldade de recuperar falhas ou dependência de uma tecnologia sem suporte. Traga exemplos recentes, opções de intervenção e o custo de adiar. Isso permite comparar o investimento técnico com outras prioridades sem exigir que o PO avalie detalhes de código.

Refatoração e Dívida Técnica são sinônimos?

Não. Refatoração altera a estrutura interna preservando o comportamento observável e pode ser uma forma de reduzir dívida. Também pode melhorar clareza continuamente sem que exista um débito relevante. Dívida Técnica é uma metáfora para custo ou risco futuro; a decisão de refatorar depende de onde esse custo aparece e do que a intervenção resolverá.

Curso K21 recomendado

Certified ScrumMaster® (CSM)

Scrum Alliance · 16 horas ao vivo

Ver curso
Adicione como fonte preferencial no Google