What Is Vibe Coding?
A clear explanation of vibe coding — the new paradigm of AI-assisted development where intent description replaces manual syntax — its origins, applications, and limitations.
Defining Vibe Coding
Vibe coding is a development approach where the programmer describes the behavior, structure, or outcome they want in natural language, and an AI model generates the corresponding code. The developer’s primary interaction is through intent description rather than manual syntax writing.
The term was coined by Andrej Karpathy in early 2025 and quickly became shorthand for the broader shift in how software is being written. In a vibe coding workflow, a developer might say “build me a paginated list component that fetches user data from the /api/users endpoint and sorts by join date” — and an AI coding tool generates a working implementation in seconds.
This is distinct from earlier forms of AI code assistance (autocomplete, inline suggestions) in that vibe coding involves higher-level intent specification where the AI is responsible for the full implementation, not just completion of partially-written code.
The Origin: Why “Vibe”?
Karpathy’s use of “vibe” was deliberate and slightly ironic. Traditional programming requires precision: exact syntax, correct types, proper API calls. A vibe, by contrast, is an impression or feeling — an approximate signal rather than a specification.
The point was that AI models are now powerful enough that the developer doesn’t need to specify implementation precisely — they can communicate the vibe of what they want (the general intent, the rough behavior, the approximate structure) and the model fills in the precision. This represents a profound shift in what “programming” means.
How Vibe Coding Works in Practice
A typical vibe coding session involves:
1. Describing the task in natural language: The developer states what they want in plain English (or another language), including relevant context about the stack, existing patterns, and constraints.
2. Reviewing generated code: The AI produces a complete implementation. The developer reads it to verify it’s conceptually correct and checks for obvious errors.
3. Running integrated tests: The code is run against the codebase. Type errors, test failures, and runtime errors provide feedback signals.
4. Iterative refinement: The developer provides corrections in natural language (“the error handling should throw, not return null”) and the AI regenerates. Multiple cycles may be needed.
5. Integration: Working code is integrated into the codebase once it passes quality gates.
What Vibe Coding Is Good At
Vibe coding produces exceptional leverage on certain categories of work:
Boilerplate and scaffolding: CRUD operations, form handlers, API routes, test setup, configuration files — all highly amenable to intent-description generation.
Language and framework translation: “Convert this Python Flask route to a FastAPI equivalent with the same behavior” is a task AI handles reliably.
Documentation and tests: Generating JSDoc from functions, writing unit tests for existing code, creating README files — tasks where the human has the implementation and wants the scaffold.
Rapid prototyping: Building working prototypes quickly to validate ideas before investing in production-quality implementations.
Unfamiliar territory: Writing a one-off Bash script in a shell you don’t know well, or a quick database migration in a SQL dialect you rarely use — vibe coding dramatically reduces the cost of working outside your expertise.
What Vibe Coding Is Not Good At
The limitations are important and honest:
Complex business logic: Intricate conditional rules, multi-step workflows with many exception cases, and domain-specific logic that requires deep understanding of business constraints are harder for AI to get right without extensive back-and-forth.
Correctness guarantees: AI-generated code is not verified correct — it is plausible code that may work for tested cases and fail on untested edge cases. Correctness requires testing, not just generation.
Long-horizon architectural design: Making coherent architectural decisions across a large codebase over time requires context and judgment that current AI tools don’t maintain reliably.
Security-critical code: Authentication, authorization, cryptography, and secure data handling require verification beyond what AI generation currently provides reliably. These areas warrant extra scrutiny.
The Developer’s Role in a Vibe Coding World
Karpathy’s framing provoked debate about what the developer’s role becomes when AI writes the code. The honest answer is: the role changes but doesn’t disappear.
In a vibe-coded workflow, developers spend less time on syntax implementation and more time on:
- Requirement articulation (describing intent precisely enough for the AI)
- Code review (reading AI output critically to verify it does what was intended)
- Architecture and design decisions (which remain human responsibilities)
- Testing and quality assurance (which become more important, not less)
- Integration and context management (which become specialized skills)
Vibe coding is a force multiplier for developer productivity, not a replacement for developer judgment. The developers who thrive in this paradigm are those who develop strong skills in intent description, critical review, and quality gate design — the meta-skills that make AI-generated code reliable.
Advanced Application and Edge Cases
Experienced practitioners find that most vibe coding techniques require refinement beyond the initial concept. The gap between understanding a technique and applying it effectively in production workflows typically involves encountering edge cases, context limitations, and model-specific behavior patterns that only emerge through extended use.
When This Technique Works Best
The optimal conditions for this technique share common characteristics: the prompt provides sufficient context for the model to understand both what you want and the constraints it must respect, the task scope fits within a single interaction without requiring multiple rounds of clarification, and the output will be reviewed by someone with domain expertise before being treated as authoritative.
Common Failure Modes to Avoid
- Context under-specification: Telling the model what to produce without explaining why or what constraints apply. Models optimize for the most plausible interpretation of your prompt — not necessarily the interpretation that fits your specific codebase or architecture.
- Scope creep in a single prompt: Bundling too many distinct tasks into one interaction degrades output quality because the model must balance competing requirements simultaneously. Breaking complex requests into sequential focused prompts produces more reliable results.
- Implicit assumptions: Assuming the model understands your team’s conventions, existing patterns, or non-standard architectural decisions without explicitly stating them. Every new interaction starts from the model’s general training distribution, not your project-specific context.
- Accepting the first output: The first response from the model is rarely the best. Iterative refinement — providing specific feedback on what to change and why — consistently produces higher quality results than treating initial output as final.
Workflow Integration Pattern
The most effective practitioners integrate vibe coding techniques into structured workflows rather than using them ad hoc. A repeatable process might include: defining the expected output format before prompting, providing 1–2 examples of the target pattern, specifying constraints (language version, framework conventions, performance requirements), reviewing output against the specification before use, and capturing successful prompt patterns as reusable templates for similar tasks.
Measuring Effectiveness
Track which prompt patterns consistently produce usable first-draft output versus which require extensive refinement. Over time, a personal library of effective prompts becomes one of the most valuable assets in a vibe coding practice — the accumulated knowledge of how to communicate effectively with AI coding tools for your specific domain and workflow.