← all talks

← → move · D light/dark · . blank

A talk about working with AI

Ten Times Zero Is Still Zero

Professional vibe coding, and why you cannot skip to the good part.


Tjakoen Stolk · engineering manager, tech lead, part-time software-engineering teacher

Let's start with the accusation

"Vibe coder."

And yet

I call myself one anyway. I just add a word in front.

Professional vibe coder.

Which is the kind of claim that should turn up with evidence and not just vibes. So I did the one thing the label never does. I counted.

The belief underneath everything

AI doesn't add to what you can do. It multiplies it.

what you bring 6
× the same AI 10
= what ships 60

A decent developer with an AI is a frighteningly fast developer.

The same tool, twice

the same AI a strong developer shipped, and understood a beginner bugs, faster, and no way to tell which is which
  • A strong developer plus an AI is a frighteningly fast strong developer.
  • A beginner plus the same AI ships bugs faster and can't tell which ones they are.
  • So "just use AI" is terrible advice for a beginner, and "never use AI" is terrible advice for a professional.

The order of operations

Become worth multiplying first.

Worth multiplying is a number. Here is what it is made of

Not years. Four things.

0what you bring

Nothing ticked, and the machine is still a ten. Ten times zero.

Not one of these can be bought, installed, or prompted for. That is the bad news and it is also the good news.

The confession

I was the zero. For years.

eleven years, one dot per month

Torocloud, part time, still a studentmy first engineering job, and I left it

Family campsite, grown into a resorta pandemic flattened it

Marketing, for someone else's companyonly works if it is mine

A cafe, with friendsbroke even

A salon, with friendssold at break-even

A marketing firm, on my ownwent nowhere

An events platform, real moneyended badly

Real money, and a few years I can't get back.

Every single one had the same root cause

It wasn't the ideas.

It was me.

I kept starting things I wasn't the right person to start yet.

The maxim it cost me to learn

You have to be the right person before you try the thing.

What I did about it

I stopped chasing the next launch and fixed the one variable I could actually fix.

  • Slowed down.
  • Learned the foundations properly, not just enough to pass.
  • Shoved myself into the parts I was worst at. Teaching. Standing on a stage.
  • Which is going great, thanks for asking.

what I used to ship

const ranking = scores.sort()
Tests green. Nobody asked. I could not have told you what sort compares.

what an afternoon of actually reading found

[10, 9, 1].sort()
// [1, 10, 9]
It sorts them as text, not as numbers. Every language has a handful of these, and you can use them for years before one bites.

what teaching does to you

"Sir, why is it 1, 10, 9?"
Twenty faces waiting. That is the moment you find out whether you know a thing or just use it.

Mileage, not medals

I could have written every line of this by hand.

The whole difference in one line

A beginner vibe codes because they can't write the code. I vibe code because I can.

The typing was never the valuable part.

Directing an AI is not a new skill

Four titles. One skill set.

Give directiona clear briefthe conventionsthe lessona prompt plus docs
Verify anywayreview the PRdesign reviewgrade the workread the output

Then all four do the same last move: correct the reasoning, not just the output.

My one rule for students, turned on the machine

If you can't explain it, you didn't build it.

Enough belief. Here is the evidence

Seven repositories. Six weeks. 822 commits.

My portfolio, tjakoen.github.io, and the six repositories standing behind it: a design system, a data layer, a documentation cockpit, a testing dashboard. Not demo repos. Not tutorials. The things I actually build on, and the thing these slides run on.

Counted straight out of git, 27 June to 7 August. And 822 is not a brag, it is a denominator. What matters is what is inside them, which is the next slide.

Guess before I show you

How much of the portfolio repo is writing, and how much is code?

tjakoen.github.io/
CLAUDE.md       how to work in here
README.md
docs/           the why, and the map
standards/      the rules, published
plans/          what is being built, and why
content/        the notes and the pages
src/            the code
e2e/            the end-to-end run
scripts/
the lit ones are writing

code 18,876 lines ↑ ↓ to move the guess writing 0 lines

48% of that repo is writing, not code. Plans, conventions, decisions, and notes to whoever opens it next.

Why that is not waste: typing is the cheap part now. Deciding what should exist is the expensive part, and it has to be written somewhere the machine can read it.

Across all seven repositories, one line in three is documentation.

If that made me sound slow and fussy

One overnight sprint.

9:08pmthe small hours3:31am

0 / 50 commits

The night of 4 July. One commit every eight minutes, 4,269 lines added before it got light, every one of them co-authored with a machine.

Small commits, on purpose. Each one is a thing that already works, which is what makes the next one cheap to check.

Why ten hours doesn't end in a pile of nonsense

You don't tell a fast driver to be careful. You build the track.

I'm not careful instead of fast. I did the careful part first.

The distinction that actually matters

The machine typed. I engineered.

Steal this

The playbook is a loop.

keeps fast
from turning
into fragile

  1. Write the rails before the features
  2. Give the AI a memory
  3. Make change propagate: keep a sync map
  4. Audit relentlessly
  5. Tests are part of the work
  6. Document for the machine, on purpose

The one everybody gets wrong first

Your prompt is not the input.

cold session, no history, one sentence

> add pagination to the notes list

what it does first

Guesses the stack. Invents a folder. Writes React into a repo that has never had any.

Same prompt every time. The only thing that changed was the room it walked into.

Why the playbook is a ring and not a list

A prompt is one turn. The loop is what happens on the other ninety‑nine.

  1. Briefwhat to build, what not to touch
  2. Buildit types, you read every line
  3. Verifytypes, tests, an end-to-end run, and somebody who is not you
  4. Recordwhat changed, where the next session looks

Skip verify once and nothing happens. Skip it for a week and you cannot answer a single question about your own code.

What the difference actually costs

Six sessions, run two ways.

no loopPrompt, paste, hope

Six of these and you are a stranger in your own codebase.

the loopBrief, build, verify, record

Same six. Same speed. You can still explain all of it.

 

The move I'm proudest of

Make it fail loudly, or you will ship it.

A machine at speed does not produce louder bugs. It produces the same quiet ones, faster.

the trapUsed slightly wrong

 

designed outCannot be used wrong

 

A thing that fails loudly, you fix. A thing that fails silently, you ship.

  1. Typesas you type
  2. Unit teststhe logic
  3. End to endthe real thing, driven like a user
  4. Loud errorsno silent catch, no empty default

The unglamorous half, and the reason the rest holds

I audit far more than I build.

184
test files, across the seven repositories
2,159
test cases behind them
44
end-to-end specs on the portfolio alone, counted 19 August 2026
1
command that runs the lot, before anything counts as done

Say it, write it, or check it

A rule is only real once it can fail a build.

    0times I have typed the same correction

    The second time you correct it about the same thing, that correction has stopped being a conversation and started being a rule.

    Strip all of it down

    Same prompt. Same model. Same code.

    anyone promptmodelcode and that is the whole system me the brief it reads first the conventions the memory it inherited promptmodelcode the types the tests end to end my own review record what changed, so the next session starts up there

    The model was the same. It multiplied everything around it.

    You are not a zero, you are early. So, concretely

    The same hour, spent two ways.

    what you type
    > write me the login form
    after an hour
    A working login form, and a tab you closed.
    after a term
    A folder of code you cannot defend, and the same first number you started the term with.

    Faster output, same you. The multiplier never moved.

    Then record it. In your docs, in your audit, in the file the AI reads first. Let it learn the same lesson you just did, and hold it to that lesson tomorrow.

    If you copy one slide, copy this one

    Where to start, in order.

    1. Pick a project you already understand. Not a new one. You cannot judge the output of a machine on a codebase you have never read, and judging the output is the entire skill.
    2. Write the brief before the feature. One file at the root of the repo: what this is, how it is built, what not to touch. Twenty minutes, once. Every session after it starts smarter.
    3. Turn on the cheap gates first. Types on and strict. One test that actually runs. No empty catch blocks. You can do all three before lunch and they will catch things all year.
    4. Make it explain, then explain it back. Out loud, tab closed. The moment you cannot, stop: you have just found the exact thing to go and learn, which is worth more than the feature was.
    5. Every correction you give twice becomes a line in that file. That is how the brief writes itself, and it is the whole of what I showed you earlier, minus my tooling.

    The habit that decides which of the two you become

    Don't work for the AI. Run it.

    working for itYou are the passenger

    • You ask, it answers, you paste.
    • The shape of the project is whatever it happened to produce.
    • When it goes wrong you ask it again, louder.
    • You are waiting on one chat window, doing nothing.

    running itYou are the one conducting

    • You decide what should exist, before anything is typed.
    • You cut it into pieces small enough to check in a minute.
    • You point it at one piece, and read every line that comes back.
    • You accept nothing you could not defend without it in the room.

    Same tool, same day, same model. One of those is a job. The other is a habit that does not survive contact with anything real.

    The point

    Bring nothing and it multiplies nothing.

    Become a bigger number first. Then go make it dangerous.

    None of this is mine, and you should go to the sources

    What to read next.

    Thank you

    I don't prompt and pray. I prompt and prove.

    The whole post, receipts and all. Plus the playbook, in writing.

    tjakoen.github.io/notes/ten-times-zero


    The judgment is human. The typing, by design, is not.

    1 / 34 00:00

      Next

      Arrows here drive the main window · T resets the clock · the clock turns accent past 20 minutes