Case studies
Documentation migration scenarios
Every scenario on this page is an illustrative composite. voix does not publish a client name or client work without written consent, so instead of a case study with a logo on it, here is what these engagements look like: the estate at the start, what is wrong with it, the migration phase by phase, and what the team can do afterwards. No company is named. No number is reported.
Each scenario is assembled from patterns that recur across documentation estates, not from one engagement.
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 consent 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 voix does not publish client names or client work without written consent, and a page of logos is not something this studio is going to fake to make a sale. What it can do is describe the work exactly: the same audit, migration map, architecture, implementation, delivery pipeline and handoff that any engagement is quoted against.
- What is real
- The work. Content audit and migration map, information architecture redesign, Docusaurus implementation, versioning, CI/CD publishing, search and navigation, authoring standards, contributor training, governance, QA and redirects, launch and handoff. That is the delivery scope set out on the services page, run in the order described on the process page.
- What is composite
- The company, the page counts, the specific 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 estates, so that the situation is concrete enough to recognise. They do not describe one organisation.
- 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 migration 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
A scaleup 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 product company publishes a few hundred pages on a single hosted documentation platform. Authoring is licensed per seat, so the two writers, the product manager who knows the API and the support lead who spots the errors are all queued behind three seats. The renewal is annual and 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 the export button that nobody has pressed yet.
- What was wrong
- The export produces HTML written by a WYSIWYG editor: inline font and colour 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 migration 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 licence.
- 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 twice.
Illustrative composite · no client named · no result measured
Scenario 02 · illustrative composite
Documentation scattered across a wiki, 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 internal wiki holds process notes and roughly half the product material. A shared drive holds 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 the residue of four teams each solving their own week.
- What was wrong
- The same procedure exists three times and the three versions disagree, with no way for a reader to tell which one is current. Search only ever covers a quarter of the material, because each tool searches only itself. A customer gets sent a deck that is a year 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 simultaneously somebody else’s problem.
What the migration did, phase by phase
One inventory across all four surfaces
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 ageing 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 one person’s private drive.
- Your onboarding is a person, not a page.
Illustrative composite · no client named · no result measured
Scenario 03 · illustrative composite
Engineering-owned Markdown that quietly drifted#engineering-owned-docs-that-drifted
Already in Git, already Markdown, already free of any licence — 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 two years ago and has not touched since. There is no vendor, no licence 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, twenty 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: several pages still describe flags that were removed. There are three getting-started guides written by three teams, each of them partly right. And nothing fails when a link breaks, so the dead links accumulate invisibly until a customer finds them.
What the migration 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 behaviour cannot merge while the page describing that behaviour 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
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 every week.
- The situation
- The documentation is complete enough. It is also organised 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 every month and closed by hand every time.
What the migration 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 a project every two years.
- 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
Your estate
What your migration would look like#what-your-migration-would-look-like
The four 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 the documentation is public or gated, versioned, and whether it is translated.
- The date forcing the question: a renewal, a launch, a rebrand, an audit.
What comes back
- A read of the estate: what moves as it is, what gets rewritten, what gets retired.
- A migration map from your current URLs to their destinations, with redirects accounted for.
- The phase order, and what voix needs from your team at each phase.
- A quote, scoped by documentation volume and implementation complexity.
- A written proposal fixing scope, timeline and fees before any work starts.
- Timing
- Standard delivery runs within two business weeks of the deposit and the materials voix needs. The phase order behind that number is set out on the process page.
- Cost
- A migration is a one-time project fee, quoted per estate. There is no subscription, no per-seat fee and no recurring platform licence — see pricing for what the fee covers and what the optional add-ons are.
- Scope
- The four services, and where each one stops, are on the services page. If your situation looks like more than one scenario above, that is normal: most estates are two of them at once.
- Privacy
- Nothing you send gets published. If an engagement ever does become a named case study, it is because written consent was given for it, and it will say so on the page.
The scenarios above end here · the specifics start with your export
Send the setup you actually have
Describe your platform, your rough page count and the date forcing the question. You get a migration map back, not a brochure.