Este artigo também está disponível em português no link https://dev.to/matheusmoura17/desenvolvendo-software-de-qualidade-com-ia-279h
Hello! If you are reading this article, it is because you have heard the term Vibe Coding somewhere, come across some application/project that didn't work very well, or are just wanting to know a little more about it.
In this article, I will provide a brief introduction to Vibe Coding, explain some Software Quality concepts, and then talk about a new approach that is becoming popular.
What is Vibe Coding
It is an intuitive approach to building applications without needing to code a single line of code, you don't need technical knowledge, as the term itself suggests: "vibe" is similar to coding, but it's not exactly that, it's like having someone who will do the heavy lifting for you. In this methodology, you just instruct an LLM with your intuition and desires.
How it works
- You describe what you want, for example: "Make a login form for a web page".
- An LLM makes all the decisions about which technology to use and generates the source code.
- No code generated by AI is bug-free, so you need to test everything and ensure it is working as it should. The focus is on the functionality itself, and not on reviewing the source code, meaning you will test the application as an end user.
- If everything is right, your code is ready, otherwise, describe the necessary changes as in step 1 and repeat the process until finished.
Pros
Whether you are a software engineer or a person who has no idea what code is, you will be able to test your idea quickly. This is great for validating short flows, of projects that may never go into production and can be discarded right after.
I have a Designer friend who uses Vibe Coding to create screen prototypes, this allows him to validate flows quickly. Then, it's just a matter of converting everything to a Handoff (delivery documentation) in Figma, and passing it all to the developers, who will have the official layout to implement, as well as a navigable prototype to explore.
Cons
You have no control over the generated code, and this creates drastic consequences for a software. Problems will arise, and a lot of dirt (dead code) will be left behind haunting the project throughout its existence, new features might end up deriving from places they shouldn't.
I want to leave a reflection here about Vibe Coding: If you are a baker and you ask 10 people to bake a cake without specifying exactly what you want, each person will make a different cake, and you have no guarantee that the taste is as it should be, you are only evaluating the aesthetics.
Software Quality
Having a beautiful screen or well-structured code full of Design Patterns does not mean your software is good. There are globally accepted metrics as criteria for defining software quality, they range from a simple click on a button to an architectural choice that allows the portability of a microservice from AWS to Google Cloud for example.
These quality criteria are defined in ISO/IEC 25010, and can be better visualized in the image below.
When placing Vibe Coding and Software Quality side by side, it is noticeable that the two things do not work together, and the effort to have quality without knowing the code becomes increasingly arduous, even making us question whether it is worth using an LLM to generate code. If it takes you more time to make corrections than writing it manually, why use AI then? Relax, there are very effective alternatives to deal with this.
A new approach
In the Software Engineering area, some terms have emerged such as "Vibe Engineering", "Engineering-Guided AI", "Agentic Programming", among others... I believe that at some point these terms will converge into a single one because they are very similar, so in this article we will view this new approach as something abstract and without a defined nomenclature (although I particularly really like the term Engineering-Guided AI lol).
This method aims to centralize decisions on the engineer, as well as extract as much knowledge as they possess. A practical example: A team of 10 interns delivers code faster than a single senior engineer, in this context, the senior needs to clearly specify what needs to be delivered, and divide the work among the team. In a team with this amount of interns, you stop being a coder and become an orchestrator, you need to expose your ideas, review code, define architecture, and ensure that the code being developed and created meets your quality standards.
The same applies to AI, Claude Code can generate great codes, and in a surreal amount of time, you just need to specify how you want it, and for that you need to define everything as if you were talking to an intern. By following this approach and paying attention to the software quality guidelines existing in ISO/IEC 25010, we will have highly efficient and extremely high-quality software.
The idea behind it is not to outsource your macro vision and critical thinking, you must always be in control of everything that is being created, but you can use AI in absolutely all stages, even to generate insights about code review! Even in defining policies and reviewing code, just be careful not to turn a blind eye to some things...
How it works
- Define the development policies for your project, which architecture to use, cite references, and make it clear how the code should be written, you can put this in a claude.md file or another location of your choice.
- Now you need to interact with the code and there are several ways to do this, an engineer should not be limited to a single medium, but rather find what is best for their codebase, here I will cite some examples that I use in my daily life and see my engineer friends using:
- SDD (Spec Driven Development): It is an approach where well-structured technical specifications become the source of truth, you create specifications instead of code. In fact, this approach has a "constitution" that acts as the software development policies I mentioned earlier.
- Prompt: This is the simplest and most direct way to interact with your code, found a bug? Fix it using a prompt, need to find coupling flaws in your code? Request it via prompt! Perhaps this is the approach closest to Vibe Coding, but always be careful not to specify overly generic items, remember that you are an engineer and need to ensure the quality of the software.
- Multi Agents: This is one of the most "attractive" ways to develop software, instead of creating multiple prompts every time, you can create them once, and store them in an Agents folder, so you have a specialized agent for a type of problem, such as creating unit tests, doing a security scan, validating architectural problems, etc...
- MCP Tools: The tools allow you to interact with your codebase using external MCP servers like Figma, Jira, Github, or something of your preference, you can also create your own MCP server and provide tools that perform some specific action from your daily routine.
- Review the entire process, is the generated code correct? Does the application work as it should? Routinely check if the software development policy is being met.
Pros
You have control over everything that is being implemented, and act as a software engineer, you can ensure the quality of what is being delivered and do not need to write the code manually.
Cons
The process is slower compared to Vibe Coding, you need to review more and contextualize well, otherwise the result will come out bad and you will have to make many adjustments.
Following the reflection I brought earlier, if you are a baker and you ask 10 people to bake a cake, but you specify everything that will be necessary from the beginning and review the result, everyone delivers the cake in the same way.
Conclusion
Vibe Coding cannot guarantee Software Quality, and therefore it is not suitable for robust production applications. Opt for Engineering-Guided AI, which is essential for applying advanced engineering practices since it keeps the developer at the center of decision-making.
There are various models and frameworks available, but they mean nothing without proper application. Think like a Software Engineer; explore ways to optimize your time with AI without compromising quality. The golden rule is to never outsource your critical thinking. Take control of the architecture and let AI do the heavy lifting for you.
Sources and 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)