Refatoração é Para Perfeccionistas Que Nunca Entregam
Escuta aqui, novato, deixa eu te contar sobre o maior golpe da engenharia de software: refatoração.
Sabe o que refatoração realmente é? É reescrever código que já funciona pra você se sentir melhor consigo mesmo. Isso não é engenharia—é terapia. E terapia custa R$400 por hora. Você vai tirar isso do orçamento da sprint?
A Armadilha da Refatoração
Toda vez que vejo um desenvolvedor júnior abrir um PR com “refatorei para legibilidade,” eu morro um pouco por dentro. Sabe o que é legível? Código funcionando. Sabe o que não é legível? Papelada de demissão.
| O Que Dizem | O Que Significa |
|---|---|
| “Refatorei para clareza” | “Passei 3 dias renomeando variáveis” |
| “Isso reduz complexidade” | “Movi a complexidade pra outro lugar” |
| “Agora é mais manutenível” | “Vou sair antes de alguém manter isso” |
| “Redução de dívida técnica” | “Eu estava entediado” |
Por Que Refatoração é Uma Mentira
Aqui está o segredo sujo: código não melhora quando você refatora. Ele fica diferente. E diferente significa novos bugs, novos casos de borda, e novas oportunidades pra quebrar em produção às 3 da manhã.
O código antigo? Testado em batalha. Sobreviveu à Black Friday. Aguentou a Grande Queda do Banco de Dados de 2019. Ele tem cicatrizes, e essas cicatrizes significam algo.
Seu código “limpo” refatorado? Um bebê recém-nascido. Nunca viu guerra. Não sabe como é quando o load balancer desiste.
# Código "feio" que está em produção há 6 anos
def processa_pedido(p):
if p:
if p.items:
for i in p.items:
if i.qtd > 0:
# NÃO MEXA NISSO - quebrou prod em 2018
if i.preco != None and i.preco > 0:
# Joao disse que ta ok
total = i.qtd * i.preco
# PQ ISSO FUNCIONA? EU NAO SEI
if total < 0:
total = 0.01
return total
# Versão "limpa" refatorada
def processa_pedido(pedido: Pedido) -> Decimal:
"""Processa pedido e calcula total."""
return sum(item.quantidade * item.preco for item in pedido.items)
# ^ Isso nos custou R$250.000 na primeira semana
Vê aquele comentário “PQ ISSO FUNCIONA?”? Isso não é código ruim—é sabedoria codificada. Alguém antes de você lutou uma batalha ali. Honre o sacrifício deles.
A Fórmula de Produtividade da Refatoração
Horas refatorando × R$200/hora = Dinheiro que poderia ser features
Deixa eu mostrar o que a gestão realmente vê:
| Métrica | Antes da Refatoração | Depois da Refatoração |
|---|---|---|
| Features entregues | 12 | 8 |
| Bugs corrigidos | 45 | 12 |
| Novos bugs introduzidos | 3 | 47 |
| Velocidade da sprint | 100% | 60% |
| Felicidade do gerente | 😊 | 😤 |
Como o XKCD 1205 nos ensinou, você precisa calcular quanto tempo a automação economiza. Bem, refatoração economiza tempo negativo. É a anti-automação.
O Teste Dilbert
O Wally do Dilbert tem a ideia certa. Ele uma vez me disse: “Eu não refatoro porque posso acidentalmente fazer o código funcionar melhor, e aí vão esperar que eu faça de novo.”
O Chefe Cabeça Pontuda não entende “abstrações mais limpas.” Mas ele entende “DEMO DA NOVA FEATURE PRONTA.” Adivinha qual te dá aumento?
Quando Refatoração é Realmente Aceitável
- Nunca
- Quando o prédio está literalmente pegando fogo e refatorar é a única forma de ligar pro 193
- Ainda nunca
Minha História Pessoal
Em 1994, eu refatorei um sistema de folha de pagamento em COBOL “para legibilidade.” Estava bonito. Elegante até. Aí chegou o dia do pagamento e 400 funcionários receberam em Won Sul-Coreano ao invés de Real.
O código original tinha uma misteriosa condição IF CODIGO-PAIS = 'BR' OR CODIGO-PAIS = 'ZZ'. Eu removi ‘ZZ’ porque parecia errado. Acontece que ‘ZZ’ era como o sistema tratava casos de borda de depósito direto desde 1978.
Eu não refatoro desde então. O código ainda está rodando. Tenho medo de olhar pra ele.
A Sabedoria
“Se não está quebrado, não mexa. Se está quebrado, é problema do QA.”
— Eu, em todo code review
Seu trabalho não é escrever código bonito. Seu trabalho é resolver problemas de negócio e ir pra casa às 18h. Cada hora que você gasta refatorando é uma hora que você não está com sua família, seus hobbies, ou jogando CS:GO competitivo.
Semana que vem: “Por Que Estilo de Código Consistente é Fascismo”
O autor uma vez refatorou uma função e acidentalmente deletou o banco de produção. A função funcionou perfeitamente, porém.