Vibe coding empowers non-developers to build software using AI agents. However, without proper foundation and structure, vibe coding can result in unmaintainable code that fails "the bus test" – meaning if you were hit by a bus tomorrow, no one else could understand or maintain your code.
This rule was written with non-devs in mind, who are interested in getting on the tools. If you are a dev, check out the best workflow for AI assisted development.
The key to successful vibe coding is starting with the right foundation. This means ensuring your code lives in a proper repository, uses proven architectural patterns, leverages existing AI guidance, and takes every change from an issue to a pull request.
Don't keep your code only on your local machine or in an unmanaged environment.
Create a GitHub repository (e.g. in the SSWConsulting GitHub organization) from the start.
Starting your project in GitHub, specifically within your organization, ensures:
Don't start from scratch! Use one of these battle-tested SSW templates that already include comprehensive AI guidance.
Use the SSW Clean Architecture template which includes:
AGENTS.md files guiding AI on architectural decisions (See more on writing an AGENTS.md file)Learn more about Clean Architecture principles and Rules to Better Clean Architecture
Alternatively, use the SSW Vertical Slice Architecture template which offers:
Learn more about working in vertical slices and Rules to Better Vertical Slice Architecture
Which template should I use?
See the software architecture decision tree for more guidance on choosing the right architecture.
Take every change through the same small loop:
Pick a coding agent to work through the loop with you:
"Make the Northwind orders page better"
❌ Figure: Bad example - A vague request with no scope and no way to check the result
Filter Northwind orders by customer
✅ Figure: Good example - One small change with clear acceptance criteria and boundaries
By following these practices, your vibe-coded project will be:
Remember: The goal isn't just to make code work – it's to create code that others can understand, maintain, and extend.