- Addy Osmani, líder de engenharia que trabalhou por 13 anos na equipe do Google Chrome, apresenta uma metodologia de desenvolvimento baseada em IA para engenheiros de software profissionais
- O vibe coding é útil para prototipagem rápida, mas para o desenvolvimento de software com qualidade de produção, princípios de engenharia e supervisão humana são indispensáveis
- Ao usar ferramentas de IA, é preciso garantir a qualidade por meio de desenvolvimento guiado por especificação, escrita de testes e compreensão do código, além de revisar o processo de raciocínio do modelo para entender completamente o código gerado
- LLMs conseguem gerar rapidamente cerca de 70% de uma aplicação, mas para garantir a qualidade dos 30% restantes, bem como segurança e manutenibilidade, a expertise de engenheiros seniores se torna ainda mais importante
- Estão surgindo novos fluxos de trabalho de desenvolvimento, como agentes assíncronos em segundo plano e programação paralela, e os engenheiros precisam se tornar aprendizes ao longo da vida que usam IA sem perder o pensamento crítico e a capacidade de compreender código
Diferença entre Vibe Coding e engenharia assistida por IA
- Vibe coding é uma forma de mergulhar totalmente no fluxo criativo com a IA, focando em prompts de alto nível e praticamente esquecendo o código em si
- Aceita sugestões da IA sem revisão profunda e se concentra em experimentação iterativa rápida
- É útil para protótipos, MVPs e aprendizado, priorizando velocidade e exploração acima de precisão e manutenibilidade
- Engenharia assistida por IA é uma abordagem que usa a IA como uma colaboradora poderosa, sem substituir os princípios de engenharia
- A IA atua como multiplicadora de força em todo o ciclo de vida do desenvolvimento de software, ajudando com boilerplate, depuração, deploy etc.
- O engenheiro humano continua responsável pelo desenho da arquitetura, revisão do modelo e compreensão de todo o código gerado
- Garantir a segurança, escalabilidade e manutenibilidade do produto final continua sendo tarefa do engenheiro
- Quanto maior a especialização em engenharia de software, melhor tende a ser a qualidade dos resultados obtidos com LLMs
- Para programação com qualidade de produção, só se deve fazer commit no repositório de código totalmente explicável para outra pessoa
Como Addy usa ferramentas de IA
- Abordagem centrada em desenvolvimento guiado por especificação (spec-driven development)
- O essencial é definir um plano claro sobre o que será construído
- O vibe coding é usado para ferramentas pessoais, projetos descartáveis e visualização de ideias
- Depois de esclarecer a visão com um protótipo, documentar os requisitos reais ajuda a induzir resultados de alta qualidade do LLM
- Escrita de testes para reduzir risco
- Até modelos recentes às vezes geram código complexo ou incorreto
- Testes comprovam o funcionamento e permitem identificar claramente problemas quando eles surgem
- Uso do Chrome DevTools MCP
- Dá ao LLM uma espécie de “visão” do navegador para detectar renderização, erros de console, avisos etc.
- Colocar o navegador no loop melhora o ciclo de feedback
- Experimentação contínua com novos modelos, ferramentas e plataformas, além de compartilhamento de insights entre equipes
- Construir uma cultura de aprendizado conjunto com segurança psicológica
Observações e aprendizados sobre ferramentas de IA no Google
- Os princípios comprovados de engenharia de software do Google continuam válidos na era da IA
- A preocupação com qualidade e diligência continua importante
- A importância de prompt engineering e context engineering
- Montar os “encantamentos” certos para obter os melhores resultados dos LLMs
- Otimizar a janela de contexto aumenta a chance de resultados de alta qualidade
- Incluir conteúdo que não está nos dados de treinamento do LLM, como descrições específicas do projeto, detalhes, arquivos e exemplos
- Acelerar a transição para o engenheiro AI native
- Treinar a mentalidade de deixar a IA tentar primeiro antes de resolver um problema
- Construir expertise em IA com benchmarks de avaliação, RAG vs. fine-tuning etc.
- A importância da supervisão humana
- Se a IA escrever e revisar o código ao mesmo tempo, fica incerto o que de fato está sendo colocado em produção
- Com o aumento da velocidade dos PRs, a revisão humana passa a ser um gargalo
- As melhores práticas de code review ainda estão evoluindo
Ferramentas preferidas pelo Addy
- Usa principalmente Klein no VS Code
- Cursor e GitHub Copilot também oferecem muitos recursos
- Revisa o processo de raciocínio (thinking log) mostrado pelas ferramentas
- Verifica as decisões do modelo e o código gerado durante a construção da solução
- Revisa o código antes do PR para garantir manutenibilidade futura
- Mantém a capacidade de depurar por conta própria quando o LLM falha em resolver um problema
- Se você não entende como o código funciona, parece que foi jogado na selva
- Diferença entre engenheiros profissionais e leigos
- Qualquer pessoa pode apenas digitar prompts
- Entender como o código funciona, conseguir corrigir falhas do modelo e explicar tudo claramente em reuniões é o diferencial
A essência do problema dos 70%
- LLMs conseguem gerar muito rapidamente cerca de 70% de uma aplicação funcional, mas têm dificuldade com os 30% restantes
- Componentes desses 30% finais
- Padrão “two steps back”: um prompt faz a IA reescrever completamente a UI ou uma funcionalidade, indo na direção errada
- Custos ocultos de manutenção: delegar responsabilidade ao LLM com especificações pouco claras reduz retorno
- Vulnerabilidades de segurança: exposição de chaves de API, problemas de XSS e outros erros causados por falta de visão sistêmica
- Um PoC feito com vibe coding precisa ser reescrito antes de ir para produção
- Em uma base de código com usuários reais, segurança e qualidade são indispensáveis
- Engenheiros experientes conseguem concluir muito mais facilmente os 30% finais
- Engenheiros juniores muitas vezes não sabem qual é o próximo passo além de continuar repropondo prompts ao LLM
- Isso reforça a importância de pensamento crítico e mentalidade de resolução de problemas
- A disciplina de ler o código, entender o sistema e compreender como todas as partes se conectam continua indispensável
Táticas para usar LLMs com eficiência
- Adotar uma mentalidade de gerente de projeto
- Quebrar o trabalho em unidades pequenas e verificáveis
- Jogar todos os requisitos de uma vez não é eficaz
- Definir expectativas claras e se preparar para iterar com a IA
- Escrever código modular e testável
- Boas práticas de engenharia de software, como code review, continuam válidas na era da IA
- Considerar restrições de entrada e saída e fornecer contexto suficiente
- É um hábito novo, mas pode gerar bons resultados
- Manter a disciplina de incluir humanos no loop é a chave do sucesso
- Quanto mais responsabilidade se passa ao LLM, maior o risco de problemas
Agentes autônomos e novos fluxos de trabalho
- Surgimento de agentes de programação assíncronos em segundo plano
- Ferramentas como Jewels, Devin, Codex e experimentos do GitHub
- A ideia é delegar parte do backlog e deixar a implementação acontecer de forma assíncrona
- Estado atual
- Já são eficazes em escrever/atualizar testes e migrar versões de bibliotecas
- Adequados para delegar mudanças pequenas, como adicionar modo escuro
- Desafios de gestão
- É preciso uma interface adequada para gerenciar tudo como maestro de uma orquestra
- Considerar um número realista de tarefas que podem ser gerenciadas ao mesmo tempo
- Como a atenção humana é finita, só dá para lidar com algumas tarefas em paralelo se a revisão de código for realmente minuciosa
- Evolução do vibe designing
- O MCP do Figma fortalece a colaboração entre designers e desenvolvedores
- Designers podem transformar a visão em protótipos funcionais, chegando mais perto de código pronto para produção
Mudanças nos papéis de EM e PM
- Papel do PM
- Mais tempo investido em enquadramento do problema, métricas e políticas para agentes
- Papel do EM
- Avaliações (evals), revisão de segurança e apoio para que a equipe use IA com confiança
- A responsabilidade pelo resultado não muda
- A importância de taste em engenharia de produto
- Como qualquer pessoa pode criar recursos parecidos com prompts, o diferencial passa a ser o taste
- Júnior vs. sênior
- A IA eleva o piso, mas também eleva o teto
- Juniores conseguem começar mais rápido
- Sêniores com habilidade de escrever especificações, decompor tarefas, entender arquitetura de sistemas e revisar com eficácia se tornam ainda mais valiosos
- Os 30% finais não são trabalho braçal, e sim alavancagem
Novos papéis e mudanças na formação de desenvolvedores
- Surgimento de novos papéis, como forward deployed engineers
- Trabalham mais de perto com clientes, constroem recursos rapidamente com IA e devolvem feedback sobre requisitos
- Pode haver borramento das fronteiras entre os papéis de desenvolvedor, PM e designer
- Educação em AI engineering
- Necessidade de ensinar boas práticas de prompt e context engineering no ensino médio e na universidade
- Buscar formas de preservar a mentalidade de design de sistemas e engenharia
- Programação em trio
- Júnior, sênior e IA trabalhando juntos
- O sênior pode pedir que a IA explique o código gerado ou como ele se conecta a outras partes do sistema
A importância do pensamento crítico ao trabalhar com IA
- Risco de queda no pensamento crítico por causa da facilidade de aceitar o que as ferramentas de IA sugerem
- Em tarefas pouco importantes, surge a tendência de apertar Tab/Accept e aceitar tudo
- À medida que a confiança cresce, a revisão crítica diminui
- Gargalo em code review
- O aumento da velocidade do código gerado por IA torna a revisão humana o gargalo
- Há risco de banalização do LGTM (Looks Good To Me)
- Estratégias de resposta
- Em certas funcionalidades ou em certos dias da semana, trabalhar deliberadamente sem IA para preservar o pensamento crítico
- Pensar no que aconteceria se todos os principais provedores de LLM ficassem fora do ar
- Escrever código vs. ler código
- Quando você digita o código por conta própria, já acontece uma autorrevisão, e outros sabem quem escreveu para revisar
- Na era da IA, ler e revisar passam a ocupar uma parcela maior
- Usar IA em code review
- A “aprovação” da IA é apenas um sinal
- Assim como passar no CI/CD e nos testes, ainda é necessária uma visão pessoal sobre a qualidade
- Ainda vale a pena fazer 20% a 30% do trabalho sem IA para continuar exercitando o cérebro
LLM como ferramenta de aprendizado
- Ferramenta poderosa para entender uma nova base de código
- A primeira tarefa não deveria ser pedir um novo recurso para gerar valor, e sim aprender como a base de código funciona
- Útil para entender conceitos de programação, frameworks e padrões de arquitetura
- Essencial ao transferir funcionalidades entre bases de código escritas em linguagens diferentes
- Construção de cultura de equipe
- Espalhar a percepção de que usar IA como ferramenta de aprendizado é algo positivo
- Incentivar regularmente experimentação e compartilhamento de boas práticas
- Onboarding mais rápido de novos integrantes
- Ferramentas de IA funcionam como mentores confiáveis 24/7
- Dá para aprender sem o peso de passar o dia inteiro fazendo perguntas a engenheiros seniores
- Modo de aprendizado do Claude Code
- Oferece modo de explicação e modo de aprendizado
- Faz pausas e pede ao usuário que execute certas partes por conta própria
Evolução das ferramentas de IA e definição de expectativas
- Histórico da evolução das ferramentas
- Download de templates → CLI e scaffolding → bootstrap com IA
- Em cada etapa, a experiência do desenvolvedor melhorou um pouco
- Reconhecer os limites dos dados de treinamento
- Baseados em código do GitHub com licenças permissivas ou em padrões da web aberta
- Podem refletir padrões de mínimo denominador comum (lowest common denominator)
- Não garantem o mais alto nível de segurança, performance ou acessibilidade
- Semelhança com copiar e colar do Stack Overflow
- Antes: copiava-se algo como regex de validação de e-mail do Stack Overflow
- Agora: o LLM gera padrões parecidos, mas ainda pode haver edge cases ou problemas de segurança
- Bibliotecas de terceiros vs. implementação própria
- Com LLM, é possível implementar internamente uma versão pequena, mas isso traz o peso da responsabilidade de manutenção
- Bibliotecas permitem correções centralizadas para problemas de segurança etc.
- É preciso considerar os trade-offs de cada escolha
- O essencial é manter expectativas baixas e alto controle
Mudança na definição de um excelente engenheiro de software
- A importância do aprendiz ao longo da vida (lifelong learner) continua inalterada
- Mesmo com a evolução de frameworks, ferramentas e da indústria, continua sendo essencial estar aberto a aprender coisas novas
- Mentalidade de crescimento (growth mindset)
- Disposição para testar novos modelos, ferramentas e plataformas
- Aprender com fracassos e entender restrições
- Papel da liderança
- Quando líderes mostram abertura ao aprendizado, criam segurança psicológica para a equipe
- Addy escreve uma newsletter interna da equipe toda segunda-feira
- Compartilha projetos pessoais, textos e ideias
- Faz curadoria de atualizações importantes sobre IA e engenharia de IA
- Outros executivos também acham útil
- Curadoria na era da sobrecarga de informação
- Nas redes sociais, parece que mudanças fundamentais acontecem a cada hora
- Cabe aos líderes selecionar o que realmente importa e orientar a equipe
- Manter a competência técnica
- Ler e assistir continuamente papers, whitepapers, blogs, vídeos e aulas
- Guiar a equipe sobre onde vale a pena investir tempo
- Conexão com desenvolvimento de produto
- Melhorias no fluxo de trabalho de programação também contribuem para melhorar a experiência do cliente do produto
Ferramentas favoritas e recomendações
- Linguagem de programação favorita: JavaScript
- Não tanto por preferência pessoal, mas pela abertura de permitir que qualquer pessoa construa e publique na web
- Oferece uma sensação de liberdade sem gatekeepers
- Ferramenta favorita no momento: Bolt
- Ferramenta de scaffolding para vibe coding
- Recentemente adicionou suporte a agentes personalizados (como Claude Code)
- Resultados de alta qualidade e ótimo design
- Recursos de automação de integrações com Supabase, provedores de autenticação etc.
- Foco em eliminar atrito de configuração
- Livros recomendados
- "The Software Engineer's Guidebook"
- "AI Engineering", de Chip Huyen — livro para aprender os aspectos fundamentais da engenharia de IA
Ainda não há comentários.