- Foi realizado um experimento de 2 semanas para criar um app usando apenas um fluxo de desenvolvimento assistido por IA, mas o resultado ficou aquém do esperado
- Usando uma stack baseada em Claude Code e Remix, o processo de definição de issues → implementação pela IA → revisão de código → deploy foi repetido continuamente
- Porém, a frustração aumentou gradualmente por causa de falta de contexto, duplicação de código sem possibilidade de reutilização, quebras no fluxo, alucinação (hallucination) e do problema da lei de Pareto
- No fim, após 2 semanas, o desenvolvimento centrado em IA foi abandonado e houve retorno ao método tradicional, com satisfação ao reorganizar o código e melhorar a qualidade
- Atualmente, a IA é usada apenas de forma limitada para busca, rubber ducking, snippets de código, testes e revisão de linguagem, sem planos de ampliar esse uso até que haja uma mudança tecnológica fundamental
Visão geral do experimento
- Foi conduzido um experimento de 2 semanas aplicando diretamente um fluxo de desenvolvimento com LLM (large language model), que vem recebendo muita atenção recentemente
- Com base na experiência complexa de UI das contas do Facebook Ads, foi iniciado o desenvolvimento do protótipo adbrew, uma ferramenta simplificada de gerenciamento de anúncios que usa apenas a Facebook Ads API
- O experimento foi realizado com o objetivo de validar o potencial da IA e com a expectativa de resolver um problema real
Abordagem
- Acompanhamento de várias contas sobre IA e estudo de workflows, além da escolha da stack com Remix/React Router v7
- Após assinar o Claude Code, foi investido tempo na configuração inicial do ambiente, incluindo prompts, ferramentas de DX e definição de issues
- Rotina diária
- Definir a issue
- Pedir a implementação à IA
- Ajustar requisitos com a IA
- Revisar em detalhe o código gerado
- Fazer commit/deploy do código
- Repetir o processo
- Melhorar periodicamente os guias e arquivos de checagem automática
- Houve um esforço contínuo para alinhar o fluxo de desenvolvimento ao modo de trabalho da IA
Problemas frequentes
- Sempre faltava contexto
- Mesmo fornecendo muito contexto, a IA não pedia o feedback necessário
- A IA seguia em frente com suposições próprias, o que resultava com frequência em implementações incorretas
- Código sem reutilização nem manutenção viável
- Houve deficiência na criação de abstrações e código reutilizável
- Componentes existentes eram recriados repetidamente, aumentando o cansaço na revisão
- O efeito de incorporar diretrizes foi mínimo
- Quebra no fluxo de trabalho
- Era necessário monitorar constantemente o trabalho da IA
- Ficava difícil garantir blocos de foco eficientes por issue, causando queda de produtividade
- Fenômeno de alucinação (Hallucination)
- A combinação de uma Facebook API complexa, documentação insuficiente e um SDK com erros de digitação ampliou a confusão causada pela confiança equivocada da IA
- Informações erradas sobre vários frameworks e bibliotecas eram geradas repetidamente
- Agravamento do efeito Pareto
- A IA conseguia avançar rapidamente em 80% do trabalho total, mas os 20% restantes para finalizar e corrigir consumiam 80% do esforço
- Surgiram muitos defeitos e bugs importantes em tratamento de exceções, interações entre funcionalidades e outros pontos
Resultado e retrospectiva
- Após 2 semanas, o código foi ficando cada vez mais bagunçado e fora de controle
- A perda de prazer no desenvolvimento e os problemas de qualidade levaram ao retorno ao workflow anterior
- Ao reorganizar manualmente o código novamente, foram encontrados pontos que a revisão da IA havia deixado passar, resultando em uma base de código melhor
Forma atual de usar IA
- Mecanismo de busca poderoso: eficiente para explorar informações complexas e obter respostas ajustadas ao contexto, com possibilidade de voltar rapidamente ao método tradicional em caso de falha
- Rubber ducking (brainstorming de ideias): especialmente eficaz para sugerir alternativas, ampliar o campo de exploração e reforçar a busca por palavras-chave relacionadas
- Assistente de snippets de código: reduz a fadiga no desenvolvimento ao automatizar a geração de funções utilitárias repetitivas
- Apoio em código de teste: uso da IA para descobrir novos cenários de teste
- Tarefas relacionadas à linguagem: útil na edição de textos como mensagens de commit, issues e PRs
- Recentemente, em vez de a IA escrever, passou a ocorrer o inverso: o desenvolvedor escreve e a IA revisa
Conclusão e perspectivas
- O uso de IA continuará para apoio em tarefas cotidianas, mas no momento a visão é negativa quanto a expandi-lo para delegar todo o processo de desenvolvimento
- Há um esforço para priorizar o uso de LLMs locais e manter o controle dos dados
- Continuará a atenção às possíveis mudanças tecnológicas futuras, mas por enquanto a política é manter o uso da IA de forma limitada
2 comentários
Essa é uma desvantagem que sinto bastante ao realizar tarefas complexas.
Perda de prazer + código bagunçado..
Muitas vezes realmente parece não ser adequado para uso além de refatoração de código + ideias.
Opiniões do Hacker News
Recentemente passei mais de uma hora tentando pedir ao ChatGPT um comando
rsyncbem simples, mas ele continuava fornecendo parâmetros que não funcionavam com a versão dorsyncno meu Mac; cerca de metade das falhas afundava em troubleshooting sem sentido, e no resto ele dizia que “percebeu” o próprio erro, mas respondia com a versão errada de novo; mandei validar os parâmetros de acordo com a versão que eu tinha, mas claramente ele não conseguiu fazer isso; na prática, era algo que eu sozinho teria resolvido em 5 minutos, mas fiquei vendo essa tecnologia fascinante desperdiçar meu tempo sem conseguir parar; não sou desenvolvedor profissional, mas fiquei curioso se esse tipo de experiência também é comum entre desenvolvedores; imagino que, se você estiver codando com versões de software que batem com o principal conjunto de treinamento do LLM, talvez não passe por isso, e queria saber se existe algum jeito de evitar isso via prompt; por enquanto, acho difícil dizer que LLM realmente economiza tempo em tarefas de programação; pelo contrário, por causa dessa natureza peculiar, acho que ele faz a gente desperdiçar ainda mais tempoMesmo quando peço ao LLM para validar os parâmetros de acordo com a minha versão, ele não faz direito; queria ouvir a opinião de especialistas em AI sobre isso; eu também passo muito por esse tipo de situação; no fim das contas, o LLM não entende de verdade o que estou dizendo; matematicamente, dá até para explicar por que isso acontece; mas, ao mesmo tempo, parece que tecnologias como transformers ou truques separados foram colocados para tarefas que não sejam tão constrangedoras quanto contar letras do alfabeto; queria saber se estou deixando passar alguma coisa
Entre desenvolvedores, esse tipo de experiência também é muito comum; alguém pode dizer “isso nunca aconteceu comigo”, mas são exceções raríssimas, e a maioria reclama de algo parecido; você também perguntou se dá para evitar esse tipo de problema com prompt, mas se o conteúdo não está nos dados de treinamento, isso não serve para nada; em muitas linguagens os LLMs são realmente péssimos; no caso de ferramentas CLI, mesmo se você disser ao LLM que é macOS ou versão BSD, na maioria das vezes ele continua dando flags GNU; especialmente no macOS, houve uma mudança recente no
rsync, então quase não há informação online; veja este link post sobre a substituição do rsync, e a própria ideia de que LLM vai economizar tempo em programação já é o cenário mais otimista; em vez disso, há muitos casos em que as pessoas confiam cegamente no código do LLM, fazem commit e acabam introduzindo bugs ou vulnerabilidades de segurança; referências: blog ai-coding-slowdown e artigo no arXivSobre se dá para evitar esse tipo de problema com prompt, não sei bem, mas no Claude Code ele pode executar comandos diretamente; ou seja, em vez de deixar o LLM imaginar qualquer coisa, basta adicionar a saída real de algo como
! man rsyncou! rsync --helpao contextoFico me perguntando por que usar um LLM justamente para procurar o manual de uma ferramenta específica
Sobre ter passado mais de uma hora tentando obter um comando simples de
rsyncno ChatGPT: eu tentaria várias vezes adicionando informações suficientes sobre o ambiente e as mensagens de erro e, se ainda assim não funcionasse, tentaria outros modelos, como Claude ou Gemini; se, após um número definido de tentativas, ainda não resolver, então é difícil conseguir ajuda útil de um LLM, então vale muito mais a pena parar e buscar informação do jeito tradicional, como em manuais ou fóruns; em geral, tentar por 10 a 20 minutos e depois seguir em frente é um critério realista; há problemas que o LLM não consegue resolver por mais tempo que você insista, ele só fica rodando em círculosEu também tenho muitas experiências assim; AI ajuda de verdade quando peço para ela fazer algo que eu já sei fazer; se eu consigo descrever o problema com precisão suficiente para o LLM entender, ele entrega um resultado aceitável, e eu consigo verificar na hora se o código gerado é o que eu queria; se eu delego algo que não conheço totalmente, acaba ficando ainda mais complicado
Acho que este texto (tirando o título) traz uma visão bem equilibrada; “deixe tudo com o LLM!” é cheio de problemas, e “delegar só código repetitivo para economizar tempo ou parte dos testes até funciona bem”, mas com um título comum como “às vezes a AI funciona e às vezes não”, isso nunca vai dar cliques
AI parece mais um estagiário do que um contratado terceirizado
Me identifiquei muito com a frase “as informações de contexto não são suficientes”; por mais contexto que a gente forneça, na maioria das vezes a AI não pede feedback e sai chutando por conta própria até falhar; isso me lembra aquela cena de programa de TV em que alguém faz um pedido a um gênio e conversa como se fosse advogado, conferindo cuidadosamente todas as condições; conversar com LLM dá uma sensação parecida
A AI é como aquele colega super inteligente que nunca revela o que realmente está pensando; parece que consegue fazer qualquer coisa, mas não funciona bem em equipe, e uma conversa do tipo “não entendi o que você quer aqui, pode explicar um pouco mais?” simplesmente nunca sai da AI
(Acho que sei qual é a cena de TV mencionada.) Naquela cena, no fim das contas tudo se resolveu bem, mas acho que o LLM não sente nenhuma necessidade de cumprir a própria “promessa”; na verdade, o gênio está mais perto de uma AI clássica de ficção científica, toda presa a regulamentos e regras; LLM é completamente diferente
Gosto pouco de
vibe coding, de ficar me comunicando com AI em vez de codar de fato; em compensação, a principal mudança que fiz foi estruturar melhor o processo de desenvolvimento desde mais cedo; primeiro escrevo um arquivo de especificação, depois peço ao LLM para dividir em checklist passo a passo os pontos dos requisitos que precisam ser explicados com clareza, com base no codebase e em informações online; só depois de terminar cada etapa passo para a sessão seguinte, refinando até chegar a algo mais completo; se eu cansar da conversa com a AI, eu mesmo ou alguém da equipe pode implementar conforme a especificação, então dá para usar isso com flexibilidadeRecentemente adotei AI coding em um projeto; não sei exatamente o que
vibe codingsignifica, mas o método que escolhi foi uma interação iterativa e tranquila; usei o Gemini AI studio e fiquei muito satisfeito com o resultado, a ponto de documentar todo o processo e publicar como projeto open source; isso deu um boost perceptível na minha produtividade; a parte ruim foi a AI falar de um jeito educado demais; na minha visão, a AI traz o maior ROI quando o resultado desejado está claro e é preciso comparar opções ao longo do processo; usei em todos os entregáveis do projeto (código principal, casos de teste, scripts de build, documentação, app de exemplo, utilitários); a transcrição completa das conversas de desenvolvimento está aqui, e o código-fonte do projeto está aquiEu uso AI de forma parecida; esperar dela algum tipo de abstração revolucionária é exigir demais; ela funciona bem em caminhos extremamente comuns, já percorridos por milhares de desenvolvedores; nesse sentido, ela se parece muito com um mecanismo de busca extremamente poderoso
O jeito que prefiro é pedir ao LLM uma primeira solução ou um exemplo de código de forma simples e, depois disso, seguir trabalhando eu mesmo sem ficar refinando prompt o tempo todo; no final, se necessário, peço ao LLM para revisar meu código; a maior vantagem é pular o loop de refinamento de prompt; esse loop é realmente entediante, toma um tempo enorme e, no longo prazo, pode até reduzir a eficiência do trabalho
É muito frustrante que a AI simplesmente siga em frente sem pedir feedback nem fazer perguntas claras
Compartilho a opinião da equipe de que “por enquanto vamos usar AI só até esse ponto; se a tecnologia mudar de forma fundamental no futuro, reavaliamos”; fico curioso se LLM vai conseguir ir além disso; mesmo agora, acho que é extremamente útil se for usado do jeito certo
agentic wrapperou de pipeline já dá para crescer muitoUsar AI para melhorar facebook ads é como os breakers da série Dark Tower