Kaique Mitsuo Silva Yamamoto
StartupProduto

Tech Debt — Divida Tecnica

O que e divida tecnica, tipos (inadvertida, deliberada, rotten code), Tech Debt Quadrant de Martin Fowler e como gerenciar no backlog.

O que e?

Tech Debt (divida tecnica) e o custo de manutencao futura gerado por atalhos tecnicos tomados no presente. Assim como divida financeira, a divida tecnica acumula "juros" — quanto mais tempo sem pagar, mais caro fica.

O termo foi cunhado por Ward Cunningham em 1992:

"Shipping first-time code is like going into debt. A little debt speeds development so long as it is paid back promptly with refactoring."

Divida tecnica nao e sempre ruim. As vezes, assumir divida deliberadamente faz sentido — desde que voce saiba que esta fazendo e planeje pagar.


Como funciona

Tech Debt Quadrant (Martin Fowler)

Martin Fowler classificou a divida tecnica em 4 quadrantes:

                    Deliberada              Inadvertida
               ┌──────────────────┬──────────────────┐
  Prudente     │ "Sabemos que      │ "Agora que        │
               │  nao e ideal,     │  terminamos,      │
               │  mas precisamos   │  percebemos como  │
               │  lancar agora"    │  deveriamos ter    │
               │                   │  feito"            │
               ├──────────────────┼──────────────────┤
  Imprudente   │ "Nao temos tempo  │ "O que sao         │
               │  para design"     │  design patterns?" │
               │                   │                    │
               └──────────────────┴──────────────────┘

Prudente + Deliberada = Aceitavel (pague rapido)
Prudente + Inadvertida = Natural (refatore ao aprender)
Imprudente + Deliberada = Perigosa (corte de corners consciente)
Imprudente + Inadvertida = Toxica (falta de competencia)

Tipos comuns de Tech Debt

TipoDescricaoExemplo
Code debtCodigo mal estruturado, duplicadoCopy-paste de logica em 5 lugares
Architecture debtDecisoes arquiteturais que nao escalamMonolito que precisaria ser microsservicos
Test debtFalta de testes automatizados0% de cobertura em modulo critico
Documentation debtFalta de documentacaoNinguem sabe como o sistema de pagamento funciona
Infrastructure debtInfra defasadaServidor com Ubuntu 16.04 sem suporte
Dependency debtLibs desatualizadasReact 16 quando o ecossistema migrou para 18+

Sinais de Tech Debt acumulada

Sintomas:
├── Features simples demoram semanas para implementar
├── Bugs corrigidos reaparecem em outros lugares
├── Novos devs levam meses para serem produtivos
├── "So funciona na maquina do Joao"
├── Medo de mudar codigo — "nao mexe que esta funcionando"
├── Deploy manual com checklist de 47 passos
└── Incidents frequentes em producao

Como gerenciar no backlog

Estrategia 1: Regra dos 20%
├── Reserve 20% da capacidade do sprint para tech debt
├── Exemplo: sprint de 40 pts → 8 pts para tech debt
└── Negociavel conforme urgencia do negocio

Estrategia 2: Boy Scout Rule
├── "Deixe o codigo melhor do que encontrou"
├── Pequenas melhorias em cada PR
└── Nao precisa de ticket — faz parte da cultura

Estrategia 3: Tech Debt Sprints
├── 1 sprint inteiro dedicado a tech debt a cada 4-6 sprints
├── Util para refatoracoes grandes
└── Requer buy-in do Product Owner

Estrategia 4: Tech Debt Score
├── Classifique cada item de tech debt por impacto e esforco
├── Priorize junto com features no backlog
└── Use o mesmo framework RICE/ICE

Por que importa?

Gerenciar tech debt e fundamental porque:

  • Velocidade de desenvolvimento — tech debt alta torna tudo mais lento
  • Qualidade — codigo fragil gera mais bugs e incidents
  • Moral do time — devs se frustram com codigo legacy
  • Custo de contratacao — ninguem quer trabalhar em codebase ruim
  • Risco de negocio — em casos extremos, tech debt pode inviabilizar o produto

O paradoxo: startups que ignoram tech debt para "ir mais rapido" acabam indo mais devagar a medio prazo.


Exemplo pratico

Auditoria de Tech Debt de um SaaS

INVENTARIO DE TECH DEBT

ID   | Item                           | Tipo          | Impacto | Esforco | Score
-----|--------------------------------|---------------|---------|---------|------
TD-1 | Migrar de REST para GraphQL    | Architecture  | Alto    | 13 pts  | 5/10
TD-2 | Adicionar testes no checkout   | Test          | Critico | 8 pts   | 9/10
TD-3 | Atualizar Node 16 → 20        | Dependency    | Medio   | 5 pts   | 7/10
TD-4 | Remover codigo morto (40%)     | Code          | Medio   | 3 pts   | 6/10
TD-5 | Documentar API interna         | Documentation | Baixo   | 5 pts   | 4/10
TD-6 | CI/CD: pipeline leva 45 min    | Infrastructure| Alto    | 8 pts   | 8/10

Priorizacao:
1. TD-2 (score 9) → Checkout sem testes = risco de receita
2. TD-6 (score 8) → Pipeline lenta = devs improdutivos
3. TD-3 (score 7) → Node 16 perde suporte em 3 meses
4. TD-4 (score 6) → Codigo morto confunde novos devs
5. TD-1 (score 5) → Valido, mas grande — planejar para Q3
6. TD-5 (score 4) → Importante, mas nao urgente

Plano: TD-2 e TD-6 entram no proximo sprint (16 pts).
Restante no backlog com revisao mensal.

Termos relacionados

  • Sprint — onde a tech debt e gerenciada e paga
  • Backlog — onde itens de tech debt sao priorizados junto com features
  • Feature Flag — pode gerar tech debt se flags antigas nao forem removidas