This article is also available in English: https://dev.to/matheusmoura17/developing-a-high-quality-software-with-ai-1aj4
Olá! Se você está lendo este artigo, é porque já ouviu o termo Vibe Coding em algum lugar, se deparou com alguma aplicação/projeto que não funcionou muito bem, ou então está querendo saber um pouco mais sobre isso.
Neste artigo vou abordar uma breve introdução sobre Vibe Coding, explicar alguns conceitos de Qualidade de Software e em seguida falar sobre uma nova abordagem que está se popularizando.
O que é Vibe Coding
É uma abordagem intuitiva de construir aplicações sem precisar codificar nenhuma linha de código, você não precisa de um conhecimento técnico, como o próprio termo sugere: "vibe" é parecido com codificar, mas não é bem isso, é como ter alguém que vai fazer o trabalho pesado para você. Nessa metodologia você apenas instrui uma LLM com a sua intuição e desejos.
Como funciona
- Você descreve o que você deseja, por exemplo: "Faça um formulário de login para uma página web".
- Uma LLM toma todas as decisões sobre qual tecnologia utilizar e gera o código-fonte.
- Nenhum código gerado por IA está livre de bugs, então você precisa testar tudo e garantir que está funcionando como deveria. O foco é a funcionalidade em si, e não a revisão do código-fonte, ou seja, você irá testar a aplicação como um usuário final.
- Se tudo estiver certo, seu código está pronto, caso contrário, descreva as alterações necessárias como no passo 1 e repita o processo até finalizar.
Prós
Seja você um engenheiro de software ou uma pessoa que não faz a menor ideia do que é um código, você vai conseguir testar sua ideia rapidamente. Isso é ótimo para validar fluxos curtos, de projetos que talvez nunca vão entrar em produção e podem ser descartados em seguida.
Tenho um amigo Designer que utiliza Vibe Coding para criar protótipos de telas, isso permite que ele valide fluxos rapidamente. Em seguida é só converter tudo para um Handoff (documentação de entrega) no Figma, e repassar tudo para os desenvolvedores, que terão o layout oficial para implementar, e também um protótipo navegável para explorar.
Contras
Você não tem nenhum controle sobre o código que foi gerado, e isso gera consequências drásticas para um software. Problemas surgirão, e muita sujeira (código morto) vai ficar para trás assombrando o projeto durante toda sua existência, novas features podem acabar se derivando de locais que não deveriam.
Quero deixar aqui uma reflexão sobre Vibe Coding: Se você é um confeiteiro e pede para 10 pessoas fazerem um bolo sem especificar exatamente o que você quer, cada pessoa fará um bolo diferente, e você não tem nenhuma garantia de que o sabor está como deveria, você avalia apenas a estética.
Qualidade de software
Ter uma tela bonita ou um código bem estruturado cheio de Design Patterns não significa que seu software é bom. Existem métricas aceitas globalmente como critérios para definir a qualidade de um software, elas vão desde um simples clique num botão até uma escolha de arquitetura que permite a portabilidade de um microsserviço da AWS para Google Cloud por exemplo.
Esses critérios de qualidade são definidos na ISO/IEC 25010, e podem ser melhor visualizados na imagem abaixo.
Ao colocar Vibe Coding e Qualidade de Software lado a lado, é notável que as duas coisas não trabalham juntas, e o esforço para ter qualidade sem conhecer o código fica cada vez mais árduo, fazendo-nos questionar inclusive se vale a pena usar uma LLM para gerar código. Se você leva mais tempo para fazer correções do que escrevendo manualmente, por que usar IA então? Calma, existem alternativas muito eficazes de lidar com isso.
Uma nova abordagem
Na área de Engenharia de Software têm surgido alguns termos como "Vibe Engineering", "Engineering-Guided AI", "Agentic Programming", e entre outros... Acredito que em algum momento esses termos irão convergir em um único pois são bem similares, então nesse artigo vamos enxergar essa nova abordagem como algo abstrato e sem uma nomenclatura definida (apesar de particularmente eu gostar muito do termo Engineering-Guided AI rsrsrs).
Este método visa centralizar as decisões no engenheiro, assim como extrair o máximo possível de conhecimento que ele possua. Um exemplo prático: Uma equipe com 10 estagiários entrega código mais rápido do que um único engenheiro sênior, nesse contexto, o sênior precisa especificar bem o que precisa ser entregue, e dividir o trabalho entre o time. Numa equipe com essa quantidade de estagiários, você deixa de ser um codificador e passa a ser um orquestrador, você precisa expor suas ideias, revisar código, definir arquitetura e garantir que o código que está sendo desenvolvido e criado atenda seus padrões de qualidade.
O mesmo se aplica à IA, o Claude Code consegue gerar ótimos códigos, e num tempo surreal, você só precisa especificar como você quer, e para isso você precisa definir tudo como se estivesse falando com um estagiário. Seguindo essa abordagem e nos atentando nas diretrizes de qualidade de software existentes na ISO/IEC 25010, teremos um software altamente eficiente e de extrema qualidade.
A ideia por trás é não terceirizar sua visão macro e pensamento crítico, você deve estar sempre no controle de tudo que está sendo criado, mas você pode usar AI em absolutamente todas as etapas, até para gerar insights sobre a revisão do código! Até mesmo na definição das políticas e na revisão do código, só tome cuidado para não fazer vista grossa para algumas coisas...
Como funciona
- Defina as políticas de desenvolvimento do seu projeto, qual arquitetura usar, cite referências e deixe claro como o código deve ser escrito, você pode colocar isso num arquivo
claude.mdou outro local de sua escolha. - Agora você precisa interagir com o código e existem várias formas de fazer isso, um engenheiro não deve se limitar a um único meio, mas sim encontrar o que é melhor para sua base de código, aqui vou citar alguns exemplos que utilizo no meu dia a dia e vejo meus amigos engenheiros utilizando:
- SDD (Spec Driven Development): É uma abordagem onde as especificações técnicas bem estruturadas se tornam a fonte da verdade, você cria especificações ao invés de código. Inclusive, essa abordagem possui uma "constituição" que funcionam como as políticas de desenvolvimento de software que mencionei anteriormente.
- b. Prompt: Esta é a forma mais simples e direta de interagir com seu código, encontrou um bug? Corrija utilizando prompt, precisa encontrar falhas de acoplamento no seu código? Solicite isso via prompt! Talvez essa seja a abordagem mais próxima do Vibe Coding, mas esteja sempre atento a não especificar itens genéricos demais, lembre-se que você é um engenheiro e precisa garantir a qualidade do software.
- c. Multi Agents: Essa é uma das formas mais "atraentes" de desenvolver um software, ao invés de ficar criando vários prompts toda vez, você pode criar uma única vez, e guardar numa pasta Agents, assim você tem um agente especialista num tipo de problema, como criar testes unitários, fazer uma varredura de segurança, validar problemas de arquitetura, etc...
- MCP Tools: As tools permitem que você interaja com sua base de código utilizando servidores MCP externos como Figma, Jira, Github ou algo de sua preferência, você também pode criar seu próprio servidor MCP e fornecer ferramentas que realizem alguma ação específica do seu dia a dia.
- Revise todo o processo, o código gerado está correto? A aplicação funciona como deveria? Verifique rotineiramente se a política de desenvolvimento de software está sendo atendida.
Prós
Você tem controle de tudo que está sendo implementado, e age como um engenheiro de software, consegue garantir a qualidade do que está sendo entregue e não precisa escrever o código manualmente.
Contras
O processo é mais lento comparado ao Vibe Coding, você precisa revisar mais e contextualizar bem, caso contrário o resultado vai sair ruim e você terá que fazer muitos ajustes.
Seguindo a reflexão que trouxe anteriormente, se você é um confeiteiro e pede para 10 pessoas fazerem um bolo, mas especifica tudo que será necessário desde o início e revisa o resultado, todos entregam o bolo da mesma maneira.
Conclusão
Vibe Coding não consegue garantir a Qualidade de Software, portanto, não serve para aplicações robustas em produção. Prefira o Engineering-Guided AI, que se mostra essencial para aplicar práticas avançadas de engenharia, uma vez que mantém o desenvolvedor no centro das decisões.
Existem vários modelos e frameworks, mas eles não significam nada sem a aplicação correta. Pense como um Engenheiro de Software, explore formas de otimizar o seu tempo com IA sem abrir mão da qualidade. A regra de ouro é nunca terceirizar o seu pensamento crítico. Assuma o controle da arquitetura e deixe a IA executar o trabalho pesado para você.
Fontes e links
Vibe Coding
https://copilot4devops.com/vibe-coding/
Qualidade de Software
https://www.sofist.co/blog/iso-iec-25010
Spec Kit
https://github.com/github/spec-kit
Spec Driven Development
https://www.softdesign.com.br/blog/spec-driven-development/





Top comments (0)