Case studies · illustrative composites
Composite documentation scenarios
Every scenario on this page is an illustrative composite, not a client. We do not publish a client name or client work without written permission, so instead of a case study with a logo on it, here is what these projects look like: the situation at the start, what is wrong with it, the work phase by phase, and what the team can do afterwards. No company is named. No result is reported.
Each scenario is assembled from patterns that recur across documentation sets, not from one project.
Nothing here claims a measured result. Outcomes are described as things the team can newly do.
Client work and client names stay private unless written permission says otherwise. That is the confidentiality policy, not a formality.
Read this first
Why are these case studies composites instead of named clients?#why-these-are-composites
Because we do not publish client names or client work without written permission, and a page of logos is not something we are going to fake to make a sale. What we can do is describe the work exactly: the same audit, structure, build, review gates and handoff that any project is quoted against.
- What is real
- The work. Content audits and migration maps, information architecture, docs-as-code builds, redirects and link checks, ticket clustering, structuring for retrieval, review gates, author training and handoff. That is the scope of the seven service lines on the services page, run in the order described on the process page.
- What is composite
- The company, the mix of tools and the order in which the complaints arrived. Those are stitched together from patterns that show up again and again in documentation sets, so that each situation is concrete enough to recognize. They do not describe one organization.
- What is absent
- Names, logos, quotes and numbers. There is no testimonial on this page and no percentage, because voix has no published client result to report, and an unsourced statistic is decoration, not evidence.
- How to read them
- Each scenario runs in the same order: the situation, what was wrong with it, the work phase by phase, what the team could do afterwards, and a short list of signals that the scenario is describing you. Read the signals first if you are in a hurry.
Scenario 01 · Illustrative composite · no client named · no result measured
A SaaS company leaving a paid documentation platform#scaleup-leaving-a-paid-platform
One hosted platform, authoring priced per seat, and an export button that produces markup nobody can maintain.
- The situation
- A B2B SaaS company publishes its product docs on a single hosted documentation platform. Authoring is licensed per seat, so the writers, the product manager who knows the API and the support lead who spots the errors all queue behind a handful of seats. The renewal is priced against headcount, so the bill grows every time the company hires. All content sits in the vendor database, and the only way out is an export button nobody has pressed yet.
- What was wrong
- The export produces HTML written by a WYSIWYG editor: inline font and color styles on every heading, wrapper divs carrying generated block ids, span tags around single words, and tables assembled out of nested divs. Images come back as URLs pointing at the vendor CDN, so the export stops rendering on the day the contract ends. None of it is under version control, which means no diff, no history, no blame and no rollback. The only record of who changed a page is somebody remembering that they said they would.
What the work did, phase by phase
A conversion pipeline, not a copy-paste
Information architecture and the Docusaurus build
Redirects, checks and cutover
What the team could do afterwards
- Anyone with repository access can fix a typo. An edit costs a pull request, not a license.
- Every change has an author, a diff, a reviewer and a one-command revert.
- A broken link fails the build instead of reaching a customer.
- Documentation deploys from the same CI the product uses, on the day the change is written.
- The annual conversation moves from a per-seat renewal quote to a hosting bill the team controls.
- The content is Markdown in a repository the company owns, so the next platform decision is a choice rather than an escape.
Signals this is you
- Your renewal quote goes up when you hire.
- Fewer people can edit the documentation than have opinions about it.
- Nobody has run the export yet to see what actually comes out.
- Your documentation lives on the vendor domain, or on a subdomain you do not fully control.
- Someone has said “we will move off it after the next release” more than once.
Illustrative composite · no client named · no result measured
Scenario 02 · Illustrative composite · no client named · no result measured
Documentation scattered across Confluence, a drive, a helpdesk and a README#docs-scattered-across-tools
Four surfaces, four search boxes, four sets of editing rules, and no single source of truth for anything.
- The situation
- Documentation grew wherever it was convenient. The Confluence wiki holds process notes and roughly half the product material. A shared drive holds Google Docs, PDFs and slide decks that sales attaches to emails. The support helpdesk carries a knowledge base written by agents answering the same tickets. The main repository has a README that engineers actually trust, because they wrote it and it sits next to the code. Nobody chose this arrangement. It is what is left after several teams each solved their own week.
- What was wrong
- The same procedure exists in several places and the versions disagree, with no way for a reader to tell which one is current. Search only ever covers a fraction of the material, because each tool searches only itself. A customer gets sent a deck that is several releases behind the helpdesk article. New hires are told to ask in Slack, because nobody can point at a canonical page. And because no topic has an owner, every stale version is always somebody else’s problem.
What the work did, phase by phase
One inventory across every surface
Adjudication with named owners
Split by audience, then rebuild the architecture
Close the old doors
What the team could do afterwards
- There is one URL to send a customer, and one place to change what it says.
- Every topic has a named owner recorded in a file the whole team can read.
- One search box covers the entire customer-facing set.
- Sales can send a link that stays current instead of attaching a PDF that starts aging the moment it is exported.
- Onboarding can point at a page instead of at a person.
- When two answers conflict, there is a defined way to decide which one wins.
Signals this is you
- You cannot answer “where do our docs live” in one sentence.
- The same how-to exists in the wiki and in the helpdesk, and the two disagree.
- Support agents write knowledge base articles because the product documentation did not cover it.
- Something load-bearing exists only in a document sitting in someone’s private drive.
- Your onboarding is a person, not a page.
Illustrative composite · no client named · no result measured
Scenario 03 · Illustrative composite · no client named · no result measured
Engineering-owned Markdown that quietly drifted#engineering-owned-docs-that-drifted
Already in Git, already Markdown, already free of any license, and still failing readers, because nothing kept it honest.
- The situation
- The documentation is Markdown in the same repository as the product, published by a static site generator an engineer wired up long ago and has not touched since. There is no vendor, no license and no export problem. Everything is versioned, everything is diffable, and on paper this team has already done the migration everyone else is asking for.
- What was wrong
- There is no information architecture. The sidebar is the folder listing in alphabetical order, dozens of top-level entries deep, with a misc directory at the bottom where pages go to die. Frontmatter is inconsistent, so titles and descriptions in search results are unusable. Documentation is not part of code review, so features ship and their pages do not: some pages still describe flags that were removed. Several getting-started guides written by different teams are each partly right. And nothing fails when a link breaks, so dead links accumulate invisibly until a customer finds them.
What the work did, phase by phase
A drift audit the Git history writes for you
Information architecture and a page-type taxonomy
Review gates that run in CI
Ownership and a review cadence
What the team could do afterwards
- A stale page is visible as a stale page, to the reader and to the owner.
- A pull request that changes behavior cannot merge while the page describing that behavior still says the old thing.
- New pages start from a template with correct frontmatter, so search results become readable again.
- The sidebar reflects what readers are trying to do, and it keeps doing that when someone adds a folder.
- Broken links fail in continuous integration rather than in front of a customer.
- There is one getting-started guide, and everyone knows which one it is.
Signals this is you
- Your sidebar is your folder structure.
- You have more than one getting-started page.
- The documentation is in the repository but not in code review.
- Someone can name the page they know is wrong, and it is still published.
- Nothing breaks when a link breaks.
Illustrative composite · no client named · no result measured
Scenario 04 · Illustrative composite · no client named · no result measured
A support-heavy product whose documentation nobody can find#support-heavy-product
The pages exist and are broadly accurate. Customers still cannot reach them, so support answers the same questions again and again.
- The situation
- The documentation is complete enough. It is also organized the way the product is built: by module, by service name, by the internal noun the team uses in stand-up. Customers search with the words for their problem, not the words for the architecture. So the answer is on the site, the person who needs it opens a ticket instead, and an agent types the explanation out again. Support has quietly become the search interface.
- What was wrong
- Page titles are internal nouns, so the vocabulary never matches the query. There is almost no troubleshooting content, because troubleshooting knowledge lives in ticket replies and in a folder of canned responses that is better than the published site. The error strings the product prints appear nowhere in the documentation, so pasting the exact message into search returns nothing at all. And there is no route from a ticket back into the docs, so the same gap gets rediscovered and closed by hand, over and over.
What the work did, phase by phase
Mine the tickets and the failed searches
Answer-shaped pages
Search and navigation in the reader vocabulary
A loop from ticket back to page
What the team could do afterwards
- An agent answers with a link plus a sentence of context, instead of retyping an explanation.
- A customer who pastes an error message into search lands on the page about that error.
- Documentation improves as a by-product of support running, rather than in an occasional cleanup project.
- The team can see which questions still have no page, because the tagging says so.
- New agents learn from the same pages customers read, so the two stop diverging.
- Product can see, in one queue, where the product is confusing and not only where the docs are thin.
Signals this is you
- Support keeps a folder of canned replies that is better than your published documentation.
- Your most-visited page is the documentation index, because nobody can get anywhere from it.
- You cannot search your own documentation for an error message your own product prints.
- Nobody owns the question “what did customers ask us last month” on the documentation side.
- Your page titles are your internal names for things.
Illustrative composite · no client named · no result measured
Scenario 05 · Illustrative composite · no client named · no result measured
A support bot answering from docs that contradict themselves#support-bot-answering-from-messy-docs
The assistant is new. The content it retrieves from is not, and it was never written to be read in fragments.
- The situation
- A SaaS company adds an AI assistant to its help center and support widget. It retrieves from the existing docs and knowledge base: long pages covering several product versions, articles copied between the product docs and the helpdesk, and procedures shown mainly as annotated screenshots. The launch demo goes well, because the demo questions were chosen by the people who wrote the pages.
- What was wrong
- Real customers ask in their own words, and the retriever pulls whichever chunk matches best: an outdated version of a procedure, half of a table split across two chunks, or a paragraph that only made sense under a heading it was cut away from. The model answers confidently from that fragment. Support now handles the original question plus the correction, and nobody can say which page caused a bad answer, because pages carry no product, version or audience metadata.
What the work did, phase by phase
An audit from the retriever’s point of view
One answer per question
Structure a machine can follow
A review gate for new content
What the team could do afterwards
- A wrong answer can be traced to a specific page and fixed there.
- The assistant can filter by product and version instead of guessing which one the customer means.
- Each question has one canonical page, so the bot and the human agents give the same answer.
- Screenshot-only procedures now have text the retriever can read.
- New pages follow the same structure because the template and the review checklist require it.
Signals this is you
- Your support bot answers the demo questions well and real customer questions badly.
- The same article exists in your docs and in your helpdesk, and the two have drifted apart.
- Your pages carry no metadata for product, version or audience.
- Key procedures exist only as screenshots.
- Nobody can say which page a bad bot answer came from.
Illustrative composite · no client named · no result measured
Your docs
What your project would look like#what-your-project-would-look-like
The five scenarios above are composites. Yours does not have to be. Send the setup you actually have and you get back a specific read of it rather than a generic one.
What to send
- The platform you publish on today, and whether you can produce a full export from it.
- Roughly how many pages are published, and your honest guess at how many are worth keeping.
- Where content lives: one tool, or a wiki plus a drive plus a helpdesk plus a README.
- Whether support tickets, an AI assistant or other languages are part of the picture.
- The date forcing the question: a renewal, a launch, a rebrand, an audit.
What comes back
- A reply within 1 business day.
- A read of your docs: what moves as it is, what gets rewritten, what gets retired.
- The phase order, and what we need from your team at each review gate.
- A written scope and a fixed USD quote before any work starts.
- Timing
- The timeline depends on page count, the state of the source and how quickly review gates clear, and it is written into the quote. The phase order behind it is on the process page.
- Cost
- Migrations start at $4,500, and every other line has a published USD price too. See pricing for the tiers and what each one covers.
- Scope
- Every service line, and where each one stops, is on the services page. If your situation looks like more than one scenario above, that is normal: most teams are living two of them at once.
- Privacy
- Nothing you send gets published. If a project ever does become a named case study, it is because written permission was given for it, and the page will say so.
The composites end here · the specifics start with your docs
Send the setup you actually have
Describe your platform, your rough page count and the date forcing the question. You get a reply within 1 business day, not a brochure.