Toda abstração é um empréstimo
Camada, serviço e config parametrizável são dívida contraída hoje, paga em juros de cognição sempre que alguém precisa entender o sistema.

“Abstração” é uma palavra com prestígio. Ninguém abre um pull request se gabando de ter duplicado três linhas; a gente se gaba da camada nova, da interface genérica, do serviço que “um dia vai dar pra reusar”. O vocabulário da profissão premia quem adiciona indireção e trata quem recusa como preguiçoso. Esse é o primeiro erro, e ele é de contabilidade, não de gosto.
Toda abstração é um empréstimo. Você compra hoje uma opção, a de trocar a implementação, de estender sem tocar no núcleo, de configurar sem recompilar, e financia essa opção com cognição. O principal você quita uma vez, no dia em que escreve. O prêmio é pago em parcelas, por todo dev que abre o arquivo meses depois e precisa reconstruir na cabeça por que aquela camada existe.
O custo é diferido, e diferido nunca é grátis
No dia do commit, complexidade parece de graça. Funciona, os testes passam, o diagrama fica bonito. É exatamente a sensação de passar o cartão: o número que importa só chega na fatura.
A fatura vem em cognição. No onboarding que leva uma semana a mais porque o fluxo real está espalhado em quatro arquivos de indireção. No diff que precisa tocar em três lugares para mudar uma regra. No bug que se esconde atrás de uma abstração cujo motivo ninguém lembra.
Repare na assimetria: duplicação tem custo visível. Você vê as duas cópias, sabe que existe uma dívida ali, e ela te encara toda vez. Abstração errada tem custo invisível, escondido dentro de uma indireção que você precisa atravessar mentalmente antes de entender qualquer coisa. A gente subprecifica a segunda porque ela não aparece no extrato.
Duplicação é dívida que você lê no extrato; a abstração errada só aparece quando alguém tenta pagar.
Quando vale contrair, quando vale recusar
Uma opção só tem valor se você a exerce. Vale tomar o empréstimo quando:
- A repetição é real, não especulada. Duplique duas vezes, abstraia na terceira, quando os eixos de variação já se revelaram sozinhos.
- Você sabe o que vai mudar, em vez de adivinhar. Abstrair o eixo errado é pagar juros por uma flexibilidade que nunca vai ser usada.
- A taxa é baixa: o nome diz o que faz, a fronteira é óbvia, a coisa inteira cabe na cabeça.
Você recusa quando está comprando opção para um futuro que talvez não chegue. Generalidade especulativa é seguro contra um evento que você mesmo inventou.
Uma decisão concreta. Dois fluxos de pagamento, uns 80% parecidos, e a proposta na mesa era um motor genérico com estratégia e configuração para reger os dois. Recusei. Mantive duas funções honestas de umas quarenta linhas, duplicadas, com o desconforto de saber que estavam duplicadas. Meses depois uma mudança regulatória atingiu um fluxo e não o outro. A duplicação que “custaria caro reusar” custou zero para divergir. O motor genérico teria ganhado uma flag, depois duas, depois um arquivo de config que ninguém mais conseguiria ler.
A IA derrubou o custo de contrair, não o de pagar
Agora a máquina escreve a camada de graça. Peça uma solução “flexível e extensível” e você recebe três interfaces, uma factory e um schema de configuração antes do café esfriar. O custo marginal de escrever uma abstração caiu para perto de zero. O custo de lê-la não se mexeu um milímetro.
Isso quebra a intuição antiga. A gente confiava que abstração era cara de construir, então o próprio esforço servia de freio: se deu trabalho, provavelmente valia a pena. O freio sumiu. A dívida passou a ser contraída em velocidade de máquina, e o mesmo humano de sempre continua pagando os juros, à mesma taxa de sempre.
Por isso a disciplina inverte de sinal. Com IA no teclado, o default saudável não é aceitar a abstração que apareceu pronta, é recusá-la. O que é barato de gerar quase nunca é o que é barato de manter.
Abstração boa não é a que previu tudo. É a que o próximo colega segura na cabeça sem precisar de um plano de refinanciamento.