Getting started

Why Most AI Pilots Never Reach Production

A pilot and a production system share a model and almost nothing else. Here are the five gaps that strand good demos, and the exit criteria to write before the pilot starts.

On this page
  1. Pilots do not fail on model quality, they fail on the half nobody demoed
  2. The Demo-to-Production Delta
  3. The six gates a pilot has to pass, and who owns each
  4. Pilot success criteria and production entry criteria are different documents
  5. The cost curve nobody models before the pilot
  6. Non-determinism against a change process built for deterministic software
  7. Write the exit criteria before the pilot starts
  8. How to restart a pilot that has already stalled
  9. Definitions that keep the go-live meeting short

Pilots do not fail on model quality, they fail on the half nobody demoed

The short answer

A pilot stalls because a demo and a production system share a model and very little else. The demo reads data, handles one case at a time, is graded by the person who built it, and is edited live. Production writes data, handles a queue, is graded by somebody who was not in the room, and cannot change without a release. Each of those four differences is engineering work, and almost none of it was in the pilot budget.

The conversation at the end of a stalled pilot is always the same. The output looks good, everybody agrees it looks good, and nobody can say whether it is better than what the team does today, because nobody measured what the team does today. There is no golden set, so no version can be compared to another version. There is no write path, so nothing has been proved about permissions or rollback. The pilot has demonstrated that the model can do the task, which was rarely the open question.

This is not a model problem and buying a better model does not fix it. It is a scope problem created at kickoff, when the pilot was defined as the cheap half of the system. The fix is to write the exit criteria before the pilot starts, so that the pilot is built as a small production system rather than as a persuasive demonstration.

  • Read vs writeA pilot that only reads has tested none of the permissions, idempotency, audit logging or rollback work, which is most of the remaining effort.
  • No baselineWithout a measurement taken before the pilot, nothing can be proved afterwards, so the approval decision falls back on taste.
  • The tailDemo cases are chosen and production cases arrive. The exception tail is most of the difference between the two.
  • Frozen at v1With no eval suite, nobody can safely approve a prompt change, so the system freezes and quietly decays as models and data move underneath it.

The Demo-to-Production Delta

For every capability a demo appears to have, it has implemented the cheap half. Naming the five halves that are missing is the quickest way to turn an argument about whether the pilot worked into a list of work items with owners.

Framework

The Demo-to-Production Delta

Five gaps, in the order they usually bite. Score a pilot by how many it has actually crossed, not by how the output reads.

01
Read is not write

Reading needs a credential and a query. Writing needs a scoped service account, an idempotency key so a retried run does not create a duplicate record, an audit entry naming the automation rather than a human, and a tested reversal path. A pilot that emits a spreadsheet for a person to paste has crossed none of this, and pasting is exactly where the eventual production system will differ most from the demo.

02
One case is not a queue

A demo processes the case in front of it. Production faces arrival patterns: a quiet Tuesday, then four hundred at once when a partner batches their overnight file. That needs a queue, concurrency limits set below your provider's rate limit, retries with exponential backoff and jitter, a dead letter queue somebody actually reads, and a way to replay the dead letters after the fix.

03
A good answer is not a graded answer

The demo shows an output and a room agrees it looks right. Production needs a fixed set of cases with agreed correct answers, a scoring function, a threshold, and a person who did not build the system doing the scoring. Without that, no future change can be approved, because nobody can distinguish an improvement from a regression that happens to read well.

04
A user is not an owner

Pilots have a champion who is excited. Production needs a named owner whose week gets worse when it breaks, a rota for the failure alerts, a budget code the running cost lands on, and a place in somebody's objectives. Champions get promoted, move teams and go on leave. When the champion leaves before the owner is named, the system is orphaned and no incident gets a response.

05
A prompt is not a release

In a pilot, a prompt is edited in a playground and the improvement is obvious to the person editing it. In production, a prompt is a versioned artifact in the repository, deployed with the code, recorded in every run record, and revertible in minutes. If nobody can tell you which prompt version produced last Tuesday's output, you cannot investigate a complaint about last Tuesday.

The six gates a pilot has to pass, and who owns each

Turn the delta into gates with owners. A gate without a named owner is a gate nobody walks through, and the gates that stall pilots are almost never the model ones.

GateQuestion it answersEvidence that passes itUsual owner
BaselineWas this better than what we did before?Pre-pilot numbers, dated, agreed by the process ownerProcess owner
Write pathCan it act on a real system safely?A reversed test write, with the idempotency key documentedPlatform or integration team
ExceptionsWhat happens to the cases it cannot do?Every case type either handled or routed to a named queueOperations lead
EvaluationCan we tell an improvement from a regression?A golden set, a scorer, a threshold, and a run on every releaseBuild team
CostDoes it still make sense at production volume?Cost per case measured at full volume, with a written ceilingBudget holder
OwnershipWho fixes it at 09:00 on a Monday?A named owner, an alert rota and a budget codeSponsor, before launch
Six gates. Pilots usually pass the model gate and stall on the other five.

Pilot success criteria and production entry criteria are different documents

Write both, and write them before the pilot begins. Conflating them is what produces the meeting where a successful pilot is refused permission to go live and nobody can explain why the two facts coexist.

Pilot success criteriaProduction entry criteria
DataAn export, refreshed by hand when it goes staleA live connection, scoped credential, rate limit budget
VolumeTen to fifty cases somebody selectedA month of real arrivals, including the exception tail
GradingThe builder and the sponsor agree it reads wellA fixed golden set scored by someone who did not build it
FailureRun it again and seeRetry with backoff, dead letter queue, alert with a named owner
ChangeEdit the prompt in a playgroundVersioned release, eval run, revert path measured in minutes
PeopleA champion who is interestedAn owner, a rota, and a budget code for the running cost

The useful discipline is to pick the pilot so that crossing from the left column to the right is short. That is mostly a selection decision rather than an engineering one, and it is covered in how to pick the first process to automate.

The cost curve nobody models before the pilot

Pilot economics mislead in two directions at once. Volume is a fraction of production, and the demo usually makes one model call per case while the production version makes several: a plan, two or three tool calls, a verification pass, and a retry when a tool times out. Multiply both factors and the monthly number can move by an order of magnitude between the pilot and the real thing.

Cost and call volume at production scale

Every price here is your assumption to supply, not a figure we are asserting. Provider pricing and rate limits change often, so take the current numbers from your provider's own price page on the day you run this. The peak output assumes a third of daily volume arrives inside one hour, which is what batch-driven upstream systems tend to do to you.

0Cost per case, your currency
0Running cost per month at that volume
0Model calls per month
0Calls per minute in a peak hour, check against your rate limit
Check the peak rate before you check the monthly cost

The monthly number tends to be survivable. The peak minute is what breaks a launch. If your peak calls per minute sits near your account limit, the system will fail exactly when volume is highest, which is the worst moment for a first impression. The fixes are a queue with a concurrency cap, request batching where the provider supports it, a smaller model on the high-frequency step, and asking for a limit increase weeks before you need it rather than during the incident.

Non-determinism against a change process built for deterministic software

This is the gate that surprises engineering-led teams. Your release process asks whether the software produces the expected output for a given input. An LLM system does not have one expected output, so the existing question has no answer and the release sits in a queue while people argue about whether that is acceptable.

Replace the question rather than fighting it. The new question is whether the graded quality of a sample stayed inside an agreed band. That needs four things: a golden set of real cases with agreed answers, a scoring function per case type, a threshold written down in advance, and a diff report showing which cases changed verdict between versions. Case-level diffs matter more than the aggregate score, because a change can hold the average steady while breaking one important category entirely.

Three release controls worth having before launch

First, shadow mode: run the system alongside the humans without letting it act, and compare daily. Second, a canary: route a small share of live traffic to the new version, watch the graded sample and the exception rate, and roll back on a metric rather than on a feeling. Third, version pinning: if your provider offers pinned model snapshots, use them, and find out the deprecation notice period before you build a dependency on one. Keeping the eval suite green is what makes re-qualifying on a new model a day of work instead of a quarter of anxiety.

The evals themselves are a discipline of their own, covered in writing evals for systems that are not deterministic. The short version: build the golden set from the pilot's own logs while the pilot is running, because that is the cheapest labelled data you will ever have.

Write the exit criteria before the pilot starts

This document does more for a pilot than any other hour you will spend, and an hour is roughly what it takes. It has to be written before anybody builds, because once the demo exists every criterion becomes a negotiation about whether the thing on the screen counts.

pilot-exit-criteria.ymlyaml
# Write this BEFORE the pilot starts. Signed by the pilot sponsor AND by the
# person who will own the system in production. If they are the same person,
# you do not yet have a production owner.

pilot: invoice-coding-agent
starts: 2026-09-01
decision_date: 2026-10-13        # a date, not "when we are happy"

baseline:                        # measured before the pilot, never after
  cases_per_month: 0
  median_minutes_per_case: 0
  error_rate_definition: how the business defines an error today
  error_rate_value: 0
  measured_on: YYYY-MM-DD

exit_criteria:                   # all true, no partial credit
  graded_sample:
    size: 150                    # fixed set, chosen before the pilot begins
    scored_by: someone who did not build it
    threshold: agreed with the golden label on N percent of cases
    per_category_floor: no single case type below M percent
  exceptions:
    unhandled_case_types: 0      # every type handled or routed
    escalation: named queue, named owner, response time
  write_path:
    proved_in: staging | production behind a flag
    idempotency: key and dedupe window documented
    rollback: one command, tested, time recorded
  observability:
    per_run_record: [input_hash, prompt_version, model_id, tool_calls,
                     output, cost, latency, verdict]
    retention_days: 90
    replay: can a past case be re-run against a new version, yes or no
  cost:
    cost_per_case_at_production_volume: 0
    ceiling: the number above which this stops being worth doing
  ownership:
    production_owner: name
    alert_rota: name or rota
    budget_code: where the running cost lands

stop_criteria:                   # write these too, or the pilot never dies
  - graded score below threshold after two improvement cycles
  - export or write path still manual at the decision date
  - no production owner named by the decision date
  - cost per case above the ceiling at production volume

How to restart a pilot that has already stalled

A stalled pilot is usually recoverable in a few weeks, because the expensive discovery is done. Work in this order, and add no new capability until step five.

  1. Reconstruct the baseline from history2 to 3 days

    You missed the pre-pilot measurement, so rebuild it from the period before the pilot started: case counts, timestamps, correction and rework records. It is less clean than measuring properly, and it is enough to answer the comparison question. The method is in the baseline you must take before any automation.

  2. Build the golden set out of the pilot's own logs1 day

    Sample a hundred and fifty cases the pilot has already processed, stratified across case types rather than drawn purely at random, and have an expert mark each output right or wrong with a reason. Two or three hours of expert time converts an unfalsifiable pilot into a measurable one.

  3. Take one case type all the way to a real write1 to 2 weeks

    Pick the narrowest, safest case type and put it behind a feature flag with a scoped service account, an idempotency key, a full run record and a tested rollback. Depth on one type teaches you more than breadth across five, and it converts the write gate from a question into a fact.

  4. Name the owner and the budget code1 day, mostly waiting

    Get a person, a rota and a code in writing before scope grows again. If nobody will accept ownership, that is the real finding, and it is better surfaced now than after launch when the alerts start arriving in an unwatched channel.

  5. Set a kill date and hold itsame day

    Put a decision date in the calendar with the stop criteria attached. Pilots rarely die of failure, they die of indefinite extension, which costs more than an honest cancellation and teaches the organisation that AI projects do not finish.

Definitions that keep the go-live meeting short

Definitions
Idempotency key
A stable identifier attached to a write so that repeating the same request does not create a second record. It is what makes retries safe, and its absence is the most common reason an automation that recovers from an error leaves duplicate rows behind it.
Dead letter queue
The place a message goes after retries are exhausted, so that a failure is parked rather than lost. It only works if a named person reads it on a schedule and the items can be replayed once the underlying fault is fixed.
Canary release
Routing a small share of live traffic to a new version while the rest stays on the old one, then comparing graded quality and error rates before widening. It converts a release decision from a judgement call into a measurement with a rollback trigger.
Regression suite
The fixed set of graded cases run against every version of a non-deterministic system, reporting both the aggregate score and which individual cases changed verdict. The case-level diff is the part that catches a change which holds the average while breaking one category.

Building whole processes with these gates designed in from the start, rather than bolting them on after a demo, is the work described under business process automation.

Questions readers ask next

How long should an AI pilot run before we decide?
Long enough to see a full cycle of real arrivals, which for most business processes means four to eight weeks including a month end. Set the decision date at the start and attach stop criteria to it. Pilots that run without a decision date do not fail, they persist, and a persistent pilot consumes attention and budget while proving nothing either way.
Our pilot output looks good but nobody will approve go-live. What is missing?
Almost always a baseline and a graded sample. Approvers are being asked to accept personal risk on the basis of a demo, and no amount of good-looking output resolves that. Give them a pre-pilot measurement, a fixed set of graded cases scored by someone independent, a tested rollback and a named owner, and the decision usually takes one meeting.
Should the pilot be built on the production stack or something quick?
Build the smallest possible slice on the real stack rather than a wide slice on a throwaway one. Narrow and real teaches you about permissions, rate limits, idempotency and audit requirements, which is where the schedule risk lives. Wide and fake teaches you about the model, which is usually the part you were least worried about.
Is a low-code tool a reasonable place to run a pilot?
Yes, and be deliberate about the exit. Low-code platforms are excellent for proving a flow quickly and awkward for versioning, testing and code review. Decide in advance which parts move to code if the pilot passes, and keep prompts and business rules in files from day one so that migration is a copy rather than a rewrite.
What single change most improves the odds a pilot ships?
Writing the exit criteria before the build starts, with a named production owner on the document. It forces the baseline to be measured while measuring it is still possible, it forces the write path and the review queue into scope, and it converts the go-live meeting from a debate about impressions into a check against criteria everybody already agreed to.
Cite this

ChatGPTalker. "Why AI Pilots Fail: The Gap Between a Demo and Production." chatgptalker.com, 2026-08-26. https://chatgptalker.com/guides/why-ai-pilots-never-ship/

Rather have it built than read about it?

Send the process you want automated. You get a scoped plan back, with the build shape, the stack and a realistic timeline.

Start a project