<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Haletha Judkins Blog</title>
        <link>https://www.haletha.com/blog</link>
        <description>Haletha Judkins Blog</description>
        <lastBuildDate>Tue, 19 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Five API Documentation Mistakes That Drive Developers Crazy (And How to Fix Them)]]></title>
            <link>https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy</link>
            <guid>https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy</guid>
            <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The five most common API documentation mistakes — and specific, actionable fixes for each one.]]></description>
            <content:encoded><![CDATA[<p>Developer experience research consistently shows the same thing: documentation is the number one factor developers cite when evaluating whether to adopt an API. More than pricing. More than performance. More than feature set. That means your documentation is doing sales work whether you think of it that way or not. Good docs lower the barrier to adoption. Bad docs send developers straight to a competitor.</p>
<p>After decades of writing, reviewing, and — yes — reading a lot of API documentation, I've noticed that the same mistakes come up again and again. They're rarely caused by carelessness. They're usually caused by writers and teams who are too close to their own product to see it the way a stranger would.</p>
<p>Here are the five I see most often, and what to do instead.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-documenting-for-the-team-that-built-the-product-not-the-developer-whos-new-to-it">1. Documenting for the team that built the product, not the developer who's new to it<a href="https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy#1-documenting-for-the-team-that-built-the-product-not-the-developer-whos-new-to-it" class="hash-link" aria-label="Direct link to 1. Documenting for the team that built the product, not the developer who's new to it" title="Direct link to 1. Documenting for the team that built the product, not the developer who's new to it" translate="no">​</a></h2>
<p>This is the most common mistake, and it's an easy trap to fall into.</p>
<p>When you work on a product every day, you stop noticing the things that are confusing to someone encountering it for the first time. The internal nickname for a core object becomes the name you use in the docs without explanation. The reason a certain endpoint works the way it does is obvious to you because you were in the room when the architecture decision was made — but it's completely opaque to an outside developer.</p>
<p>The fix is to put fresh eyes on your documentation regularly. Recruit someone who has never seen the API — ideally a developer, but even a non-technical colleague — and watch them try to complete a task using only your docs. The places where they get stuck are the places your documentation is failing.</p>
<p>Better yet, hire a technical writer who doesn't know your product. Not knowing it isn't a disadvantage — it's the qualification.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-burying-the-quickstart">2. Burying the quickstart<a href="https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy#2-burying-the-quickstart" class="hash-link" aria-label="Direct link to 2. Burying the quickstart" title="Direct link to 2. Burying the quickstart" translate="no">​</a></h2>
<p>I have a personal rule when I'm evaluating API documentation: if I can't make a successful API call within ten minutes using only the docs, the documentation has failed.</p>
<p>Most developers approach a new API the same way. They're not starting with the reference docs. They're looking for the shortest possible path to "it works" — a moment of success that validates the integration is worth continuing.</p>
<p>If your quickstart is buried three levels deep in the navigation, requires the developer to read five conceptual sections before they get to a single line of code, or isn't present at all, you're losing developers before they've had a chance to see what your product can do.</p>
<p>The fix: make the quickstart the first thing in your navigation. Start with authentication and one working call. Get the developer to a successful response in under ten minutes. Save the deep conceptual material for later — they'll read it once they've already decided the API is worth their time.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-example-responses-that-dont-reflect-real-responses">3. Example responses that don't reflect real responses<a href="https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy#3-example-responses-that-dont-reflect-real-responses" class="hash-link" aria-label="Direct link to 3. Example responses that don't reflect real responses" title="Direct link to 3. Example responses that don't reflect real responses" translate="no">​</a></h2>
<p>This one is subtle but corrosive to developer trust.</p>
<p>When a developer looks at your example response, they're building a mental model of what they'll receive in production. If that example is oversimplified, uses fields that don't actually appear in responses, or omits fields that the real response includes, the developer gets a wrong mental model. They write code against your example. Their code breaks in production. They lose trust in your documentation — and in your product.</p>
<p>I've seen this happen because a developer hand-wrote an example response without testing it against the actual API. I've seen it happen because the API changed and the documentation didn't. I've seen it happen because the example was written to be clean and readable rather than accurate.</p>
<p>The fix: example responses should come from actual API calls. Use a tool like Postman, copy a real response, anonymize any sensitive values, and use that. Automate the process if you can — some doc toolchains can generate examples from live API calls and keep them in sync with the actual responses.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-error-documentation-that-tells-you-what-happened-but-not-what-to-do">4. Error documentation that tells you what happened but not what to do<a href="https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy#4-error-documentation-that-tells-you-what-happened-but-not-what-to-do" class="hash-link" aria-label="Direct link to 4. Error documentation that tells you what happened but not what to do" title="Direct link to 4. Error documentation that tells you what happened but not what to do" translate="no">​</a></h2>
<p>A developer who hits a <code>429 Too Many Requests</code> error at 2am, with a production integration down, needs two things immediately: to understand what went wrong, and to know exactly what to do next.Most error documentation handles the first part reasonably well. It fails consistently at the second.</p>
<p>I've worked closely with engineers and developers throughout my career, and at two enterprise software companies — one focused on association management software, one on data integration tools. I was involved in creating the error handling documentation from the ground up — sitting with the engineering team to understand not just what each error meant, but what a developer would actually need to do when they encountered it. That experience shaped how I think about this problem.</p>
<p>"Rate limit exceeded" tells the developer what happened. It does not tell them what their rate limit is, how to check their current usage, whether the limit resets hourly or daily, what the <code>Retry-After</code> header value means, or how to
implement an exponential backoff strategy. All of that is what they actually need.</p>
<p>The fix: for every error in your documentation, write at minimum: what the error means, the most common causes, and the recommended action. For rate limit and authentication errors specifically, include a code example showing how to handle the error gracefully. That code example will be copy-pasted into production by hundreds of developers. It's worth the ten minutes it takes to write it well.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-using-simple-easy-and-just--the-three-most-dangerous-words-in-api-docs">5. Using "simple," "easy," and "just" — the three most dangerous words in API docs<a href="https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy#5-using-simple-easy-and-just--the-three-most-dangerous-words-in-api-docs" class="hash-link" aria-label="Direct link to 5. Using &quot;simple,&quot; &quot;easy,&quot; and &quot;just&quot; — the three most dangerous words in API docs" title="Direct link to 5. Using &quot;simple,&quot; &quot;easy,&quot; and &quot;just&quot; — the three most dangerous words in API docs" translate="no">​</a></h2>
<p>These three words have cost developers hours of frustrated debugging. I try to eliminate them entirely from any documentation I write.</p>
<p>"Simply add the Authorization header." Except it's not simple if you don't know what format the token needs to be in, where to get it, or how to handle the case where it expires.</p>
<p>"Just pass the user ID." Except the user ID is a UUID in some contexts and an integer in others, depending on how the account was created, and that's not obvious from the documentation.</p>
<p>"This is an easy integration." Except the developer reading this has been stuck for three hours and now they feel like the problem is their own competence rather than incomplete documentation.</p>
<p>The problem with these words is that they're written from the perspective of someone who already knows how to do the thing. They communicate confidence to the writer and condescension to the reader.</p>
<p>The fix: replace them with specificity. Instead of "simply add the Authorization header," write "Add an <code>Authorization</code> header with the value <code>Bearer {your_api_key}</code>, where <code>{your_api_key}</code> is the key from your dashboard under Settings &gt; API Keys." That sentence takes three seconds longer to write and saves an untold number of support tickets.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-note-on-fixing-these-mistakes">A note on fixing these mistakes<a href="https://www.haletha.com/blog/five-api-mistakes-that-drive-developers-crazy#a-note-on-fixing-these-mistakes" class="hash-link" aria-label="Direct link to A note on fixing these mistakes" title="Direct link to A note on fixing these mistakes" translate="no">​</a></h2>
<p>None of these problems require a documentation overhaul to fix. They require a fresh perspective and a commitment to writing for the reader rather than for yourself.</p>
<p>The most useful thing you can do right now: go to your own API documentation and try to complete a basic integration using only what's written there. Not using your memory. Not using internal tools. Just the documentation, the way a stranger would experience it.</p>
<p>What you find will tell you everything about where to start.</p>
<hr>
<p><em>Haletha Judkins is a technical writer specializing in developer-facing documentation. She has been helping technical teams communicate more clearly since the 1990s — back when the internet was new enough that no one had figured out API docs yet either. <a href="https://www.haletha.com/#contact" target="_blank" rel="noopener noreferrer" class="">Say hello here</a>.</em></p>]]></content:encoded>
            <category>Posts</category>
            <category>API Documentation</category>
            <category>Developer Experience</category>
            <category>Technical Writing</category>
        </item>
        <item>
            <title><![CDATA[The Technical Writer's Survival Guide to Working with Engineers]]></title>
            <link>https://www.haletha.com/blog/survival-guide-working-with-engineers</link>
            <guid>https://www.haletha.com/blog/survival-guide-working-with-engineers</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Practical advice for technical writers on building productive relationships with engineers — from running better interviews to getting reviews that actually happen.]]></description>
            <content:encoded><![CDATA[<p>Let me tell you about a conversation I had early in my career.</p>
<p>I'd been brought onto a project to document a new developer tool. I sat down with the lead engineer to go over the product, notebook open, ready to take down everything I needed. Forty-five minutes later, I had four pages of notes and understood approximately none of them. He spoke in acronyms I hadn't encountered, referenced internal systems by nickname, and assumed a baseline of knowledge I didn't have.</p>
<p>I left that meeting feeling completely out of my depth.</p>
<p>What I learned over the years that followed — and what I want to share with you here — is that the challenge of working with engineers isn't really a knowledge gap problem. It's a communication problem. And communication problems are fixable.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="understand-how-engineers-think-about-documentation">Understand how engineers think about documentation<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#understand-how-engineers-think-about-documentation" class="hash-link" aria-label="Direct link to Understand how engineers think about documentation" title="Direct link to Understand how engineers think about documentation" translate="no">​</a></h2>
<p>Before anything else, it helps to understand where documentation sits in an engineer's mental model of their work.</p>
<p>For most engineers, documentation is a tax, not an investment. It's something that has to happen after the real work is done, and it pulls them away from the thing they actually want to be doing. This isn't laziness or arrogance — it's a rational response to how engineering work is structured. Shipping code is what gets measured. Documentation usually isn't.</p>
<p>When you understand this, the way you approach an engineer for information shifts. You're not asking them to do something they value. You're asking them to spend time on something they find interruptive. The more you can minimize that interruption — coming prepared, asking precise questions, not scheduling a 90-minute meeting when a 15-minute Slack thread would do — the better your working relationship will be.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="do-your-homework-before-every-conversation">Do your homework before every conversation<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#do-your-homework-before-every-conversation" class="hash-link" aria-label="Direct link to Do your homework before every conversation" title="Direct link to Do your homework before every conversation" translate="no">​</a></h2>
<p>Nothing builds credibility with an engineer faster than showing up prepared. And nothing erodes it faster than asking questions you could have answered yourself.</p>
<p>Before any interview or review session, I read everything I can find: internal wikis, Confluence pages, Jira tickets, Swagger specs, GitHub READMEs, Slack threads if they're accessible. I'm not trying to become an expert before the conversation — I'm trying to understand enough to ask good questions.</p>
<p>Good questions are specific. "Can you explain how authentication works?" is a mediocre question. "The spec says the token expires after one hour — what happens if a user makes a request with an expired token? Does the API return a 401, or does it attempt to refresh automatically?" is a good question. The second version tells the engineer you've read the material, you're thinking about the developer experience, and you have a specific gap that only they can fill.</p>
<p>This approach has another benefit: it changes the dynamic. You stop being a writer who needs things explained and start being a colleague who is stress-testing the documentation. Engineers respect that framing.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ask-for-examples-always">Ask for examples, always<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#ask-for-examples-always" class="hash-link" aria-label="Direct link to Ask for examples, always" title="Direct link to Ask for examples, always" translate="no">​</a></h2>
<p>Abstract explanations are the enemy of good documentation. When an engineer says "it handles the edge cases gracefully," your job is to find out what that actually means. My standard follow-up question is: "Can you show me an example?" or "What does that look like in practice?" Nine times out of ten, the example is more useful than the explanation — and it's what your readers need anyway.</p>
<p>This is especially important for error handling, edge cases, and parameter behavior. An engineer might describe a parameter as "controls the level of verbosity in the response" in a way that's technically accurate but tells a developer nothing useful. Ask them to show you a response at the lowest setting and the highest setting. Now you have something you can actually document.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="learn-to-read-the-code-a-little">Learn to read the code (a little)<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#learn-to-read-the-code-a-little" class="hash-link" aria-label="Direct link to Learn to read the code (a little)" title="Direct link to Learn to read the code (a little)" translate="no">​</a></h2>
<p>I want to be careful here, because I'm not suggesting technical writers need to become engineers. But there is a level of code literacy that makes you significantly more effective — and significantly more credible.</p>
<p>Specifically: being able to read a function signature, understand a basic JSON schema, and follow the flow of a simple script means you can often answer your own questions instead of scheduling another meeting. It means you can spot inconsistencies between the code and the documentation without an engineer pointing them out. And it means you can have a conversation about the API at a level that engineers respect.</p>
<p>I learned to read code through my college curriculum and, later, out of necessity — sitting with developers, asking them to walk me through what I was looking at, picking up languages through documentation projects. You don't need a computer science degree. You need enough to follow along.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="set-up-a-documentation-review-process-theyll-actually-use">Set up a documentation review process they'll actually use<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#set-up-a-documentation-review-process-theyll-actually-use" class="hash-link" aria-label="Direct link to Set up a documentation review process they'll actually use" title="Direct link to Set up a documentation review process they'll actually use" translate="no">​</a></h2>
<p>One of the most common failure modes I've seen is a documentation review process that engineers ignore because it asks too much of them. A Google Doc with comments is fine. A 45-minute review meeting for every doc page is not.</p>
<p>What works well:</p>
<p>A short, specific checklist for reviewers: "Is this technically accurate? Are there any missing parameters? Are the error codes correct?" Engineers can answer those questions in ten minutes. They cannot easily answer "Does this read well?"</p>
<p>A clear turnaround expectation. "I need your review by Friday" with a reason — "because this ships with the v2 launch" — is more likely to produce a timely response than an open-ended request.</p>
<p>Small review batches. Sending an engineer fifteen pages of documentation to review is how you get documentation that never gets reviewed. Send one section at a time, with specific questions.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="advocate-for-the-reader-not-yourself">Advocate for the reader, not yourself<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#advocate-for-the-reader-not-yourself" class="hash-link" aria-label="Direct link to Advocate for the reader, not yourself" title="Direct link to Advocate for the reader, not yourself" translate="no">​</a></h2>
<p>The most important thing I've learned in many years of working with subject matter experts is this: when there's tension about documentation content, the winning argument is almost never about writing quality. It's about the reader.</p>
<p>"I think this section needs more detail" is easy to dismiss. "A developer who hasn't seen this API before will get to this point and not know what to do next — here's what I think they need" is much harder to dismiss. You're not advocating for your own preferences. You're advocating for the person who will actually use the product.</p>
<p>Engineers generally care about their users. When you make the user's confusion visible and concrete, most engineers will engage with that seriously.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-the-relationship-outside-of-documentation-requests">Build the relationship outside of documentation requests<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#build-the-relationship-outside-of-documentation-requests" class="hash-link" aria-label="Direct link to Build the relationship outside of documentation requests" title="Direct link to Build the relationship outside of documentation requests" translate="no">​</a></h2>
<p>This one is simple and often overlooked: the best engineering relationships I've had were ones where I showed up before I needed something.</p>
<p>Attending sprint reviews. Reading the product changelog. Commenting on a GitHub discussion. Congratulating an engineer on a launch. None of these things take a lot of time, and all of them build the kind of goodwill that means your next review request gets prioritized instead of deprioritized.</p>
<p>Technical writers are often invisible in engineering organizations — we show up when we need information and disappear when we don't. The ones who build the strongest engineering relationships are the ones who don't disappear.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-final-thought">A final thought<a href="https://www.haletha.com/blog/survival-guide-working-with-engineers#a-final-thought" class="hash-link" aria-label="Direct link to A final thought" title="Direct link to A final thought" translate="no">​</a></h2>
<p>Working with engineers well is a skill that develops over time. It took me years to get comfortable in those conversations — to stop feeling like I was imposing and start feeling like I was contributing.</p>
<p>The thing that shifted it for me was realizing that good documentation is genuinely valuable to engineers, even if they don't always behave that way. Every support ticket that doesn't get filed because the docs were clear enough is time an engineer gets back. Every developer who successfully integrates without opening a GitHub issue is a win for the whole team.</p>
<p>When you can make that case — not in the abstract, but with specific examples from your own work — the relationship changes. You stop being the person who asks engineers for their time. You become the person who saves it.</p>
<hr>
<p><em>Haletha Judkins has spent decades collaborating with engineers, product teams, and developers to produce documentation that actually gets used. She writes about technical writing craft, API documentation, and the art of translating complexity for human beings. <a href="https://www.haletha.com/#contact" target="_blank" rel="noopener noreferrer" class="">Connect with her</a>.</em></p>]]></content:encoded>
            <category>Posts</category>
            <category>Technical Writing</category>
            <category>Collaboration</category>
        </item>
        <item>
            <title><![CDATA[What Is Docs-as-Code — And Does Your Team Actually Need It?]]></title>
            <link>https://www.haletha.com/blog/what-is-docs-as-code</link>
            <guid>https://www.haletha.com/blog/what-is-docs-as-code</guid>
            <pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A plain-language explanation of docs-as-code, the tools involved, and an honest answer to whether your team actually needs it.]]></description>
            <content:encoded><![CDATA[<p>If you've spent any time in developer tooling circles lately, you've probably heard the term "docs-as-code." It comes up in job postings, developer advocate conversations, and API documentation discussions with increasing frequency. And like a lot of industry terminology, it can sound more complicated — or more optional — than it actually is.</p>
<p>Let me break it down plainly, because I think once you understand what docs-as-code actually is, the question of whether you need it becomes a lot easier to answer.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-docs-as-code-means-stripped-of-jargon">What docs-as-code means, stripped of jargon<a href="https://www.haletha.com/blog/what-is-docs-as-code#what-docs-as-code-means-stripped-of-jargon" class="hash-link" aria-label="Direct link to What docs-as-code means, stripped of jargon" title="Direct link to What docs-as-code means, stripped of jargon" translate="no">​</a></h2>
<p>The core idea is simple: write and manage your documentation the same way engineers write and manage code.</p>
<p>That means:</p>
<ul>
<li class="">Writing docs in plain text files (usually Markdown) instead of Word documents or proprietary CMS editors</li>
<li class="">Storing those files in a version control system like Git, alongside or near the code they document</li>
<li class="">Using the same review process for documentation changes that engineers use for code changes — pull requests, peer review, merge approvals</li>
<li class="">Building and publishing the docs with automated tools rather than manually uploading files</li>
</ul>
<p>That's really it. Docs-as-code isn't a specific tool or platform — it's a philosophy about how documentation should live and move through an organization.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-it-emerged">Why it emerged<a href="https://www.haletha.com/blog/what-is-docs-as-code#why-it-emerged" class="hash-link" aria-label="Direct link to Why it emerged" title="Direct link to Why it emerged" translate="no">​</a></h2>
<p>Traditional documentation workflows have a fundamental problem: they're disconnected from the product.</p>
<p>When a developer ships a new API endpoint, the documentation for that endpoint usually goes through a completely separate process — routed to a technical writer, written in a CMS, reviewed by a different person, published on a separate timeline. By the time the doc is live, the code has already shipped. Sometimes the code has already changed again.</p>
<p>Docs-as-code tries to solve this disconnect by putting documentation inside the same workflow as the code. When a developer opens a pull request for a new feature, the documentation update is part of that same request. The reviewer reviews both together. The doc ships when the code ships.</p>
<p>The result, when it works well, is documentation that stays current — which is the single biggest complaint developers have about API docs.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-tools-youll-encounter">The tools you'll encounter<a href="https://www.haletha.com/blog/what-is-docs-as-code#the-tools-youll-encounter" class="hash-link" aria-label="Direct link to The tools you'll encounter" title="Direct link to The tools you'll encounter" translate="no">​</a></h2>
<p>You don't need to learn all of these to get started, but here's what the docs-as-code toolset typically looks like:</p>
<p><strong>Markdown</strong> is the writing format. It's plain text with simple syntax for headings, bold, code blocks, and links. If you've ever formatted a README on GitHub, you've written Markdown. The learning curve is about an afternoon.</p>
<p><strong>Git</strong> is the version control system. It tracks every change to every file, lets multiple people work on the same content without overwriting each other, and maintains a complete history of what changed, when, and why. GitHub and GitLab are the platforms most teams use to host their Git repositories.</p>
<p><strong>Static site generators</strong> turn your Markdown files into a published documentation website. The most common ones for API docs are MkDocs (Python-based, very approachable), Docusaurus (React-based, popular in the open source community), and Sphinx (the long-standing standard for Python projects). They all produce fast, searchable, professional-looking doc sites from plain text files.</p>
<p><strong>CI/CD pipelines</strong> automate the publishing step. When a change is merged, the pipeline automatically builds and deploys the updated docs. No one has to manually push a publish button.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-it-feels-like-to-work-in-a-docs-as-code-environment">What it feels like to work in a docs-as-code environment<a href="https://www.haletha.com/blog/what-is-docs-as-code#what-it-feels-like-to-work-in-a-docs-as-code-environment" class="hash-link" aria-label="Direct link to What it feels like to work in a docs-as-code environment" title="Direct link to What it feels like to work in a docs-as-code environment" translate="no">​</a></h2>
<p>I'll be candid — I'm working through this transition myself right now. But even at this early stage, the appeal is clear.</p>
<p>You write in a text editor instead of a CMS, which means you're not fighting with a WYSIWYG editor or waiting for a slow browser-based tool to load. Your files are local. You can write offline. You can use find-and-replace across an entire documentation set in seconds. You can see exactly what changed between two versions of a document as clearly as you can see what changed between two versions of code.</p>
<p>The collaboration model is also better for documentation quality. When docs live in Git, engineers can submit small corrections directly — a typo fix, an updated code sample — without routing it through a separate system. That means the documentation benefits from everyone's eyes, not just the writer's.</p>
<p>The learning curve is real but manageable. The two skills that take the most adjustment are Git (specifically the branching and pull request workflow) and Markdown (which takes a few hours to get comfortable with). Neither requires a programming background to learn.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="does-your-team-actually-need-it">Does your team actually need it?<a href="https://www.haletha.com/blog/what-is-docs-as-code#does-your-team-actually-need-it" class="hash-link" aria-label="Direct link to Does your team actually need it?" title="Direct link to Does your team actually need it?" translate="no">​</a></h2>
<p>Here's my honest take: it depends on what you're building and how your team is structured.</p>
<p><strong>You probably do need it if:</strong></p>
<ul>
<li class="">You're building a developer-facing product with a public API</li>
<li class="">Your documentation needs to stay in sync with fast-moving code</li>
<li class="">You have engineers who want to contribute to documentation but find your current CMS cumbersome</li>
<li class="">You're planning to build a documentation site that you own and control rather than relying on a hosted platform</li>
<li class="">You want documentation to be part of your code review process</li>
</ul>
<p><strong>You might not need it yet if:</strong></p>
<ul>
<li class="">You're a small team with a slow-moving product and a non-technical audience</li>
<li class="">Your existing documentation process is working fine and the disruption of switching isn't worth it</li>
<li class="">You're the only person maintaining the docs and a simpler tool serves you better</li>
</ul>
<p>The honest version is that docs-as-code is the industry standard for developer-facing documentation, and if you're writing API docs professionally, knowing how it works is increasingly expected. That doesn't mean every project needs a full CI/CD pipeline and a custom Docusaurus site — but being comfortable in a Markdown-and-Git environment is now a baseline skill for API technical writers.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-practical-starting-point">A practical starting point<a href="https://www.haletha.com/blog/what-is-docs-as-code#a-practical-starting-point" class="hash-link" aria-label="Direct link to A practical starting point" title="Direct link to A practical starting point" translate="no">​</a></h2>
<p>If you want to get comfortable with docs-as-code without committing to a full
overhaul, here's a low-stakes way to start — and I mean this literally, because
it's exactly what I did.</p>
<p>My practical starting point was migrating this site to Eleventy, a static site
generator that runs on Node.js. Rather than setting up a separate practice
project, I used my own portfolio as the learning environment. The stakes were
real enough to keep me engaged, but the consequences of a mistake were low —
worst case, my personal site looks broken for an afternoon.</p>
<p>The core workflow I learned through that process:</p>
<ol>
<li class="">Write content in Markdown files.</li>
<li class="">Commit changes to a Git repository.</li>
<li class="">Let a static site generator (I used Eleventy; MkDocs is another good option)
build the site from those files.</li>
<li class="">Push to GitHub and watch it deploy automatically via GitHub Actions.</li>
</ol>
<p>That's it. That workflow — write Markdown, commit to Git, build with a static
site generator, deploy automatically — is the heart of docs-as-code. The tools
have different names depending on the company, but the pattern is the same
everywhere.</p>
<p>If you want an even lower-stakes entry point before tackling a full site: create
a free GitHub account, add a <code>README.md</code> to a new repository, and write something
in Markdown. Make a change, commit it, and see how Git tracks the history. That
single experience — seeing your changes version-controlled — is the mental shift
that makes everything else click.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-bottom-line">The bottom line<a href="https://www.haletha.com/blog/what-is-docs-as-code#the-bottom-line" class="hash-link" aria-label="Direct link to The bottom line" title="Direct link to The bottom line" translate="no">​</a></h2>
<p>Docs-as-code isn't magic, and it won't automatically make your documentation better. What it does is remove the friction between where code lives and where documentation lives — and in fast-moving developer product environments, that friction is the root cause of most documentation problems.</p>
<p>It's worth understanding, worth learning, and for most API documentation work, worth doing.</p>
<hr>
<p><em>Haletha Judkins is a technical writer with decades of experience documenting complex developer products. She writes about API documentation, technical writing craft, and the changing Landscape of developer content. <a href="https://www.haletha.com/#contact" target="_blank" rel="noopener noreferrer" class="">Connect with her here</a>.</em></p>]]></content:encoded>
            <category>Posts</category>
            <category>Docs-as-code</category>
            <category>Technical Writing</category>
            <category>API Documentation</category>
        </item>
        <item>
            <title><![CDATA[Why AI APIs Are the Hardest Things to Document (And What to Do About It)]]></title>
            <link>https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document</link>
            <guid>https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document</guid>
            <pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Why documenting AI APIs is uniquely challenging — non-deterministic outputs, complex parameter interactions, probabilistic errors, and dual audiences — and what good AI API documentation actually looks like.]]></description>
            <content:encoded><![CDATA[<p>AI APIs present a fundamentally different documentation challenge than traditional REST APIs — and most existing doc frameworks weren't designed to handle them. They're not harder in the sense that the underlying concepts are impenetrable. Harder in the sense that the usual documentation workflow — define the endpoint, describe the parameters, show an example response — gets you maybe 60% of the way there. After that you'll need a different approach.</p>
<p>Here's what makes it different.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-output-isnt-deterministic">The output isn't deterministic<a href="https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document#the-output-isnt-deterministic" class="hash-link" aria-label="Direct link to The output isn't deterministic" title="Direct link to The output isn't deterministic" translate="no">​</a></h2>
<p>With a traditional REST API, if you send the same request twice, you get the same response. That predictability is what makes example responses so useful in documentation. A reader can look at your sample JSON and say, "okay, I know exactly what I'm getting."</p>
<p>With an AI API — whether it's a language model, an image generator, or a speech-to-text service — the output varies. Sometimes significantly. Two identical requests to the same endpoint can return results that look completely different. How do you write an "Example Response" section for that?</p>
<p>The answer — and what separates good AI API docs from poor ones — is documenting the <em>structure</em> of the response, not just a single instance of it. You need to explain the range of what's possible, the factors that influence the output (temperature settings, system prompts, model version), and what "a good result" looks like versus an unexpected one. That's a fundamentally different writing task than documenting a payments API.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-parameters-change-the-behavior-in-non-obvious-ways">The parameters change the behavior in non-obvious ways<a href="https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document#the-parameters-change-the-behavior-in-non-obvious-ways" class="hash-link" aria-label="Direct link to The parameters change the behavior in non-obvious ways" title="Direct link to The parameters change the behavior in non-obvious ways" translate="no">​</a></h2>
<p>Most API parameters are straightforward: pass <code>currency: "USD"</code> and you get USD. But AI API parameters interact with each other in ways that are genuinely complex to explain.</p>
<p>Take <code>temperature</code> in a language model API. You can explain the technical definition — it controls the randomness of the output, higher values produce more varied responses — but that doesn't tell a developer <em>when</em> to use 0.2 versus 0.8. For that, you need examples. Real, concrete, side-by-side examples that show what the output actually looks like at different settings.</p>
<p>The same goes for system prompts, stop sequences, context window limits, and the relationship between <code>max_tokens</code> and response quality. Each of these requires more than a one-line description. They require explanatory prose that helps a developer build an accurate mental model — and that's technical writing, not just parameter documentation.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-errors-are-probabilistic-not-categorical">The errors are probabilistic, not categorical<a href="https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document#the-errors-are-probabilistic-not-categorical" class="hash-link" aria-label="Direct link to The errors are probabilistic, not categorical" title="Direct link to The errors are probabilistic, not categorical" translate="no">​</a></h2>
<p>With a traditional API, error documentation is relatively contained. A <code>401</code> means the token is bad. A <code>404</code> means the resource doesn't exist. A <code>422</code> means you sent malformed data. You can document these cleanly.</p>
<p>AI APIs have all of those errors, plus a class of "errors" that aren't HTTP errors at all: outputs that are technically valid responses but aren't what the developer wanted. A hallucinated fact. A truncated response. A refusal. A response in the wrong language. A code sample that doesn't compile.</p>
<p>These aren't failures you can handle with a try-catch block — they're behavioral patterns that developers need to anticipate and build around. Documenting them means writing content that doesn't fit neatly into a traditional error codes table. It might live in a "Known limitations" section, a "Best practices" guide, or inline callouts throughout the reference docs. Figuring out where it belongs requires the kind of information architecture judgment that separates a technical writer from a documentation template.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-audience-is-often-two-people-at-once">The audience is often two people at once<a href="https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document#the-audience-is-often-two-people-at-once" class="hash-link" aria-label="Direct link to The audience is often two people at once" title="Direct link to The audience is often two people at once" translate="no">​</a></h2>
<p>AI API documentation often has to serve two very different readers: the engineer who is wiring up the API call, and the product manager or ML practitioner who is deciding what parameters to use, how to craft prompts, and what quality thresholds to set.</p>
<p>A pure reference doc serves the engineer. A pure conceptual guide serves the PM. But in practice, AI API docs need to do both — often on the same page — without alienating either reader.</p>
<p>Threading that needle requires a clear information architecture and a writer who understands both audiences well. The documentation that fails to serve AI API users most often fails at this level — written for one reader, accidentally ignoring the other.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="so-what-does-good-ai-api-documentation-actually-look-like">So what does good AI API documentation actually look like?<a href="https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document#so-what-does-good-ai-api-documentation-actually-look-like" class="hash-link" aria-label="Direct link to So what does good AI API documentation actually look like?" title="Direct link to So what does good AI API documentation actually look like?" translate="no">​</a></h2>
<p>It looks like this:</p>
<p><strong>Conceptual foundation first.</strong> Before any endpoint reference, readers need to understand how the model works at a high level — what it takes as input, what it produces, and what factors influence the output. A two-page "How it works" section saves ten support tickets.</p>
<p><strong>Parameter documentation with behavioral examples.</strong> Not just type and description, but concrete before-and-after examples showing what changes when you adjust a parameter. Screenshots, sample outputs, even tables comparing outputs at different settings.</p>
<p><strong>Honest limitations documentation.</strong> The best AI API docs don't hide the product's limitations — they document them clearly, with guidance on how to work around them. This builds developer trust far more than pretending the limitations don't exist.</p>
<p><strong>Prompt engineering guidance.</strong> For LLM APIs especially, how you craft the input matters enormously. The best doc sets include a prompt engineering guide that teaches developers to get better outputs — not as a workaround for poor documentation, but as a genuine part of the developer experience.</p>
<p><strong>Version and model change logs.</strong> AI models get updated, and updates can change behavior in ways that break integrations. A detailed changelog that explains behavioral changes — not just "performance improvements" — is essential.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-matters-for-technical-writers-right-now">Why this matters for technical writers right now<a href="https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document#why-this-matters-for-technical-writers-right-now" class="hash-link" aria-label="Direct link to Why this matters for technical writers right now" title="Direct link to Why this matters for technical writers right now" translate="no">​</a></h2>
<p>After many years in technical writing, I find AI API documentation to be one of the most genuinely interesting documentation problems facing our field right now. The frameworks we've relied on for decades — the endpoint reference, the parameter table, the example response — are necessary but no longer sufficient.</p>
<p>The writers who figure out how to document probabilistic systems, explain behavioral parameters, and serve dual audiences on the same page will be the ones companies are looking for as AI products continue to proliferate.</p>
<p>If your team is building an AI product and struggling with the docs, I'd love to talk. The problems described here are solvable — they just require the right approach.</p>
<hr>
<p><em>Haletha Judkins is a technical writer specializing in API documentation for developer audiences. <a href="https://www.haletha.com/#contact" target="_blank" rel="noopener noreferrer" class="">Get in touch</a>.</em></p>]]></content:encoded>
            <category>Posts</category>
            <category>API Documentation</category>
            <category>Artificial Intelligence</category>
            <category>Technical Writing</category>
        </item>
        <item>
            <title><![CDATA[Welcome to the Words & Tech Blog]]></title>
            <link>https://www.haletha.com/blog/welcome-to-blog</link>
            <guid>https://www.haletha.com/blog/welcome-to-blog</guid>
            <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Haletha Judkins introduces the Words & Tech Blog — a space for technical writers, developer advocates, and anyone working at the intersection of language and technology.
]]></description>
            <content:encoded><![CDATA[<p>Hello, and welcome. My name is Haletha — a technical writer who has been translating complex technology into clear, useful content since the mid-1990s.</p>
<p>After years of maintaining my Words &amp; Tech blog at Wordpress, I'm moving it here to haletha.com, where it belongs. Everything in one place, under one roof.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-this-blog-is-about">What this blog is about<a href="https://www.haletha.com/blog/welcome-to-blog#what-this-blog-is-about" class="hash-link" aria-label="Direct link to What this blog is about" title="Direct link to What this blog is about" translate="no">​</a></h2>
<p>I write about technical writing craft, API documentation, working with engineers, and the practical realities of doing this work at a high level. Lately that means a lot of writing about AI — not in a hype-driven way, but in a "here's what actually works and what doesn't" way.</p>
<p>My background spans end-user documentation, developer documentation, API reference docs, content strategy, and more recently, automation and AI-assisted workflows. I've worked across industries, managed complex documentation projects simultaneously, and spent a career learning to speak to both developer and non-technical audiences without losing either one.</p>
<p>If you work at the intersection of language and technology — as a technical writer, developer advocate, content strategist, or engineer who ends up writing your own docs — there will be something here for you.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="already-published">Already published<a href="https://www.haletha.com/blog/welcome-to-blog#already-published" class="hash-link" aria-label="Direct link to Already published" title="Direct link to Already published" translate="no">​</a></h2>
<p>If you're new here, start with these:</p>
<ul>
<li class=""><a class="" href="https://www.haletha.com/blog/why-ai-apis-are-hardest-to-document/">Why AI APIs Are the Hardest Things to Document</a></li>
<li class=""><a class="" href="https://www.haletha.com/blog/what-is-docs-as-code/">What Is Docs-as-Code — And Does Your Team Actually Need It?</a></li>
<li class=""><a class="" href="https://www.haletha.com/blog/survival-guide-working-with-engineers/">The Technical Writer's Survival Guide to Working with Engineers</a></li>
</ul>
<p>More on the way. Thanks for being here.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="about-the-author">About the Author<a href="https://www.haletha.com/blog/welcome-to-blog#about-the-author" class="hash-link" aria-label="Direct link to About the Author" title="Direct link to About the Author" translate="no">​</a></h2>
<p>Haletha Judkins is a Senior Technical Writer and Reader's Advocate who specializes in API documentation, user documentation, compliance reporting, and documentation automation.</p>]]></content:encoded>
            <category>Posts</category>
            <category>General</category>
        </item>
    </channel>
</rss>