The Invisible Wall: Why Junior and Senior Devs Rate Your Docs Differently

Imagine two developers sitting down with the documentation for SuperForms, a fictional SaaS product that promises to handle the “backend nastiness” of web forms with a single API call. SuperForms has invested real effort into its docs: a clean quickstart, SDKs for six languages, and a sleek REST API walkthrough.

Sam (The Senior) opens the quickstart, skims the authentication section, copies a curl command to test the endpoint, and has form submissions hitting her backend within twenty minutes. She finds the docs “refreshingly concise” and rates them a 9/10.

Jamie (The Junior) opens the exact same page. He reads the authentication section three times, unsure if his API key belongs in the frontend code or a backend script. He pastes the initialization snippet, gets a 422 Unprocessed Entity error, and spends the next two hours on Stack Overflow because the docs didn’t explain what a 422 meant in this context. Jamie finds the docs “incomplete and elitist.” He rates them a 3/10.

They read the same words. They had completely different experiences.

The “Curse of Knowledge” at Work

This gap stems from a cognitive bias known as the Curse of Knowledge. Once you understand a complex concept (like the difference between client-side and server-side execution), it becomes almost impossible to remember what it felt like not to know it.

For the Senior, a sentence like “Store your API key as an environment variable” is a helpful shorthand. For the Junior, that same sentence is a wall. It assumes three hidden prerequisites:

  1. What an environment variable is.
  2. How to set one in their specific OS or deployment environment.
  3. How to reference that variable in their code without leaking it to the browser.

When docs skip these “obvious” steps to remain “clean,” they aren’t being minimalist—they are being exclusionary.

Finesse: How to Write for Both Audiences

Writing for both Sam and Jamie simultaneously isn’t just a courtesy; it’s a hallmark of elite technical documentation. You don’t have to “dumb down” the content for seniors to help the juniors. You just need to use Progressive Disclosure.

Here are four strategies to bridge the gap:

1. The “Prerequisite Map” (With Escape Hatches)

Never assume your reader has their environment configured. At the top of your SuperForms quickstart, include a “Before You Begin” box.

  • The Finesse: List the required skills (e.g., Node.js, .env files, Promises). Use aggressive hyperlinking. If Jamie doesn’t know what a Promise is, he can click the link to a “Conceptual Guide.” Sam will ignore the box entirely and keep scrolling.

2. The “Why” Toggle

Seniors want the What (the code). Juniors need the Why (the logic).

  • The Finesse: Provide the code snippet prominently. Immediately below it, use a collapsible <details> tag labeled “How this works under the hood.” Inside, explain the request-response cycle or why a specific header is required. This keeps the main flow “fast” for Sam while providing a safety net for Jamie.

3. Write Error Docs for the “Person in the Dark”

Most API references list error codes like a dictionary: 401: Unauthorized. This is useless to a junior who thinks they are authorized.

  • The Finesse: Effective troubleshooting guides explain why the error usually happens (e.g., “You might be using your Test Key in a Production environment”) and provide the “First Step” to fix it. Writing for someone who has never seen the error before is the highest-value investment a tech writer can make.

4. Contextualize the “Floating Snippet”

A floating code snippet is a trap. If you show a SuperForms configuration object, show where it lives in a standard project structure.

  • The Finesse: Use small annotations or a file-tree visual (e.g., src/api/submit.js). Simply stating, “You should see a ‘Success’ message in your terminal,” closes a feedback loop that seniors close in their heads automatically, but juniors often second-guess.

The Bottom Line: Empathy is a Technical Skill

The technical writer who treats “developers” as a monolith is, without meaning to, building a wall in the middle of their product.

Great documentation meets developers where they are, whether they are six months or sixteen years into their career, and helps them get somewhere better. It takes discipline to ask: “Who might not follow this, and what is the smallest thing I can provide to help them keep up?”

That question is the difference between a doc that is “pretty” and a doc that is useful.

How to Document an SDK: What Works, What Fails, and Why It Matters

If you’re responsible for documenting an SDK, or want to be, this guide is designed as a practical resource. A few years ago, I attended Tom Johnson’s API documentation course in San Francisco, which sharpened my thinking around developer audiences, precision, and technical credibility. While API documentation and SDK documentation are not the same discipline, the rigor and empathy required in both are closely related.

Documenting an SDK is not the same as documenting an API — and it’s certainly not the same as writing end-user documentation.

API documentation describes a contract.
User documentation explains workflows.
SDK documentation enables implementation.

When SDK documentation succeeds, developers integrate quickly and confidently. When it fails, they open support tickets, abandon the integration, or choose a competitor.

Here’s what makes SDK documentation work — and what undermines it.


Start with the Fastest Path to Success

The most important metric for SDK documentation is time to first successful call.

Your documentation should begin with:

  • Installation instructions
  • Authentication setup
  • A minimal working example
  • Expected output

This is not the place for product positioning. Developers want proof the SDK works.

A strong Quick Start section uses copy-paste-ready code, lists prerequisites clearly, and demonstrates a visible success response. If the quick start fails, trust collapses immediately.


Write Idiomatic, Real Code

SDK documentation must feel native to its language ecosystem.

JavaScript examples should reflect modern async patterns. Python examples should follow common packaging conventions. Error handling should look natural for the language.

Developers instantly recognize artificial examples. If code feels unnatural, confidence drops. SDK documentation must read like it was written by someone who actually builds in that language.


Explain the Abstraction

An SDK exists to simplify an API — but abstraction can create confusion.

Good SDK documentation clarifies:

  • What the SDK handles automatically (retries, headers, authentication)
  • What developers must configure themselves
  • How SDK methods map to underlying API behavior
  • Any differences between SDK and raw API capabilities

Developers need a mental model. If they don’t understand what’s happening under the hood, debugging becomes frustrating.

Transparency builds confidence.


Document the Edges, Not Just the Happy Path

Many SDK docs are strong on the ideal example and weak when things go wrong.

High-quality documentation addresses:

  • Authentication failures
  • Rate limiting
  • Pagination
  • Timeouts and retries
  • Error objects and exception handling
  • Version compatibility

Developers rarely struggle with the clean example. They struggle when something breaks.

Anticipating friction is one of the highest-value contributions a technical writer can make.


Maintain Accuracy Through Versioning

SDK documentation often lives in a GitHub repository alongside the code. That means it must evolve with releases.

Common breakdowns include:

  • Outdated snippets
  • Deprecated methods still documented
  • Renamed parameters not updated
  • Missing version labels

Broken examples are catastrophic. Documentation should move through pull requests, align with release cycles, and clearly identify breaking changes.

In SDK writing, credibility is technical.


Five Common SDK Documentation Mistakes

These patterns consistently damage developer experience:

1. Over-Explaining Instead of Showing Code

Developers prefer concrete examples over theory. Show working code first, then explain briefly.

2. Copying API Docs into SDK Docs

An SDK is not a duplicate of the API reference. It must contextualize usage within a language.

3. Ignoring Setup Friction

Installation and authentication are the most common failure points. Treat them carefully.

4. Writing Marketing Language

Words like “powerful” and “seamless” don’t help developers ship code. Precision does.

5. Failing to Document Errors

If error handling isn’t clear, debugging becomes guesswork.


Examples of Strong SDK Documentation

Several large technology companies demonstrate high-quality SDK documentation practices:

Stripe – Stripe’s SDK documentation is widely regarded as exemplary. Quick Starts are concise, code samples are idiomatic across languages, and error handling is clearly documented.

Twilio – Twilio provides consistent language-specific SDK guides with structured navigation, clear setup instructions, and runnable examples that anticipate integration challenges.

AWS (e.g., AWS SDK for JavaScript) – AWS SDK documentation is comprehensive and tightly versioned. Examples reflect real-world patterns, and method-level documentation aligns closely with service behavior.

In each case, documentation prioritizes implementation clarity, language fluency, and completeness.


The Core Principle

The goal of SDK documentation is not to describe a product or regurgitate the API docs.

The goal is to help a developer successfully implement that product with minimal friction and maximum confidence.

If developers can install the SDK, authenticate, make a call, handle errors, and scale usage without confusion, the documentation has succeeded.

If they hesitate, guess, or reach for support prematurely, it has not.

Good SDK documentation removes uncertainty, which can make the difference between adoption and abandonment.

Debunking Myths About Technical Writing for Developers

In my years as a technical writer at Google, Grafana Labs, and other employers, I’ve encountered several misconceptions about what technical writers actually do. Some stakeholders view us as glorified clerical support. Others expect us to be senior-level software engineers while maintaining documentation.

The reality is far more nuanced: we are specialized bridge-builders who manage the high-stakes intersection of human language and machine logic. We operate in the gap between what engineers know and what developers need to learn, transforming tribal knowledge into usable education.

Here are the 3 most common myths I’ve encountered about technical writing, what the role actually entails, and why getting this right matters.

Myth 1: Technical Writers Are “Information Secretaries”

The Misconception: Technical writers wait for engineers to send over notes, then simply reformat those notes into documentation. We’re basically human content management systems.

The Reality: This “secretary” approach produces fragmented, contradictory, and low-quality content. Real technical writing involves investigative research, information architecture, audience analysis, and strategic content design.

What the Work Actually Looks Like

Professional technical writers don’t passively wait for information. Instead, we:

  • Embed ourselves in development cycles, attending sprint planning and standups to understand what’s being built and why
  • Conduct structured interviews with SMEs, asking targeted questions that uncover not just what features do, but why they exist and how they fit into the broader ecosystem
  • Analyze documentation gaps by reviewing support tickets and user feedback to identify where developers actually struggle
  • Create information architectures that map content to user journeys, ensuring developers find answers through intuitive navigation
  • Establish content standards that ensure consistency across teams

Good technical writers architect knowledge systems that serve multiple audiences simultaneously. This is why asking engineers to “write down what they built” produces documentation with no coherent learning path.

Myth 2: The Technical Writer Must Write Every Line of Code

The Misconception: A good technical writer should independently write all code samples, from basic examples to complex production implementations.

The Reality: While I maintain working knowledge of some languages, enterprise software is often too complex for a single writer to generate all code samples. Instead, my role is better described as a Technical Director who orchestrates high-quality examples.

The Technical Director Model

1. Identify the Use Case

Engineers want to document what they built; users need to understand how to solve problems. I translate between these perspectives:

  • Engineer thinking: “We added support for custom retry policies”
  • User thinking: “How do I make my API calls more resilient to network failures?”

2. Enlist the Right Resources

I identify which engineer has the deepest knowledge of a subsystem, who writes clean example code, and who has bandwidth to contribute.

3. Verify, Refine, and Test

Raw code from engineers rarely ships as-is. My review includes:

  • Compilation and execution testing: Does it actually work?
  • Security review: Are we showing unsafe patterns?
  • Readability optimization: Removing complexity, adding explanatory comments
  • Error handling: Ensuring examples show realistic error handling, not just happy paths

4. Maintain and Update

I track which code samples are affected by breaking changes, coordinate updates before deprecated features are removed, and maintain automated testing for critical examples.

When Technical Writers Do Write Code

For simpler examples, I may write the code myself. But attempting to write complex, production-representative code for unfamiliar systems wastes time and produces fragile examples.

Myth 3: Engineers Can Simply Replace Technical Writers

The Misconception: Documentation is just “writing stuff down.” Any engineer with decent communication skills can handle it, eliminating the need for dedicated technical writers.

The Reality: While some engineers are excellent writers, systematically replacing technical writers introduces profound risks. This isn’t about engineers lacking capability—it’s about specialization, incentives, and the invisible complexity of documentation as a discipline.

The Commitment Gap

An engineer’s primary work is building features and fixing bugs. Documentation becomes a secondary concern, creating predictable patterns:

  • Documentation written only when forced by PR requirements
  • Stale documentation when APIs change but docs don’t get updated
  • Inconsistent styles across different engineers’ contributions
  • Coverage gaps where exciting features get documented but essential operational concerns don’t

The Curse of Knowledge

Engineers suffer from unconsciously assuming others share their background knowledge. Here’s what this looks like:

Engineer-written documentation:

Configure the service mesh egress gateway to handle external traffic.

Technical writer-written documentation:

Before your application can make requests to external APIs, you need to configure the service mesh to allow outbound traffic. In Joeware, this requires creating an Egress Gateway...

The engineer’s version isn’t wrong, but it assumes you know what a service mesh is, what “egress” means, and where configuration happens. Technical writers are trained to identify implicit assumptions, sequence information to build from foundational concepts, and anticipate failure modes.

The Reality: A Partnership of Specialists

The most effective documentation emerges from genuine partnerships where:

  • Engineers provide deep technical expertise about how systems work
  • Technical writers provide audience expertise about how developers learn and where they struggle
  • Both groups review each other’s work to catch technical errors and pedagogical gaps

When documentation is treated as a first-class citizen of the engineering process, organizations see measurable results:

  • Lower support costs: Developers self-serve answers
  • Faster onboarding: New users become productive in hours instead of days
  • Better product decisions: Explaining features often reveals UX problems before launch
  • Competitive advantage: Documentation quality often determines which product wins

What “Good” Looks Like

Technical writers aren’t a luxury. We’re strategic investments in product success, developer experience, and sustainable growth. Good documentation teaches developers to think in your product’s paradigm, anticipates their struggles, and makes the complex feel achievable.

That’s not something you get by asking engineers to write more clearly. It’s something you get by respecting technical writing as the specialized craft it is.

The “Docs-as-Code” Transition: Moving Beyond the CMS

For years, the standard for technical documentation was the monolithic CMS systems designed for “content” in the abstract, but often divorced from the actual environment where software is built. My journey across organizations like Google, Microsoft, and Grafana Labs has fundamentally shifted my perspective toward docs-as-code workflows.

Why the Shift?

Early in my career, I saw the friction caused by siloed documentation. When docs live in a separate web portal managed by a non-developer editor, they naturally drift away from the source code. By adopting tools like Git, Markdown, Hugo, and Docusaurus, we bring documentation into the developer’s native habitat. This allows developers to take responsibility for documenting their own work, and it allows technical writers to be more fully integrated into the team’s development process.

For technical writers transitioning from traditional CMS platforms, this shift represents a fundamental reimagining of your role within the development team. You’re no longer the downstream recipient of incomplete information; you become an embedded collaborator who can see, understand, and influence the code alongside the documentation. This visibility transforms the quality and accuracy of what you produce.

Treating documentation like code means it follows the same lifecycle as the product:

Version Control: Using Git allows for precise tracking of changes and the ability to revert errors instantly. Beyond basic rollback capabilities, Git enables powerful branching strategies where documentation updates can be developed in parallel with features, tested in staging environments, and merged only when the feature ships. This synchronization prevents the common problem of documentation being published too early or too late relative to feature releases.

Peer Review: At Google and elsewhere, I submitted substantial change-lists or pull-requests (PRs), ensuring every word was vetted by engineers through the same code review process they use for features. This peer review culture catches technical inaccuracies before publication and creates shared ownership of documentation quality. Engineers become invested stakeholders rather than reluctant contributors. The review process also serves as an informal mentorship opportunity whereby junior engineers learn from seeing how senior developers critique and improve documentation, while writers gain deeper technical insights through reviewer feedback.

Automation: CI/CD pipelines can run linters to check for broken links or style guide violations before a single page is published. At Grafana Labs, we used linters to check for divergences from the team’s Writers’ Toolkit (our style guide). Advanced teams integrate Vale or other prose linters to enforce terminology consistency, readability metrics, and brand voice guidelines. Some organizations even run automated accessibility checks, ensuring documentation meets Web Content Accessibility Guidelines (WCAG) standards before deployment. This automation amplifies editorial judgment by catching mechanical errors that would otherwise consume review cycles.

Impact on Developer Experience

At Grafana Labs, I collaborated with a director of development and another engineer to lead the building of a developer documentation portal (grafana.com/developers) designed for discoverability. At the open-source observability company, engineers had built several distinct silos of information for their separate projects, but this made it frustrating to find what you needed. The company’s divergent threads for plugin building, specifications, and design system were brought together under one umbrella. You can read all about our journey to creating the portal at “The Grafana developer portal: your gateway to enhanced plugin development.”

When documentation lives in the repository, it becomes more of a “living” entity. Paid developers and open-source contributors alike are more likely to contribute updates or suggest edits when they can simply open a PR. The psychological barrier to contribution drops precipitously when the workflow mirrors what developers already do dozens of times per day.

Moreover, having documentation in the repository enables powerful cross-referencing. Code comments can link directly to documentation sections; documentation can reference specific lines of code with permanent links that update as the codebase evolves. This bidirectional relationship creates a cohesive knowledge ecosystem rather than two separate information silos.

Conclusion

The transition is about a transformation of documentation culture. It’s an acknowledgment that documentation is a first-class citizen of the software development life cycle (SDLC). When we treat docs like code, we bring software engineers and writers together to build better products. This cultural shift manifests in tangible ways: documentation tickets appear in the same sprint planning as feature work, documentation coverage becomes a release criterion, and engineers budget time for documentation the same way they budget for testing.

In the past 7 years since I first started using the docs-as-code workflow, I’ve learned that it isn’t just about version control or static site generators. It’s about breaking down the artificial barriers between code and documentation, between engineers and writers, between the product and its explanation. When those barriers dissolve, both the code and the docs improve, creating a virtuous cycle that benefits everyone: developers, writers, and most importantly, the users trying to understand and use what we’ve built.