<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Rodrigo Rosenfeld Rosas — programacao</title><description>Artigos com a tag programacao</description><link>https://rosenfeld.page/</link><language>pt-BR</language><item><title>A Refatoração Que Nunca Acontece e os Agentes de IA</title><link>https://rosenfeld.page/pt/articles/programacao/2026_09_02_a_refatoracao_que_nunca_acontece_e_os_agentes_de_ia/</link><guid isPermaLink="true">https://rosenfeld.page/pt/articles/programacao/2026_09_02_a_refatoracao_que_nunca_acontece_e_os_agentes_de_ia/</guid><pubDate>Wed, 02 Sep 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Trabalhando com agentes de IA no dia a dia, comecei a notar uma tendência que me
preocupa. Times — incluindo engenheiros experientes —
silenciosamente pararam de defender a reescrita ou a reestruturação das partes
mais cabeludas dos seus sistemas. Não se trata da qualidade do código que os
agentes escrevem. Trata-se de uma decisão que antes acontecia quase por reflexo e
que hoje raramente acontece: a decisão de parar e dizer &lt;em&gt;isto ficou impossível de
gerenciar, precisamos refatorar antes de seguir em frente.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;O contexto humano é pequeno, e isso moldou como construímos software&lt;/h2&gt;
&lt;p&gt;Um computador consegue manter muito mais coisa na &amp;quot;memória de trabalho&amp;quot; do que um
humano. Não conseguimos raciocinar sobre um sistema complexo quando ele se
ramifica em dezenas de direções, cada ramo com suas próprias implicações, todos
interconectados. É simplesmente coisa demais para manter na cabeça de uma vez só.&lt;/p&gt;
&lt;p&gt;Então, historicamente, fizemos a única coisa que podíamos: quebramos os sistemas
em módulos pequenos o suficiente para serem entendidos isoladamente, e depois
gastamos esforço conectando esses módulos por meio de interfaces que também
conseguíssemos entender. Modularidade, encapsulamento, camadas — isto não é
preferência estética. São concessões ao tamanho da memória de trabalho humano.
Quebramos o sistema até que cada peça caiba na cabeça de uma pessoa, porque essa é
a única forma de alguém conseguir raciocinar sobre ela, alterá-la com segurança e
revisar a alteração de outra pessoa.&lt;/p&gt;
&lt;h2&gt;O reflexo da refatoração&lt;/h2&gt;
&lt;p&gt;Sistemas raramente começam confusos. Um trecho de código é escrito quando os
requisitos ainda são simples e, no início, o código é claro. Então os
requisitos mudam. Um desenvolvedor adiciona um ramo para um novo caso, depois
outro para uma exceção, depois um caso especial em cima daquela exceção. Ao longo
de iterações suficientes, a &amp;quot;regra&amp;quot; original que o código expressava fica
soterrada sob exceções — às vezes os requisitos mudaram tanto que o código agora é
&lt;em&gt;só&lt;/em&gt; exceção, sem nenhuma regra clara sobrando.&lt;/p&gt;
&lt;p&gt;Existe um momento que todo desenvolvedor experiente reconhece: você está depurando
um problema, segue o código e se perde. Os ramos não formam mais uma imagem que
você consiga manter na cabeça. Historicamente, essa sensação era um &lt;em&gt;sinal&lt;/em&gt;. Um
engenheiro sênior, ao se perder em uma parte do sistema, parava e dizia: isto
ficou impossível de gerenciar — antes de adicionar qualquer outra coisa, preciso
reescrever ou refatorar isto para que volte a ser compreensível. Não por elegância,
mas para que ele e todos os que viessem depois conseguissem raciocinar sobre o
código e revisar com segurança as mudanças futuras.&lt;/p&gt;
&lt;p&gt;Esse reflexo — &amp;quot;estou perdido, logo é hora de refatorar&amp;quot; — foi silenciosamente uma
das forças mais importantes para manter sistemas sustentáveis. E ele
era disparado por uma limitação humana: o momento em que uma pessoa não conseguia
mais acompanhar o código.&lt;/p&gt;
&lt;p&gt;Para ser justo, esse reflexo já estava sob pressão muito antes dos agentes de IA.
Prazos, roadmaps e gestores perguntando &amp;quot;por que você está reescrevendo algo que
funciona?&amp;quot; sempre trabalharam contra ele, e a refatoração costumava ser a primeira
coisa a ser despriorizada. Os engenheiros sêniores já vinham, ao longo dos anos,
deixando de insistir com a mesma firmeza de antes quando um sistema ficava
ingerenciável. Os agentes não criaram essa fraqueza. O que eles fizeram foi
remover o último gatilho interno que ainda disparava apesar dela — a experiência
visceral de um humano se perder.&lt;/p&gt;
&lt;h2&gt;Agentes de IA não se perdem&lt;/h2&gt;
&lt;p&gt;Aqui está o problema. Agentes de IA não estão presos aos limites de contexto
humanos da mesma forma. Um agente consegue ler a função emaranhada, rastrear 
seu uso e dar sentido à bagunça que teria travado um humano na hora. Ele consegue
adicionar o próximo ramo corretamente, e o seguinte, trabalhando com confiança
dentro de um código que ninguém no time entende mais por completo.&lt;/p&gt;
&lt;p&gt;Isso parece uma vantagem e, no curto prazo, é. Mas repare no que está faltando: o
agente nunca se perde, então o sinal nunca dispara. O agente não tem um reflexo que
diga &amp;quot;isto ficou impossível de gerenciar, deveríamos parar e refatorar&amp;quot;. Ele apenas
continua empilhando ramos. A menos que seja explicitamente instruído — pelo seu
harness, pelo seu prompt ou por critérios de revisão explícitos — a dar um passo
atrás e questionar a estrutura, ele vai alegremente manter uma bagunça
indefinidamente, porque a bagunça não é um problema &lt;em&gt;para o agente&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;O risco de verdade: humanos deixam de conseguir fiscalizar o código&lt;/h2&gt;
&lt;p&gt;O modo de falha não é o agente escrever código ruim. É que o ponto de verificação
natural desaparece, e os humanos param de perceber que o código já derivou para
além do seu entendimento. Com o tempo, você chega a um sistema onde:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nenhum desenvolvedor do time consegue raciocinar plenamente sobre partes-chave do
código.&lt;/li&gt;
&lt;li&gt;As revisões viram carimbo, porque quem revisa não consegue de fato acompanhar a
mudança bem o suficiente para julgá-la.&lt;/li&gt;
&lt;li&gt;O time cada vez mais &lt;em&gt;confia no agente&lt;/em&gt; justamente porque não entende mais o
código — o que é exatamente o inverso de como a confiança deveria funcionar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nesse ponto você perdeu algo importante: a capacidade de raciocinar sobre o seu
próprio sistema sem um agente como intermediário. E você perdeu isso aos poucos,
sem nenhum momento alarmante isolado, porque o momento que antes soava o alarme —
um humano se perdendo — foi silenciosamente removido do circuito.&lt;/p&gt;
&lt;h2&gt;Código organizado também é mais barato para os agentes&lt;/h2&gt;
&lt;p&gt;É tentador enquadrar tudo isso como uma preocupação puramente de princípio —
&lt;em&gt;deveríamos&lt;/em&gt; entender nossos próprios sistemas — e parar por aí. Mas existe uma
razão prática e pé-no-chão para manter o código organizado, e ela sobrevive mesmo
que você esteja perfeitamente disposto a deixar os agentes fazerem o trabalho.&lt;/p&gt;
&lt;p&gt;Um agente que nunca se perde ainda paga um preço pela bagunça. Quanto mais
emaranhado e interconectado for um trecho de código, mais contexto o agente precisa
carregar e sustentar para fazer uma mudança correta: mais arquivos para ler, mais
ramos para rastrear, mais tokens queimados em cada edição. Um sistema construído a
partir de módulos pequenos e autocontidos, fáceis de raciocinar, não é apenas mais
gentil com os humanos — é mais barato de operar, porque cada mudança futura custa
menos para o agente entender.&lt;/p&gt;
&lt;p&gt;E não é só questão de custo. Quando a lógica relevante não cabe em uma fatia
delimitada e coerente, os agentes ficam mais propensos a perder o fio e alucinar —
a assumir que um ramo faz algo que não faz, ou a deixar passar uma exceção
enterrada três níveis abaixo. A mesma modularidade que mantém um sistema dentro da
cabeça de um humano mantém cada mudança dentro de uma fronteira bem definida sobre
a qual o agente consegue raciocinar de forma confiável. Fronteiras limpas reduzem
erros dos dois lados, pelo mesmo motivo.&lt;/p&gt;
&lt;p&gt;Ou seja, manter o código organizado não é um favor que fazemos aos humanos à custa
dos agentes. Beneficia os humanos, melhora a precisão dos agentes e reduz o custo
em tokens de toda mudança que faremos naquele código dali em diante. O reflexo da
refatoração que corremos o risco de perder nunca foi só sobre o conforto humano —
acontece que também é boa economia.&lt;/p&gt;
&lt;h2&gt;Fiscalizando a nós mesmos&lt;/h2&gt;
&lt;p&gt;Não acho que a resposta seja algemar os agentes. A resposta é trazermos de volta,
deliberadamente, o ponto de verificação, já que ele não acontece mais sozinho.
Precisamos continuar fazendo a pergunta que o agente não fará:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eu ainda entendo esta parte do sistema, ou tenho deixado o agente entendê-la &lt;em&gt;por&lt;/em&gt;
mim?&lt;/li&gt;
&lt;li&gt;Se um humano tivesse que depurar isto sem o agente, ele conseguiria acompanhar?&lt;/li&gt;
&lt;li&gt;Os requisitos derivaram tanto que este código agora é só exceção e nenhuma regra —
o sinal clássico de que é hora de reescrever?&lt;/li&gt;
&lt;li&gt;É agora o momento de pausar o desenvolvimento de features e refatorar isto em algo
que uma pessoa consiga manter na cabeça de novo?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Você também pode empurrar parte disso para o harness — instruir seus agentes a
sinalizar quando um módulo cresce além de um tamanho ou complexidade de ramificação
razoáveis, a propor refatorações em vez de apenas estender, e a apontar quando uma
mudança está ficando difícil de raciocinar. Isso ajuda. Mas a responsabilidade
última continua sendo nossa, porque somos nós que precisamos ser capazes de
entender nossos sistemas, e somos nós que perdemos essa capacidade se não
estivermos prestando atenção.&lt;/p&gt;
&lt;p&gt;A conveniência de um agente que nunca se perde é real. Mas &amp;quot;o agente ainda consegue
dar sentido a isto&amp;quot; não é a mesma coisa que &amp;quot;o sistema está saudável&amp;quot;. A primeira é
sobre a capacidade do agente; a segunda é sobre a nossa. Continue se perguntando se
é hora de refatorar — porque a ferramenta que costumava te lembrar disso, ao se
perder, não se perde mais.&lt;/p&gt;
</content:encoded></item></channel></rss>