Skip to main content
Skip to main content
Back to Blog
Developer RelationsFeatured

Documentation That Converts: Technical Writing That Drives API Adoption

The real documentation rebuilds behind the Freshworks Developer Portal and Bazaarvoice's Developer Console and API Gateway - what separated docs nobody read from docs that actually drove adoption.

Thakur Ganeshsingh
December 29, 2024
11 min read
Share this post:
Documentation That Converts: Technical Writing That Drives API Adoption

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.

Before: Seven Sites, One Legacy Stack
Plain HTML generated from Ruby files on a Middleman server, deprecated since 2019. Manual builds, no shared components, inconsistent navigation across Freshdesk, Freshservice, Freshchat, CRM, and Freshteam docs.
×7 separate sites with no content reusability
×Manual deployment for every update
×A different information architecture per product
After: One Markdoc + React Platform
A single documentation platform at freshworks.dev, authored in Markdoc, rendered through a shared React/Next.js component library, deployed automatically on every merge.
7 sites unified into 1 platform
38 reusable interactive components
Automated CI/CD - no manual deploys

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

7 → 1

Sites Unified

One platform replacing seven fragmented product doc sites

-70%

Maintenance Overhead

Reduction in ongoing documentation upkeep

-90%

Deployment Cycles

Faster, fully automated release of doc updates

38

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.

Before: Code-First, Docs-Later
Documentation written after each API shipped, with no single source of truth. Comprehensive reference pages up front, no guided path to a first successful call, drift between docs and live endpoints caught by support tickets.
×Docs and code fell out of sync between releases
×No progressive path from zero to first API call
×Support absorbed the cost of documentation drift
After: Documentation-First, Spec as Source of Truth
API design starts with OpenAPI specifications. Docs generate from the spec. A guided onboarding path and an interactive sandbox sit in front of the full reference for the Developer Console and API Gateway.
OpenAPI spec as the single source of truth
Interactive sandbox for hands-on exploration before reading reference docs
Hybrid REST + GraphQL guidance matched to the use case

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

-60%

Integration Time

Faster developer onboarding through the Developer Console

-70%

Time to First Call

Reduction in time-to-first-successful-API-call

-50%

Support Tickets

Fewer integration issues reaching support

-95%

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

Reference Documentation (what we started with)

Complete, technically accurate, written from the API's point of view

Best for: Developers who already know exactly what they're looking for
✅ 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
Conversion-Focused Documentation (what both rebuilds became)

Structured around the developer's journey from zero to a working integration

Best for: Teams that need documentation to actively drive adoption, not just describe an API
✅ 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

0 / 5 completed
Trace your own onboarding path end to end

Sign up as a new developer would and time how long it takes to a first successful call

Check whether your reference docs and live API can drift silently

If a parameter changes and nobody has to update a doc page, you have a source-of-truth gap

Look for a 'try it' moment before the full reference material

A sandbox, an API explorer, or even a copy-paste curl command that actually works

Audit for one-off, hand-written examples that should be a shared component

If you're pasting the same auth snippet into five pages, componentize it once

Confirm doc updates ship on the same pipeline as code

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.

Thakur Ganeshsingh
Thakur Ganeshsingh
Engineering Manager - Developer Relations at Freshworks