Evidence over Anecdotes: Running A/B Tests on AI Agent Tooling PagerDuty's engineering team found that splitting its engineering standards into domain-specific AI agent skills did not improve quality, with the two designs tying when the right skill loaded, but introduced a silent failure mode where the agent occasionally selected no skill at all. The team ran A/B tests on Claude Code plugin skills and concluded that selection reliability, not context size, is the bottleneck, a finding only repeated trials could reveal. PagerDuty / / Engineering Blog /eng /- Evidence Over Anecdotes: Running A/B Tests on AI Agent Tooling Engineering Blog Evidence Over Anecdotes: Running A/B Tests on AI Agent Tooling Sarah Martinelli Benedetti https://www.pagerduty.com/blog/author/smartinellibenedetti/ August 12, 2026 | 25 min read AI agents are non-deterministic: run the same task twice with zero code change, and the model’s own sampling can produce a different outcome. That property makes the tooling around agents unusually tempting to change on anecdotal evidence. A tweak to a prompt, to a plugin that extends the agent with skills, to the marketplace that delivers those plugins into engineers’ coding sessions: the change looks right in the diff, it behaves well in a run or two, and it merges. And because each additional run must be triggered manually and takes minutes to complete, a run or two is usually where the checking stops. For ordinary code, that evidence standard wouldn’t survive review. We’d ask for tests. We’d ask what happens on the unhappy path. Agent tooling deserves the same skepticism, and arguably more, precisely because of the non-determinism that makes a single good run mean so little. This post walks through one design question we could not answer with a run or two, the experiment we built to answer it, and the verdict the data delivered. Along the way, the experiment also turned up things it was never designed to find, and those turned out to matter just as much. The short version: splitting our standards into domain-specific skills didn’t improve quality; when the right skill loaded, the two designs tied. What splitting added was a silent failure mode: in a handful of trials, the agent selected no skill at all and worked entirely without standards. Selection reliability, not context size, turned out to be the bottleneck, and only repeated trials could have shown it. The rest of this post is how we know. The question: one skill or many? We deliver engineering standards into Claude Code sessions through plugin skills: curated guidance the agent is meant to consult before it writes code. It’s one piece of a broader effort to hold AI-written work to an evidence bar; the shipping side of that story, deciding when an agent has earned the right to merge its own code, is in Before AI Ships Code, Show Me the Receipts https://www.pagerduty.com/eng/before-ai-ships-code-show-me-the-receipts/ . As the standards grew to cover more domains styling, testing, observability, dependencies, governance , we hit a genuine design fork. Keep one unified skill that covers everything? Or split it into focused, domain-specific skills, one per area? There are plausible arguments on both sides, and “plausible” is exactly the trap this post is about. Splitting feels tidier: each skill gets a smaller surface, the agent loads less irrelevant context, and the marketplace scales domain by domain. But it also hands the agent a harder job. Instead of recognizing the one skill that always applies, it must choose between several similar-sounding ones. Which effect wins? Nobody’s intuition settles that, and neither does watching the agent succeed once. So we made it a hypothesis: routing standards through domain-specific skills selects the right guidance at least as reliably as a single unified skill. Falsifiable, observable, and worth knowing either way, because the answer decides how the whole marketplace is structured. The experiment, step by step A/B testing an agent maps directly onto the scientific method: define the hypothesis, define the setup, define the metrics, define the evaluation. Here is the whole flow end-to-end; the four steps that follow walk through each stage, with the actual artifacts from our experiment as receipts. Step 1: Define the hypothesis As in any other area of science, a hypothesis is a statement that an experiment can answer: precise about one observable behavior and refutable by the data. Ours: Routing standards through domain-specific skills selects the right guidance at least as reliably as a single unified skill. Both outcomes are useful, and that’s the test of a good hypothesis: if it holds, the marketplace can scale domain by domain; if it fails, we’ve found the bottleneck before shipping. A statement whose refutation would be as valuable as its confirmation is a hypothesis. Anything less is an opinion waiting for a lucky run. Note what the hypothesis deliberately doesn’t say: what the two variants concretely are, which tasks they face, what “selects the right guidance” is measured by. Pinning those down is the job of the next three steps. Step 2: Define the setup The setup’s job is to guarantee that the only difference between the two groups is the variant. Everything else is controlled, and it’s controlled per trial. First, the vocabulary, because the whole mental model hangs on four words: - A variant is a complete setup under test: the workspace configuration an agent session starts with. - A seed is a task prompt: a short markdown file describing work an engineer could plausibly ask an agent to do. - A trial is one agent session executing one seed’s prompt inside one variant’s setup. One trial, one session, one data point. - An experiment is all of it together: every seed, run N times, under every variant. What each variant actually was. Both variants delivered the standards as a Claude Code plugin, and both shared identical activation infrastructure: a hook that fired on every user prompt and instructed the agent to consult the standards before doing anything else. A hook is the right tool for that job on Anthropic’s own guidance: their best practices https://code.claude.com/docs/en/best-practices set-up-hooks recommend hooks “for actions that must happen every time with zero exceptions,” precisely because, unlike advisory instructions, a hook is deterministic. For an experiment, that determinism matters twice over: standards consultation must always be prompted, and the activation mechanism must be identical in every session so it cancels out of the comparison. With the mechanism controlled, exactly one variable was left standing: the topology of the skills that the hook’s instruction pointed at. unified variant domain-specific variant └── skills/ └── skills/ └── organization-standards ├── web-frontend-standards one skill, every domain; ├── backend-standards reads a manifest index and └── ...one skill per domain; works out what applies the agent must pick the right one Everything around the skills was held deliberately neutral: the same standards documents, the same codebase our React/TypeScript web frontend , the same tool permissions. And here, in its entirety, is the workspace context file both variants started with repository name redacted :