This is Part 4 of "The Developer Advocate's Journey" series. Two documentation rebuilds, two very different starting problems, and the same underlying lesson: docs don't fail because they're incomplete, they fail because nobody designed them to move a developer from "curious" to "integrated."
Docs Aren't a Reference Shelf, They're a Conversion Funnel#
Every team I've worked with already believes documentation matters. Almost none of them treat it like a funnel with a drop-off rate.
Reference material tells a developer what an endpoint does. Conversion-focused documentation gets them from "I found this page" to "I shipped an integration" with as few dead ends as possible. Those are different design problems, and most documentation only solves the first one.
I've rebuilt documentation twice from that lens - once for the Freshworks Developer Portal, once for Bazaarvoice's Developer Console and API Gateway. Neither rebuild started as a writing project. Both started as an admission that the existing docs were actively losing developers.
What Actually Changed in Both Rebuilds
What you'll get from this post:
- 🧱 The exact "before" state that was quietly costing both companies developers
- 🔧 What we rebuilt, and why the fix wasn't "write more docs"
- 📐 A repeatable pattern for auditing your own documentation as a funnel
- ✅ A checklist you can run against your docs this week
The Freshworks Rebuild: Seven Sites, Zero Shared Path#
By the time I joined Freshworks as Lead Developer Advocate, the developer documentation for the Neo Platform was spread across seven separate product sites - Freshdesk, Freshservice, Freshchat, Freshworks CRM, Freshteam, and more - each covering developers building apps with the Freshworks CLI Toolkit (FDK).
The underlying stack was the real problem: plain HTML pages generated from Ruby files through a Middleman server, a setup that had already been deprecated since 2019. Every update meant a manual build. Every product had its own navigation, its own component patterns, its own idea of what a "getting started" page should look like. A developer building across two Freshworks products effectively had to relearn how to read the docs twice.
We didn't rewrite content first. We rebuilt the pipeline: Markdoc for authoring so non-engineers could still contribute structured content, a shared React component library so every product finally rendered code samples, tables, and callouts the same way, and a Jenkins-based CI/CD pipeline so a doc update shipped like a code change instead of a manual export.
What the Freshworks Documentation Rebuild Delivered
Sites Unified
One platform replacing seven fragmented product doc sites
Maintenance Overhead
Reduction in ongoing documentation upkeep
Deployment Cycles
Faster, fully automated release of doc updates
Reusable Components
Shared interactive elements across all products
The part that actually drove adoption wasn't the migration itself - it was that a developer building a Freshdesk app and a Freshworks CRM app now hit the same getting-started pattern, the same component behavior, the same search. Consistency removed the relearning tax that had been quietly taxing every cross-product developer.
The Bazaarvoice Rebuild: Docs That Drifted From the Code#
At Bazaarvoice, the problem looked different but rhymed. The API Gateway and Developer Console documentation was written after the API shipped, by whoever had time - which meant it drifted from the actual endpoints almost immediately. Enterprise partners integrating through the Developer Console would hit a documented parameter that no longer matched the live response, and the fix was always a support ticket, never a doc fix.
The onboarding path made it worse. New developers landed on comprehensive reference material with no clear "start here," so the first real decision they had to make - REST or GraphQL, which SDK, which auth flow - was the first thing they saw, before they'd had a single successful call.
The fix was documentation-first API design: the OpenAPI spec came before the code, and reference documentation generated directly from that spec instead of being hand-maintained afterward. We paired that with an interactive sandbox on the Developer Console so a developer could make a real call with realistic test data before committing to an integration path, and we refreshed the Java, Python, and JavaScript SDKs so the code examples in the docs actually matched what the SDKs shipped.
What the Bazaarvoice Documentation-First Rebuild Delivered
Integration Time
Faster developer onboarding through the Developer Console
Time to First Call
Reduction in time-to-first-successful-API-call
Support Tickets
Fewer integration issues reaching support
Doc Maintenance
Overhead cut by generating docs from the OpenAPI spec
None of that came from better prose. It came from removing the gap between what the docs said and what the API actually did, and from giving developers something to try before asking them to read.
The Pattern Underneath Both Rebuilds#
Strip away the specific stack, and the same four moves show up in both rebuilds:
Reference Documentation vs. Conversion-Focused Documentation
Complete, technically accurate, written from the API's point of view
✅ Pros:
- •Comprehensive endpoint coverage
- •Familiar structure for experienced API consumers
- •Lower upfront authoring investment
❌ Cons:
- •No guided path for a first-time integrator
- •Drifts from the live API without an enforced source of truth
- •Assumes the reader already knows which questions to ask
Structured around the developer's journey from zero to a working integration
✅ Pros:
- •A clear path from first visit to first successful call
- •Generated from or tied directly to a single source of truth
- •Interactive elements let developers try before they commit
❌ Cons:
- •Requires real investment in tooling and component infrastructure
- •Needs the same cross-functional buy-in as a product launch
- •Harder to maintain without automation from day one
Four techniques carried across both companies, even though the products, languages, and starting problems were unrelated:
1. Put a spec (or a shared component system) at the center, not a wiki page. Bazaarvoice generated docs from OpenAPI. Freshworks generated pages from a shared Markdoc + React pipeline. Different tools, same principle: content shouldn't be hand-maintained in a place disconnected from the thing it describes.
2. Give developers something to try before something to read. The Developer Console's interactive sandbox and the Freshworks Developer Portal's live component previews both exist so the first interaction is hands-on, not a wall of reference text.
3. Componentize once, reuse everywhere. Freshworks' 38 reusable documentation components and Bazaarvoice's refreshed Java, Python, and JavaScript SDK examples both solved the same problem: write the pattern once, and every product or endpoint that needs it inherits it for free.
4. Automate the pipeline so docs ship at the speed of code. Jenkins-based CI/CD for Freshworks, automated OpenAPI-driven generation for Bazaarvoice - in both cases, the moment docs stopped requiring a manual step, they stopped falling behind.
Your Documentation Conversion Audit#
Run This Against Your Own Docs This Week
Sign up as a new developer would and time how long it takes to a first successful call
If a parameter changes and nobody has to update a doc page, you have a source-of-truth gap
A sandbox, an API explorer, or even a copy-paste curl command that actually works
If you're pasting the same auth snippet into five pages, componentize it once
If a doc fix requires a different process than a code fix, it will lag behind
Lesson Learned
Thakur Ganeshsingh
The lesson that carried across both rebuilds: documentation quality isn't measured by how complete it is - it's measured by how many developers it successfully moves from "found the page" to "shipped the integration." Fix the pipeline and the path first. The writing matters, but it's the second problem, not the first.
Next in the series: "Measuring DevRel Impact: Beyond Vanity Metrics"
Rebuilt documentation at your own company? Share what actually moved the adoption numbers - I read and respond to every comment.
