O papel da capacidade dos desenvolvedores na codificação agêntica
(martinfowler.com)- À medida que os assistentes de codificação agênticos se tornam mais capazes, as reações têm sido muito variadas, e alguns chegam a afirmar que "dentro de um ano os desenvolvedores não serão mais necessários"
- Outros levantam preocupações sobre a qualidade do código gerado por IA e sobre como preparar desenvolvedores juniores para esse ambiente em transformação
- Nos últimos meses, usei assistentes de codificação agênticos como Cursor, Windsurf e Cline, e eles foram muito eficazes para alterar codebases existentes
- Fiquei muito impressionado com a integração com a IDE, que inclui execução de testes e correção automática de erros, detecção e correção de erros de lint/compilação, busca na web e até recursos de pré-visualização no navegador
- A experiência de colaboração entre desenvolvedor e IA foi muito impressionante e contribuiu para resolver problemas e implementar funcionalidades com rapidez
- No entanto, ainda foi necessária a intervenção contínua do desenvolvedor, com correções e definição de direção
- Em muitos casos, isso nem chegou a resultar em commits reais, e a IA ainda é insuficiente para escrever de forma autônoma código para tarefas não triviais
- Portanto, as habilidades e a experiência dos desenvolvedores continuam sendo importantes e devem seguir sendo treinadas no futuro
Momentos em que o desenvolvedor precisou intervir diretamente
- As ferramentas de IA apresentaram desempenho consistentemente fraco em certas áreas, algo confirmado repetidamente
- Parte disso pode ser parcialmente mitigada com prompts adicionais ou regras personalizadas, mas controle total é impossível
- LLMs frequentemente não seguem com precisão as instruções do prompt
- Quanto mais longa a sessão de codificação, menor a consistência dos resultados
- Portanto, os casos apresentados abaixo são problemas que podem ocorrer com frequência suficiente independentemente de prompt ou configuração
- Os erros da IA foram classificados em 3 categorias de acordo com o raio de impacto
- a. Redução da velocidade de desenvolvimento e aumento do tempo até o commit
- A IA acaba desacelerando em vez de ajudar
- Em alguns casos, é menos eficiente do que programar sem assistência
- b. Geração de atrito no fluxo de trabalho da equipe
- Surgem conflitos ou problemas de colaboração dentro de uma iteration
- c. Piora da manutenibilidade do código no longo prazo
- No início, parece não haver problema, mas depois surgem dificuldades em mudanças ou expansões futuras
- a. Redução da velocidade de desenvolvimento e aumento do tempo até o commit
- Quanto maior o raio de impacto, mais longo é o loop de feedback até que a equipe perceba e corrija o problema
Raio de impacto: atraso no tempo até o commit
- Esta categoria reúne casos em que a IA atrapalhou em vez de ajudar
- Como é a forma mais evidente de falha, não tende a ser um grande problema
- Na maioria das vezes, o desenvolvedor consegue perceber e impedir o problema antes da etapa de commit
-
Código que não funciona
- O código gerado pela IA simplesmente não funciona
- O desenvolvedor precisa corrigir manualmente ou encerrar a sessão com a IA e resolver o problema manualmente
- Um desenvolvedor experiente consegue identificar rapidamente onde deu errado e agir
-
Diagnóstico incorreto do problema
- A IA identifica erroneamente a causa do problema e tenta uma solução na direção errada
- Com base em experiência anterior, o desenvolvedor conseguiu trazer a IA de volta do caminho equivocado
Exemplo: um erro de build no Docker foi interpretado como um problema de configuração de arquitetura, e a configuração foi alterada
A causa real era a cópia denode_modulescompilado em uma arquitetura incorreta
Como era um problema frequente no passado, foi possível reconhecê-lo e corrigi-lo rapidamente
Raio de impacto: fluxo de trabalho da equipe dentro da iteration
- Esta categoria trata de casos em que surge atrito dentro da equipe durante a iteration por falta de revisão ou de intervenção do desenvolvedor
- O autor conseguiu perceber e ajustar preventivamente esses problemas antes do commit graças à experiência acumulada em diferentes equipes
- Desenvolvedores iniciantes também podem aprender essas lições ao passar por tentativa e erro com IA
- Mas, se a IA acelerar a codificação, a equipe pode não conseguir absorver esses problemas
-
Trabalho inicial excessivo
- A IA tende a tentar implementar a funcionalidade inteira de uma vez, em vez de avançar de forma incremental
- Se, por causa disso, a escolha técnica for inadequada ou os requisitos forem mal compreendidos, muito trabalho pode ser desperdiçado
Exemplo: em uma migração de stack frontend, houve tentativa de converter todos os componentes de UI de uma só vez
O ideal teria sido aplicar a mudança gradualmente, começando por um único componente integrado ao backend
-
Resolver sem analisar a causa
- Sem analisar a causa raiz do problema, a IA tenta apenas corrigir o erro visível na superfície
- Depois, outro membro da equipe que assumir o problema passa a ter o ônus de reanalisar a situação sem contexto
Exemplo: diante de um erro de memória durante o build no Docker, em vez de procurar a causa, a IA apenas aumentou a configuração de memória
-
Complexificação do workflow do desenvolvedor
- A forma de build/execução gerada pela IA piora a experiência do desenvolvedor
- Se isso for commitado imediatamente, o workflow dos outros membros da equipe também será prejudicado
Exemplo: os comandos para executar frontend e backend são fornecidos separadamente
Exemplo: ausência de hot reload
Exemplo: uma configuração de build complexa deixa tanto desenvolvedores quanto a IA confusos
Exemplo: a IA não detecta previamente um erro de Docker e tenta tratá-lo apenas no fim do build
-
Requisitos mal compreendidos ou incompletos
- Se os requisitos da funcionalidade não forem apresentados com clareza, a IA pode entendê-los mal e implementar a funcionalidade na direção errada
- O ideal é corrigir isso logo no começo, mas tanto com uma IA autônoma quanto com um desenvolvedor desatento, o custo de correção posterior aumenta
- Essas implementações incorretas acabam sendo descobertas mais tarde durante o andamento da story, gerando muito retrabalho e custo de comunicação
Raio de impacto: piora da manutenibilidade no longo prazo
- É o raio de impacto mais sorrateiro e perigoso
- No início, o código funciona sem problemas, mas depois fica difícil alterá-lo e expandi-lo
- Muitas vezes, esses problemas só são descobertos semanas ou meses depois
- Especialmente nessa área, foi onde mais pesaram os mais de 20 anos de experiência em desenvolvimento do autor
-
Código de teste verboso e redundante
- A IA é boa em gerar testes, mas frequentemente surgem problemas como:
- criar novas funções de teste em vez de integrar aos testes existentes
- adicionar assertions demais até mesmo em partes já cobertas
- Um ponto que desenvolvedores iniciantes podem interpretar mal: mais testes ≠ testes melhores
- Quanto maior a redundância, mais difícil a manutenção, e maior a chance de falhas em massa nos testes quando o código mudar
- Tentou-se mitigar isso com comandos personalizados, mas ainda assim acontece com frequência
- A IA é boa em gerar testes, mas frequentemente surgem problemas como:
-
Baixa reutilização
- O código escrito pela IA frequentemente tem pouca modularização, o que dificulta a reutilização
Exemplo: não reconhecer um componente de UI já existente e implementar outro duplicado
Exemplo: abusar de estilos inline em vez de usar classes CSS
- O código escrito pela IA frequentemente tem pouca modularização, o que dificulta a reutilização
-
Código excessivamente complexo ou verboso
- A IA frequentemente gera mais código do que o necessário, obrigando a remoção manual de partes desnecessárias
- Isso aumenta o custo de manutenção e eleva a possibilidade de erro ao fazer mudanças
Exemplo: ao alterar CSS, é preciso apagar manualmente muitos estilos duplicados
Exemplo: criar um web component desnecessariamente complexo para exibir dados JSON
Exemplo: durante um refactoring, a IA não percebe a cadeia existente de injeção de dependência,
e torna o design mais complexo ao passar novamente como outro parâmetro um valor que já havia sido injetado- no formato
value = service_a.get_value(); ServiceB(service_a, value=value)
- no formato
Conclusão: a IA poderá escrever todo o código no lugar de todos?
- Com base na experiência até aqui, é irrealista que, dentro de um ano, a IA escreva de forma autônoma 90% de todo o código
- Ainda assim, como assistente para escrita de código, há equipes e codebases em que um nível de apoio de 90% é possível
- Na prática, o autor afirma estar recebendo cerca de 80% de ajuda da IA em um projeto de complexidade média com 15K LOC
Como evitar os erros da IA
-
O que pode ser feito no nível do desenvolvedor individual
- Sempre revisar cuidadosamente o código gerado pela IA
- Quase nunca acontece de não haver nada para corrigir
- Interromper imediatamente a sessão com a IA se ela ficar confusa
- Ajustar o prompt ou simplesmente mudar para o trabalho manual (também chamado de "codificação artesanal")
- Desconfiar de soluções "plausíveis" que parecem milagrosamente prontas em pouco tempo
- Pode haver um custo oculto de manutenção de longo prazo
- Praticar pair programming
- 4 olhos e 2 cérebros oferecem julgamentos melhores
- Sempre revisar cuidadosamente o código gerado pela IA
-
Estratégias de resposta no nível de equipe e organização
- Usar ativamente as ferramentas existentes de monitoramento da qualidade do código
- Ex.: Sonarqube, Codescene
- Ao usar ferramentas de IA, é preciso monitorar com mais atenção duplicação de código, code smells etc.
- Configurar pre-commit hooks e revisão de código integrada à IDE
- Reforçar estratégias de shift-left para detectar problemas logo no início do desenvolvimento
- Restabelecer bons hábitos de qualidade de código
- Compartilhar em retrospectivas semanais os casos de problemas causados por código de IA (o "log do que deu errado")
- Usar ativamente regras personalizadas
- A maioria das ferramentas de IA permite configurar um conjunto de regras enviado junto com o prompt
- A equipe pode reduzir erros da IA melhorando o ruleset em conjunto
- No entanto, quanto mais longa a sessão, maior a chance de as regras serem ignoradas
- Construir uma cultura de equipe baseada em confiança e comunicação
- A adoção de IA é uma mudança nova, e é preciso reconhecer que todos são iniciantes
- Pressão do tipo "já que tem IA, faça mais rápido" aumenta o risco de qualidade
- Equipes com segurança psicológica tendem a compartilhar problemas e aprender com mais intensidade
- Usar ativamente as ferramentas existentes de monitoramento da qualidade do código
4 comentários
As pessoas que usam essa ferramenta, independentemente da capacidade, no fim das contas são todas desenvolvedoras.... Então parece meio estranho fazer propaganda como se no futuro não fosse mais precisar de desenvolvedores.
Não sei como isso vai evoluir no futuro, mas por enquanto ainda não me parece muito bom para uso mainstream... Recentemente usei o Cursor, e ele nem conseguia resolver direito algo básico como o caminho de import de arquivos. Ainda assim, foi meio impressionante como ele conseguia prever até certo ponto o que eu queria criar.
Quando ocorreu um erro de memória durante o build do Docker, em vez de perguntar desde o início por que tanta memória estava sendo usada, aumentaram a configuração de memória
-> Isso é... porque já fizemos assim em inúmeros casos no passado.
-> A IA de agora somos nós do passado
Comentários no Hacker News
Hoje em dia uso o Cursor para a maior parte do desenvolvimento. Este texto é muito parecido com a minha experiência
Eu uso IA assim: como uma ferramenta de apoio à escrita dentro da IDE, que me responde como um pato de borracha muito legal e sofisticado
Eu realmente não entendo
Exemplo: quando ocorreu um erro de memória durante um build do Docker, em vez de perguntar por que tanta memória estava sendo usada desde o começo, ele aumentou a configuração de memória
As habilidades de desenvolvedor continuam essenciais — se você não sabe dirigir, não consegue pilotar. Mas e a energia do desenvolvedor? Antes da IA, eu só conseguia codar cerca de 2 horas por dia (tempo real escrevendo código). Mas com o Claude Code, consigo codar facilmente por 5 horas seguidas sem parar. É como andar de bicicleta elétrica em vez de bicicleta comum. A IA parece a metáfora da bicicleta para a mente do Steve Jobs — ela não me substitui, mas agora consigo ir muito mais longe e mais rápido
Este diagrama é absurdamente identificável — nossa equipe marca todos os itens daqui. Mesmo sem usar IA ainda! Imagine quando finalmente passarmos a usar...
Para mim, o óbvio não aparece: usar IA ao redor
Eu preciso pilotar bastante a IA, mas continuo otimista de que prompts melhores levarão a agentes melhores
Quero prefaciar dizendo que as ferramentas de IA são sempre ruins nas coisas que listei
O Martin Fowler agora está alugando espaço no site dele?