What people mean by vibe coding

Vibe coding usually describes building through conversational instructions while delegating much of the code production to an AI assistant. The label is used loosely: some people mean rapid prototyping, while others mean continuing without reading or understanding the generated implementation.

Those approaches have different consequences. A disposable prototype can test whether an idea is worth pursuing. An application that holds user accounts or changes business records needs a clear owner, observable behavior and a plan for mistakes.

AI assistance does not require abandoning ordinary engineering judgment. You can use generated code and still inspect changes, understand the architecture and verify the result. For a serious project, the useful question is how much of the application you can explain and maintain after the conversation ends.

Define one complete workflow before building screens

Imagine a fictional community workshop that lends tools. Its first application needs one workflow: an authorized member requests a drill for a time slot, the system checks availability and the member receives a confirmed reservation or a clear conflict.

That description exposes questions a mockup can hide. Who counts as a member? Can two people reserve the same drill at once? Where is the booking stored? What happens if the user submits twice or the request fails halfway through?

First version: reserve one tool for one time slot.
Input: authenticated member, tool, start time, end time.
Success: exactly one stored reservation with an identifier.
Conflict: overlapping booking rejected with a clear message.
Failure: no false confirmation if storage fails.
Exclude payments and public account registration from this version.

This original specification gives the assistant concrete behavior to implement. It also gives you a way to judge the implementation independently of whether the page looks finished.

A prototype can hide missing application layers

Questions behind the booking screen
LayerWhat must be trueWhat a mockup can hide
IdentityThe requester is recognized by the server.A name typed into a form is treated as identity.
AuthorizationThe requester may make this booking.The browser alone decides access.
StorageThe reservation survives a restart.Data exists only in the current page.
ConsistencyOverlapping requests cannot both succeed.Sequential manual testing misses a race.
RecoveryFailure produces an honest result.A success message appears before data is saved.

Ask the assistant to explain where each guarantee lives. A hidden button is not a server-side access check. A successful demo is not evidence that simultaneous requests behave correctly.

OWASP’s secure AI coding guidance emphasizes review of generated changes, restricted tool access and independent tests. Use that guidance as a review lens rather than assuming that a coding assistant’s summary is a complete description of its patch.

An exploded engraving places a drill on a display platform above four separate layers: an Identity key, a Permission gate, a Storage drawer and a circular Recovery component.
caption: Inspect the hidden layers.

Review the change and the failure behavior

Keep changes small enough to inspect. Ask for the files changed, the reason for each change and the relevant assumptions. Read the patch itself, including configuration and dependency changes, rather than approving only the explanation.

For the booking example, try an allowed request, a request by someone without access, an overlapping booking and a repeated submission. Simulate storage failure in a test environment. The expected result should be decided before you see how the generated code behaves.

A test that merely repeats the implementation’s output proves little. Preserve tests for the behavior you actually require. Run appropriate security and integration checks before using real records. Keep credentials and customer data outside the prompt and the prototype fixtures.

Two request tickets approach a single reservation latch on converging rails. Request A occupies the lime-lit slot while Request B reaches a red Conflict marker beside the drill mechanism.
caption: Test conflicting requests.

Know when the prototype is ready to become a service

Before launching, identify who can restore the data, inspect failures, update dependencies and reverse a bad release. Record the deployment steps and the configuration needed to run the app. A project that depends on one old chat message is difficult to recover.

Decide which parts need experienced review. Identity, authorization and concurrent data changes deserve particular attention because a plausible interface can conceal incorrect guarantees. Expanding into payments or sensitive records creates a new scope of work.

Vibe coding can help you discover a product quickly. A useful transition to production happens when the application’s behavior becomes explicit and testable. Keep the speed of the prototype, but make the resulting system understandable enough that another person can safely maintain it.

Sources & further reading

Follow the original source to check its date and scope.

  1. Vibe coding: programming through conversation with artificial intelligence

    Sarkar and Drosos | an empirical study of conversational coding, not a production-readiness guarantee.

  2. Secure Coding with AI Cheat Sheet

    OWASP | inspect full changes and verify behavior beyond an assistant’s own tests.

Make it your next question

Try this prompt

Help me specify a small app before generating code. Use an invented equipment-booking example. Define one complete workflow and its failure cases. Explain storage and permissions, then propose a first reversible implementation step.

Use this prompt

Opens chat with this prompt filled in. You choose when to send it.