a wall of legacy text
The content had grown release after release, for years: long, descriptive topics, and tasks that sometimes ran past ten steps. Nobody wrote it badly; it accumulated, and the reader had to dig for the action.
I did not rewrite it all. I changed what each release let me touch, piece by piece.
NDA-safe throughout: no product screenshots. The strings below are representative, paraphrased recreations. They show the writing decisions, not exact production content.
regulated, audited, seven audiences
regulated ground
HIPAA, FDA and EMA adjacent clients, ISO 13485, ISO 82079-1.
a waterfall release train
Review cycles had to prove what changed from iteration to iteration.
seven personas, different guides
Each role reads its own documentation, gated by its own permissions.
every action audited
Reporting is the single source of truth, so its documentation is critical.
code, product, and usage data
I did not guess at the copy. I read the logic behind each feature, then checked the writing against how people actually used it.
code reading
The logic behind each feature, so the copy described what the system actually did, not what the spec hoped it did.
testing
In the product on production environments, and UAT on every publication.
usage data
Analytics, heatmaps, and A/B tests on the content itself.
help, right when you need it
Guidance sits one click from the field, exactly when the choice is being made, so many errors never happen. Three recurring moments, each with its own job.
Names the fault and the fix. Shows the expected format as a plain example, in language that keeps the user's confidence intact.
Solution-first facilitator tone. Names the exact thing being removed, states the consequence, and the button says the verb, not a vague "OK".
Written from the reader's role. Leads with what they can now do, not the feature name. Surfaces per role, only when a change affects them, and ships localized.
system-centric strings, made human
The defaults name the problem. My rewrite names the fix, and the way forward. Flip the switch to see the same three strings, both ways.
Value does not match the required pattern.
Action not permitted.
Are you sure? [ OK ] [ Cancel ]
help, one click from the field
An NDA-safe recreation: no product screenshots, representative strings. The help sits exactly where the choice is made, so many errors never happen.
What gets locked
The help popover, shown where the reader meets it.
write once, adapt per study
Every study sends a first-access message, but the details differ. A named-variable model lets each team localize it without breaking the tone.
You’ve been given access to [study] in [product]. The study is run with [sponsor]. Questions? Contact [support].
First time here? You’ll get separate instructions for setting your password.
representative copy · editable at study level · the helper line pre-empts the top first-run support question
what changed, in the docs and the process
Documentation moved into sprints planned 1:1 with development scope, truly agile: drafts started early, testing was built into the plan, and the cross-functional review got shorter.
Task success rose 40% and support tickets fell 30% on the content I redesigned, with progressive disclosure and in-app guidance.
what I took from it, and what's next
The code is the source of truth for copy. Reading the logic behind each feature is what kept the writing honest.
The build cadence. Structured query models with SMEs, engineers, and QA compressed the doc cycle from a build every week to two builds across four to five weeks.
Finish the accessibility retrofit. It moved at the speed of releases, and there is more to reach WCAG all the way through.