This case study is about where copy standards live and how they get enforced—the design system and the PR pipeline. How content gets produced at scale (the AI skills and drafting tools) is its own case study: Judgment, scaled. Same standards, but solving a different problem.

Side-by-side comparison of a destructive confirmation modal. Before: title "Delete Service Account" with body "Are you sure you want to delete 'Acme'? This action can't be undone." After: title "Delete service account?" with body "This permanently removes Acme and can't be undone. Any integrations using this account will stop working." A list notes four changes: a specific question replaces "Are you sure," the copy names what actually happens, the downstream consequence is added, and the title moves to sentence case.

One shipped rewrite, four rules applied—the confirmation modal from APP-149676.

context

Pendo's UI copy standards lived in places engineers never looked: a style guide in a 74-slide deck, guidance in Confluence and Figma, a Google Doc mirroring what our AI tools had loaded, and my head. The copy itself lived in the codebase, written and changed daily by engineers and designers who had no quick way to check a string against our standards before it shipped.

I was the quality gate. That doesn't scale, and it makes content quality a bottleneck instead of a property of the system.

So I moved the standards into the codebase and set them up to enforce themselves.

the problem

Two structural issues, not a copy issue:

  1. Standards and code lived in different worlds. Every handoff between them was a chance for quality to leak: placeholder text shipping to prod, terminology drifting across components, new flows launching in inline English while the rest of the surface was ready for translation.
  2. Enforcement was a person, not a process. Review quality depended on whether I saw the PR in time. At my most stretched, I was the only writer supporting nearly 25 development teams; even at normal capacity, I’m one content designer across eight teams. Either way, "Maddy reviews everything" never really worked.

the work

One home for copy standards. I standardized copy guidance across 27 component pages in the design system's Storybook—five of them net-new (error messages, toasts, dropdowns, form fields, headings)—plus a 569-line product-terminology glossary and a 180-line engineer quick-reference. All of it shipped as one merged PR to the frontend repo, ~2,300 lines total. Not a doc—a code change.

Every component's guidance includes real before/after examples pulled from actual Jira tickets, so engineers see what "wrong → right" looks like in their own product instead of abstract principles. We agreed this is where copy guidance lives now—one home, inside the component docs engineers already use every day. If guidance isn't there, it doesn't count.

Excerpt from component copy guidelines showing a "Never invert the control" rule with a verified before/after example: a checkbox that turned tracing off when checked, rewritten so checked means enabled, with the originating ticket and pull request cited.

Every rule cites the real change it came from—this one originated in a review where the team kept mis-flipping the meaning of an inverted checkbox.

A ruleset for a bot that didn’t exist. Alongside the PR, I delivered a ruleset with every copy rule tiered by how confidently a bot could act on it, from "safe to auto-flag" down to "needs human judgment." I flagged the two hardest technical problems before anyone started building: reliable string extraction (telling UI copy apart from code) and per-rule accuracy tracking, so we'd know which rules produce false positives instead of trusting the bot blindly. V1 ships every rule as a comment; a rule earns the right to block only after its acceptance rate proves the flags are real.

The rules themselves anticipate a machine reader—the hyphen rule only flags space-surrounded or digit-adjacent hyphens, never word-internal ones, or every legitimate compound term lights up.

Styled diagram titled "the ruleset, tiered by trust" showing four tiers as descending bars: Auto (~24 rules, flag confidently), Assist (~8 rules, suggest never assert), Propose (~7 rules, bot drafts a fix and tags a human), and Human (~3 calls, bot stays silent). Footer: v1 ships every rule as a comment; a rule earns the right to block only after its acceptance rate proves the flags are real.

~42 rules, tiered by how much the bot can be trusted with each.

And the PRs themselves. None of this is in my job description. The PRs happen on top of a full docs and UX-writing load across most of the platform—dozens merged since February 2026, from a one-line sentence-case fix to the ~2,300-line guidance PR above. A few worth naming:

the tradeoffs