<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Tech Docs: 📐 Planning Docs]]></title><description><![CDATA[Before you write anything: strategy, architecture, tool selection]]></description><link>https://blog.techdocs.studio/s/planning-docs</link><image><url>https://substackcdn.com/image/fetch/$s_!2k14!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ff99f17-2d47-4548-9b5d-0caae3d7adeb_1200x1200.png</url><title>Tech Docs: 📐 Planning Docs</title><link>https://blog.techdocs.studio/s/planning-docs</link></image><generator>Substack</generator><lastBuildDate>Sat, 09 May 2026 04:36:07 GMT</lastBuildDate><atom:link href="https://blog.techdocs.studio/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[David Garcia]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[david@techdocs.studio]]></webMaster><itunes:owner><itunes:email><![CDATA[david@techdocs.studio]]></itunes:email><itunes:name><![CDATA[David Garcia]]></itunes:name></itunes:owner><itunes:author><![CDATA[David Garcia]]></itunes:author><googleplay:owner><![CDATA[david@techdocs.studio]]></googleplay:owner><googleplay:email><![CDATA[david@techdocs.studio]]></googleplay:email><googleplay:author><![CDATA[David Garcia]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA["But it was working fine!"]]></title><description><![CDATA[Why your docs site breaks after four years of 'working fine]]></description><link>https://blog.techdocs.studio/p/but-it-was-working-fine</link><guid isPermaLink="false">https://blog.techdocs.studio/p/but-it-was-working-fine</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Tue, 10 Feb 2026 14:30:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/efefd5b9-758e-4d72-9eda-55d495f53054_6000x4000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>&#8220;But it was working fine!&#8221;</em></p><p>It was. Four years ago.</p><p>Recently a client called about their docs site. Sphinx 4 versions behind, dependencies with security vulnerabilities, relying on deprecated extensions, theme broken on new browsers, search noticeably slower.</p><p>The launch got budget. Content creation got budget. Someone even set up CI to build and deploy automatically. The team celebrated. Then moved on.</p><p>Framework upgrades, dependency updates, security patches? Nobody even brought them up. There was no line item for &#8220;keep the docs site alive.&#8221; Because it was alive. It was working fine.</p><h2>Your docs site didn&#8217;t break</h2><p>You just stopped keeping up with everything around it.</p><p>Every dependency you don&#8217;t update becomes a risk. Every framework version you skip makes the next upgrade harder. None of it is urgent on any given day. All of it is urgent four years later.</p><p>The decay is invisible. The site loads. The search works. The pages render. Until one day they don&#8217;t. Or they do, just slower, just slightly broken, just enough for users to notice before you do.</p><h2>The cost equation</h2><p>Keeping a docs site maintained is routine work. Not always simple, but manageable if you stay current. It just never wins against everything else on your roadmap. A few hours a quarter to update dependencies. A CI check for broken links. An annual framework upgrade before you fall too far behind. Call it 20 to 30 hours a year. Maybe $3 to 5K if you&#8217;re paying someone.<br><br>That client's docs were broken for at least three months before anyone flagged it. The fix took another six weeks. Four and a half months of slow search and a theme that looked off on half the browsers visiting it. All that time, the docs were quietly telling users you don't maintain your tools.</p><h2>Your docs site is a production system</h2><p>We all understand this for apps. Nobody ships a production app and walks away for four years. There are monitoring tools, dependency bots, upgrade cycles.</p><p>Docs sites get none of that. They get launched and forgotten. Then someone calls you four years later wondering why everything is broken.</p><p>It has users, dependencies, and security surface area. It deserves the same care.</p><p>That client&#8217;s site is fixed now. They&#8217;re on a maintenance plan. The kind of work that never makes headlines but means nobody has to make that call again.</p>]]></content:encoded></item><item><title><![CDATA[New product, no docs yet? Start with documentation strategy]]></title><description><![CDATA[Why writing first creates chaos and how to plan your docs for success]]></description><link>https://blog.techdocs.studio/p/how-to-plan-documentation-strategy</link><guid isPermaLink="false">https://blog.techdocs.studio/p/how-to-plan-documentation-strategy</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Tue, 06 Jan 2026 18:47:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d10e1205-32b2-498e-9d15-e26b51d2c916_4761x3174.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>New product. No documentation. Zero.<br><br>The instinct is to start writing immediately. Get something out there. Build momentum. Show progress.<br><br>A smarter approach is spending a few weeks on strategy first: Who is your audience? What do they need? Which content types matter? What&#8217;s truly a priority versus nice-to-have?<br><br>It feels slow, but once you have that clarity, writing moves fast.</p><p>Most documentation disasters come from organic growth. One team adds a page here, another over there. Nobody&#8217;s thinking about the whole. Structure only becomes a concern after hundreds of pages exist, when nothing is easy to find or truly useful.</p><p>The pattern is always the same: content first, then more content, then nobody can find anything. Then someone finally asks &#8220;should we reorganize this?&#8221; when reorganization means touching 300 pages and breaking every bookmark and search result.</p><p><strong>Strategy &#8594; Structure &#8594; Content.</strong></p><p><strong>Not Content &#8594; More Content &#8594; Chaos.</strong></p><h2><strong>What documentation strategy actually means</strong></h2><p>Strategy doesn&#8217;t mean a 40-page plan. It means answering a few critical questions before anyone writes a word:</p><p><strong>Who are you writing for?</strong> </p><p>Not &#8220;developers.&#8221; That&#8217;s too vague. Define specific personas in specific situations. A developer integrating your API under deadline pressure needs different content than an enterprise architect evaluating your security model. Pick a primary audience. Acknowledge the others exist, but know who you&#8217;re optimizing for.<br><br><strong>What job is each piece of documentation doing?</strong></p><p>Documentation serves different purposes:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-8Kx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-8Kx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!-8Kx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!-8Kx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!-8Kx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-8Kx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Di&#225;taxis&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Di&#225;taxis" title="Di&#225;taxis" srcset="https://substackcdn.com/image/fetch/$s_!-8Kx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!-8Kx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!-8Kx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!-8Kx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44a53ec6-4689-4bb2-bea4-f65a6da5b116_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Documentation types based on the <a href="https://diataxis.fr/">Di&#225;taxis framework</a> by Daniele Procida.</em></figcaption></figure></div><ul><li><p>Teaching a concept through example (tutorial)</p></li><li><p>Solving a specific problem (how-to guide)</p></li><li><p>Looking up syntax (reference)</p></li><li><p>Understanding why something works this way (explanation)</p></li></ul><p>These aren&#8217;t interchangeable. A reference doc won&#8217;t teach a beginner. A tutorial won&#8217;t help someone troubleshooting at 2am. Your strategy needs to decide which jobs matter most for your product and your users, then commit to doing those jobs well.</p><p><strong>What&#8217;s the minimum content that unlocks the product?</strong></p><p>You don&#8217;t need comprehensive API docs on day one. You don&#8217;t need advanced guides for features nobody&#8217;s using yet. You need whatever removes the biggest obstacle between a new user and their first success.</p><p>Everything else can wait. The question isn&#8217;t &#8220;what should we document eventually?&#8221; It&#8217;s &#8220;what&#8217;s blocking someone right now?&#8221;</p><p><strong>What should each page cover?</strong></p><p>Once you know which content types you need, define what makes each one complete. Tutorials should list prerequisites up front and guide users to a working example. API references need request examples, response formats, and error codes. How-to guides should state the outcome at the start and show the steps clearly. Explanations need context on why things work the way they do.</p><p>This is where templates help. They ensure consistency and completeness across your documentation. But templates only work after you&#8217;ve defined your strategy. Without clarity on what each page type requires, templates just give you consistently incomplete content that raises more questions than it answers.</p><h2><strong>The early content trap</strong></h2><p>In practice, you can ship some early content while doing this thinking. In fact, you should. But those quick wins should not define the strategy.</p><p>You've seen this before: you ship a tutorial because five users asked for it. Then a troubleshooting doc because support is overwhelmed. Then someone adds an FAQ. Then best practices. Each one makes sense in isolation. None of them were planned together. Six months later, you have 50 pages organized by the order they were written, not the order anyone needs them.</p><p>A strategic early win looks different. You know it&#8217;s one piece of a larger system. You know where it lives. You know what comes before and after it. Even if you haven&#8217;t written those other pieces yet, you&#8217;ve left room for them.</p><p>This is the difference between &#8220;we need a tutorial, someone write it&#8221; and &#8220;we need a tutorial that assumes zero prior knowledge, gets someone to a working integration in under 10 minutes, and hands them off to either the API reference or advanced tutorials depending on what they want to do next.&#8221;</p><p>Same deliverable. Completely different foundation.</p><h2><strong>What changes when you do this right</strong></h2><p><strong>Writing gets faster.</strong> You&#8217;re not reinventing structure with every new page or second-guessing where something belongs.</p><p><strong>Maintenance gets easier</strong>. When something changes in your product, you know exactly which docs need updates because you understand how the pieces relate.</p><p><strong>Users find what they need.</strong> Not because your search is amazing, but because the structure matches how they think about problems.</p><p><strong>Teams can contribute confidently.</strong> A new PM can add content because the system makes it obvious where things go.</p><p>None of this happens if you start with content and hope structure emerges. Structure rarely emerges on its own. Chaos does.</p><h2><strong>How to start</strong></h2><p>You don&#8217;t need perfect answers to those strategy questions. You need good enough answers and permission to revisit them.</p><p>Spend a week, maybe two. Talk to five users about what they&#8217;re trying to do. Look at your support tickets and see what&#8217;s actually confusing people. Sketch out the 10-15 core topics your documentation needs to cover and how they connect.</p><p><strong>What works for me: start by mapping navigation flows for each persona.</strong> Where does a junior developer enter your documentation? What&#8217;s their path to first success? What do they need next? Where does a senior architect start, and what questions do they need answered to evaluate your product? Sketch these journeys. Where each audience type enters, what they read, where they go when they&#8217;re stuck.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x2FO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x2FO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 424w, https://substackcdn.com/image/fetch/$s_!x2FO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 848w, https://substackcdn.com/image/fetch/$s_!x2FO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 1272w, https://substackcdn.com/image/fetch/$s_!x2FO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x2FO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png" width="1456" height="553" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:553,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114617,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.techdocs.studio/i/183669072?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x2FO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 424w, https://substackcdn.com/image/fetch/$s_!x2FO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 848w, https://substackcdn.com/image/fetch/$s_!x2FO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 1272w, https://substackcdn.com/image/fetch/$s_!x2FO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F416f5aac-a1e1-4537-a589-308b2c145d7d_1848x702.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Example navigation flows for two different personas. Use it to identify key content and paths.</p></blockquote><p>These flows reveal what content you actually need, not just what seems logical to document. Also, they will help you define your structure. </p><p>Structure isn&#8217;t about folders. It&#8217;s about reflecting how users think about your product. If your users think in terms of workflows, organize by workflow. If they think in terms of features, organize by feature. Don&#8217;t organize by how your engineering team structured the codebase. Nobody outside your company thinks that way.</p><p><strong>Then create a grid in a spreadsheet.</strong> One row per page or section you think you&#8217;ll need based on the previous exercise.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oABr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oABr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 424w, https://substackcdn.com/image/fetch/$s_!oABr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 848w, https://substackcdn.com/image/fetch/$s_!oABr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 1272w, https://substackcdn.com/image/fetch/$s_!oABr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oABr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png" width="1456" height="460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:136987,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.techdocs.studio/i/183669072?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oABr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 424w, https://substackcdn.com/image/fetch/$s_!oABr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 848w, https://substackcdn.com/image/fetch/$s_!oABr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 1272w, https://substackcdn.com/image/fetch/$s_!oABr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7da4b05-4a37-40d8-82d8-34c1d0035b61_1632x516.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Example content planning grid showing modules, personas, content types, priorities, and descriptions. </figcaption></figure></div><p>Columns for:</p><ul><li><p><strong>Module / page title</strong></p></li><li><p><strong>Persona:</strong> who is this for?</p></li><li><p><strong>Content type:</strong> tutorial, reference, how-to, explanation</p></li><li><p><strong>Priority:</strong> must-have for launch, nice-to-have, future</p></li><li><p><strong>Description:</strong> Brief description of what the page covers, required subheadings.</p></li></ul><p>The grid forces you to think about the whole system at once instead of page by page. You&#8217;ll see gaps (&#8221;wait, we have five reference docs but no how-tos?&#8221;) and redundancies (&#8221;these three pages are basically the same thing&#8221;).</p><p><strong>What I&#8217;ve found useful: identify your action-oriented content first (tutorials and how-to guides), then build supporting reference and explanation docs around them.</strong> These supporting docs can be referenced from multiple guides, so you&#8217;re not repeating the same API details or concepts in every tutorial. This keeps guides focused on the task while providing depth for users who need it.</p><p><strong>Together, the flows and the grid become your roadmap.</strong> When someone asks &#8220;should we document X?&#8221; you can see where it fits, or doesn&#8217;t. When priorities shift, you adjust the plan, not 47 individual pages.</p><p>Then start writing. But you&#8217;re writing into a framework now, not into a void.</p><p>Strategy doesn&#8217;t slow you down. It&#8217;s what makes fast sustainable.</p><h2><strong>Planning your documentation strategy?</strong></h2><p>If you&#8217;re staring at documentation chaos or launching something new and want to avoid building problems into your foundation, <a href="https://techdocs.studio/services/content-architecture-planning">we can help</a>. </p><p>We work with teams to design content architecture that scales: mapping personas, defining structure, and creating the roadmap before anyone writes a word.</p>]]></content:encoded></item><item><title><![CDATA[Take back control of your documentation]]></title><description><![CDATA[Docs-as-code gives you control of your content.]]></description><link>https://blog.techdocs.studio/p/take-back-control-of-your-documentation</link><guid isPermaLink="false">https://blog.techdocs.studio/p/take-back-control-of-your-documentation</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Fri, 21 Nov 2025 13:45:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/519d1b11-213a-472b-8329-c7a49f02cff6_7360x4912.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve seen teams trapped by their documentation platform. Five years of content locked in a proprietary CMS. Export breaks formatting. No clean way out. Then the vendor changes pricing and there&#8217;s nothing you can do.</p><p>Your content stays in their system. Your build process depends on their infrastructure. Your ability to move depends on their export tool, which barely works.</p><p><strong>Docs-as-code</strong> flips this. Content is markdown in Git. You own the build process. You can host anywhere. Switch tools without losing content.</p><p>This isn&#8217;t anti-SaaS (there are docs-as-code friendly platforms out there). It&#8217;s about keeping ownership of your content so it doesn&#8217;t become leverage for someone else.</p><p>Your docs are a business asset. Treat them like one.<br><br>P.S. I&#8217;m back on Substack with a weekly note on technical writing, docs-as-code, and automation. If you&#8217;re not interested, you can <a href="https://substack.com/@techdocs">unsubscribe</a> anytime.</p>]]></content:encoded></item><item><title><![CDATA[Strategies for getting feedback on your documentation]]></title><description><![CDATA[Most documentation feedback arrives too late. After users already struggled.]]></description><link>https://blog.techdocs.studio/p/strategies-for-improving-technical</link><guid isPermaLink="false">https://blog.techdocs.studio/p/strategies-for-improving-technical</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Mon, 21 Aug 2023 01:00:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/65c50f6a-8c2b-4491-b4d5-b5314dd33cad_4608x3456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You publish documentation. Users struggle with it, give up, or contact support. Eventually someone tells you the docs were confusing, but by then dozens of users have already hit the same problem.</p><p>Here are strategies for catching documentation issues earlier. Ordered by impact.</p><h2>Pre-publication review</h2><p>Get feedback before documentation goes live. Get up to three reviewers with different perspectives: a subject matter expert (catches technical errors), a technical writer (checks clarity and style), and someone without context (tests if it actually works).</p><p>You don&#8217;t need all three. Even one reviewer helps. The key: tell them what to focus on. &#8220;Check technical accuracy&#8221; is clearer than &#8220;review this.&#8221;</p><p>Not everything needs the same level of review. A new tutorial deserves a thorough look. A typo fix in a reference page? Quick scan is fine.</p><p>This breaks down when deadlines are tight or reviewers are unavailable. But preventing issues is always cheaper than fixing them after users complain. Schedule review time upfront because teams always forget it in estimates.</p><h2>Strategy 2: Monitor communication channels</h2><p>Watch where users discuss your documentation. Support tickets, forums, GitHub issues, social media, internal Slack. Look for patterns:</p><p>&#8220;The docs don&#8217;t explain X.&#8221; &#8220;I couldn&#8217;t figure out how to Y.&#8221; &#8220;Spent 2 hours on Z before...&#8221;</p><p>When you spot problems, create documentation issues from them. Track them and fix them.</p><p>This should be your baseline. Users talk about your documentation whether you listen or not. The feedback is unfiltered. They&#8217;re not trying to be nice, they&#8217;re venting or asking for help, which makes it valuable.</p><h2>On-page feedback widget</h2><p>Put a feedback mechanism directly on the documentation page. Users click a button, highlight a section, and say what&#8217;s wrong. Anonymous, no account needed, feedback routes to your issue tracker.</p><p>Tools like <a href="https://pushfeedback.com">PushFeedback</a> let users annotate specific sections visually. They see the issue, highlight it, leave a comment. You get a screenshot with context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U9Te!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U9Te!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 424w, https://substackcdn.com/image/fetch/$s_!U9Te!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 848w, https://substackcdn.com/image/fetch/$s_!U9Te!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!U9Te!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U9Te!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png" width="1456" height="669" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:669,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:624040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://techdocs.substack.com/i/136238116?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U9Te!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 424w, https://substackcdn.com/image/fetch/$s_!U9Te!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 848w, https://substackcdn.com/image/fetch/$s_!U9Te!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!U9Te!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8901323b-8584-42ba-b75d-bd98b589edeb_2986x1372.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you have an <a href="http://biel.ai">AI chatbot</a> on your docs, review what users ask it. Questions the chatbot couldn&#8217;t answer point to missing documentation. Questions asked repeatedly point to unclear documentation. If 50 users ask about webhook security in a month, that&#8217;s a signal to write that guide.</p><p>The alternative is linking to GitHub issues. Works for developer-heavy audiences, costs nothing. But most users won&#8217;t leave the page, create an account, and give public feedback.</p><h2>User testing sessions</h2><p>Watch someone use your documentation in real-time. Don&#8217;t explain anything. Don&#8217;t help them. Just watch where they pause, re-read, or give up.</p><p>This works well for complex workflows, multi-step tutorials, and onboarding documentation. Simple reference docs have nothing to &#8220;test.&#8221;</p><p>We helped Finboot run an &#8220;Escape Room&#8221; using their docs. The company split into teams and tried to solve a puzzle by following documentation: sending blockchain transactions in the correct sequence. Everyone experienced the pain points firsthand. Inconsistencies, ambiguous instructions, missing steps. The whole company became motivated to fix it.</p><p>Intensive to set up, but it makes abstract documentation problems concrete.</p><h2>User interviews</h2><p>Schedule time with users who recently used your docs. Ask what worked and where they got stuck.</p><p>Interviews reveal things other methods miss. The specific sentence that confused them. The assumption they made that broke everything. But they don&#8217;t scale. External users at scale are hard to schedule, and anonymous user bases can&#8217;t be reached.</p><p>Best for internal documentation and B2B products where you know your users.</p><h2>Surveys</h2><p>Ask broad questions. &#8220;How helpful is our documentation?&#8221; &#8220;What topics are missing?&#8221;</p><p>Surveys give you trends and general sentiment. They don&#8217;t give you actionable issues. Users don&#8217;t remember which specific guide confused them two weeks ago.</p><p>Good for measuring documentation health over time. Not for finding specific problems.</p><h2>Where to start</h2><p>Most teams start with pre-publication review and monitoring. Those two cover the most ground with the least effort.</p><p>Then add other strategies based on your constraints: budget, team size, user base, and how much traffic your docs get.</p><p>Your documentation improves when you stop waiting for complaints and start actively seeking problems.</p>]]></content:encoded></item><item><title><![CDATA[A practical introduction to Documentation as Code]]></title><description><![CDATA[Workshop: How to automate docs with GitHub, Sphinx, ReadTheDocs, and Vale]]></description><link>https://blog.techdocs.studio/p/a-practical-introduction-to-documentation</link><guid isPermaLink="false">https://blog.techdocs.studio/p/a-practical-introduction-to-documentation</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Wed, 14 Apr 2021 09:03:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b8b9324e-47b4-4d62-80df-be563c465922_6027x4010.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Documentation becomes outdated. Code changes. The docs don&#8217;t.</p><p>The fix isn&#8217;t writing better docs. It&#8217;s treating docs like code: version-controlled, automatically built, and tested in CI.</p><div id="youtube2-RIzidkuXjxY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;RIzidkuXjxY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/RIzidkuXjxY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>What this workshop covers</h2><p>I recorded this workshop for PyCon APAC 2020. It walks through a full docs-as-code setup:</p><ul><li><p><strong>GitHub</strong> to host docs next to source code</p></li><li><p><strong>reStructuredText</strong> to write in plain text instead of Word or Confluence</p></li><li><p><strong>Sphinx</strong> to generate a documentation site from those files</p></li><li><p><strong>ReadTheDocs</strong> to build and publish automatically on every commit</p></li><li><p><strong>Vale</strong> to lint your docs the same way you lint your code (style, consistency, broken links)</p></li></ul><p>By the end, you have a pipeline: write in plain text, commit to Git, site builds and deploys automatically. No manual publishing steps.</p><h2>Why bother</h2><p>Docs live with code. When a developer changes an API, the docs are right there in the same repository. Updating them becomes part of the normal workflow, not a separate task someone forgets about.</p><p>Testing catches issues before users do. Vale flags inconsistent terminology, passive voice, broken links. Same CI pipeline that runs your unit tests.</p><p>And you own everything. Plain text files in Git. No vendor lock-in, no proprietary formats, no export headaches.</p><h2>Go deeper</h2><p>The <a href="https://www.writethedocs.org/">Write the Docs</a> community is the best place to learn from practitioners who actually do this. Worth joining if you&#8217;re serious about docs-as-code.</p>]]></content:encoded></item><item><title><![CDATA[Don't translate your documentation (yet)]]></title><description><![CDATA[Translation is expensive. Make sure you need it first.]]></description><link>https://blog.techdocs.studio/p/dont-translate-your-documentation</link><guid isPermaLink="false">https://blog.techdocs.studio/p/dont-translate-your-documentation</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Sun, 09 Aug 2020 09:03:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a049a076-192e-4971-84c1-78d668052e52_5184x3456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><em>&#8220;Can we support localized docs?&#8221;</em></p></blockquote><p>Technically? Yes. Should you? Maybe not.</p><p>Teams underestimate what it takes to maintain translations. Documentation changes constantly. Translations need to keep up. Most teams can&#8217;t.</p><h2>Mistake 1: Translating without a goal</h2><p>Google Analytics shows traffic from Japan. Someone suggests translating to Japanse. Six months later, the Italian docs are outdated and nobody maintains them.</p><p>Traffic from a country doesn&#8217;t mean you need docs in that language. English might be fine for technical audiences.</p><p><strong>Better reason to translate:</strong> You&#8217;re entering a specific market next quarter. You have native speakers on the team who will maintain it. You&#8217;ve validated that language blocks users from adopting your product.</p><p>Don&#8217;t translate &#8220;just in case.&#8221; Translate when you have a specific goal and resources to maintain it.</p><h2>Mistake 2: Translating everything at once</h2><p>You decide to support Italian. You translate all 200 pages.</p><p>Three months later, the English docs evolved. The Italian docs are behind. Users hit outdated instructions. Support tickets arrive in Italian. Nobody on support speaks Italian.</p><p>Translation isn&#8217;t a one-time project. It&#8217;s ongoing maintenance.</p><p><strong>Start smaller:</strong> Translate the 20% that delivers 80% of the value. Installation guides. Quickstart. Core concepts. Leave advanced features and edge cases untranslated.</p><p>Users can handle some pages in English if the critical path is in their language.</p><h2>Mistake 3: No version control strategy</h2><p>You spin up separate documentation projects per language. English docs move fast. German docs lag behind. Users hit German tutorials that reference features from version 1.0. The current version is 3.0.</p><p>Outdated documentation is worse than no documentation.</p><p>You need a policy for managing translation lag. Three options:</p><ul><li><p><strong>Content availability</strong>: Keep translated sections that haven&#8217;t changed. Show new content in English until it&#8217;s translated. Gradually update the untranslated parts. Users see mostly German with some English sections clearly marked as &#8220;not yet translated.&#8221; Works for most technical documentation. Users can handle mixed languages if the critical path is translated.</p></li><li><p><strong>Language consistency: </strong>Each language has its own version. German might be on v2.0 while English is on v3.0. Tag outdated docs with warnings. Link to the latest English version. Works when you want each language to feel complete, even if behind.</p></li><li><p><strong>Perfect sync: </strong>Wait to release docs until all translations are ready. Medical devices, government contracts, financial services often legally require this. Documentation and product ship together, all languages synchronized. This works when you have no choice. Otherwise, documentation becomes a bottleneck.</p></li></ul><h2>Mistake 4: Ignoring SEO</h2><p>You launch Portuguese docs. Google sees duplicate content (same structure, different language). Your search rankings drop.</p><p>Or worse: you don&#8217;t configure SEO properly. Users in Spain search for your product in Spanish. Google shows them your English docs. They never find the Spanish version.</p><p><strong>Fix it:</strong></p><ul><li><p>Use separate URLs per language (`docs.yoursite.com/es/`)</p></li><li><p>add <em>hreflang</em> tags (tells Google which language each page is in)</p></li><li><p>Generate complete sitemaps including all languages</p></li><li><p>For untranslated pages, add <em>&lt;meta name=&#8221;robots&#8221; content=&#8221;noindex&#8221;&gt;</em> so they don&#8217;t compete with English versions.</p></li></ul><p>Make translated docs discoverable. Otherwise, why translate at all?</p><h2>Mistake 5: No consistency between translators</h2><p>Two people translate your docs to Spanish. One translates &#8220;Software Development Kit&#8221; as &#8220;Kit de desarrollo.&#8221; The other uses &#8220;Herramientas de desarrollo.&#8221;</p><p>Both are valid. But inconsistency confuses users. They think these are two different things.</p><p><strong>Create a glossary:</strong></p><p>Map domain-specific terms to preferred translations:</p><ul><li><p>Software Development Kit &#8594; Kit de desarrollo</p></li><li><p>API &#8594; API (don&#8217;t translate)</p></li><li><p>Webhook &#8594; Webhook (don&#8217;t translate)</p></li><li><p>Configuration &#8594; Configuraci&#243;n</p></li></ul><p>Share it with translators. Make it part of the review process.</p><p>Technical terms often stay in English. That&#8217;s fine. Consistency matters more than translating everything.</p><h2>When translation makes sense</h2><p>You should translate when:</p><ul><li><p>Regulation requires it (medical devices, government contracts, financial services in certain countries)</p></li><li><p>You&#8217;re entering a specific non-English market and English blocks a significant portion of users.</p></li><li><p>You have budget for ongoing translation (not just initial translation)</p></li><li><p>You have native speakers maintaining translations</p></li></ul><p>You probably shouldn&#8217;t translate when:</p><ul><li><p>Your users are developers (most read English technical docs)</p></li><li><p>You&#8217;re an early-stage product (docs change too fast)</p></li><li><p>You can&#8217;t commit to maintaining translations</p></li><li><p>You&#8217;re translating to &#8220;be international&#8221; without specific goals</p></li></ul><h2>Start with one language</h2><p>Don&#8217;t launch with five languages. Pick one. The market you&#8217;re targeting. The language your team speaks natively.</p><p>Translate 20% of the docs. The critical path. See if it works. Measure if it helps.</p><p>If it does, expand. If not, you didn&#8217;t waste effort translating everything.</p><h2>Technical setup</h2><p>Use internationalization (i18n) tooling built for documentation.</p><p><strong>The approach:</strong></p><ul><li><p>Choose a primary language (usually English)</p></li><li><p>Extract translatable strings into Portable Object Template (POT) files</p></li><li><p>Translators work with PO files (only the strings, not the full docs)</p></li><li><p>When original content changes, only changed strings need retranslation</p></li></ul><p>Automate extraction. Every time docs update, regenerate the POT files. Translators see exactly what changed.</p><p>Tools like <strong>Transifex</strong> or <strong>Lokalise</strong> show what needs translation in a friendly UI. Team members can translate collaboratively. Built-in review process catches inconsistencies.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rRIP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rRIP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rRIP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rRIP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rRIP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rRIP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg" width="926" height="522" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:522,&quot;width&quot;:926,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Example Editor Transifex&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Example Editor Transifex" title="Example Editor Transifex" srcset="https://substackcdn.com/image/fetch/$s_!rRIP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rRIP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rRIP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rRIP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a2d0f1-0aab-4a5a-9d5e-99db5a2c3721_926x522.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is better than asking translators to edit markdown files directly.</p><h2>The real cost</h2><p>Translation isn&#8217;t just the initial cost. It&#8217;s ongoing maintenance.</p><p>Every docs update needs translation. Every new feature. Every bug fix that affects documentation. Every restructure.</p><p>If you ship docs in three languages, every change multiplies by three. If you can&#8217;t handle that, don&#8217;t translate yet.</p><p>Focus on quality in one language first. Then expand when you have the resources to maintain it.</p>]]></content:encoded></item></channel></rss>