Guide

Where vibe coding hours actually go

You picture the time going into the first prompt. It does not. The first build is one shot. The hours go into the loop that comes after it, and we have the log to prove it.

M
Matthew Diakonov
7 min read

Short answer · verified 2026-05-17

The hours do not go into the first generation. They go into iteration: fixing what broke, refining the spec in words, adding scope you only saw once v1 existed. In a real week of mk0r usage, only 23% of prompts were a session's first build. The other 77% came after it.

Source: mk0r's own usage log, 280 prompts across 65 build sessions over 7 days.

The shape you expect vs the shape it is

The demo version of vibe coding is one sentence and one app. The lived version has a long tail. Toggle these to see the difference between the pitch and the practice.

One prompt, or one prompt and a loop

You type a sentence. An app appears. You are done. This is the version in every demo video, and it is real, for about thirty seconds.

  • One prompt in
  • One finished app out
  • Zero follow-up

We counted a real week

mk0r keeps a record of the prompts people send. We pulled seven days of it into scripts/recent-user-prompts.json: 280 prompts from 65 separate build sessions. Group those prompts by session and the picture is blunt. The first prompt of a session is the build. Everything after it is iteration.

0prompts, 7 days
0build sessions
0%were the first build
0%were iteration

65 of those 280 prompts were first builds, one per session. The other 215 were follow-ups. That is the headline: for every minute spent describing the app, roughly three more go into shaping it afterward. 37% of sessions stopped after a single prompt, but the median session that kept going took a handful of turns, and the longest one ran 45 prompts on a single app.

What those 215 follow-up prompts were

Reading the actual text of every non-first prompt, the hours sort into five buckets. The largest is not what most guides warn you about. It is not grand architecture. It is the small, repetitive work of getting v1 to match what was in your head.

Where the 215 follow-up prompts went

Fixing what broke34%

pasting errors, logs, console output, "this doesn't work"

Refining the spec in words33%

"make it more like X", describing what still feels off

Quick check-ins15%

"is it done?", "make all", nudging the agent forward

Adding the next feature13%

"also add a...", scope that arrived after seeing v1

Visual and layout tweaks5%

color, spacing, fonts, moving things around

Approximate. Buckets are hand-classified from the prompt text, so the edges are fuzzy. The 23/77 first-build split is exact.

Two thirds of the loop is fixing and refining. People paste an error, describe a layout that drifted, or say a version of "closer, but the X is still wrong." This is the real cost of vibe coding, and no first prompt removes it. The skill is making each pass cheap.

The first prompt is the cheap part

Generation is fast because the model is good at turning a sentence into a plausible app. Convergence is slow because only you know whether the result is the app you meant. The loop below is where a build session actually lives. Step one happens once. Steps three through five repeat until it is right.

The vibe coding loop

1

Describe it

One sentence. The first build streams in live, not as a download.

2

Watch it render

A working app, not a mockup. This is the part that feels like magic.

3

Spot what is off

A broken button, a layout that drifted, an error in the console.

4

Describe the fix

Plain words. mk0r edits the files in place and commits the turn.

5

Repeat

Most of your time lives in this loop, not in the first step.

External research lands on the same shape. A widely cited 2025 study measured experienced developers using AI assistance and found they were slower than without it, even though they predicted the opposite. The time did not vanish. It moved out of writing and into reviewing and correcting. Vibe coding does not dodge that. It just makes each correction a sentence instead of a diff.

Why mk0r treats every prompt as a commit

If 77% of the work is the loop, the tool should be built around the loop. mk0r is. Every prompt you send runs through commitTurn in src/core/e2b.ts: the agent's file edits are staged and committed to a git repo inside the sandbox, and the new commit SHA is pushed onto a history stack.

src/core/e2b.ts

That one design choice is what makes the iteration loop cheap. Because each turn is a real commit, undoTurn, redoTurn, and jumpToSha are exact operations, not best-effort guesses. A turn that made things worse is one step back to the last good version, byte for byte. You never have to re-describe an app from scratch to escape a bad turn. The loop you spend 77% of your time in has an undo button, and that button is real version control, not a memory trick.

How to spend the iteration hours well

You cannot delete the loop. You can make every pass through it cost less. Four habits, drawn straight from the prompts that converged fastest in the log:

  1. One change per turn

    A turn that asks for five things gives you five things to verify and no clean version to roll back to. Small turns converge faster than big ones.

  2. Describe the symptom, not the stack trace

    "The submit button does nothing on tap" converges faster than 200 lines of pasted console output. Give the model the observation, let it find the cause.

  3. Undo instead of arguing

    When a turn goes sideways, step back to the last good version and re-describe from there. Three rounds of "no, not like that" is slower than one undo.

  4. Front-load the first prompt

    Name the audience, the core screens, and the visual feel up front. It will not remove the loop, but it lands v1 closer to your intent and saves a few correction rounds.

Building something past the toy stage?

If your app is outgrowing the iteration loop, book 15 minutes and we will talk through where it goes next.

Common questions

Frequently asked questions

Where does the time actually go when you vibe code?

Into the loop after the first build, not the first build itself. The first prompt is a single shot: you describe the app, the model generates it, and a working version appears. Everything after that is iteration: fixing what broke, refining the spec in words, adding scope you only thought of once you saw v1. In a real week of mk0r usage (280 prompts across 65 build sessions), only 23% of prompts were a session's first build. The other 77% were iteration. The hours are not in the generation. They are in the convergence.

Isn't the first prompt the hard part?

It feels like the hard part because it is the part you plan for. It is also the part the tool makes easiest: one sentence in, a streaming app out. The hard part is the gap between the app you pictured and the app that appeared. Closing that gap is a series of small corrections, and there is no single prompt that skips it. In our log, 63% of sessions went past one prompt, and the longest single session ran 45 prompts on one app.

Why does iteration take more prompts than the first build?

A sentence cannot fully specify an app. "A flashcard app for language learning" leaves a thousand decisions to the model, and some of them will not match what you had in mind. You only discover which ones after you see the result. So you converge by correction: look at v1, name the one thing that is wrong, send it, look again. Each correction is cheap, but there are many of them. That is the loop, and it is normal, not a failure.

Does a sharper first prompt cut the iteration time?

Somewhat. A first prompt that names the audience, the core screens, and the visual feel will land closer to your intent and save a few correction rounds. But you cannot prompt your way out of the loop entirely, because some decisions only become visible once the app is in front of you. The realistic goal is not zero iterations. It is fast, cheap iterations: tight scope per turn, one change at a time.

What is the most wasted time in vibe coding?

Two things. First, arguing with the model when a turn went wrong, instead of undoing it and re-describing from the last good state. Second, pasting enormous raw logs and expecting the model to find the needle. In our week of data, a meaningful share of follow-up prompts were raw error dumps. A short, specific description of the symptom usually converges faster than a 200-line stack trace.

How does mk0r make the iteration loop less painful?

It treats iteration as the product's core primitive. Every prompt you send becomes a git commit inside the sandbox (the commitTurn function in src/core/e2b.ts). That means undo, redo, and jump-to-any-version are real operations, not approximations: a bad turn is one click back, not a re-prompt. The agent also edits files in place rather than regenerating the whole app, so a fix to one screen does not silently change another. And there is no account or setup, so the loop starts the moment you open the page.

See the loop for yourself

No account, no setup. Describe an app, watch it build, and feel where the time actually goes.

Open mk0r
mk0r.AI app builder
© 2026 mk0r. All rights reserved.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.