Skip to main content

Process

How a documentation migration runs

A docs-as-code migration runs in seven phases: content audit, information architecture, platform build, conversion and redirects, author training, review gates and publishing, and handoff. This page describes each one by what goes in, what comes out and the review gate that closes it, in enough detail to follow the method whether or not you hire us to run it.

Seven phases

Run in order. Each one ends in something you can open, inspect and approve.

Review gates

The next phase starts only after you sign off the output of the last one.

After delivery

A 30-day fix window, then an optional release-ops retainer if you want one.

The sequence

What are the phases of a documentation migration?#phases

A documentation migration has seven phases: audit the existing content, redesign the information architecture, build the docs-as-code platform, convert the content and map the redirects, train the authors, automate the review and publishing pipeline, then hand over ownership. Each phase depends on the one before it, so they run in order rather than in parallel.

  1. 01Content audit and migration mapInventory every existing page with its owner, last meaningful edit and traffic, then mark each one keep, merge, rewrite or retire. The output is a content inventory and a migration map from every current URL to its destination.
  2. 02Information architectureDefine content types and templates, file and URL naming, the navigation model and a controlled vocabulary, then get the top-level structure approved before any content moves.
  3. 03Docs-as-code platform buildStand up the chosen generator (Docusaurus, MkDocs/Zensical or GitBook) in your own repository: a directory tree that mirrors the agreed architecture, theming, search, versioning and reusable content blocks, running on a staging URL before content arrives.
  4. 04Conversion, redirects and QAConvert pages to Markdown, rebuild tables, code blocks and images, add front matter, map every old URL to a redirect target, then run link checks and a page-by-page QA pass against the migration map.
  5. 05Author and reviewer trainingRun working sessions where every author branches, writes, previews and merges a real page, and write down the authoring standards, templates and review rubric the team will use after handoff.
  6. 06Review gates and publishing pipelineWire the publishing pipeline: build, link check and terminology check on every pull request, a preview deployment for reviewers, required checks and reviews before merge, automatic publishing on merge and a revert-based rollback.
  7. 07Ownership, governance and handoffRecord named owners per area of the documentation, agree governance for new pages and structural changes, and deliver a handoff playbook covering local setup, theming, versions, redirects and deploys. A 30-day fix window follows delivery, with an optional release-ops retainer after it.

This page follows line 1 of our seven service lines, docs-as-code migrations, because it is the flagship and has the most moving parts. The other lines reuse pieces of the same sequence: ticket mining and AI-ready structuring start with the same audit, localization and release ops run through the same review gates, and docs-site engineering is the build and pipeline phases sold on their own. The services page describes every line and its price.

Phase 01 / Content audit and migration map

Count what you have before you move any of it#audit

Nothing gets migrated until every existing page has a row in the inventory and a decision written next to it.

What happens

We pull the current platform into one inventory: one row per page, with its URL, title, section, owner, the date of its last meaningful edit, its traffic if you have analytics, and a decision. The decision is one of four words: keep, merge, rewrite, retire. The export is read as data rather than as a website, so pages that no navigation reaches still show up in the count.

Four things are worth looking for by name:

  • Duplicates. The same procedure written several times, in different tones, giving different answers.
  • Orphans. Pages nothing links to and no menu reaches, still indexed and still wrong.
  • Stale pages. Screenshots of a screen that has since been redesigned, endpoints that were deprecated, values that changed.
  • Undocumented features. Behavior that exists in the changelog and in support replies but has no page at all.

Retire is a real option and it gets used. A page nobody opens and nobody will own is cheaper to delete and redirect than to carry into a new platform and maintain forever.

What we need from you
  • An export of the current platform (Zendesk Guide, Confluence, Word or Google Docs), or read access to it.
  • Analytics access if you have it. Page-view history changes what is worth keeping.
  • A named owner per product area who can settle a keep-or-cut disagreement in one message.
  • Your top support questions, or a ticket export, so gaps surface now instead of after launch.
What exists at the end
  • A content inventory: one row per page, with owner, decision and destination.
  • A migration map from every current URL to its new path, its merge target, or a redirect.
  • A gap list: the features and questions your documentation does not currently answer.
  • A page count and a complexity read, which is what the fixed quote is scoped against.
Review gate
You sign off the keep, merge, rewrite and retire decisions. Nothing is converted before that.

Phase 02 / Information architecture

Decide where everything lives, once#architecture

The structure is agreed and signed off before a single page is converted, because moving a page twice costs more than deciding once.

What happens

Documentation is separated into content types, and each type gets a template: concept, task, reference, tutorial, troubleshooting, release note. A task page and a reference page are different shapes, and mixing them is the reason pages grow long and stop being findable, by readers and by the retrieval systems behind AI assistants alike.

Then the conventions that keep the structure stable:

  • Naming. One pattern for file names, directory names and page titles, so a new page has an obvious place to go.
  • Navigation. A sidebar organized around what a reader is trying to do, not around which team wrote the page.
  • URLs. A scheme that survives a reorganization, because every URL you publish is a promise to someone.
  • Controlled vocabulary. One agreed word per concept and a list of the synonyms you are retiring. Search fails when one feature has several names.

Versioning boundaries are decided here too: whether readers need older versions at all, which version is the default, and how far back support goes.

What we need from you
  • A working session with someone who knows the product taxonomy well enough to argue about it.
  • A final decision on product and feature naming, including the names you are dropping.
  • Approval of the top-level navigation. This is the one sign-off that blocks the build.
  • A view on versioning: who still reads the previous version, and why.
What exists at the end
  • An approved navigation tree, specified down to the second level.
  • A template per content type, listing the sections each type must contain.
  • Naming and URL conventions, written down rather than remembered.
  • A terminology list: preferred term, retired synonyms, and how each one is capitalized.
Review gate
You approve the top-level navigation and the templates. The build starts after that sign-off.

Phase 03 / Docs-as-code platform build

Build the platform inside a repository you own#implementation

Docusaurus, MkDocs/Zensical or GitBook, in your Git repository, on your hosting, at your domain, standing up before any content lands in it.

What happens

The default is Docusaurus: Markdown and MDX in Git, built to static files, extendable with React. MkDocs with Zensical suits teams that already live in Python; GitBook suits teams that want a hosted editor on top of a Git repository. The choice is made in writing, with the trade-offs spelled out, and the Docusaurus, MkDocs and GitBook comparison covers the same ground if you want to decide first.

  • Repository structure. A docs tree that mirrors the approved navigation, so the file path and the published URL are the same thought.
  • Theming. Your brand applied through CSS custom properties and component slots instead of a fork, which keeps an upgrade an ordinary pull request.
  • Search. Configured and tested against your real titles and headings, because most of what people call a search problem is a structure problem.
  • Versioning. A current version that is writable and older versions frozen, or no versioning at all when the product does not need it.
  • Reusable blocks. Admonitions, tabbed code samples and shared snippets, so a value that changes gets changed in one file.

The repository is yours from the first commit rather than transferred at the end, so there is never a moment where the work lives somewhere you cannot reach. Whichever generator renders it, the content stays in Markdown in that repository, so the choice can be reversed later without another migration.

What we need from you
  • A repository, and a decision on where the site is built and hosted.
  • The domain or subdomain, and someone who can change DNS records.
  • Brand assets: logo files, color values, and web fonts you are licensed to use.
  • A decision on whether the documentation is public or sits behind authentication.
What exists at the end
  • A running site on a staging URL, built from your repository by your pipeline.
  • Navigation, search, theming and versioning working, with content still to come.
  • A local development setup your engineers can run themselves, documented in the repository.
  • A dependency list you can read, with no content locked inside a vendor database.
Review gate
You review the staging site, with placeholder content, before any real page is converted into it.

Phase 04 / Conversion, redirects and QA

Convert the content and keep every old link working#migration

The pages move, the vendor markup does not, and every URL you have ever published still resolves to something useful.

What happens

Pages become Markdown or MDX. Wrapper markup, inline styles and editor artifacts are dropped rather than translated. Tables and code blocks are rebuilt as real tables and real code blocks. Images are re-exported, renamed to match the page they belong to and referenced by relative path. Front matter is added to every file: title, description, sidebar position, slug.

Then the part that decides whether your readers, and search engines, ever notice the migration happened:

  • Redirects. Every old URL maps to its new page or to the nearest genuinely useful parent. Nothing gets redirected to the home page.
  • Internal links. Rewritten as relative paths so the build itself can verify them.
  • Link checking. A broken internal link or a broken anchor fails the build, which means it cannot reach production quietly.
  • QA. Every page opened, every code sample rendered, every image loaded, every sidebar entry checked back against the migration map.

Bookmarks, inbound links from other sites and search results all still point at the old URLs. Redirects are the only thing keeping those readers from a 404, which is why this phase is not left until last. The platform-specific details are in the Confluence to Docusaurus guide and the Zendesk to Docusaurus guide.

What we need from you
  • Sign-off on the keep, merge and retire decisions from the audit.
  • A redirect owner: someone who can apply rules where they actually take effect, whether that is the CDN, the old platform or the new host.
  • Subject-matter review for the pages marked rewrite and for anything the gap list added.
  • A decision on the old platform: switched to read-only, or kept live until the redirects are verified.
What exists at the end
  • Your content in Git, in Markdown, in the structure you approved.
  • A redirect map, applied and tested against the full list of old URLs.
  • A build that passes internal link and anchor checks.
  • A QA log recording what was checked, what was fixed and what was deliberately left out of scope.
Review gate
You spot-check converted pages against the source, and the full redirect list passes before DNS moves.

Phase 05 / Author and reviewer training

Train the people who will write the next page#enablement

A migration only we can maintain has not finished. Authors publish a real page during training, not a practice one.

What happens

Training is a working session rather than a lecture. Each author brings a page that genuinely needs writing and, during the session, creates a branch, writes it in Markdown, previews the rendered result, opens a pull request, takes a review and merges it. The first pull request is the one people remember, so it happens with us on the call.

  • Authoring standards. Voice, sentence case, when to use each content type, how to name a file, how a page joins the sidebar, how screenshots are taken and stored.
  • A review rubric, so review is about accuracy, structure and terminology instead of commas.
  • Publishing guidelines. What needs review, what needs product sign-off, and what an author can merge alone.
  • Escalation. Who decides when a page does not fit any template.

Writers who have never touched Git get the same session. The workflow is taught through the browser editor first and the command line only for the people who want it.

What we need from you
  • A list of authors and reviewers, with repository access granted before the session rather than during it.
  • One uninterrupted working session on their calendars.
  • One reviewer per team who agrees to be the first point of review.
  • A real page per author that needs writing anyway.
What exists at the end
  • Authors who have each merged at least one page under their own name.
  • A contributing guide in the repository, next to the content it describes.
  • A copy-ready template for every content type.
  • A review checklist your reviewers have actually agreed to.
Review gate
Every author has merged a real page under their own name, reviewed by your own reviewer.

Phase 06 / Review gates and publishing pipeline

Automate the checks so review can be about the content#ci-cd

Every pull request builds the site, checks the links and produces a preview URL. Merging publishes. Rolling back is a revert.

What happens

The pipeline runs in whatever CI your engineering team already uses, most often GitHub Actions. Documentation gets the same delivery discipline as code because it now lives in the same place as code.

  • On every pull request. The site builds, internal links and anchors are checked, and the terminology list from the architecture phase is enforced.
  • Preview deployments. Reviewers read the rendered page instead of the diff, which is the difference between a review and an approval.
  • Branch protection. Required checks and required review before anything reaches the default branch.
  • On merge. The site builds and publishes itself. Nobody copies files onto a server.
  • Rollback. A revert. The previous state of the documentation is always one commit away.

This is the phase that stops the others decaying. Once publishing is a merge, updating the documentation stops being a project. Pipeline work can also be bought on its own as docs-site engineering if your content is already in Git.

What we need from you
  • Permissions on the repository and its CI, including the ability to set branch protection.
  • A decision on who can approve and who can merge.
  • Deploy tokens and any search API keys, placed in the repository secret store by someone authorized to hold them.
  • Agreement from engineering on where documentation builds run, so the pipeline is not a surprise to them.
What exists at the end
  • Required, passing checks on every pull request.
  • A preview URL attached to every pull request.
  • Publishing on merge, with a documented rollback.
  • The pipeline definition in your repository, readable and editable by your own team.
Review gate
A test pull request goes through the whole pipeline: checks, preview, review, merge, publish and revert.

Phase 07 / Ownership, governance and handoff

Hand over ownership, and mean it#handoff

The project ends with named owners, a written governance model and a playbook covering everything you would otherwise have to email us about.

What happens

Ownership is recorded in the repository, per area of the documentation tree, so a pull request reaches the person able to judge it. Governance answers the questions that otherwise get argued about later: how a new page is proposed, who approves a change to the navigation, when the terminology list is updated, and how often each section is reviewed for staleness.

The handoff playbook is written for the person who joins your team after we have gone:

  • How to run the site locally and where every configuration file lives.
  • How to add a page, a section, or a whole new version.
  • How to change theming without forking the theme.
  • How to add a redirect and how to prove it works.
  • How to read a failed build and how to roll a deployment back.

Delivery is followed by a 30-day fix window: anything we delivered that does not work as scoped is fixed at no charge. If you want ongoing help after that, the optional release-ops retainer, from $900/month, keeps changelogs, release notes, versioned docs and screenshots moving with every release. It is described on the release notes service page.

What we need from you
  • Named owners per documentation area, with the authority that implies.
  • A decision on whether you want the optional release-ops retainer once the fix window closes.
  • A date for the handoff walkthrough, with those owners actually on the call.
  • Confirmation that your team can build, preview and deploy the site without us on the call.
What exists at the end
  • A documentation platform running in your repository, under your ownership.
  • A governance model with named owners and a review cadence.
  • A handoff playbook, checked into the repository next to the site it describes.
  • A 30-day fix window, starting on the delivery date.
Review gate
Your team builds, previews and deploys a change without us. That is the final sign-off.

Two commercial facts belong in this phase. On full payment you own the final deliverables, while voix keeps the rights to its own pre-existing tools, templates and know-how. And the project has lived in your Git organization and on your hosting since the first commit, so there is nothing to transfer and no voix login to lose.

Your side of the work

What we need from you#what-we-need-from-you

The timeline in the quote assumes these arrive when the phases need them, so this checklist is the part of the schedule you control completely. Most of it can be gathered before the quote is even signed.

Access

  • An export of the current platform, or read access to it.
  • A Git repository, and CI permissions including branch protection.
  • DNS access for the domain or subdomain the documentation will live at.
  • Analytics, if you have it.
  • A support ticket export, or a list of the questions support keeps answering.

Decisions

  • Final product and feature naming, including the names you are retiring.
  • Approval of the top-level navigation.
  • Sign-off on the keep, merge and retire list from the audit.
  • Public documentation or authenticated documentation.
  • Who can approve a documentation change, and who can merge it.

People

  • A named owner per product area who can settle a disagreement.
  • Someone who knows the product taxonomy, for the architecture session.
  • Every author and reviewer, for the training session.
  • A subject-matter reviewer for pages marked rewrite.
  • Authors and reviewers with repository access granted in advance.

Materials

  • Logo files, color values and licensed web fonts.
  • Anything living outside the platform: internal wikis, PDFs, support macros, README files, shared documents.
  • API specifications or generated reference output, if the docs include reference material.
  • Anything under NDA flagged as such before it is sent.

Everything you send is used only to deliver the work, and access is limited to the people who need it. Nothing about your project is published or named without your written consent. The confidentiality policy sets that out in full, and the documentation migration checklist turns this list into something you can work through before the first call.

Timing

How long does a documentation migration take?#how-long-does-a-documentation-migration-take

It depends on how many pages move, how messy the source export is, and how quickly your review gates clear. The timeline is written into the fixed quote before work starts, so you know the date before you commit.

What sets the timeline
Page count and the state of the source. A tidy Confluence space with consistent macros moves faster than a help center with inline styling on every article, and a set with many near-duplicates needs more audit time than one that was pruned regularly.
When the clock starts
When we have access to the source content and the materials in the checklist above, not at the first conversation. Every project runs under a written scope that fixes deliverables, timeline and price before anything begins.
What is scoped separately
Sets above 500 pages, several platforms merging into one, multiple products or maintained versions, and translation into other languages each get their own line in the quote. We would rather quote a longer timeline than miss a short one.
What moves the date
  • Access that has not been granted yet: repository, CI, DNS, analytics.
  • Navigation approval waiting on a decision maker who was never brought into the loop.
  • Subject-matter review of rewritten pages queued behind a product release.
  • Out-of-scope requests, which need written approval before they are picked up.
What it does not depend on
Your old vendor, once the export is in hand. From then on the content is plain files in your repository, so no part of the timeline waits on a supplier.

Start with the audit

Tell us which platform you are on, roughly how many pages it holds and who owns them. You get a reply within 1 business day, then a scope, a phase plan and a fixed USD quote.