As someone who maintains a healthy skepticism about AI's role in software development, I've discovered an unexpected sweet spot in what I call "vibe coding" – using AI not as a replacement for thinking, but as a catalyst for it.
Vibe coding isn't about getting production-ready code from AI. It's about using AI as an ideation partner to explore problem spaces, generate architectural approaches, and surface solutions you might not have considered. The key insight? You're not looking for code to ship – you're looking for ideas to steal.
Think of it like brainstorming with a colleague who has read every programming tutorial ever written but has never actually shipped software. They'll suggest approaches ranging from brilliant to bizarre, and your job is to sort through the noise to find the signal.
Here's my fundamental tension with AI coding tools: they're simultaneously impressive and unreliable. They can generate syntactically correct code that solves complex problems, but they also hallucinate APIs, make subtle logical errors, and confidently suggest approaches that will break in production.
This unreliability makes them poor choices for direct code generation in anything beyond trivial scripts. But it makes them surprisingly effective for something else entirely: pattern recognition and solution space exploration.
We all get stuck in our usual patterns. When facing a complex problem, we tend to reach for familiar tools and approaches. AI doesn't have this limitation – it can suggest using a state machine for UI logic, propose event sourcing for a simple CRUD app, or recommend functional programming patterns in places you'd never consider them.
Most of these suggestions will be wrong for your specific context. But one might be exactly the nudge you need to see your problem from a new angle.
Want to explore how dependency injection might work in your codebase? Ask AI to sketch out the structure. Curious about implementing a command pattern? Get a quick example to evaluate. The code will likely be flawed, but it gives you something concrete to reason about.
This is faster than diving into documentation or trying to implement from scratch, and it's particularly valuable when you're evaluating multiple approaches.
AI often makes different assumptions than you would. When it suggests an approach that seems obviously wrong, that moment of "why would you do it that way?" can reveal assumptions you didn't realize you were making.
Maybe the AI suggests storing configuration in a database when you assumed it would be in files. Maybe it proposes a different data structure than what seems "obvious." These moments force you to articulate why your approach is better – and sometimes you discover it isn't.
Here's how I typically approach vibe coding:
. Frame the Problem: Describe what you're trying to solve, including constraints and context
. Generate Options: Ask for multiple approaches, architectural patterns, or implementation strategies
. Evaluate and Critique: Look for interesting ideas while identifying what won't work
. Iterate on Concepts: Drill down into promising approaches with follow-up questions
. Implement Yourself: Take the best ideas and write the actual code
The key is maintaining that separation between ideation and implementation. You're mining for concepts, not copying code.
Instead of asking "write a REST API," try "what are five different ways to structure a REST API for a multitenant application, and what are the tradeoffs of each approach?"
Rather than "implement a search function," ask "what are different strategies for implementing fuzzy search in a web application, considering both performance and user experience?"
Instead of "fix this code," try "what design patterns could help organize this complex conditional logic, and when would you use each one?" The Limitations
Vibe coding isn't magic. AI suggestions often:
Ignore important constraints from your specific domain
Propose solutions that don't scale
Mix incompatible concepts from different paradigms
Suggest overly complex solutions to simple problems
This is why the "throw away the code" mindset is crucial. You're not looking for working solutions – you're looking for starting points for your own thinking.
As an AI skeptic, I believe the technology is overhyped and often misapplied. But vibe coding represents a more honest relationship with AI's current capabilities. It acknowledges that AI is better at generating ideas than generating production code, and it keeps humans firmly in the driver's seat for actual implementation.
The result is a workflow that leverages AI's breadth of pattern recognition while maintaining the critical thinking, domain expertise, and quality standards that only human developers can provide.
If you want to try vibe coding, start small. Pick a problem you're already familiar with and ask AI to suggest alternative approaches. Compare its suggestions to what you would normally do. Look for patterns in what it suggests that you might not have considered.
Remember: the goal isn't to find the perfect solution from AI. It's to expand your solution space and challenge your assumptions. Sometimes the best idea comes not from what the AI suggests, but from what it makes you realize you want to do differently.
Vibe coding won't replace good engineering practices, domain expertise, or careful implementation. But it can be a valuable addition to your problem-solving toolkit – a way to break out of routine thinking and explore new possibilities.
In a field where we're constantly solving similar problems in slightly different contexts, having a tool that can suggest alternative approaches is genuinely useful. Just remember to keep your skepticism sharp and your implementation standards high.
The code you throw away might be worthless, but the ideas you keep could be invaluable.