Skip to content
Carbonfay
RU

engineering notes

Why every demo bot is smarter than the real one

An AI bot's demo is always smarter than production: tests are written by people who know the system and unconsciously help the agent. That's a class of engineering error, not a prompt tweak.

Executive summary. In a demo an AI bot looks smart; in production it gets dumber — that’s not luck or a forgotten setting. Demos are run by people who know how the system works and unconsciously help it: they ask clearly, stay on one topic, never stumble. A real customer almost never does that. So the demo-to-production gap is predictable, and you don’t close it by tweaking the prompt — you close it by testing the bot against people who don’t help it.


The scenario repeats from project to project. In the demo the AI bot answers precisely, holds the dialog smoothly, the client is pleased. A month after launch the complaints arrive: the bot is “dumb”, doesn’t understand, keeps re-asking, loses the thread. The team digs into the logs expecting to find a breakage — and doesn’t. The bot works exactly as it did in the demo. The bot didn’t change. The interlocutor did.

A demo is always smarter than production, because in a demo the bot is helped by the very person who knows how to break it.

Hypothesis: a demo is smarter than production because the tester cooperates and the customer doesn’t

When the system is shown by the person who built it, they run the dialog perfectly for the bot without noticing. They phrase things clearly. They stick to one topic. They don’t contradict themselves. They give data in the order the bot expects. They don’t leave halfway and come back twenty minutes later with “oh, and one more question”. Each of these habits is a gift to the bot: it was built for that kind of input, because that’s the input it was checked against.

A real user doesn’t cooperate — not out of malice, but by the nature of live dialog. They ask three things in one message. They don’t know the terms the system thinks in. They interrupt themselves, recall, worry, change their mind. They give incomplete and sometimes wrong data. The demo bot and the production bot are the same code placed in front of two different worlds: a world that helps it, and a world that doesn’t care.

Problem: the demo-to-production gap is read as a bug, but it’s a class of error

The most expensive thing here isn’t the gap itself — it’s its wrong diagnosis. The team sees “worked in the demo, not in production” and reads it as a bug: something under-tuned somewhere, we’ll fix the prompt now. But there’s nothing to fix — the bot’s behavior didn’t change, the input distribution did. This isn’t a defect of the implementation but a defect of the test method: the system was assessed under conditions that don’t occur in production.

As long as the gap is treated as a bug, it gets “fixed” endlessly: phrasings get tweaked, examples added, scenarios expanded — and each time it’s checked again on cooperative input, gets a green demo again, is surprised by production again. This is the same bias toward a green result, only at the level of the whole demonstration: we show the system where it can’t fail and take that as proof it will work everywhere.

Worse, the gap erodes trust in the whole direction. A client who was shown a smart bot but got a helpless one concludes not “we were tested wrong” but “AI doesn’t work”. One badly presented demo result poisons the next, honest project.

Why the usual approaches don’t work

“Make the demo closer to reality” sounds right but barely helps: whoever runs the demo still knows the system and still plays along. Even while trying to ask “like an ordinary user”, they stay inside the bot’s model — they ask questions it will definitely answer and skip the zones where it’s unsure. Cooperativeness here isn’t a choice but a blind spot: you can’t simultaneously know how the system works and ask as if you didn’t.

“Add more tests” doesn’t close the gap for the same reason: the tests are written by the same people with the same logic, and they carry the same bias. A hundred green tests under cooperative conditions give zero facts about what happens under non-cooperative ones. “Ask the bot how it would handle a difficult customer” is useless — it will describe an ideal scenario that won’t exist in live dialog. The root is one: the check is run by the side that wants and knows how to make the bot pass.

Engineering model: test the bot with someone who doesn’t help it

For the assessment to reflect production, help must be removed from the test loop. In practice that means separating two roles that a demo accidentally fuses into one person: the one who builds the bot and the one who checks it. The checker must not be interested in green — on the contrary, their job is to prove the bot doesn’t work.

In dialog systems this is done through an independent loop: a customer simulator runs a dialog aiming to obstruct the goal, and a judge evaluates the outcome by fact — did the customer reach the goal or not, rather than “did the bot call the right function”. The simulator is given models of non-cooperative behavior — anxious, conflict-prone, forgetful, suspicious — because a naive simulator starts helping far too quickly, just like a person in a demo. Scenarios are taken not from imagination but from a corpus of real dialogs: people break the bot in ways a developer doesn’t picture, and those genuine failures matter more than any invented ones.

If the system is checked by the one who built it, they’re checking not the bot but their own expectations.

This isn’t a theoretical construct but a change in what counts as proof of readiness. A green demo proves the bot copes when helped. A check for the ability to reach the result in a non-cooperative dialog proves it will cope when not helped — and in production no one helps.

Practical takeaway for the business

Don’t decide based on the demo. A demonstration shows the system’s ceiling under ideal conditions, but you need to know its floor — how it behaves in the worst yet ordinary cases. Before launch, demand not “show me how it works” but “show me where it breaks and on exactly what”.

What to ask at acceptance. Who checked the bot — the same team that built it, or an independent side? On which dialogs — invented or real? Was anyone at all interested in failure? If the answer to all three is uncomfortable, you have a pretty demo and no production data.

What not to do. Don’t confuse a smooth demo with customer readiness — those are different things. Don’t write off “AI didn’t work for us” based on a bot checked under hothouse conditions: almost always the check broke, not the idea. And don’t trust the assessment to the bot’s authors alone — you need someone paid for the holes they find, not for a green report.

See how your bot behaves with a non-cooperative customer — .

Open questions

How “mean” the customer simulator should be depends on the cost of error: for a reference bot moderate chaos is enough; for an agent that processes a payment the bar must go up many times over. Where the line is between “the bot honestly didn’t understand” and “the user posed an unsolvable task” — that line is drawn not by the model but by the escalation-to-human rule. And the key management question: who has the right to say “ready for production” — certainly not whoever ran the demo, because they are the side that was helping the bot.


If your bot shines in the demo but you’re unsure of it with real people, that’s the demo-to-production gap, not a prompt shortfall. — we’ll test the bot on the dialogs no one plays along with, and show where it loses the customer. Related work is in our case studies.

Next step

Let's design an AI-native automation layer for your operations.

DBCV