The step that decides whether a new tool survives your first fifteen minutes is rarely the tool itself; it is the one step you end up doing twice.
I keep running into the same pattern when I time a first-run session: the total elapsed time tells you almost nothing useful, because a single clumsy step quietly pays for itself three or four times. You sign in, you get bounced, you sign in again, and now the clock has doubled while the step count barely moved. Wouldn't it be better to measure the rework instead of the wall clock, since rework is the part you can actually delete?
So that is what this teardown does. I am going to walk through a small friction log that records each step, its duration, its exit code, and whether you had to redo it, and then I will show the one fix that mattered in the walkthrough I use below. The numbers in that walkthrough are a worked example you should replace with your own; please do not read them as a benchmark of any tool, including the one I mention later.
Why step counts lie to you
A setup guide is a list of steps, and a list of steps invites you to count them, which is exactly the wrong unit. Counting steps rewards guides that merge five confusing actions into one opaque command, and it punishes guides that are honest about the five actions. The thing your patience actually reacts to is interruption: the moment you stop being a visitor and start being a repair technician.
Rework has a nasty compounding shape too. A two-minute step you repeat three times costs more than a seven-minute step you do once, and it also costs you context, because each retry forces you to reload the mental state you had built. That is the analogy I keep coming back to: a single missing screw in a flat-pack shelf is not a small defect, because you disassemble the whole shelf to reach it.
A friction log you can run in one minute
The script below is deliberately tiny and dependency-free, and it wraps whatever entry point you already have rather than assuming a particular CLI. It writes tab-separated records, so you can paste the output straight into a spreadsheet or pipe it into the report that follows.
#!/usr/bin/env bash
# friction.sh — rework-aware log for a first-run session.
# Usage: source ./friction.sh then call step / rework.
set -uo pipefail
LOG="${FRICTION_LOG:-friction.log}"
: > "$LOG"
# step <label> <command...>
# Records wall time in ms, exit code, and an ISO timestamp.
step() {
local label="$1"; shift
local t0 t1 rc
t0=$(date +%s%3N)
"$@"; rc=$?
t1=$(date +%s%3N)
printf 'STEP\t%s\t%s\t%s\t%s\n' \
"$label" "$((t1 - t0))" "$rc" "$(date -u +%FT%TZ)" >> "$LOG"
return "$rc"
}
# rework <label> <ms_lost> — call this the moment you realise you must redo a step.
rework() {
printf 'REWORK\t%s\t%s\n' "$1" "$2" >> "$LOG"
}
Notice that rework takes a number you supply yourself, and that is intentional. You cannot measure the time you spent confused with a timestamp, because the confusion often starts before the command does, but you can absolutely write down your own estimate at the moment you notice it. An honest guess beats a fake precision every time.
Here is a session shape, using placeholders you should replace with your own entry point:
source ./friction.sh
step "read-landing-page" true # always false-start: reading is a step
step "create-account" true # substitute your real command
step "first-answer" "$ENTRY" "hello"
# the machine asked for a second sign-in before answering:
rework "first-answer" 90000 # 90s of repeated work, your estimate
step "second-answer" "$ENTRY" "hello"
The report is three lines of awk and gives you the only two numbers worth keeping: how many steps failed loudly, and what share of the session was rework.
awk -F'\t' '
$1=="REWORK" { rework += $3; next }
$1=="STEP" { total += $3; n++; if ($4 != 0) failed++ }
END {
denied = total + rework
printf "steps=%d failed=%d work=%.1fs rework=%.1fs\n", n, failed, total/1000, rework/1000
if (denied > 0) printf "rework share=%.0f%%\n", 100*rework/denied
}' friction.log
What the example session showed me
In my worked example, four steps took roughly two minutes of real work, and one of them — getting a first answer out of the tool — was retried once for ninety seconds. That single retry was not the longest step, but it owned most of the session's cost, and it also produced the only moment where I considered closing the tab. Ask yourself which is worse for a first impression: a slow step that works, or a fast step that makes you start over?
That is why I now ignore the total and sort by rework share first. A step with high rework is a design bug wearing a progress bar, while a step that is merely slow is usually just the price of doing something real. Sorting this way also keeps me honest about my own impatience, because it distinguishes "this is slow" from "this made me do it again" and only the second one is the tool's fault.
The one fix that mattered
The fix was not a setting, a flag, or a better error message; it was reordering the guide so the shortest path to a first successful answer comes before any local installation. In practice that means you prove the round trip on someone else's machine first, and only then earn the right to configure your own. Setting up a local environment before you know the tool can answer you is like installing a kitchen before checking the water is on.
This is where hosted options genuinely change the shape of the first fifteen minutes. MonkeyCode is an open-source AI coding project, and its operator-supplied offer at the time of writing (November 2026) includes free model access and a free server option, advertised alongside a 10-million-token allotment; treat all of that as a time-sensitive claim to verify on its own pages rather than a permanent guarantee. Disclosure: This article was prepared as part of MonkeyCode's product outreach. What matters for this teardown is narrower than the marketing: a hosted first answer removes the install step from the rework-prone part of the session, which is the exact defect the log is built to surface.
Choosing a first path, honestly
| Situation | Start hosted or free server | Start local install |
|---|---|---|
| Evaluating whether the tool fits your problem | Yes — first answer before config | No |
| Network policy blocks hosted inference | No | Yes, with a pinned version |
| Reproducing a bug across machines | No | Yes — local only |
| Teaching a workshop in 30 minutes | Yes — removes account roulette | No |
| Handling regulated source code | No | Yes, only if you have cleared it |
Read the table as a default, not a rule, and re-run your own log whenever the guide changes, because onboarding decays faster than documentation admits. The log takes a minute, and it will tell you more about a tool's DX than any feature list ever could.
Limitations, and who should skip this
This method measures your session, not the product, and a single run has no statistical weight, so collect three or four sessions before you draw a conclusion. It also cannot see the cost you pay after the first fifteen minutes, which is where most real friction lives, and it says nothing about output quality.
If your team has data-residency constraints, needs a pinned model version for reproducible builds, or requires an SLA for production traffic, a free hosted path is the wrong default and you should start local. If you already have a working setup, this exercise is mostly a way to feel productive without shipping anything, so skip it. And if you cannot verify the current offer terms yourself, do not plan capacity around them.
If you want a disposable place to try the log, the free server path is the cheapest first answer you can get; go break it deliberately, then tell me which step made you start over.
Top comments (0)