← All posts

How Ahead is built without an engineer

Ahead is built by someone who does not write code, using three tools with one job each. Here is the operating model, why the direction of flow matters more than the tools, and the part that is still done on paper.

Ahead's product is built by someone who does not write code. Three tools, one job each, and one direction of flow between them. The tools matter less than that last part, which is the thing that took longest to work out and is the reason the setup holds up.

This is a description of a working arrangement rather than a recommendation. It is written down because the question underneath it comes up constantly: what does it actually look like when a non-engineer runs a real build.

The three jobs#

One tool writes and hosts the code. It has access to the running application and nothing else. It receives specifications and executes them.

One tool holds the reasoning. Strategy, positioning, decisions, specifications, and the record of why anything was chosen. It has a read-only copy of the code, so it can audit what was built against what was specified, and it cannot change anything.

One tool is the bridge. Code moves from the builder to the reader through it, in one direction only.

The important word is only. The reader cannot write code. The writer does not hold decisions. Every failure worth naming in the early weeks came from those two responsibilities blurring, and separating them fixed a class of problem rather than an instance of one.

Why one direction of flow#

Because two things that can both change the same thing will eventually disagree, and nothing will tell you which one is right.

If the code can be edited from two places, the version in each is a guess about the other. If decisions live in two documents, one of them is wrong and nobody knows which. The rule that removed most of this was simple: every fact has exactly one home, and everything else points at it.

Code has one home. Decisions have another. Neither writes into the other's.

What a cycle looks like#

  1. A specification is written, with the decisions already made and the ambiguity already removed.
  2. The builder executes it and pushes.
  3. The reader pulls the code and audits it against the specification, not against the builder's summary of what it did.
  4. A human tests the result on paper.
  5. The failures come back as one-change fix instructions.
  6. Only what failed gets retested.

Step three is where most of the value is. A summary of work is a claim, not a result. An agent reporting that something is done is reporting its intention, and the two diverge often enough that checking is not paranoia.

Step four is the one people find surprising.

The part done on paper#

Before a change is accepted, a person tests it against a printed checklist, in order, writing down what failed and fixing nothing along the way.

Three rules make it work.

Print it. Reading a checklist on the same screen as the thing being tested produces skipping. This is not a theory about attention, it is what happens.

Fix nothing mid-run. Fixing as you go changes the thing you are testing and makes the rest of the results meaningless. Note it, keep going, fix afterwards.

Test in the real place. On the actual site, on an actual phone. A test in a development environment tells you the code runs. It does not tell you the product works.

The paper step catches a specific class of failure: everything technically working and the experience being wrong. No automated check finds that, and no summary reports it.

What actually goes wrong#

Three failures, all from the same period, all instructive.

A summary said a thing was done and it was not. Not dishonesty. An agent reports what it set out to do, and verifying it against the running system is a different action from reading the report. Every claim gets checked against the live thing now.

A change was made that nobody asked for. Agents are helpful, and a decision recorded once tends to get re-decided by whatever is next in the queue. Specifications now state what must not be done as explicitly as what must, with reasons attached, because a rule without a reason gets helpfully reverted.

A fix made something else worse. A change went in, the thing it fixed worked, and something adjacent broke silently. This is why the sequence is staged now, with a checkpoint between each stage, so a problem rolls back to the last good point rather than to the beginning.

The honest limitations#

It is slower than an engineer would be. Specifying something precisely enough to be executed takes real time, and a good engineer would have done several of these without a written specification at all.

It requires being able to say exactly what you want. That skill is doing most of the work here. The tools convert clarity into a product very quickly and do nothing at all for the absence of it.

It does not remove the need to understand what was built. Reading a specification and auditing against it is not writing code, and it is not free either.

What it needs
Writing the codeNot required
Saying precisely what should existRequired, and this is the constraint
Reading a result and telling whether it matchesRequired
Testing like a user, on paperRequired, and skipped most often
I want to build something using AI tools without writing the code myself. Before I start, help me work out whether my instructions are actually specific enough to be executed. Ask me to describe what I want built, then:
1. List every decision my description leaves open.
2. For each one, ask me to decide it now, or tell you to choose and record it.
3. Tell me which parts of my description could be interpreted two ways.
4. Write back the specification as you now understand it, including what must NOT be changed and why.
Do not start building anything. If my description is too vague to specify, say so directly and tell me what is missing.

Why this is written down#

The interesting part of this setup is not that AI can build software. It is that the constraint moved. The bottleneck is no longer writing the code. It is knowing precisely what should exist, and being able to tell whether what came back matches.

That is not an engineering skill. It is closer to an operating one, and it is learnable by someone who has never opened a code editor.

Ahead pairs you with an expert operator who has done this before, on your own work, in your own tools. If you are trying to build something this way and cannot tell whether what came back is right, that is a good first hour.