← Back to work

Contrast Security · Cybersecurity · 2021 to 2022

Documentation Research
and UX Writing Process

How I introduced a formal UX writing process into an engineering-led organization, and used research to ground content decisions in what a developer-first audience actually needed.

My role

UX and Documentation Writer

Scope

Content strategy, research, design system

Audience

Developers and security engineers

Status

2021 to 2022

Context

A developer-first audience with no shared UI language

Contrast Security builds application security tooling that developers and security engineers rely on to find and fix vulnerabilities before they ship. When I joined, the product had grown across multiple teams and languages (Java, Node, Python, Ruby, .NET, and more) without a single writer or content process attached to any of it. UI terminology drifted team by team: the same concept could be labeled three different ways depending on which part of the product you were in.

Contrast's audience compounded the problem. Developers evaluating a security tool are skeptical of soft, marketing-flavored language, and rightly so, since the product exists to protect their company from attacks that could cause real harm. Any writing process introduced here had to earn credibility with an engineering-led org, not just impose a style guide on it.

Product Tone Map plotting message types from friendly to direct

The Product Tone Map I created to plot message types, from success banners to error and warning messages, against how friendly or direct they should read.


My approach

Building a writing process the engineering org would actually use

There was no existing UX writing function at Contrast to inherit, so the first job was establishing one. I led the implementation of a UX writing process into the engineering and development workflow, rather than trying to run content review as a separate, bolt-on step.

I developed a content strategy and scalability roadmap so the process could extend across Contrast's full product portfolio as it grew, not just the screens I happened to touch first. Alongside the process work, I wrote microcopy for user touchpoints directly in the interface, contributed writing to the internal design system, and kept product documentation and release notes current as features shipped.

"Because of Contrast's audience, and the fact that users rely on our product for protection against attacks that could severely harm their company, product tone will often err on direct rather than friendly." (from the Product Tone Map rationale)


Research

Two studies: how developers talk, and how they navigate

Before I could standardize terminology, I needed to know which words developers already used and trusted, and whether the documentation was organized the way they think. I ran two studies.

Conversation mining. To build a vocabulary that fit a developer-first mindset, I tracked developer conversations on StackOverflow, Reddit, Twitter, Discourse, Discord, and Slack, collected the terms people actually used, and compared them with what Contrast used. I also noted the attitude and emotion in those conversations, so I could see the sentiment around a word in context. The result was a confirmed terminology list for the UI and the documentation.

Executive summary of the developer-first language problem and goal

The executive summary I used to frame the problem for engineering leadership.

Three-phase strategy for establishing developer-first terminology

The three-phase plan: identify sources, identify key words, collate into a concise UI terms list.

Card sort. To test whether the documentation's navigation matched developers' mental models, I ran a card sort with 15 cybersecurity software engineers who were new to Contrast. Each card was one of the 38 second-level topics on a Miro board. Participants grouped the cards, labeled the groups, and thought aloud while two moderators ran the same script over Zoom. Any group of more than 10 cards had to be split again.

Card sort board in Miro

The card sort board in Miro.

Some of the structure held up: how agent topics, marketing topics, and product offerings were grouped. The CLI, integrations, frameworks, scoring guides, policies, and permissions were confusing or grouped differently than the documentation had them. The think-aloud comments explained why, and which words carried little meaning, so I revised the information architecture of the documentation based on how developers grouped the information. To validate the new structure, I proposed usability testing and reverse tree testing to the team.


Style guide

Turning research into guidance writers and engineers could apply

The vocabulary research and tone map fed directly into a writing style guide I built and distributed, covering everything from how to phrase a call to action to how to write an error message a developer would actually trust. I kept every rule paired with concrete Do/Don't examples, since abstract principles rarely change how an engineer writes a button label under deadline.

Clear calls to action

Style guide: encourage action with clear CTAs

Guidance on writing buttons and links that tell the user exactly what will happen, with Do/Don't examples pulled from real product copy.

Tone rules

Style guide: be casual but not quirky, be user-centric

Rules like "be casual, but not quirky" and "be user-centric," written to keep the product's voice consistent without flattening it into generic corporate copy.

Error messages

Style guide: error message writing checklist and voice rules

A writing checklist for error states, since a security tool that reports failures unclearly erodes exactly the trust it's meant to build.


Applied example

Rewriting the agent-install onboarding flow

The "Add agent" flow (how a developer connects Contrast to their codebase) was one of the first places I applied the new guidance directly. The original flow dropped a developer into a single, unlabeled "quick start" step with no sense of how many steps remained or what to do next.

Onboarding flow before redesign, single unlabeled quick start step

Before: a single unlabeled step with no path forward.

Onboarding flow after redesign, clear four-step install guide

After: a clear, numbered four-step flow (choose agent, get the config file, quick start, install).

I annotated the rationale directly on the design so engineering understood why each field's conditional state mattered, not just what the copy said.

Annotated onboarding flow showing design rationale

Annotated redlines documenting why each step and field behaves the way it does.


Outcomes

Standing up a content function from nothing

Contrast had no UX writing process before this work, and a full one, research-backed, documented, and embedded in the engineering workflow, by the time I left.

Outcomes

Process, not one-off cleanup

Embedded UX writing into the engineering and development workflow itself, so content review became a standard step rather than a favor engineering had to request.

Research-grounded terminology

Replaced ad hoc, team-by-team naming with a shared UI vocabulary derived from mining real developer conversations, and a documentation structure tested with a card sort, not a top-down style mandate.

Built for scale

Developed a scalability roadmap so the writing process could extend across Contrast's full product portfolio as new language agents and integrations shipped.

Usability metrics tracked

Tracked the potential impact of writing changes on product usability, giving engineering leadership a way to evaluate content work in terms they already used.

Applied, not theoretical

Used the agent-install onboarding redesign to demonstrate the style guide in practice, turning an unlabeled single step into a clear, numbered flow.

Design system contribution

Contributed writing directly to the internal design system, so new components inherited on-brand, on-tone copy by default rather than requiring after-the-fact review.

Next case study

Bag Manager and WorldTracer

↗