The short answer: agent pilots at service firms rarely fail on capability. They stall on five structural problems - clean-data demos that break on real records, no named owner after the champion moves on, agents wired to systems of record that disagree with each other, no audit trail so nothing can go client-facing, and prompt-level rules used where structural constraints were required. All five are architectural rather than model problems, which is why waiting for a better model has not fixed any of them.
The pattern is consistent enough to be predictable. The demo goes well. Someone senior says this changes everything. Three months later nobody mentions it, and there was never a meeting where it was cancelled.
Stall 1: The demo only worked on clean data
What it looks like: the pilot performed well on a curated set of ten engagements. Pointed at the real archive, quality collapses - the agent confidently misreads documents, references clients renamed in 2023, and produces summaries that are subtly wrong in ways only an expert catches.
What is actually wrong: the demo dataset was implicitly cleaned by whoever chose it. They picked engagements they understood, which were the ones with complete records. Real archives contain the matter opened twice, the client who exists under three spellings, the document superseded but never marked, and the decade where the naming convention changed twice.
This is the most common stall and the most under-diagnosed, because it presents as a model quality problem. It is not. The model is reading what is there accurately.
The fix that works: select the pilot dataset adversarially rather than representatively. Ask the person who has been at the firm longest to pick the five messiest engagements they can find, and build against those. If the agent handles the worst cases at 70 percent, it will handle the median at 95. The reverse is not true.
The diagnostic question: who chose the pilot dataset, and what did they exclude?
Stall 2: Nobody owned it after the champion moved on
What it looks like: one partner or ops lead drove the pilot personally, alongside their actual job. It worked. Then a client crisis took their attention, and there was no second person who knew how any of it was configured.
What is actually wrong: pilots get staffed as side projects because that is what pilots are, but the transition to production requires ownership that side-project staffing cannot sustain. The failure is not the champion leaving - it is that the pilot never produced anything a second person could pick up. Configuration lived in one head and in privately iterated prompts.
The fix that works: require a written runbook as a pilot exit criterion, not a production one. It should answer: what does this agent do, what does it have access to, what does it do when uncertain, who reviews its output, and what breaks if it stops. If that document cannot be written, the pilot has not established anything transferable. The stronger version: name the second owner at kickoff and make them do one week of the operating work during the pilot.
The diagnostic question: if the person running this took a month off, what would happen?
Stall 3: The agent was wired to systems that disagree
What it looks like: the agent gives answers that are defensible from what it read and wrong in context. It reports a matter as open because the project tracker says so, while billing closed it in March. Users lose confidence quickly, and in a way that is hard to argue with, because the agent was wrong.
What is actually wrong: the firm has no single client record. Client identity lives in the CRM, the practice management system, the document store, and a spreadsheet, and these disagree in ways humans navigate unconsciously. Staff know billing is authoritative for status and the tracker is authoritative for assignment. That knowledge is nowhere written down, so the agent does not have it.
This is the stall most often misdiagnosed as an AI limitation. The agent is doing exactly what a new hire would do on day one with four systems and no context - except a new hire asks someone.
The fix that works: resolve authority before deployment, explicitly and in writing. For each field the agent will read, name the system of record. Where two systems hold the same field, either designate one as authoritative or make disagreement a case the agent surfaces rather than silently resolves. The deeper fix is consolidation; the cheap version is a documented authority map, and it can be done in an afternoon.
The diagnostic question: for a client's engagement status, which system is right when two disagree?
Stall 4: No audit trail, so nothing could go client-facing
What it looks like: the pilot works. Everyone likes it. It stays internal-only indefinitely, because when someone asks whether it could be used on client work, the honest answer is that nobody could reconstruct what the agent did if a client asked.
What is actually wrong: the agent logged its outputs but not its reasoning path - which records it read, on whose behalf, in response to what, and in what order. For internal drafting that is fine. For anything client-facing it is disqualifying, because professional services firms carry an obligation to explain their work that survives the tooling used to produce it.
The trap is that this looks like something you can add later. Retrofitting audit means the pilot period generated no auditable history, so you start the evidence clock from zero at the exact moment you wanted to go live.
The fix that works: instrument from the first day of the pilot. Every agent action should carry a run identifier, the acting user, the tenant, the triggering request, and the records touched. The practical test: can you answer what the agent did on a given matter on a given date, and why, without reading application logs?
The diagnostic question: if a client asked us to explain an agent-produced document, what would we show them?
Stall 5: Prompt-level rules where structural constraints were needed
What it looks like: a long system prompt full of instructions like "never share information across clients" and "always check the engagement letter before quoting a rate." It mostly works. Then it does not, in an unpredictable case, and the firm cannot honestly tell a client the boundary is guaranteed - because it is not. It is a strong suggestion to a probabilistic system.
What is actually wrong: the distinction between a filter and a boundary. A prompt instruction is a filter: it changes the distribution of outputs and works most of the time. A structural constraint is a boundary: the agent cannot violate it because the capability does not exist. Tenant isolation enforced by database policy is a boundary. "Never share information across clients" in a system prompt is a filter wearing a boundary's clothes.
The fix that works: for every rule in your system prompt, ask whether a violation would be merely embarrassing or actually disqualifying. Embarrassing rules can stay prompt-level. Disqualifying ones - cross-client data, rate quoting, anything with regulatory weight - move into the architecture, where the agent's permissions simply do not extend to the prohibited action. The mechanics of enforcing that at the data layer are covered in Giving an AI Agent Access to Your Production Database Without Losing Control.
This is also the stall that connects to the economics. Breaking the coupling between revenue and headcount requires structural conditions rather than prompt-level rules, and this is the same argument viewed from the failure side: you cannot remove human review from a workflow whose safety depends on a filter, which means the agent saves keystrokes rather than time.
The diagnostic question: which of our rules would end a client relationship if broken once?
What the pilots that shipped had in common
Across the firms we have watched reach production, three things showed up consistently - and none of them are about the model.
- They picked a workflow with a natural checkpoint. Not the highest-value workflow. The one where a human already reviews output before it goes anywhere, so the agent slots into an existing control rather than requiring a new one: intake summarisation, first-draft correspondence, document classification.
- They wrote down what the agent does not do. Explicitly, as a list, shared with everyone who uses it. This sounds trivial and it is the single strongest predictor we have seen. It converts an ambiguous tool into a bounded one.
- They measured something before starting. Hours on the task, error rate, turnaround time - anything. Pilots without a baseline cannot demonstrate value, so expansion becomes a matter of opinion, and opinion-based expansion decisions inside professional services firms default to no.
The diagnostic, in five questions
- Who chose the pilot dataset, and what did they exclude?
- If the person running this took a month off, what would happen?
- When two of our systems disagree about a client, which one is right?
- If a client asked us to explain an agent-produced document, what would we show them?
- Which of our rules would end a client relationship if broken once?
A pilot with good answers to all five will probably ship. One that does not will stall on whichever question got the vaguest answer - and none of the five get better by waiting for a stronger model.
Butterbase gives service firms one substrate where client records, agent permissions, and audit trails live in the same place, so the structural fixes above are the default rather than a project. Related reading: How to Audit Your Firm's Tool Stack.
Frequently asked questions
Most do not fail on capability - they succeed in the demo and never reach production. The five recurring causes are a pilot dataset that was implicitly cleaned, no owner beyond the original champion, systems of record that disagree so the agent answers confidently and wrongly, no audit trail so nothing can be used on client work, and disqualifying rules written in prompts rather than enforced in architecture. All five are structural, which is why a stronger model does not resolve them.
Pick a workflow where a human already reviews the output before it leaves the firm - intake summarisation, first-draft correspondence, document classification. The review step already exists, so nothing new has to be invented to make the pilot safe. Then select the dataset adversarially: ask the longest-tenured person to hand you the five messiest engagements they can find, because performance on the tail predicts production behaviour and performance on clean data does not.
A prompt rule is a filter: it shifts the distribution of outputs and works most of the time. A structural constraint is a boundary: the agent cannot violate it because the capability does not exist. Tenant isolation enforced by a database policy is a boundary; 'never share information across clients' in a system prompt is a filter wearing a boundary's clothes. Any rule whose violation would end a client relationship belongs in the architecture.
Enough to reconstruct any action without a developer reading application logs: a run identifier, the acting user, the tenant, the triggering request, and the records touched in order. Instrument this on the first day of the pilot even though nobody is asking for it, because retrofitting audit means the entire pilot period produced no auditable history at exactly the moment you wanted to go live.
Full consolidation is the durable answer, but it is a longer project than most firms want to start with. The cheap version that removes most failure modes is a written authority map: for every field the agent reads, name the system of record, and where two systems hold the same field, either designate one as authoritative or make disagreement something the agent surfaces rather than silently resolves. That can be done in an afternoon.
