<?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>Tue, 23 Jun 2026 23:38:22 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[Codelabs are the internal docs your engineers are missing]]></title><description><![CDATA[Every team documents its own product. Nobody documents how they connect.]]></description><link>https://blog.techdocs.studio/p/codelabs-are-the-internal-docs-your</link><guid isPermaLink="false">https://blog.techdocs.studio/p/codelabs-are-the-internal-docs-your</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Fri, 19 Jun 2026 11:32:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5042de41-5915-462c-b72b-28b6a168fc16_5184x3456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most internal documentation is organized by team. Each team owns the docs for its own service, which makes sense for ownership.</p><p>It breaks down the moment someone has to ship something. To deploy a new service, an engineer has to call the auth service, get a token, call the payments service, handle the webhook, and wire it into the deployment pipeline.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eiHV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eiHV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 424w, https://substackcdn.com/image/fetch/$s_!eiHV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 848w, https://substackcdn.com/image/fetch/$s_!eiHV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 1272w, https://substackcdn.com/image/fetch/$s_!eiHV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eiHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png" width="1390" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:1390,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96612,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.techdocs.studio/i/198271924?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!eiHV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 424w, https://substackcdn.com/image/fetch/$s_!eiHV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 848w, https://substackcdn.com/image/fetch/$s_!eiHV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 1272w, https://substackcdn.com/image/fetch/$s_!eiHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc2c8cc-2149-4266-a33e-93d1d45c3ca7_1390x770.png 1456w" sizes="100vw" fetchpriority="high"></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>No single team&#8217;s docs cover the full sequence. The pieces are documented, but the connection between them isn&#8217;t.</p><h2>What gets lost between docs</h2><p>The integration patterns that connect one team&#8217;s product to another&#8217;s live in the heads of senior engineers. They learned them from pairing, from code review, from mistakes shipped to production. The knowledge is there, but it&#8217;s never written down because no team owns it.</p><p>Per-team docs don&#8217;t fix this. The auth team can&#8217;t write about how their service gets used inside the payments flow without overstepping, and the payments team can&#8217;t document the auth integration without speaking for another team. So nobody does.</p><p>The unwritten rules and best practices stay unwritten for the same reason. &#8220;Always wrap external calls in the retry helper.&#8221; Nobody owns that either, so it lives in code review comments and gets passed on by correction, not documentation.</p><h2>Codelabs cover the seams</h2><p>A codelab is a step-by-step exercise that walks an engineer through building something real. A starter repository, a scenario, the steps to get from empty to working, and a reference implementation to compare against.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kymz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kymz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png 424w, https://substackcdn.com/image/fetch/$s_!Kymz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png 848w, https://substackcdn.com/image/fetch/$s_!Kymz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png 1272w, https://substackcdn.com/image/fetch/$s_!Kymz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kymz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png" width="1456" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:540456,&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/198271924?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.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_!Kymz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png 424w, https://substackcdn.com/image/fetch/$s_!Kymz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png 848w, https://substackcdn.com/image/fetch/$s_!Kymz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.png 1272w, https://substackcdn.com/image/fetch/$s_!Kymz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52a01855-3a98-4317-86cb-821f958f74a9_3024x1714.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>What makes them work as internal docs is that they&#8217;re scenario-first, not product-first. A codelab pulls in whichever services the scenario requires.</p><p>A codelab on &#8220;build a service that handles webhook events from our payment provider&#8221; uses three or four internal products in one exercise. By the end, the engineer knows not just what each product does, but how they fit together in the way your company actually builds.</p><h2>Where to start</h2><p>If your engineers are slow to ramp up and each team&#8217;s docs look fine, the gap is probably between them. This is where a codelab earns its keep. </p><p>Pick the cross-team scenario new hires hit first, the one that usually means three weeks of asking around, and build a codelab that walks through it end to end. Keep it current as the services change.</p><p>You don&#8217;t need many. A handful covering the workflows people actually run does most of the work. The goal isn&#8217;t a codelab for everything, it&#8217;s getting people through the paths they&#8217;ll actually walk.</p>]]></content:encoded></item><item><title><![CDATA[How we scope large docs migrations]]></title><description><![CDATA[Plan less, learn from one product, then scale.]]></description><link>https://blog.techdocs.studio/p/how-we-scope-large-docs-migrations</link><guid isPermaLink="false">https://blog.techdocs.studio/p/how-we-scope-large-docs-migrations</guid><dc:creator><![CDATA[David Garcia]]></dc:creator><pubDate>Tue, 09 Jun 2026 13:20:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/17b27eef-4da6-4aed-a451-fe645fe08054_900x599.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Migrating 30,000 pages of Confluence to Markdown sounds simple: pick the format, run a converter, deploy.</p><p>It rarely goes that way. Plans built on assumptions break the moment real content meets the new platform.</p><p>That&#8217;s why we don&#8217;t quote large migrations up front. We pilot first.</p><h2>Why a pilot first</h2><p>Planning a full migration up front assumes you can predict what the work will look like. You can&#8217;t. Not at this scale, not with content this varied.</p><p>A pilot surfaces what the plan can&#8217;t see: the issues that only appear once real content meets the real platform. Some look like minor rendering bugs. Others reshape the whole approach.<br><br>So we migrate one slice end to end. That slice might be one product in a multi-product migration, one section of a large doc set, or a single content type. The shape of the project decides the unit.</p><p>That&#8217;s enough to know what the next slice will cost, what the rest will cost, and where the work is most likely to slip.</p><h2>Picking the right pilot</h2><p>The slice you pick decides whether the pilot is worth running. The temptation is to start with the easiest one: smallest content, simplest structure, friendliest team. Those pilots ship smoothly and teach you nothing about the rest. Pick something closer to the average instead.</p><p>Give the pilot a deadline too. Without one, it stops being a pilot and turns into the project itself, and you lose the reason you ran it in the first place.</p><p>And when leadership wants the full scope committed before any work starts, plan with the pilot in mind. Run one slice through the full workflow first, then narrow the estimate as the project takes shape.</p><h2>Evidence over estimates</h2><p>Most migration projects fail in scope-setting, not in execution. The pilot is how we set scope honestly. The estimate we give for the full project is the one we earned by doing part of it.</p><p>Ship one, then scale. You&#8217;ll learn more from one migrated slice than from any plan.</p>]]></content:encoded></item><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 working fine. Four years ago.</p><p>A client called recently about their docs site. Sphinx four versions behind, dependencies with known security vulnerabilities, deprecated extensions holding the build together, a theme broken on current browsers, and search that had grown 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 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, and 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. The problem is that it never wins against everything else on the roadmap.</p><p>The actual cost is modest. 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.<br><br>Compare that to what neglect cost this client. Their docs were broken for at least three months before anyone flagged it, and 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 that this company doesn&#8217;t maintain its 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. A docs site has users, dependencies, and security surface area too. It deserves the same care.</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's site is fixed now, and they'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, to get something out there and show progress. A smarter approach is to spend a few weeks on strategy first. Who is your audience? What do they need? Which content types matter? What&#8217;s a real 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 adds one over there, and nobody is thinking about the whole. Structure only becomes a concern after hundreds of pages exist, by which point nothing is easy to find.</p><p>The pattern is always the same: content, 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>What documentation strategy actually means</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. You should, even. But those quick wins shouldn&#8217;t define the strategy.</p><p>You&#8217;ve seen how this goes. 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, and 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>It&#8217;s 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; Same deliverable, completely different foundation.</p><h2>What changes when you do this right</h2><p>The writing gets faster, because you&#8217;re not reinventing structure with every new page or second-guessing where something belongs. </p><p>Maintenance gets easier, because when the product changes you know exactly which docs need updating and how the pieces relate. </p><p>Users find what they need, not because your search is amazing but because the structure matches how they think about problems. A</p><p>nd new contributors can add content confidently, 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>How to start</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 to see what&#8217;s actually confusing people. Then sketch the 10 to 15 core topics your documentation needs to cover and how they connect.</p><p>The approach I use is to <strong>map navigation flows for each persona first</strong>. Where does a junior developer enter your documentation? What&#8217;s their path to first success, and 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 enters, what they read, and 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, and they give you your structure. </p><p>Structure isn&#8217;t about folders. It&#8217;s about reflecting how users think about your product. If they think in workflows, organize by workflow. If they think in features, organize by feature. Don&#8217;t organize by how your engineering team structured the codebase, because nobody outside your company thinks that way.</p><p>Then<strong> build a grid in a spreadsheet</strong>, one row per page or section you think you&#8217;ll need. Give it columns for the page title, the persona it serves, the content type (tutorial, reference, how-to, explanation), the priority (must-have for launch, nice-to-have, future), and a short description of what the page covers.</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 spot 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>One thing I&#8217;ve found useful: <strong>identify your action-oriented content first, the tutorials and how-to guides, then build reference and explanation docs around them</strong>. Those supporting docs can be referenced from multiple guides, so you&#8217;re not repeating the same API details in every tutorial. The guides stay focused on the task while the depth lives somewhere reusable.</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 instead of 47 individual pages.</p><p>Then you start writing. But now you&#8217;re writing into a framework, not into a void.</p><p>Strategy doesn&#8217;t slow you down. It&#8217;s what makes fast sustainable.</p><h2>Planning your documentation strategy?</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[Your docs are a business asset. Own them like one.]]></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>Docs-as-code flips this. Your content is markdown in Git, you own the build process, and you can host it anywhere. Switching tools no longer means losing content.</p><p>This isn&#8217;t anti-SaaS. There are plenty of 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. 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 roughly by impact.</p><h2>Pre-publication review</h2><p>Get feedback before documentation goes live. Aim for up to three reviewers with different perspectives: a subject matter expert to catch technical errors, a technical writer to check clarity and style, and someone without context to test whether it actually works.</p><p>You don&#8217;t need all three. Even one helps, as long as you tell them what to focus on. &#8220;Check technical accuracy&#8221; gets you further than &#8220;review this.&#8221;</p><p>Also, not everything needs the same level of review. A new tutorial deserves a thorough look. A typo fix in a reference page just needs a quick scan.</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 the review time upfront, because teams always forget it in their estimates.</p><h2>Monitor communication channels</h2><p>Watch where users discuss your documentation: support tickets, forums, GitHub issues, social media, internal Slack. Look for patterns like:</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 one, turn it into a documentation issue, track it, and fix it.</p><p>This should be your baseline. Users talk about your documentation whether you listen or not, and the feedback is unfiltered. They&#8217;re not trying to be nice, they&#8217;re venting or asking for help, which is exactly what 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. No account needed, and the feedback routes straight 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, and leave a comment, and 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>The lighter-weight alternative is linking to GitHub issues. It works for developer-heavy audiences and 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. Simple reference docs have nothing to &#8220;test.&#8221;</p><p>We once helped Finboot run an &#8220;escape room&#8221; using their docs. The company split into teams and tried to solve a puzzle by following the documentation, sending blockchain transactions in the correct sequence. Everyone hit the pain points firsthand: inconsistencies, ambiguous instructions, missing steps. The whole company came out motivated to fix it.</p><p>It&#8217;s 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 and ask what worked and where they got stuck. Interviews reveal things other methods miss: the specific sentence that confused them, the assumption they made that broke everything.</p><p>The catch is they don&#8217;t scale. External users are hard to schedule at volume, and anonymous user bases can&#8217;t be reached at all. Best for internal documentation and B2B products where you know who your users are.</p><h2>Surveys</h2><p>Ask broad questions. &#8220;How helpful is our documentation?&#8221; &#8220;What topics are missing?&#8221; Surveys give you trends and general sentiment, but not 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 channel monitoring. Those two cover the most ground for the least effort. Add the others 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 looking for 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, and the translations have 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 Japanese, and 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 is often fine for technical audiences.</p><p><strong>Better reason to translate:</strong> ou're entering a specific market next quarter, you have native speakers on the team who will maintain it, or you've validated that the language barrier is actually blocking users from adopting your product. </p><p>Don't translate "just in case." Translate when you have a specific goal and the resources to maintain it.</p><h2>Mistake 2: Translating everything at once</h2><p>You decide to support Italian, so you translate all 200 pages. Three months later the English docs have moved on, the Italian docs are behind, and users hit outdated instructions. Support tickets start arriving in Italian, and nobody on the support team speaks it.</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, the quickstart, core concepts. Leave advanced features and edge cases in English. Users can handle some pages in English as long as 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 moves fast, German lags behind, and users hit German tutorials that reference features from version 1.0 when the current version is 3.0.  Outdated documentation is worse than no documentation.</p><p>You need a policy for managing translation lag. There are three common approaches.</p><ul><li><p><strong>Content availability</strong>: Keep the translated sections that haven&#8217;t changed, show new content in English until it&#8217;s translated, and gradually update the rest. Users see mostly German with some English sections clearly marked &#8220;not yet translated.&#8221; This works for most technical documentation.</p></li><li><p><strong>Language consistency: </strong>Each language has its own complete version. German might be on v2.0 while English is on v3.0. You tag the outdated docs with a warning and link to the latest English version. This works when you want each language to feel complete, even if it&#8217;s behind.</p></li><li><p><strong>Perfect sync: </strong>You wait to release docs until all translations are ready. Medical devices, government contracts, and financial services often require this legally. Documentation and product ship together, all languages synchronized. It works when you have no choice, but otherwise documentation becomes a bottleneck.</p></li></ul><h2>Mistake 4: Ignoring SEO</h2><p>You launch Portuguese docs and Google sees duplicate content (same structure, different language), so your search rankings drop.</p><p>Or worse, you don&#8217;t configure SEO at all: users in Spain search for your product in Spanish, Google shows them your English docs, and they never find the Spanish version.</p><p><strong>Fix it:</strong></p><ul><li><p>Use separate URLs per language (<code>docs.yoursite.com/es/</code>)</p></li><li><p>Add <code>hreflang</code> 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 <code>&lt;meta name=&#8221;robots&#8221; content=&#8221;noindex&#8221;&gt;</code> 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 into Spanish. One renders &#8220;Software Development Kit&#8221; as &#8220;Kit de desarrollo,&#8221; the other uses &#8220;Herramientas de desarrollo.&#8221; Both are valid, but the inconsistency confuses users into thinking these are two different things.</p><p>Create a glossary that maps 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 your translators and make it part of the review process. Technical terms often stay in English, and 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, or the language your team speaks natively. Translate 20% of the docs, the critical path, and see whether it helps. If it does, expand. If not, you haven&#8217;t wasted effort translating everything.</p><h2>Technical setup</h2><p>Use internationalization (i18n) tooling built for documentation. The basic approach:</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 the extraction so that every time the docs update, the POT files regenerate and translators see exactly what changed.</p><p>Tools like <strong>Transifex</strong> or <strong>Lokalise</strong> show what needs translation in a friendly UI, let team members translate collaboratively, and build in a review process that 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>It beats 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. Every docs update needs translation. Every new feature, every bug fix that touches the docs, every restructure.</p><p>If you ship docs in three languages, every change multiplies by three. If you can't handle that, don't translate yet. Focus on quality in one language first, then expand when you have the resources to maintain it.</p>]]></content:encoded></item></channel></rss>