Dívida técnica é um empréstimo, e todo empréstimo tem um nome
A dívida não é o atalho. É o atalho sem dono, sem prazo e sem data de pagamento. Conserte a metáfora e o backlog anda.
A metáfora da dívida técnica é mais velha que a maioria das bases de código que a carregam, e já está gasta. Os times dizem 'temos muita dívida técnica' do jeito que dizem 'o tempo está ruim': uma condição, culpa de ninguém, nada a fazer além de reclamar. Não é assim que empréstimos funcionam.
Um empréstimo de verdade tem um tomador, um principal, uma taxa de juros e uma data de vencimento. Quando qualquer um deles falta, não é um empréstimo. É um presente, um roubo ou uma bagunça. A maior parte da dívida técnica que audito é bagunça, e a correção é devolver a ela o que um empréstimo tem.
O nome
Todo atalho foi tomado por alguém, por um motivo, sob uma pressão. O commit existe. O pull request teve revisor. Quando um time diz 'ninguém sabe por que isso é assim', o que quer dizer é que o tomador foi embora, ou nunca foi anotado.
Então a primeira regra: a dívida ganha um nome no momento em que é contraída. Não para culpar, mas para guardar o contexto. Um comentário, um ticket, uma linha num ADR: 'pulamos os retries no cliente de pagamento para bater a data de lançamento, o dono é este time, revisitar depois do primeiro mês de tráfego'. A pessoa que fez é quem sabe como é a versão segura.
Dívida com nome é paga. Dívida sem nome é herdada, e herdeiros não pagam dívidas cujos termos não conseguem ver.
Os juros
Nem toda dívida custa o mesmo. Um teste faltando numa página administrativa interna custa quase nada por mês. Uma verificação de autenticação feita na mão e duplicada em vinte handlers custa toda vez que alguém adiciona uma rota e esquece, e o pagamento vem como incidente de segurança.
Os juros são o custo recorrente: a hora extra em cada feature que toca a área, o incidente por trimestre, a semana de onboarding perdida explicando uma gambiarra. Peço aos times que estimem em horas por mês, por alto. O número está sempre errado e é sempre útil, porque transforma 'deveríamos refatorar isso' em 'isso nos custa um dia por semana', que um product owner consegue pesar.
A dívida de juros altos geralmente não é o código mais feio. É o atalho que fica no caminho principal: o modelo de dados que obriga toda consulta a juntar cinco tabelas, a idempotência que falta no endpoint que todo cliente reenvia, o deploy que exige um passo manual. Pague esses primeiro, por mais que o código feio incomode.
O prazo
Alguma dívida é para ser permanente. Os atalhos de um protótipo são aceitáveis se o protótipo for jogado fora. Um shim de migração é aceitável se a migração terminar. A falha é quando coisas temporárias não têm data de fim, e o shim vira estrutural.
Então toda dívida nomeada ganha um prazo: uma data, um marco ou um gatilho. 'Até passarmos de dez mil pedidos por dia'. 'Até o segundo cliente assinar'. 'Até o planejamento do próximo trimestre'. Quando o prazo chega, a dívida é paga ou conscientemente refinanciada com um prazo novo, por alguém que consegue dizer por quê.
O livro-razão
Com nomes, juros e prazos, a dívida pode ser listada. Mantenho um único livro-razão por sistema: uma página, cada entrada com o que foi pulado, por quê, quem é o dono, o custo mensal estimado e o prazo. Vinte linhas é o típico. Duzentas significa que o livro está sendo usado como lista de desejos, e listas de desejos não são dívidas.
O livro-razão muda as conversas. Em vez de 'precisamos de uma sprint de refatoração', que nenhum product owner jamais amou, o pedido vira 'estas três entradas nos custam cerca de seis dias por mês e passaram do prazo, aqui está o plano de duas semanas para fechá-las'. Isso é um caso de negócio, e geralmente ganha.
O que isso pede dos engenheiros
Pede o desconforto de colocar seu nome ao lado de um atalho. Engenheiros evitam isso porque parece admitir culpa. É o oposto. Assinar um atalho diz: eu entendi a troca, fiz de propósito, e sei como é pagar de volta. Essa é a marca de alguém em quem se pode confiar para o próximo.
A dívida não é o problema. Dívida sem nome, sem estimativa de juros e sem prazo é o problema, porque não dá para raciocinar sobre ela e por isso nunca é paga. Dê nome a cada empréstimo e o backlog começa a andar.