Why most AI agent projects stall after the prototype
Building something impressive with a language model is now easy. A competent
engineer can wire up a tool-calling loop over a weekend and produce a
demonstration that makes a leadership team genuinely excited. That is the trap:
the prototype is the cheap 20% of the work, and it creates the impression that
the remaining 80% is a formality.
It is not. The prototype succeeds because it runs on a handful of clean, chosen
examples. Production fails because real inputs are ambiguous, the process has a
long tail of exceptions nobody documented, source systems return unexpected
nulls, and users ask for things outside the intended scope on their first day.
The work that closes that gap is unglamorous and mostly has nothing to do with
prompts. It is retrieval quality. It is validating model output against a schema
before anything acts on it. It is deciding which actions require human approval.
It is building an evaluation set so a change can be measured rather than
guessed at. None of that demos well, and all of it determines whether the agent
is still running in six months.
What an AI agent actually is, technically
Strip away the marketing and an agent is a loop with four parts:
- Perception — it reads state from somewhere: a ticket, a database row, a
document, an event, a user message.
- Reasoning — a model decides what should happen next, given that state and
the goal it was given.
- Action — it calls a tool: a function with a defined signature that queries
or changes something in a real system.
- Evaluation — it checks whether the goal is met, and either loops or stops.
Everything that distinguishes a production agent from a prototype lives in the
constraints around that loop. How many iterations before it gives up. What it is
permitted to call. What happens when a tool errors. What confidence level is
required before it acts unsupervised. How a human takes over mid-task. Whether
you can reconstruct, three months later, exactly why it made a particular
decision.
Where the engineering effort actually goes
On the agent builds we have shipped, the effort distribution is consistently
lopsided:
| Area | Share of effort | Why it dominates |
|---|
| Retrieval and data plumbing | ~30% | Agents fail on context quality far more often than on reasoning quality. |
| Tool contracts and integration | ~25% | Every system has undocumented behaviour, and the agent finds all of it. |
| Evaluation and testing | ~20% | This is the only thing that makes quality measurable rather than anecdotal. |
| Guardrails and permissions | ~15% | Blast radius has to be designed, not discovered after an incident. |
| Prompting and model selection | ~10% | Real, but the smallest slice — and the easiest to change later. |
Teams that expect the reverse distribution — most effort on prompts — are the
ones that get surprised.
The evaluation set is the project
If we could enforce only one practice, it would be this: before writing agent
logic, assemble a set of real historical cases with known correct outcomes,
including the awkward ones and the ones a human got wrong.
That set becomes the thing you optimise against. It turns “this prompt feels
better” into a number. It catches the regression introduced by a model version
change. It gives you a defensible answer when someone asks how accurate the
system is. And it is the only mechanism we know of that stops slow quality decay
over months of small changes.
Building it takes real work — usually a week of pulling records and adjudicating
correct answers with someone who knows the process. Teams resist it because it
feels like a detour. It is the shortest path.
Guardrails: constrain capability, do not just instruct
A recurring mistake is treating safety as a prompting problem — writing “never
issue a refund above $500” into the system prompt and considering it handled.
Instructions are the weakest available control. They are probabilistic, and a
sufficiently unusual input will route around them.
The controls that hold are structural, and they sit outside the model:
- Capability scoping. The agent has credentials for exactly the systems it
needs, at exactly the access level it needs. If it cannot call the refund API,
no prompt injection makes it issue a refund.
- Schema validation. Model output is parsed and validated before it becomes
an action. A malformed or out-of-range value is rejected at the boundary.
- Enforced limits. Spend ceilings, rate limits and volume caps live in code,
not in instructions.
- Approval gates. Actions classified as high blast radius stop and wait for a
named human.
- Audit trail. Every decision is logged with the context that produced it, so
an incident can be reconstructed rather than speculated about.
Cost: the architecture decision that shows up on the invoice
The most common unit-economics mistake is running every step through a frontier
model. Agent workflows are full of routine steps — classifying an intent,
extracting a field, formatting an output — where a small model performs
identically at a fraction of the price.
We benchmark step by step and route each one to the cheapest model that passes
evaluation for that step, keeping frontier models for the genuinely
judgement-heavy parts. On high-volume workloads this routinely cuts inference
spend by four to eight times with no measurable quality change. Doing it later
is harder, because by then the architecture assumes one model everywhere.
What working with us looks like
We start with a fixed-price two-week scoping sprint, and its output is yours
whether or not you continue: architecture, evaluation plan, cost model, estimate.
We do that because a scope you cannot take to another vendor is not a scope, it
is a lock-in mechanism.
Sometimes that document concludes you should not build an agent — that the
process needs fixing first, or that a deterministic workflow would be cheaper and
more reliable. We would rather write that in week two than bill you for twelve
weeks of building the wrong thing.