<?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[Technically]]></title><description><![CDATA[Making practical sense of software and AI.]]></description><link>https://read.technically.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!fW1i!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F336552cc-dbde-4429-98ac-b36fc31a537a_308x308.png</url><title>Technically</title><link>https://read.technically.dev</link></image><generator>Substack</generator><lastBuildDate>Sat, 22 Aug 2026 10:22:04 GMT</lastBuildDate><atom:link href="https://read.technically.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Justin]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[technically@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[technically@substack.com]]></itunes:email><itunes:name><![CDATA[Justin]]></itunes:name></itunes:owner><itunes:author><![CDATA[Justin]]></itunes:author><googleplay:owner><![CDATA[technically@substack.com]]></googleplay:owner><googleplay:email><![CDATA[technically@substack.com]]></googleplay:email><googleplay:author><![CDATA[Justin]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[What's going on with open-weight models?]]></title><description><![CDATA[How open-weight models went from a curiosity to genuinely great in 2 short years.]]></description><link>https://read.technically.dev/p/whats-going-on-with-open-weight-models</link><guid isPermaLink="false">https://read.technically.dev/p/whats-going-on-with-open-weight-models</guid><dc:creator><![CDATA[Will Raphaelson]]></dc:creator><pubDate>Tue, 18 Aug 2026 13:15:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!A_3h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>No matter the trough from which you greedily snarf your newsslop, be it X, Insta, or god forbid LinkedIn, you&#8217;ve probably seen some dramatic headlines around unfamiliar AI models with weird, foreign sounding names:</span></p><blockquote><p><span>Kimi3 just </span><em><span>murdered</span></em><span> Claude Sonnet</span></p><p><span>Qwen 3.8 just made OpenAI&#8217;s GPT 5 look like a </span><em><span>child&#8217;s plaything</span></em></p><p><span>Deepseek v4 just </span><em><span>obliterated</span></em><span> Google&#8217;s Gemini 3.6 on ChudBench XXL, outperforming the smartest person you know on the hardest thing ever</span></p><p><span>AI Lab CEOs </span><em><span>HATE</span></em><span> this one set of weights. You won&#8217;t believe where they came from</span></p></blockquote><p><span>These models are the new kids on the block, and they&#8217;re </span><strong><span>open weights. </span></strong><span>This means that, and we&#8217;ll get into this in more detail in a bit, the researchers that built them </span><em><span>openly publish</span></em><span> their secret mathematical sauce on the web for anyone with a big enough computer to use. Contrast this with models like Claude(s) and ChatGPT, where their weights are carefully guarded behind lock and key.</span></p><p><span>But despite all the progress and hype for open weights models, almost all of us are still using Claude and ChatGPT. This is no accident. The frontier labs have spent an unprecedented amount of capital to do a few key things:</span></p><ol><li><p><span>Create amazing AI </span><em><span>models</span></em><span> that write code, build financial models, and draft legal memos better and faster than you.</span></p></li><li><p><span>Create great, user friendly </span><em><span>applications</span></em><span> like Claude Code and ChatGPT desktop, and pair them with highly optimized user acquisition funnels such that you slide down it into their ecosystem as if covered in venture-backed baby oil.</span></p></li></ol><p><span>And, and this is the one I take issue with,</span></p><ol start="3"><li><p><span>position themselves as the only viable options for serious work. The Coke and Pepsi; the Marlboro and Camel; the McDonalds and Burger King of AI. Would you bring RC cola to your niece&#8217;s quinceanera? Would you light her up a Parliament? Absolutely not. Me neither, my niece is going to be a Marlboro girl.</span></p></li></ol><p><span>The truly superior model and harness quality of the big labs was a reality for a brief moment around 2024, which made their claims about being the </span><em><span>only</span></em><span> serious options generally true unless you were a turbonerd (we are turbonerds, which is why you pay us).</span></p><p><span>But over the past 2 years, the rate of advances in </span><a href="https://technically.dev/universe/open-source"><span>open source</span></a><span> models and harnesses have outpaced the frontier labs, and that old RC cola setup is starting to taste pretty damn good.</span></p><p><span>In this series, we&#8217;ll cover what the open source AI community has been up to, why you might want to leverage their work, and how to get started if you&#8217;re serious about churning off the big two.</span></p><h2><span>The components of an AI stack</span></h2><p><span>When you ask ChatGPT what to make for dinner or why your life didn&#8217;t go how you wanted it to go, you&#8217;re not just using a model. You are using two things:</span></p><ol><li><p><span>A </span><strong><span>model</span></strong></p></li><li><p><span>A </span><strong><span>harness</span></strong></p></li></ol><p><span>These terms are worth defining in detail. Recently, my colleague at Technically, </span><a href="https://read.technically.dev/p/whats-harness-engineering"><span>Paul Iusztin, wrote a great article on Harness engineering</span></a><span> that lays out the components of an AI stack beautifully, so I&#8217;m going to steal heavily from him here.</span></p><p><span>A </span><strong><span>model</span></strong><span> can only talk. A model answers a prompt with the words it predicts are most likely to come next in an appropriate response based on its weights. Weights is an astoundingly unsexy term for the most important component of an AI model. Weights tell the model how to mathematically predict the best responses to given inputs. Anthropic and OpenAI serve closed weights models, keeping their math behind a wall, but allowing you to talk with the model </span><em><span>through</span></em><span> their products. Open weights models from companies like </span><a href="https://qwen.ai/"><span>Qwen</span></a><span> and </span><a href="https://www.moonshot.ai/"><span>Moonshot</span></a><span> publish their weights on the internet for anyone to host and use.</span></p><p><span>A </span><strong><span>harness</span></strong><span> is everything around the model and how you use it; and increasingly where much of the real value in AI comes from. Harnesses include pretty much everything you need to use a model that&#8217;s not the model itself:</span></p><ul><li><p><span>The literal application you use to interact with the model&#8217;s API</span></p></li><li><p><span>What allows the model to run code that it writes, using sandboxes</span></p></li><li><p><span>What makes it feel like the model &#8220;remembers&#8221; things about you between sessions, by using agent memory</span></p></li><li><p><span>What allows it to search the web for answers or draft word documents via tools</span></p></li><li><p><span>&#8230;and more, depending on your setup</span></p></li></ul><p><span>The harness is what makes AI useful for real day to day work, as opposed to the raw model which is really just the brains of the operation. This combination of a model and harness is known as an agent.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8ndO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8ndO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png 424w, https://substackcdn.com/image/fetch/$s_!8ndO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png 848w, https://substackcdn.com/image/fetch/$s_!8ndO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png 1272w, https://substackcdn.com/image/fetch/$s_!8ndO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8ndO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png" width="1456" height="578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:578,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!8ndO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png 424w, https://substackcdn.com/image/fetch/$s_!8ndO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png 848w, https://substackcdn.com/image/fetch/$s_!8ndO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.png 1272w, https://substackcdn.com/image/fetch/$s_!8ndO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91921a2c-98aa-4eda-9de0-d5034f4dbb28_1516x602.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 aria-hidden="true" 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><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><a href="https://claude.ai/"><span>Claude</span></a><span> and </span><a href="https://chatgpt.com/"><span>ChatGPT</span></a><span> are examples of closed source </span><em><span>chat</span></em><span> harnesses, and </span><a href="https://cursor.com/"><span>Cursor</span></a><span>, </span><a href="https://openai.com/codex/"><span>Codex</span></a><span>, and </span><a href="https://www.claude.com/product/claude-code"><span>Claude Code</span></a><span> are closed source </span><em><span>coding</span></em><span> harnesses. Specialized harnesses are increasingly popular as well, such as </span><a href="https://www.harvey.ai/"><span>Harvey</span></a><span> for legal matters and </span><a href="https://www.figma.com/ai/"><span>Figma AI</span></a><span> for design.</span></p><p><span>On the open source side, </span><a href="https://opencode.ai/"><span>OpenCode</span></a><span> and </span><a href="https://pi.dev/"><span>Pi</span></a><span> lead the coding harnesses. </span><a href="https://www.librechat.ai/"><span>LibreChat</span></a><span>, </span><a href="https://anythingllm.com/"><span>AnythingLLM</span></a><span>, and </span><a href="https://jan.ai/"><span>Jan</span></a><span> are open-source chat harnesses, giving you a self-hosted ChatGPT-style interface that can plug into any model. For general-purpose personal assistance, </span><a href="https://github.com/openclaw"><span>OpenClaw</span></a><span> does the same thing outside a chat window, connecting any model to messaging apps like Telegram and WhatsApp with persistent memory and a skills system to let it run your life. OpenClaw is also a harness! It&#8217;s a piece of software that&#8217;s primary job is to talk to a model and make its output useful for your task.</span></p><p><span>For a deeper dive into harnesses, check out Paul&#8217;s post </span><a href="https://read.technically.dev/p/whats-harness-engineering"><span>here</span></a><span>.</span></p><p><span>Alright, so we&#8217;ve got the components down. With these definitions in mind, let&#8217;s discuss what&#8217;s been going on in the open weights/source world.</span></p><h2><span>What&#8217;s going on in the open weights AI world?</span></h2><h3><span>Models</span></h3><p><span>In the beginning there was GPT from OpenAI. Anthropic quickly followed with Claude and Google with Gemini, and for a while, that was about it. Then a number of Chinese AI labs came out with good LLMs, and unlike the above players, published their weights on the internet for anyone to use.</span></p><p><span>The strategic decision to open source is complicated, kind of out of scope for this piece, and not made by one company or government unilaterally. One plausible high level explanation is that Chinese labs realized that to compete for global influence in the AI market (the market largely propping up the global economy), they couldn&#8217;t just make another chat app. The world already had a few good ones. Instead, they needed to target a different group of consumers - developers. Developers love open source technology, and choose open source options to build atop of. And so they decided to open source their models and capture influence and business through the hosting and harness layers. But first they had to make them good.</span></p><p><span>And make them good, they did.</span></p><p><span>One way of measuring &#8220;good&#8221; is </span><a href="https://technically.dev/universe/benchmark"><span>benchmarks</span></a><span>, standardized exams for model performance (that are not without their pitfalls). If a model is good, it gets into Stanford (gets released, marketed, and adopted); else it&#8217;s SUNY with the rest of us.</span></p><p><span>A year ago the best open-weights model scored roughly 22 on the </span><a href="https://artificialanalysis.ai/"><span>Artificial Analysis Intelligence Index</span></a><span>. The best closed model scored 35. That&#8217;s a pretty meaningful gap.</span></p><p><span>Currently though, the top open models are 54-57, while GPT-5.5 and Claude Opus sat at 50 to 61. So the gap is barely there. And this narrowing of the gap is true across several important benchmarks, not just AAII.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A_3h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A_3h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png 424w, https://substackcdn.com/image/fetch/$s_!A_3h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png 848w, https://substackcdn.com/image/fetch/$s_!A_3h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png 1272w, https://substackcdn.com/image/fetch/$s_!A_3h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A_3h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png" width="1176" height="656" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:656,&quot;width&quot;:1176,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!A_3h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png 424w, https://substackcdn.com/image/fetch/$s_!A_3h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png 848w, https://substackcdn.com/image/fetch/$s_!A_3h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.png 1272w, https://substackcdn.com/image/fetch/$s_!A_3h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda3ad243-0282-4274-b6a1-23c602f0628b_1176x656.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 aria-hidden="true" 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><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>From <a href="https://artificialanalysis.ai/">artificialanalysis.ai</a></em></figcaption></figure></div><p><span>Another way of measuring &#8220;good&#8221; is adoption, which is harder to game than a benchmark. Alibaba&#8217;s Qwen model passed a billion cumulative downloads on Hugging Face (a model registry) by March 2026, reaching that milestone faster than any open-source model family in history. It generated 153.6 million downloads in February alone, more than the next eight competitors combined. The </span><a href="https://www.atomproject.ai/"><span>ATOM project</span></a><span>, which tracks open-source model dynamics, found that from late 2023 to March 2026, 70% of developers making new models </span><em><span>from</span></em><span> existing models, known as derivative models, were based on Qwen, while Llama&#8217;s share (remember them?) fell from about 40% to around 10% over the same stretch.</span></p><p><span>A third way of measuring &#8220;good,&#8221; and probably the most important one for our context, is what happens </span><em><span>after</span></em><span> the download. </span><a href="https://openrouter.ai/"><span>OpenRouter&#8217;s</span></a><span> token-routing data shows Chinese open-weight models crossing from a negligible share to a majority share of all tokens processed on the platform between late 2024 and mid-2026. Nerds can run all the tests they want that say their model is good, but the market tells the real story. Real companies are voting with their tokens, sending live requests through these models because the cost and quality trade favors them.</span></p>
      <p>
          <a href="https://read.technically.dev/p/whats-going-on-with-open-weight-models">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Software Eng for Vibe Coders: On Frontends + Backends]]></title><description><![CDATA[A new series to help non-engineers build products that can handle going viral.]]></description><link>https://read.technically.dev/p/software-eng-vibe-coders-frontends-backends</link><guid isPermaLink="false">https://read.technically.dev/p/software-eng-vibe-coders-frontends-backends</guid><dc:creator><![CDATA[Justin]]></dc:creator><pubDate>Tue, 11 Aug 2026 12:31:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/42221ab5-cc23-4135-862f-64d8f2be043e_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><p>Vibe coding is amazing. But do you actually understand what you&#8217;ve built, so you can maintain and improve it over time?</p><p>This 6-part Technically series, <strong>Software Engineering for Vibe Coders</strong>, teaches you everything you need to know about how the apps you&#8217;re vibe coding work under the hood, and (crucially) how they might break as your user base scales.</p><p>Thanks to our friends at <a href="https://railway.com/?utm_medium=sponsor&amp;utm_campaign=technically">Railway</a>, who help you peacefully deploy those vibe coded apps, for sponsoring this series. Spin up anything your vibe coded app might need at <a href="http://railway.com/new?utm_medium=sponsor&amp;utm_campaign=technically">railway.com/new</a>.</p></div><h2><strong><span>The TL;DR</span></strong></h2><p><span>Every app that you vibe code into existence has two major parts: the </span><a href="https://technically.dev/universe/frontend"><span>frontend</span></a><span> and the </span><a href="https://technically.dev/universe/backend"><span>backend</span></a><span>. The AI builds both parts for you, but they&#8217;re very, very different:</span></p><ul><li><p><span>The </span><strong><span>frontend</span></strong><span> is everything the user sees and interacts with: text, buttons, forms, shapes&#8230;all the visual and interactive stuff.</span></p></li><li><p><span>The backend is the factory behind the scenes that makes the app work: </span><a href="https://technically.dev/universe/api"><span>APIs</span></a><span>, </span><a href="https://technically.dev/universe/database"><span>databases</span></a><span>, and business logic.</span></p></li><li><p><span>Web frontends are only written in </span><a href="https://technically.dev/universe/html"><span>HTML</span></a><span>, </span><a href="https://technically.dev/universe/css"><span>CSS</span></a><span>, and </span><a href="https://technically.dev/universe/javascript"><span>JavaScript</span></a><span>, while backends can be in practically any programming language that runs on a computer (like Rust).</span></p></li><li><p><span>The magic is how frontends and backends </span><strong><span>talk to each other</span></strong><span>, sending data and logic back and forth so you can do things like log in and actually use the app.</span></p></li></ul><p><span>If you want to be a better vibe coder, understanding this distinction is absolutely critical. So let&#8217;s dive in.</span></p><h2><strong><span>The restaurant analogy for frontends and backends</span></strong></h2><p><span>Technically readers by now know that I&#8217;m a &#8220;big food guy.&#8221;</span><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a><span> Ergo, the best analogy I&#8217;ve thought of for frontends and backends is </span><strong><span>a restaurant</span></strong><span>. Say you&#8217;re out on a hot date and you stroll into your favorite upscale Manhattan eatery. As you chow down on your Michelin Star Crab Rangoon, you might notice that your experience is interfacing with a few things:</span></p><ul><li><p><span>A nice table with comfortable chairs</span></p></li><li><p><span>High quality food and drink brought to your table</span></p></li><li><p><span>Servers catering to your every whim</span></p></li></ul><p><span>Fantastic. Behind the scenes though, there&#8217;s tons of logistical work that goes into being able to provide you with said experience. In particular, there&#8217;s an entire kitchen staff that worries about:</span></p><ul><li><p><span>What should be on the menu (Rangoon)</span></p></li><li><p><span>How to cook everything consistently and perfectly (deep fry the Rangoon)</span></p></li><li><p><span>Where to source quality ingredients from (good crabs for the Rangoon)</span></p></li><li><p><span>How to prepare and store those ingredients</span></p></li><li><p><span>What to do in situations where ingredients are missing or go bad (buy frozen Rangoon)</span></p></li></ul><p><span>As a patron, you don&#8217;t need to think or deal with any of this &#8211; you interface with the &#8220;frontend&#8221; of the restaurant, and the &#8220;backend&#8221; takes care of making sure the food that arrives on your table makes you want to leave a 5 star review (unless you&#8217;re Pete Wells, in which case 4 stars will suffice).</span></p><p><span>It&#8217;s not a perfect comparison, but this is pretty much how I think of application frontends and backends: except instead of food, it&#8217;s data.</span></p><p><span>The </span><strong><span>frontend&#8217;s job</span></strong><span> is to interface with the user. Whenever any sort of </span><strong><span>data</span></strong><span> (or now, AI responses) needs to get involved in that user experience, it is time to call upon the backend.</span></p><p><span>The backend&#8217;s job is to take care of all of the data and logistics behind the scenes. It consists of the database, API </span><a href="https://technically.dev/universe/endpoint"><span>endpoints</span></a><span> for interacting with that database, and increasingly today, calls to AI models (and HarNeSSeS) plus other such highly interesting and obscure tasks.</span></p><p><span>The backend, of course, can only do what you (or Claude) programs it to do. There&#8217;s a discrete menu (no pun intended) of things that the backend can do for the frontend &#8211; these are API endpoints &#8211; like sending a user&#8217;s profile information, creating a new user account, or accepting credit card information.</span></p><h2><strong><span>Getting into the import / export business</span></strong></h2><p><span>The best way to better understand these concepts is to walk through an actual vibe coded example.</span></p><p><span>Meet </span><strong><span>Vandelay Industries</span></strong><span>, importer and exporter of fine potato chips, the finest in all the land (where from specifically, we cannot reveal). Art Vandelay &#8211; proprietor &#8211; has decided to digitize the family business, which he runs out of a one-room windowless office (Penske material).</span></p><p><span>Thanks to the advent of vibe coding tools, he prompted his way to a website. But he has no idea what&#8217;s happening inside it, so we will need to explain it to him.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lPdK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lPdK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png 424w, https://substackcdn.com/image/fetch/$s_!lPdK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png 848w, https://substackcdn.com/image/fetch/$s_!lPdK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png 1272w, https://substackcdn.com/image/fetch/$s_!lPdK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lPdK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png" width="1456" height="1375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1375,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!lPdK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png 424w, https://substackcdn.com/image/fetch/$s_!lPdK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png 848w, https://substackcdn.com/image/fetch/$s_!lPdK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.png 1272w, https://substackcdn.com/image/fetch/$s_!lPdK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d3a2c0-326f-42b1-8787-976205d580f7_2048x1934.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 aria-hidden="true" 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><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><span>This is the website homepage. Everything that you see here &#8211; text, dividers, a navigation bar &#8211; is some combination of HTML, CSS, and JavaScript&#8230;our frontend. In fact, most marketing websites can be created as what we in the biz call &#8220;static.&#8221; Static means that they are </span><strong><span>completely frontend</span></strong><span> with no backend (data) component at all.</span></p><p><span>But Art has suppliers and vendors who need to access their accounts and move shipments around, so unfortunately a simply static website won&#8217;t do. Here, for example, is a page of his app (yes, app now, not website) where he can review applications submitted from new potential suppliers. Hm&#8230;where are these applications coming from&#8230;could it be&#8230;</span><strong><span>data???</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KOMZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KOMZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 424w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 848w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 1272w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png" width="1456" height="838" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!KOMZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 424w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 848w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 1272w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.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 aria-hidden="true" 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><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><span>Yes, data. As Art&#8217;s suppliers submit their applications, their responses get stored somewhere like a database. And on our app&#8217;s Supplier application page, we get our first glimpse of the backend. The </span><strong><span>data</span></strong><span> in the table here &#8211; an application from a seemingly fraudulent supplier named Kostanza Logistics LLC &#8211; is </span><strong><span>backend data</span></strong><span>. More specifically, when the page loaded, it sent a request via API to the backend to pull all open applications, which the backend happily sent back.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KOMZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KOMZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 424w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 848w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 1272w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png" width="1456" height="838" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!KOMZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 424w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 848w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.png 1272w, https://substackcdn.com/image/fetch/$s_!KOMZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da8235e-41d0-41e7-a236-9a447d306218_2048x1179.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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g8Di!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g8Di!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 424w, https://substackcdn.com/image/fetch/$s_!g8Di!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 848w, https://substackcdn.com/image/fetch/$s_!g8Di!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 1272w, https://substackcdn.com/image/fetch/$s_!g8Di!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g8Di!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png" width="1276" height="114" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:114,&quot;width&quot;:1276,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!g8Di!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 424w, https://substackcdn.com/image/fetch/$s_!g8Di!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 848w, https://substackcdn.com/image/fetch/$s_!g8Di!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 1272w, https://substackcdn.com/image/fetch/$s_!g8Di!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08730a8c-9473-4159-bea5-9b19ad04daf9_1276x114.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>This same logic holds for any pages in Art&#8217;s app that have a data component. One way to think about it is: if any information on the page is liable to </span><strong><span>change</span></strong><span> from day to day, it&#8217;s probably backend related.</span></p><p><span>The confusing thing here is that when you prompt something like Claude Code of v0, it just goes ahead and builds the whole app. It doesn&#8217;t always (but sometimes does) explain to you which pieces are which. It might suggest you use Supabase (backend), and </span><a href="https://technically.dev/universe/react"><span>React</span></a><span> (frontend), and perhaps Railway (</span><a href="https://technically.dev/universe/infrastructure"><span>infrastructure</span></a><span>, backend) and maybe Tailwind (frontend). If you want to begin to understand what any of these tools do, it all starts with understanding frontend / backend.</span></p><p><span>More practically, every time something breaks, ask &#8220;is this a frontend or a backend problem?&#8221;</span></p><p><span>For example, Art is frustrated because clicking the &#8220;Become a Vandelay&#8221; button is supposed to open the form for a supplier application, but instead does absolutely nothing. Seems simple enough, but there are actually several things that could be going wrong here:</span></p><ul><li><p><span>The button is broken under the hood. The </span><strong><span>backend</span></strong><span> logic that pulls the latest version of the form isn&#8217;t working and needs fixing.</span></p></li><li><p><span>The button isn&#8217;t clickable because of a CSS property that tells the browser to disallow the user from clicking. This is a </span><strong><span>frontend</span></strong><span> problem!</span></p></li></ul><p><span>If you can do this, you are already ahead of most vibe coders!</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oOqs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oOqs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oOqs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oOqs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oOqs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oOqs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg" width="668" height="763" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:763,&quot;width&quot;:668,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!oOqs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oOqs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oOqs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oOqs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1e4330-8a00-4c3b-b160-1a787d806842_668x763.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 aria-hidden="true" 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><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><h2><strong><span>Frontend and backend concepts, 201</span></strong></h2><p><span>If you&#8217;re curious to go deeper (evidently you have time on your hands) there are a few more things worth knowing about frontends / backends for vibe coding.</span></p><h3><strong><span>What and where the frontend actually is</span></strong></h3><p><span>There are all different types of frontends depending on where they&#8217;re built.</span></p><p><span>Many (most?) apps that people access today are web apps, meaning that you use them in a web browser (Chrome, Safari, etc.). For these apps, you only have 3 languages you can use, because only 3 languages can run in the browser: HTML, CSS, and JavaScript.</span></p><p><span>On top of these languages, Claude Code will likely use some </span><a href="https://technically.dev/universe/framework"><span>framework</span></a><span>s to make things easier to generate. The most popular frontend </span><a href="https://technically.dev/universe/framework"><span>framework</span></a><span> for building UIs is React. React helps turn your frontend into reusable components and also handles complicated stuff like data flow and when to update the page.</span></p><p><span>You&#8217;ve probably seen a React component in the wild before. It&#8217;s just a reusable chunk of code that under the hood is </span><em><span>another</span></em><span> chunk of code.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MxJD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MxJD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MxJD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MxJD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MxJD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MxJD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg" width="981" height="1350" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1350,&quot;width&quot;:981,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!MxJD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MxJD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MxJD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MxJD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34996955-ede0-4bb6-a0f8-8adf113991b2_981x1350.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 aria-hidden="true" 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><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>A React component</em></figcaption></figure></div><p></p><p><span>When you want to use a component in your code, you write it like a tag:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E7dj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E7dj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png 424w, https://substackcdn.com/image/fetch/$s_!E7dj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png 848w, https://substackcdn.com/image/fetch/$s_!E7dj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png 1272w, https://substackcdn.com/image/fetch/$s_!E7dj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E7dj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png" width="620" height="410" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:410,&quot;width&quot;:620,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!E7dj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png 424w, https://substackcdn.com/image/fetch/$s_!E7dj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png 848w, https://substackcdn.com/image/fetch/$s_!E7dj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.png 1272w, https://substackcdn.com/image/fetch/$s_!E7dj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e73647-6e6a-4486-a1af-138d412dcf85_620x410.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 aria-hidden="true" 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><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>How you use a React component</em></figcaption></figure></div><p><span>And the component itself is just&#8230; a function with a name that returns some UI.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tTHQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tTHQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png 424w, https://substackcdn.com/image/fetch/$s_!tTHQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png 848w, https://substackcdn.com/image/fetch/$s_!tTHQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png 1272w, https://substackcdn.com/image/fetch/$s_!tTHQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tTHQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png" width="890" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:890,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!tTHQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png 424w, https://substackcdn.com/image/fetch/$s_!tTHQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png 848w, https://substackcdn.com/image/fetch/$s_!tTHQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.png 1272w, https://substackcdn.com/image/fetch/$s_!tTHQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9708d52-868c-4643-b4cb-b07b934a11ff_890x484.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 aria-hidden="true" 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><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>How a component is defined</em></figcaption></figure></div><p><span>In addition to React, your AI model will likely choose to use a web framework. This is a piece of software that&#8217;s somewhere between a frontend and a backend, doing little bits of both. One of the most popular web frameworks (for React) is </span><a href="https://technically.dev/posts/what-is-nextjs"><span>Next.js</span></a><span>, which helps with things like defining URLs, pre-loading data so your pages are really fast, and making it easy to add </span><a href="https://technically.dev/universe/authentication"><span>authentication</span></a><span>.</span></p><p><span>Outside of web apps, you have native apps &#8211; ones that run on phones as iOS or Android apps, or tablets and desktops, or even special-purpose hardware in factories, doctors offices, and other fun places. Though the languages and frameworks for these frontends are slightly different, the concepts are the same. For example, on mobile there is </span><strong><span>React Native</span></strong><span>, often used through </span><strong><span>Expo</span></strong><em><span>.</span></em></p><h3><strong><span>What and where the backend actually is</span></strong></h3><p><span>Backends, for the most part, do not run in a browser or on your device. They instead run in the </span><a href="https://technically.dev/universe/cloud"><span>cloud</span></a><span>, on one or many giant servers specially built for exactly this purpose.</span></p><p><span>The most important component of most backends is </span><strong><span>the database</span></strong><span>. It&#8217;s the backbone of the application you&#8217;re building because it&#8217;s </span><em><span>where the data goes</span></em><span>. Recall that so much of what you&#8217;re seeing on a webpage is actually just data: your username and password (</span><a href="https://read.technically.dev/p/what-are-passkeys"><span>hopefully not</span></a><span>), your profile information, your emails in Gmail, your playlists in Spotify&#8230;all data. All stored in a database somewhere.</span></p><p><span>Databases are one of the areas where you tend to see the most competition among vendors leaking into vibe coding. If you&#8217;ve ever seen Claude propose using </span><a href="https://supabase.com/"><span>Supabase</span></a><span>, or </span><a href="https://neon.com/"><span>Neon</span></a><span>, or </span><a href="https://planetscale.com/"><span>Planetscale</span></a><span>, or (unlikely) </span><a href="https://aws.amazon.com/rds/"><span>RDS</span></a><span>, you are choosing a database provider. There are hundreds, maybe even thousands, all optimized for different types of data and different types of customers. The advent of vibe coding has been good to the database industry; Supabase co-founder Paul Copplestone has </span><a href="https://x.com/kiwicopple/status/2062595351824187678?s=20"><span>tweeted</span></a><span> about how a large percentage of their growth is actually coming from agents and vibe coders.</span></p><p><span>You might think the frontend just talks directly to the database when it needs data, but it does not. Instead, you have </span><strong><a href="https://technically.dev/posts/apis-for-the-rest-of-us"><span>APIs</span></a></strong><span> that act as a translation layer for a few reasons:</span></p><ul><li><p><span>Protecting your backend from strangers: the data in your database is proprietary, you don&#8217;t want just anyone to be able to </span><a href="https://technically.dev/universe/query"><span>query</span></a><span> it.</span></p></li><li><p><strong><span>Data cleaning, formatting, and organization</span></strong><span>: databases store data for many reasons, and your frontend is only one of many consumers of that data.</span></p></li><li><p><strong><span>Centralizing query logic for re-use</span></strong><span>: several pages in your app might reuse the same data. Instead of rewriting that query in every single place, you can just use a single API endpoint each time.</span></p></li></ul><p><span>Not all APIs exist just to protect your database. You might build APIs to kick off workflows, or even use APIs from 3rd party providers like </span><a href="https://technically.dev/posts/what-does-stripe-do"><span>Stripe</span></a><span>.</span></p><p><span>APIs also have a language they speak, and it is (for the most part) called JSON. When your code asks an API for something, this is the format you&#8217;ll usually get the data back in. JSON looks like this:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gjI_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gjI_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png 424w, https://substackcdn.com/image/fetch/$s_!gjI_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png 848w, https://substackcdn.com/image/fetch/$s_!gjI_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png 1272w, https://substackcdn.com/image/fetch/$s_!gjI_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gjI_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png" width="1178" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1178,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!gjI_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png 424w, https://substackcdn.com/image/fetch/$s_!gjI_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png 848w, https://substackcdn.com/image/fetch/$s_!gjI_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.png 1272w, https://substackcdn.com/image/fetch/$s_!gjI_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0586f1c-c276-4609-85fa-6d8a3409842a_1178x708.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 aria-hidden="true" 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><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>And btw if you weren&#8217;t sure:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zeaB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zeaB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png 424w, https://substackcdn.com/image/fetch/$s_!zeaB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png 848w, https://substackcdn.com/image/fetch/$s_!zeaB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png 1272w, https://substackcdn.com/image/fetch/$s_!zeaB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zeaB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png" width="677" height="679" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:679,&quot;width&quot;:677,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!zeaB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png 424w, https://substackcdn.com/image/fetch/$s_!zeaB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png 848w, https://substackcdn.com/image/fetch/$s_!zeaB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.png 1272w, https://substackcdn.com/image/fetch/$s_!zeaB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ee53fac-fd2f-4016-a5c4-294584cc25ac_677x679.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 aria-hidden="true" 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><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><span>The structure is fairly self explanatory, but it&#8217;s worth noting that this is </span><em><span>not</span></em><span> how the data is actually stored. Part of the hard work of API building and design is exactly this: formatting, structuring, and aggregating. You&#8217;ll see the word JSON every day for the rest of your life as a builder. Now you know: it&#8217;s just data.</span></p><p><span>If I had written this post a few years ago, I would have stopped here. But there&#8217;s a newly popular component of backends, and that&#8217;s </span><strong><span>AI models</span></strong><span>. If you&#8217;re building a product that has AI as part of it, there&#8217;s an entire new discipline of AI Engineering&#8482; that encompasses picking the right model, prompting it correctly, doing </span><a href="https://technically.dev/posts/ai-user-guide-to-evals"><span>evals</span></a><span>, context management&#8230;there&#8217;s a lot. All of this conceivably is backend work.</span></p><p><span>The code that defines your APIs, when they get used, this AI nonsense, and other stuff like that also needs to run on a server somewhere. You may have also seen vibe coding tools suggesting places to do this. If you use something like Replit or Bolt, they provide their own hosting service for a fee (often including database). If you use something like Claude Code or Codex, they might suggest a hosting provider like </span><a href="https://technically.dev/posts/how-vercel-became-the-ai-cloud"><span>Vercel</span></a><span>, Netlify, or even </span><a href="https://technically.dev/posts/aws-for-the-rest-of-us"><span>AWS</span></a><span>.</span></p><p><span>Bringing all of this back to the Vandelay Industries app; when Art prompted Claude, the model went and built out a whole backend too. There&#8217;s a database for storing supplier and shipment data, plus a set of APIs the frontend uses to access that database.</span></p><p><span>Art is smart, so he decided to host all of this on </span><a href="https://railway.com/??utm_medium=sponsor&amp;utm_campaign=technically"><span>Railway</span></a><span>, the all-in-one intelligent cloud provider. It gives him one place to run his database, API server, frontend, scheduled jobs, and anything else Claude might cook up for him in the future.</span></p><h3><strong><span>The messy middle between modern frontends and backends</span></strong></h3><p><span>Everything I just wrote is&#8230;mostly true. Unfortunately for those of us who explain things for a living, the lines between frontend and backend are starting to blur, and one particular culprit is Next.js.</span></p><p><span>In Next.js (and other web frameworks), you write your frontend and backend pretty much in the same place; it takes care of figuring out which is which and what runs where. In fact, your backend often lives in the same folder as your frontend. If you drop a file at app/api/applications/route.ts you&#8217;ve created a backend endpoint at /api/applications. Same project, same language! This used to be two separate codebases maintained by two different teams who occasionally yelled at each other.</span></p><p><span>Another area where the lines blur is </span><strong><span>server side rendering</span></strong><span>. When an app or website needs to send you a page that has data in it &#8211; in other words, a page that has some backend content &#8211; there are two places that can actually </span><em><span>create</span></em><span> that page.</span></p><ul><li><p><span>You can do it on the server side, pulling the requisite data and generating and formatting the whole page before sending it off to the </span><a href="https://technically.dev/universe/client"><span>client</span></a><span>.</span></p></li><li><p><span>Or you can do it on the client side, sending </span><em><span>just the data</span></em><span> from the backend and then actually melding it with the webpage on the client (in the browser, phone, etc.).</span></p></li></ul><p><span>In practice, the difference is in where the backend logic happens: all on the server, or mostly in the browser calling APIs on the server.</span></p><p><span>Traditionally, server side rendering was the dominant form of building web applications &#8211; it usually leads to much faster web pages. But as Javascript has gotten better and web apps have gotten more complicated, client side rendering is getting more popular, to the point where it&#8217;s now pretty much the default for most tech startups building their stuff from scratch. React is the poster child of that movement.</span></p><p><span>So what&#8217;s really frontend, and what&#8217;s really backend? It&#8217;s complicated. We can safely say that HTML, CSS, and JavaScript in your browser is definitely frontend. We can also safely say that databases, APIs, and AI models running in the cloud are definitely backend. Everything else&#8230;well, the devil is in the details.</span></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>To clarify, I like to eat food of mostly normal size.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Dispatch: Kimi K3 licensing, Liquid AI, and stacked PRs on GitHub]]></title><description><![CDATA[3 stories you might've missed from the last 2 weeks.]]></description><link>https://read.technically.dev/p/dispatch-august-9-2026</link><guid isPermaLink="false">https://read.technically.dev/p/dispatch-august-9-2026</guid><dc:creator><![CDATA[David Krevitt]]></dc:creator><pubDate>Sun, 09 Aug 2026 12:45:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9M4u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Between product launches, model updates, new companies, giant funding rounds for so-called &#8220;business context for your agent&#8221; companies, and the dreaded license change, I can safely say that this is the craziest time for developer tools + infra news maybe ever.</span></p><p><span>We&#8217;re going to start breaking some of what&#8217;s happening down in the signature Technically style.</span></p><p><span>Today, we&#8217;ve got 3 news stories to break down:</span></p><ul><li><p><span>Intrigue in AI model licensing</span></p></li><li><p><span>A new AI lab to watch</span></p></li><li><p><span>A newly accessible way to ship better code</span></p></li></ul><p><span>Enjoy!  Feedback welcome on this format.</span></p><h2><span>Business model watch: open weight models as a service</span></h2><p><span>A couple weeks back, the AI lab </span><a href="https://www.moonshot.ai/"><span>Moonshot</span></a><span> published the weights for </span><a href="https://huggingface.co/moonshotai/Kimi-K3"><span>Kimi K3</span></a><span>. It made waves for being fairly close in performance to frontier models from the big labs, but also because it carried with it a very&#8230;unusual new license.</span></p><p><span>The model has 2.8 T parameters, a 1M token context window, and is </span><a href="https://artificialanalysis.ai/models/kimi-k3"><span>pretty smart</span></a><span> according to the independent model analysis group Artificial Analysis (although they should start grading on a curve, 60 doesn&#8217;t inspire confidence).</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xJAT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xJAT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png 424w, https://substackcdn.com/image/fetch/$s_!xJAT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png 848w, https://substackcdn.com/image/fetch/$s_!xJAT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png 1272w, https://substackcdn.com/image/fetch/$s_!xJAT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xJAT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png" width="564" height="446" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:446,&quot;width&quot;:564,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xJAT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png 424w, https://substackcdn.com/image/fetch/$s_!xJAT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png 848w, https://substackcdn.com/image/fetch/$s_!xJAT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.png 1272w, https://substackcdn.com/image/fetch/$s_!xJAT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a5dc3ea-61d1-48b5-ad75-760af4fefa8d_564x446.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 aria-hidden="true" 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><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><span>Within a few days you could rent servers running it from </span><a href="https://modal.com/blog/kimi-k3-by-moonshot-now-available-on-modal"><span>Modal</span></a><span>, </span><a href="https://www.baseten.co/blog/how-to-build-a-day-zero-api-for-kimi-k3/"><span>Baseten</span></a><span>, </span><a href="https://fireworks.ai/blog/kimik3-on-fireworks"><span>Fireworks</span></a><span>, </span><a href="https://www.digitalocean.com/blog/serving-kimi-k3-inference-engine"><span>DigitalOcean</span></a><span>, </span><a href="https://www.runpod.io/kimi-k3"><span>RunPod</span></a><span>, </span><a href="https://www.together.ai/blog/together-ai-announces-strategic-partnership-with-moonshot-ai-to-natively-serve-kimi-models"><span>Together AI</span></a><span>, Databricks and probably others. You could not rent it from Blockbuster, because Blockbuster is, famously, out of business.</span></p><p><span>All of the providers charged the same rate for it, which is not-coincidentally the rate Moonshot charges through </span><em><span>their</span></em><span> API: $3 per million input tokens, $15 per million tokens out. This is drastically cheaper than the latest and greatest from Anthropic ($10/in, $50/out) and their ilk, while only being slightly less good.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9M4u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9M4u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png 424w, https://substackcdn.com/image/fetch/$s_!9M4u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png 848w, https://substackcdn.com/image/fetch/$s_!9M4u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!9M4u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9M4u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.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;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!9M4u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png 424w, https://substackcdn.com/image/fetch/$s_!9M4u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png 848w, https://substackcdn.com/image/fetch/$s_!9M4u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!9M4u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feacb1512-ef6c-44fe-a3c9-cfbe453c2f40_2048x1152.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 aria-hidden="true" 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><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><span>Prior to this, open weight models were priced as a commodity. The </span><a href="https://technically.dev/posts/whats-an-inference-provider"><span>inference provider</span></a><span>, rather than the lab training the model, set the price. So they were pretty cheap to run, b/c competition (see Kimi 2.7 Code, Moonshot&#8217;s last model generation, above for comparison).</span></p><p><span>Why is this?</span></p><p><span>License innovation. Kimi K3 shipped not under the Apache 2.0 license (or any other flavor of </span><a href="https://technically.dev/posts/beginners-guide-to-open-source-licenses"><span>open source license</span></a><span>), but rather the innovatively named </span><a href="https://huggingface.co/moonshotai/Kimi-K3/blob/main/LICENSE"><span>Kimi K3 License</span></a><span>.</span></p><div class="callout-block" data-callout="true"><p><strong><span>&#128176;Sidenote: On open source commercialization</span></strong></p><p><span>Licensing around open source stuff (code, now model weights + data) is the game within the game of enterprise tech.</span></p><p><span>Companies are constantly jockeying for position - a more permissive open source license grants the company a distribution advantage, a closed source license maximizes revenue. There&#8217;s a constant tension within orgs participating in the open source ecosystem between the 2 poles of distribution + commercialization.</span></p><p><span>Each time you sway too far in one direction or the other, the company is </span><a href="https://www.pcgamer.com/hardware/bambu-labs-go-f-yourself-3d-printing-company-currently-under-fire-for-reportedly-blocking-3rd-parties-from-its-software-legal-threats-and-drama-aplenty/"><span>less fun to run</span></a><span>, so you try to stay balanced somewhere in the middle. It&#8217;s like the opposite of a see-saw.</span></p></div><p><span>I&#8217;m not a lawyer, but I did watch Law &amp; Order a few times, so let&#8217;s try and unpack this:</span></p><p><span>The </span><a href="https://huggingface.co/moonshotai/Kimi-K3/blob/main/LICENSE"><span>Kimi K3 license</span></a><span> stipulates that if you:</span></p><ul><li><p><span>Run a &#8220;Model as a Service&#8221; business (like those inference providers above)</span></p></li><li><p><span>Clear $20mm in revenue over 12 months (unclear whether that&#8217;s total, or just with a Kimi K3 service, lawyers help me out)</span></p></li><li><p><span>Are not a &#8220;certified partner&#8221;</span></p></li></ul><p><span>Then you need to negotiate a (presumably commercial) license with Moonshot.</span></p><p><span>This is basically the freemium model, but for the relationship between frontier AI labs + inference providers. To be clear, </span><em><strong><span>you </span></strong></em><span>as a user (or developer of AI products) must pay either way (to buy your own chips, or more likely rent them from a </span><a href="http://technically.dev/posts/whats-cloud"><span>cloud provider</span></a><span>).</span></p><p><span>But why bother with all this complexity? If you&#8217;re Moonshot, why not just be like OpenAI and Anthropic and rent out your model directly to users / developers as an API?</span></p><p><span>Because the inference providers are much better than a lab like Moonshot at, well, inference.</span></p><p><span>When Moonshot released Kimi K3, the overwhelming demand for that piping-hot 60 intelligence score left them unable to keep it online:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!viGZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!viGZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png 424w, https://substackcdn.com/image/fetch/$s_!viGZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png 848w, https://substackcdn.com/image/fetch/$s_!viGZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!viGZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!viGZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png" width="1180" height="1042" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1042,&quot;width&quot;:1180,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!viGZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png 424w, https://substackcdn.com/image/fetch/$s_!viGZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png 848w, https://substackcdn.com/image/fetch/$s_!viGZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!viGZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff17de556-6669-4cdd-a5f3-c0becfbcba20_1180x1042.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 aria-hidden="true" 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><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><span>So, the splendor of comparative advantage unfolded.</span></p><p><span>Moonshot worked with the inference providers to package up their model as a service, to deliver it reliably. And that&#8217;s actually great in other ways too.</span></p><p><span>The inference providers are competing on speed (in terms of tokens/second, tps), which they achieve by optimizing every tiny little piece of the system (eeking out literally tiny edges in performance, it&#8217;s impressive engineering work). This is what they do well, about </span><a href="https://artificialanalysis.ai/models/kimi-k3/providers"><span>4x faster than Moonshot</span></a><span> in Modal&#8217;s case (with Fireworks and others not far behind).</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps you make practical sense of software + AI.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><span>Company to watch: Liquid AI</span></h2><p><span>Kimi K3 (as mentioned above) needs about 1.4TB of memory and some of NVIDIA&#8217;s newest GPU chips to run.</span></p><p><a href="https://www.liquid.ai/"><span>Liquid AI</span></a><span> is an AI lab going the other way, training models that run on your device (on the mythical </span><em><span>edge</span></em><span>) on a plain old CPU. I try to not run on (or near) edges, but we can talk about that another time.</span></p><p><span>Last week they released </span><a href="https://huggingface.co/blog/LiquidAI/lfm2-5-2-6b"><span>LFM2.5-2.6B</span></a><span>. It&#8217;s a paltry 2.6B parameters (Anthropic&#8217;s Fable is rumored to be in the trillions), and ergo fits on 2.5 GB of disk, which my laptop and phone hypothetically </span><em><span>should </span></em><span>have if I cleared videos properly out of my iMessage.</span></p><p><span>It&#8217;s also fast - Liquid AI reports 220 tokens/second (tps) on an M5 Max. Like actually fast - Fable is 40 tps according to </span><a href="https://openrouter.ai/anthropic/claude-fable-5#providers"><span>OpenRouter</span></a><span>, although </span><a href="https://openrouter.ai/anthropic/claude-opus-5-fast"><span>Opus 5 Fast&#8217;s 115 tps</span></a><span> is a better comp.</span></p><p><span>Why?</span></p><p><span>Like we&#8217;ve covered before, GPUs are very good at </span><a href="https://technically.dev/posts/whats-a-gpu"><span>doing thousands of small calculations simultaneously</span></a><span>. That advantage is large when you&#8217;re training a model.</span></p><p><span>But during </span><a href="https://technically.dev/posts/whats-an-inference-provider"><span>inference</span></a><span>, if a model is small enough, you can eke out sufficient (maybe better) performance from a </span><a href="https://technically.dev/universe/cpu-processor"><span>CPU</span></a><span> as well.</span></p><p><span>So a laptop (or a phone, or </span><a href="https://www.youtube.com/watch?v=l_Wf7SqBB4w"><span>toaster</span></a><span>) with enough RAM (again, not mine, but hypothetically someone&#8217;s) can run a model like LFM2.5.</span></p><p><span>I can&#8217;t speak to how great of a model LFM2.5&#8217;s is, and tbh it doesn&#8217;t really matter. You are almost certainly not going to use it, I am not going to use it, but, BUT!  You will very likely use a similar model, running on your device, quite soon, and it&#8217;ll unlock new AI use cases + business models.</span></p><p><span>One interesting sidenote: LFM2.5&#8217;s </span><a href="https://huggingface.co/LiquidAI/LFM2.5-2.6B/raw/main/LICENSE"><span>license</span></a><span> allows you to run the model as part of your commercial product, so long as your company makes less than $10mm.</span></p><p><span>&gt;$10mm in revenue, you need to negotiate a license with them. Seems pretty fair, and we need a way for smaller AI labs to be commercially successful (or else we&#8217;ll have less innovation).</span></p><h2><span>New tool alert: Stacked pull requests on GitHub</span></h2><p><span>Last week GitHub released </span><a href="https://github.blog/changelog/2026-07-30-stacked-pull-requests-are-now-in-public-preview/"><span>stacked pull requests</span></a><span>, and if you use a coding agent it&#8217;s worth checking out.</span></p><p><span>To understand why, let&#8217;s go back to the early days of coding agents - when Cursor was just a few months old, and the brief but monumental &#8220;Cursor for X&#8221; startup wave hadn&#8217;t yet washed ashore.</span></p><p><span>It was September 2023, and a startup called Graphite (later acquired by Cursor later acquired by SpaceXAI) </span><a href="https://www.reddit.com/r/git/comments/16nb8zj/launching_graphite_stacked_git_branches_and_pull/"><span>launched stacked git branches and pull requests</span></a><span> for their GitHub integration to little fanfare.</span></p><p><span>They were early to a problem that coding agents created:</span></p><p><span>Coding agents can </span><strong><span>write</span></strong><span> a lot of code quickly.</span></p><p><span>You + your team can not </span><strong><span>review</span></strong><span> that code as quickly.</span></p><p><span>A coding agent&#8217;s code is like those crab legs you ambitiously scooped up at the Wynn buffet in Vegas. Fun at the start, tedious AF at the finish.</span></p><p><span>There are 3 solutions to this:</span></p><ul><li><p><span>Don&#8217;t review the code and just ship it to production anyway (YOLO mode).</span></p></li><li><p><span>Have </span><a href="https://technically.dev/posts/what-are-code-reviews"><span>AI review the code</span></a><span>. Lots of startups (including later Graphite) and now every coding agent do this.</span></p></li><li><p><span>Split the code into smaller chunks that are easier to review.</span></p></li></ul><p><span>#3 is a useful approach in any area of work, but the problem comes when those small chunks of work depend on each other.</span></p><p><span>You have to then keep track of the </span><em><span>order</span></em><span> in which those changes need to be shipped, and that becomes difficult on a team.</span></p><p><span>Stacked pull requests codify the order in which changes need to be deployed.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sz7w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sz7w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png 424w, https://substackcdn.com/image/fetch/$s_!Sz7w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png 848w, https://substackcdn.com/image/fetch/$s_!Sz7w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!Sz7w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sz7w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.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;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Sz7w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png 424w, https://substackcdn.com/image/fetch/$s_!Sz7w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png 848w, https://substackcdn.com/image/fetch/$s_!Sz7w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!Sz7w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b08673-c5d2-4bb2-8f5e-2127761c9191_2048x1152.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 aria-hidden="true" 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><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><span>So you (more likely your coding agent) can lock in small wins, then when you&#8217;re ready to actually </span><a href="http://technically.dev/universe/deploy"><span>deploy</span></a><span> your big batch of work, GitHub (or any git provider that supports stacked PRs) will merge those dependencies in the right order.</span></p><p><span>If we&#8217;re going to enlist coding agents to work independently for long periods of time, these are the types of </span><a href="http://technically.dev/universe/devops"><span>DevOps</span></a><span> adaptations we need to keep them on track.</span></p><p><span>&#8211;</span></p><p><span>This is all just our take though. Wdyt?</span></p><p><span>And thanks to our faithful Technically correspondents, </span>especially Sam Schneider,<span> for their notes.</span></p><p><span>-David, Justin and the Technically team</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps you make practical sense of software + AI.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How do "computer use" agents work?]]></title><description><![CDATA[Why it's surprisingly challenging to let an LLM use a computer for you.]]></description><link>https://read.technically.dev/p/how-do-computer-use-agents-work</link><guid isPermaLink="false">https://read.technically.dev/p/how-do-computer-use-agents-work</guid><dc:creator><![CDATA[Tereza Tizkova]]></dc:creator><pubDate>Thu, 06 Aug 2026 13:35:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y29n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>You might&#8217;ve heard of these &#8220;autonomous&#8221; agents that run 24/7 on your computer.</span></p><p><span>They use your computer to do things like order a smashburger, or book a flight to Cancun (YOLO).  You might even have one running, right now, on a new Mac Mini.</span></p><p><span>The term &#8216;computer use agent&#8217; gets thrown around for three different things. The first two are components of the real thing: </span></p><ol><li><p><span>A </span><strong><span>vision-language model </span></strong><span>(VLM) looks at your screen and decides what to do (clicks + keystrokes).</span></p></li><li><p><span>A </span><strong><span>browser agent</span></strong><span> operates websites.</span></p></li><li><p><span>A </span><strong><span>computer use agent</span></strong><span> controls the entire </span><a href="https://technically.dev/universe/operating-system"><span>operating system</span></a><span>.</span></p></li></ol><p><span>The </span><a href="https://os-world.github.io/"><span>OSWorld benchmark</span></a><span> confirms that computer use is the hard part, as anyone who&#8217;s tried to get a computer use agent to open a file in Excel can attest.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NZuA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NZuA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png 424w, https://substackcdn.com/image/fetch/$s_!NZuA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png 848w, https://substackcdn.com/image/fetch/$s_!NZuA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png 1272w, https://substackcdn.com/image/fetch/$s_!NZuA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NZuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png" width="1456" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176237,&quot;alt&quot;:null,&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://read.technically.dev/i/209980241?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.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_!NZuA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png 424w, https://substackcdn.com/image/fetch/$s_!NZuA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png 848w, https://substackcdn.com/image/fetch/$s_!NZuA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.png 1272w, https://substackcdn.com/image/fetch/$s_!NZuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15589b16-2957-4d3b-b4b2-da61a326f5d0_1942x968.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 aria-hidden="true" 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><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">OSWorld shows that cross-app tasks and controllable environment are some of the hard parts of AI computer use.</figcaption></figure></div><p><span>Let&#8217;s get into why that is, and where we&#8217;ve made progress.</span></p><h2><strong><span>What does &#8220;computer use agent&#8221; mean?</span></strong></h2><p><span>A computer use agent is an </span><a href="https://technically.dev/universe/llm"><span>LLM</span></a><span>-powered agent that operates a full computer.</span></p><p><span>It does so through the same interfaces a human uses: the filesystem, </span><a href="https://technically.dev/universe/terminal"><span>terminal</span></a><span>, browser, and applications like Minesweeper when it&#8217;s bored.</span></p><p><span>Computer use agents click buttons, fill in forms, create files, and work across multiple Git repositories at once.</span></p><p><span>Most importantly, computer use agents retain a memory of historical sessions + context, and all the software installed to pick up where they left off.</span></p><p><span>The interface is the same, but the way agents work on the computer diverges significantly from humans. We think we can multi-task, but computer use agents actually can, by spinning up multiple sub-agents to work on smaller tasks in parallel.</span></p><p><span>Most people would say that computer use agents were </span><a href="https://www.anthropic.com/news/3-5-models-and-computer-use"><span>introduced by Anthropic</span></a><span> in October 2024 as really a model capability vs a full agent, and that it didn&#8217;t work very well at the outset.</span></p><p><span>Just a couple short years later, there are now over a dozen options:</span></p><p><span>OpenAI gave </span><a href="https://openai.com/index/codex-for-almost-everything/"><span>Codex the ability to operate your Mac or Windows desktop</span></a><span>, </span><a href="https://support.claude.com/en/articles/13345190-get-started-with-claude-cowork"><span>Claude Cowork</span></a><span> is one of the most praised products from Anthropic, Google </span><a href="https://www.androidauthority.com/google-project-mariner-shutdown-3664323/"><span>folded Project Mariner into Gemini Agent</span></a><span>, </span>Factory offers persistent <a href="https://factory.ai/news/droid-computers">Droid Computers</a>, Perplexity launched its <a href="https://www.perplexity.ai/products/computer">Computer</a>, <span>and open-source agents like </span><a href="https://github.com/openclaw/openclaw"><span>OpenClaw</span></a><span> and </span><a href="https://github.com/NousResearch/hermes-agent"><span>Hermes</span></a><span> have gone viral.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps you make practical sense of software + AI, so you don&#8217;t hand your life over to the wrong computer use agent.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong><span>How an AI agent uses a computer</span></strong></h2><p><span>Agents &#8220;seeing&#8221; the screen and moving your cursor carry a certain sense of magic, but it&#8217;s not all the same magic. There are a few technical approaches:</span></p><p><strong><span>1. Screenshot-based vision + click coordinates</span></strong></p><p><span>This was the early approach of Anthropic&#8217;s Computer Use (2024) and OpenAI&#8217;s CUA powering </span><a href="https://openai.com/index/introducing-operator/"><span>Operator</span></a><span> (2025).</span></p><p><span>The agent takes a screenshot, feeds it to a vision-language model (VLM), which then decides to &#8220;click at pixel (432, 187)&#8221; or &#8220;type &#8216;hello&#8217;&#8221;. It executes the action, takes a new screenshot, and repeats the loop. The agent controls the mouse, keyboard, and applications.</span></p><p><span>This approach is expensive, and the screenshot &#8594; model </span><a href="https://technically.dev/universe/inference"><span>inference</span></a><span> &#8594; action workflow has high latency (although companies like Moondream are working on that). It&#8217;s also fragile, and errors compound when interacting with UI elements, low contrast, or dense layouts.</span></p><p><span>Moving or scaling UI elements, or changing from light to dark mode, can cause the agent to fall over.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y29n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y29n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png 424w, https://substackcdn.com/image/fetch/$s_!Y29n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png 848w, https://substackcdn.com/image/fetch/$s_!Y29n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png 1272w, https://substackcdn.com/image/fetch/$s_!Y29n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y29n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Y29n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png 424w, https://substackcdn.com/image/fetch/$s_!Y29n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png 848w, https://substackcdn.com/image/fetch/$s_!Y29n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.png 1272w, https://substackcdn.com/image/fetch/$s_!Y29n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa647cf7-0b59-488d-bdea-8c424cc8d194_2048x1285.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 aria-hidden="true" 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><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 of early computer use agent trying and failing to solve sudoku in a browser.</figcaption></figure></div><p><strong><span>2. Accessibility tree / DOM parsing</span></strong></p><p><span>The challenges above are why we rely on structured approaches too. Every operating system and every browser exposes a structured tree of UI elements (buttons, text fields, labels) with their positions, roles, and states.</span></p><p><span>An agent can read this tree as text, which is orders of magnitude cheaper and faster than reading it as images.</span></p><p><span>What does this actually mean? When you visit a website, your browser builds two internal data structures:</span></p><p><span>First, the DOM (Document Object Model), a tree of every </span><a href="https://technically.dev/universe/html"><span>HTML</span></a><span> element on the page.</span></p><p><span>Second, on top of the DOM, the browser builds an </span><strong><span>accessibility tree</span></strong><span>, a simplified version that strips away decorative elements and keeps only what you can interact with: buttons, links, form fields, headings. Each element gets a role (&#8221;button&#8221;, &#8220;link&#8221;), a name (&#8221;Submit&#8221;, &#8220;Search&#8221;), and a state (&#8221;disabled&#8221;, &#8220;checked&#8221;).</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!njLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!njLI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png 424w, https://substackcdn.com/image/fetch/$s_!njLI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png 848w, https://substackcdn.com/image/fetch/$s_!njLI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png 1272w, https://substackcdn.com/image/fetch/$s_!njLI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!njLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png" width="1456" height="1506" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1506,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!njLI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png 424w, https://substackcdn.com/image/fetch/$s_!njLI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png 848w, https://substackcdn.com/image/fetch/$s_!njLI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.png 1272w, https://substackcdn.com/image/fetch/$s_!njLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3bbc77-8aa4-466f-8cd5-2925ab036cff_1920x1986.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 aria-hidden="true" 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><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 of the DOM model.</figcaption></figure></div><p><span>One common accessibility-tree tool is Microsoft&#8217;s </span><a href="https://github.com/microsoft/playwright-mcp"><span>Playwright MCP</span></a><span>, which is also useful for coding agents to review their work on an app&#8217;s UI.</span></p><p><span>But even structured input has real limits. In the original </span><a href="https://arxiv.org/abs/2401.13919"><span>WebVoyager benchmark</span></a><span>, a text-only agent reading just the accessibility tree scored 40.1% versus 59.1% for the same agent with vision.</span></p><p><span>Dynamic, JavaScript-heavy sites like </span><a href="http://booking.com/"><span>Booking.com</span></a><span> and Google Flights were among the hardest categories, because the DOM gets messy.</span></p><h3><strong><span>3. Hybrid (the 2026 consensus)</span></strong></h3><p><span>Hybrid can mean two different things:</span></p><ol><li><p><span>It means defaulting to the cheap, structured signal (DOM or the accessibility tree), and falling back to screenshots (VLM) only when the structure runs out.</span></p></li><li><p><span>Routing each task to whichever method suits the computer use problem at hand.</span></p></li></ol><p><span>At Factory (where I work) our computer-use agents do the second. They route across four </span><a href="https://technically.dev/universe/backend"><span>backends</span></a><span> depending on the task:</span></p><ul><li><p><strong><span>Accessibility-tree snapshots</span></strong><span> drive native desktop apps, letting the agent operate Finder or Slack by element rather than by pixel.</span></p></li><li><p><span>The </span><strong><span>Chrome DevTools Protocol</span></strong><span> drives web and Electron apps,reading the page&#8217;s structure directly and screenshotting only when it has to.</span></p></li><li><p><span>A </span><strong><span>virtual pseudoterminal (PTY)</span></strong><span> reads terminals as </span><em><span>pure text</span></em><span>, consuming the character stream and typing keystrokes back. This is how the agent runs git or installs a package.</span></p></li><li><p><span>A </span><strong><span>terminal emulator</span></strong><span> captures actual pixels, for what the text stream can&#8217;t express: for apps with a full-screen terminal UI (TUI), that might contain elements like progress bars + colored outputs.</span></p></li></ul><p><span>Only one of the four (the terminal emulator) works primarily from pixels.</span></p><p><span>The rest read text or structure, because structured signal (if it exists) is cheaper and steadier.</span></p><h2><strong><span>Computer use agents stack</span></strong></h2><p><span>Every product that gets called a &#8220;computer use agent&#8221; is some combination of three layers:</span></p><ul><li><p><strong><span>The model </span></strong><span>(the LLM or vision-language model) that decides what to do next</span></p></li><li><p><strong><span>The </span><a href="https://technically.dev/posts/whats-harness-engineering"><span>harness</span></a></strong><span> (the agent software wrapped around the model). This one contains loops, tools, or sub-agent orchestration. IMO harnesses and models are converging a little.</span></p></li><li><p><strong><span>The computer</span></strong><span>, the environment the agent actually works in. Before, some people used </span><a href="https://technically.dev/posts/whats-docker-and-what-are-containers"><span>containers</span></a><span>, but the consensus nowadays is using </span><a href="https://technically.dev/posts/what-are-code-sandboxes"><span>microVMs</span></a><span>.</span></p></li></ul><p><span>Most arguments about what &#8220;counts&#8221; as computer use come from mixing up these layers.</span></p><p><span>Anthropic&#8217;s original computer use was a model capability. Some agents are harnesses you install on your own computer. Others sell the harness and the computer together, with automatic routing between models.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IIWq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IIWq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png 424w, https://substackcdn.com/image/fetch/$s_!IIWq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png 848w, https://substackcdn.com/image/fetch/$s_!IIWq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png 1272w, https://substackcdn.com/image/fetch/$s_!IIWq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IIWq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png" width="1456" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!IIWq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png 424w, https://substackcdn.com/image/fetch/$s_!IIWq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png 848w, https://substackcdn.com/image/fetch/$s_!IIWq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.png 1272w, https://substackcdn.com/image/fetch/$s_!IIWq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c34c446-4c22-4cf0-8cd1-2482df810383_2048x701.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 aria-hidden="true" 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><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">Anthropic let you bring your own virtual machine for their original computer use feature, but also warned you about the security concerns you&#8217;d face.</figcaption></figure></div><h2><strong><span>What a computer use agent needs</span></strong></h2><h3><strong><span>Computer environment (local or cloud)</span></strong></h3><p><span>The agent needs its own work environment. It can have its own literal computer (your Mac Mini), or a secure </span><a href="https://technically.dev/universe/cloud"><span>cloud</span></a><span> environment like an E2B sandbox.</span></p><h3><strong><span>Persistence and long-running sessions</span></strong></h3><p><span>True computer use means that the agent has a persistent relationship with a machine - it doesn&#8217;t break up, fly to Cancun, and then get back together later.</span></p><p><span>An agent working across a real engineering workflow (opening a </span><a href="https://technically.dev/universe/pull-request"><span>pull request</span></a><span>, waiting on CI, responding to a code review, pushing a follow-up commit) needs to resume from where it stopped.</span></p><h3><strong><span>Memory and state</span></strong></h3><p><span>An LLM remembers nothing between sessions, so that state has to live somewhere outside the prompt.</span></p><p><span>You might hear &#8220;state&#8221; mentioned a lot online, and it might mean a few things:</span></p><ul><li><p><strong><span>Files</span></strong><span>. Memory and instructions stored as Markdown files within folders. In OpenClaw, HEARTBEAT.md is the task list, or Hermes saves finished workflows as reusable </span><a href="http://skill.md"><span>SKILL.md</span></a><span> files.</span></p></li><li><p><strong><span>The environment</span></strong><span>. Git repos, </span><a href="https://technically.dev/posts/whats-a-package-manager"><span>package dependencies</span></a><span>, and test results just stay put, so the agent resumes where it left off.</span></p></li><li><p><strong><span>External memory stores</span></strong><span>. Vector databases or services like Mem0, Letta, or Zep hold what the agent learned and can retrieve it later.</span></p></li></ul><h3><strong><span>Parallelism</span></strong></h3><p><span>An agent can spin up sub-agents to run tasks in parallel.</span></p><p><span>For example, in Factory, worker agents work in sequence, but each of them can spawn specialized sub-agents during the workflow.</span></p><h3><strong><span>Action space</span></strong></h3><p><span>A human reaches for the mouse, the keyboard, the terminal, or a browser tab depending on what the task needs.</span></p><p><span>An agent needs the same flexibility expressed as a defined set of primitives: click, type, scroll, run a shell command, read or write a file, call an </span><a href="https://technically.dev/universe/api"><span>API</span></a><span>.</span></p><p><span>The action space is a design decision with real tradeoffs: too narrow and the agent can&#8217;t complete tasks that fall outside it, too broad and it becomes harder to audit what the agent actually did and why.</span></p><p><span>Most </span><a href="https://technically.dev/universe/production"><span>production</span></a><span> systems restrict irreversible actions (file deletion, form submission, outbound messages) behind explicit confirmation steps.</span></p><h3><strong><span>Tool integration</span></strong></h3><p><span>Whenever an external service has an API, the agent should call it rather than navigate a UI to get the same result. This is where </span><a href="https://technically.dev/posts/what-is-mcp"><span>MCP (Model Context Protocol)</span></a><span> becomes important.</span></p><p><span>It&#8217;s a standardized protocol that lets agents discover and call tools across calendars, codebases, databases, and communication apps without custom wiring for every combination.</span></p><p><span>As more services expose APIs and more MCP </span><a href="https://technically.dev/universe/server"><span>servers</span></a><span> get built, the portion of work that requires the agent to actually &#8220;see&#8221; a screen keeps shrinking.</span></p><h3><strong><span>Verification and error recovery</span></strong></h3><p><span>A human notices when something went wrong: a form didn&#8217;t submit, a build failed, a page didn&#8217;t load. An agent needs to check this explicitly at each step, and </span><a href="https://factory.ai/news/missions-architecture"><span>validate that the output actually works</span></a><span>, not just looks good in the code.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SoRj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SoRj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png 424w, https://substackcdn.com/image/fetch/$s_!SoRj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png 848w, https://substackcdn.com/image/fetch/$s_!SoRj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png 1272w, https://substackcdn.com/image/fetch/$s_!SoRj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SoRj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png" width="1394" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1394,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!SoRj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png 424w, https://substackcdn.com/image/fetch/$s_!SoRj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png 848w, https://substackcdn.com/image/fetch/$s_!SoRj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.png 1272w, https://substackcdn.com/image/fetch/$s_!SoRj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6e985b0-40cf-49b3-9631-4098cc51d88e_1394x800.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 aria-hidden="true" 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><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">How validator agents use virtual computers to click through elements and check functionality, based on a &#8220;validator contract.&#8221;</figcaption></figure></div><h2><strong><span>Why are computer use agents going mainstream now?</span></strong></h2><p><span>Not long ago, AI models couldn&#8217;t reason well enough to drive a computer use agent.</span></p><p><span>Sandbox environments made for agents were just being built. There was no standard way for agents to connect to tools. And context windows were so small your agent forgot what it was doing halfway through a three-step task.</span></p><p><span>All of that changed, more or less simultaneously. On </span><a href="https://osworld-v1.xlang.ai/"><span>OSWorld</span></a><span>, agents went from roughly 12% at the benchmark&#8217;s launch in 2024 to the low-to-mid 80s by mid-2026. The estimated human baseline is ~72%, which seems high if the task is to use Microsoft Teams.</span></p><h2><strong><span>Comparison of computer use products</span></strong></h2><p><span>All computer use agent products look similar on the surface, but work very differently under the hood. Here&#8217;s a quick summary of the field, current as of publication but moving quickly:</span></p><p><strong><span>Manus</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eG7Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eG7Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png 424w, https://substackcdn.com/image/fetch/$s_!eG7Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png 848w, https://substackcdn.com/image/fetch/$s_!eG7Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png 1272w, https://substackcdn.com/image/fetch/$s_!eG7Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eG7Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png" width="1038" height="1618" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1618,&quot;width&quot;:1038,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!eG7Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png 424w, https://substackcdn.com/image/fetch/$s_!eG7Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png 848w, https://substackcdn.com/image/fetch/$s_!eG7Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.png 1272w, https://substackcdn.com/image/fetch/$s_!eG7Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe69234b5-d183-4285-90a0-36e6de41a9a6_1038x1618.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 aria-hidden="true" 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><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><span>Manus originally ran each task in a fresh cloud sandbox, but it now also offers Cloud Computer (launched April 30, 2026), a persistent Ubuntu VM for 24/7 bots, databases, and scheduled automations. The standard Sandbox still recycles after 7 days (free) or 21 days (paid).</span></p><h3><strong><span>OpenClaw</span></strong></h3><p><span>OpenClaw is the project that made &#8220;an agent living on your machine&#8221; a mainstream idea. It&#8217;s an agent that lives on a machine you provide (a VPS, a Mac Mini, your laptop) rather than a full OS-automation engine, though it can reach desktop tools and services via MCP servers.</span></p><h3><strong><span>Hermes Agent</span></strong></h3><p><span>Architecturally, Hermes is in the same family as OpenClaw: a self-hosted, persistent agent that lives on your server or PC, reachable over Telegram, Discord, Slack, or WhatsApp. Its defining feature is the self-improvement loop: persistent cross-session memory plus a skills system where the agent writes down how it solved a task and reuses that skill next time.</span></p><h3><strong><span>Factory Droid Computers</span></strong></h3><p><em><span>(Disclosure: I work at Factory.)</span></em></p><p><span>Factory runs persistent cloud machines that pause when idle and resume with full filesystem and memory snapshots. You can </span><a href="https://docs.factory.ai/cli/features/droid-computers"><span>Bring Your Own Machine</span></a><span> or use virtual computers.</span></p><p><span>Factory&#8217;s observation layer is hybrid. Its </span><a href="https://docs.factory.ai/cli/features/droid-control"><span>Droid Control</span></a><span> tooling picks the right backend for the target: Playwright-backed automation with Chrome DevTools Protocol support for web apps and Electron apps, accessibility-tree snapshots with ref-based element selection for native desktop apps, virtual-terminal automation for driving real TUI apps, and video recording of what the agent did.</span></p><h3><strong><span>OpenAI Codex computer use</span></strong></h3><p><span>In 2026, Codex got its own virtual cursor and can see, click, and type across all the apps on your Mac. Windows support followed in May 2026. It&#8217;s a vision-driven approach &#8212; screenshots plus simulated input &#8212; with one important twist: if a plugin or </span><a href="https://technically.dev/universe/integration"><span>integration</span></a><span> exists for an app, Codex prefers the structured path and falls back to pixels only when it has to.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5wFS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5wFS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png 424w, https://substackcdn.com/image/fetch/$s_!5wFS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png 848w, https://substackcdn.com/image/fetch/$s_!5wFS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png 1272w, https://substackcdn.com/image/fetch/$s_!5wFS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5wFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png" width="1456" height="964" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:964,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!5wFS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png 424w, https://substackcdn.com/image/fetch/$s_!5wFS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png 848w, https://substackcdn.com/image/fetch/$s_!5wFS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.png 1272w, https://substackcdn.com/image/fetch/$s_!5wFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3def8eb-e245-48f1-950e-8c7edb67c4bc_2048x1356.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 aria-hidden="true" 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><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">Demo of Codex computer use, where the agent is coding, using Google workspace tools, browser tools, and more.</figcaption></figure></div><h3><strong><span>Claude Cowork</span></strong></h3><p><span>Claude Cowork now runs </span><a href="https://technically.dev/universe/remote"><span>remote</span></a><span> persistent sessions by default (beta, rolling out in 2026). The agent loop and code execution run on Anthropic&#8217;s servers, and sessions persist across desktop, web, and mobile. For local desktop control, Claude Cowork can also use Computer Use via the Claude Desktop app.</span></p><h3><strong><span>Perplexity Computer</span></strong></h3><p><span>Perplexity Computer is fundamentally different from all of the above: in its cloud form it does not control your screen at all, running entirely in Perplexity&#8217;s cloud, in isolated VMs, orchestrating 20+ AI models as sub-agents. Think of it as a task orchestration layer.</span></p><p><span>In April 2026 Perplexity shipped Personal Computer, a Mac app that runs Perplexity Computer locally on a Mac or Mac mini. Personal Computer can control local files, native Mac apps, the Comet browser, and Perplexity&#8217;s cloud sandbox. It is available to all Mac users as of May 2026.</span></p><h3><strong><span>Devin</span></strong></h3><p><span>Each Devin session runs in its own isolated </span><a href="https://technically.dev/universe/linux"><span>Linux</span></a><span> VM with a full desktop environment, browser, terminal, and filesystem. Since 2.2, Devin can launch and test desktop applications, take screenshots to visually verify its work, and send back screen recordings for human review. In 2026 Devin got its own Windows VMs and a desktop command center for managing fleets of agents.</span></p><h3><strong><span>Zo Computer</span></strong></h3><p><span>Zo has the most literal implementation of this article&#8217;s definition &#8212; the agent and you share one persistent machine with a real filesystem &#8212; aimed at people who want personal software running on </span><a href="https://technically.dev/universe/infrastructure"><span>infrastructure</span></a><span> they control rather than an enterprise SDLC. Every Zo user gets a persistent Linux server with real file storage, hosting, scheduled automations, and an always-on agent you can text via iMessage, SMS, Telegram, or email.</span></p><h3><strong><span>Infrastructure, not agents</span></strong></h3><p><span>Worth separating out: providers like E2B (Firecracker microVMs), OpenComputer (persistent full VMs with hibernate/wake and checkpoints), and </span><a href="https://www.orgo.ai/"><span>Orgo</span></a><span> (headless cloud VMs for agents) provide the machines that agents run on, but not the agent itself.</span></p><h2><strong><span>What is still a challenge for computer use agents</span></strong></h2><p><span>The PC was redefined once before, from terminal to GUI. It&#8217;s being redefined again, from a computer you use to a computer that uses itself (sometimes with a human).</span></p><p><span>I still see the three approaches to computer use (screenshot-based, accessibility tree, and hybrid) as an interim solution stitched onto human software, not as an agent-first solution.</span></p><p><span>On the agent side, there are other specific challenges.</span></p><p><span>CAPTCHAs were literally designed to block non-human users, but now we might need to distinguish it from CAPTCHAs for agents.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mtf1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mtf1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png 424w, https://substackcdn.com/image/fetch/$s_!Mtf1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png 848w, https://substackcdn.com/image/fetch/$s_!Mtf1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png 1272w, https://substackcdn.com/image/fetch/$s_!Mtf1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mtf1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png" width="1456" height="477" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:477,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:113709,&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://read.technically.dev/i/209980241?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.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_!Mtf1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png 424w, https://substackcdn.com/image/fetch/$s_!Mtf1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png 848w, https://substackcdn.com/image/fetch/$s_!Mtf1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.png 1272w, https://substackcdn.com/image/fetch/$s_!Mtf1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b13d40-9cf8-4238-92c0-d744bb9a4552_1636x536.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 aria-hidden="true" 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><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">Browser Use&#8217;s <a href="https://browser-use.com/posts/prove-you-are-a-robot">&#8220;Prove you are a robot&#8221;</a> is unironic reverse-CAPTCHA, that&#8217;s trivial for agents and nearly unreadable for humans.</figcaption></figure></div><p><a href="https://technically.dev/universe/authentication"><span>Authentication</span></a><span> is still a mess: agents need scoped tokens with limited permissions, not your username and password.</span></p><p><span>More challenges like this could be summarized as &#8220;the web wasn&#8217;t built for agents, and it shows.&#8221;</span></p><p><span>On the human side, we need to decide what role agents play in organizations. Are they autonomous AI employees, or just pieces of software? Should they be given high autonomy, or more frequent humans in the loop? How specialized vs general should they be?</span></p><p><span>Either way, we are heading to an exciting future, where agents and humans collaborate together.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps you make practical sense of software + AI, so you don&#8217;t hand your life over to the wrong computer use agent.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What is Rust?]]></title><description><![CDATA[The fast, safe, super difficult to write programming language that&#8217;s finally getting its flowers.]]></description><link>https://read.technically.dev/p/what-is-rust</link><guid isPermaLink="false">https://read.technically.dev/p/what-is-rust</guid><dc:creator><![CDATA[Will Raphaelson]]></dc:creator><pubDate>Tue, 28 Jul 2026 14:15:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!F479!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>If you haven&#8217;t read </span><a href="https://read.technically.dev/p/whats-a-programming-language"><span>part 1</span></a><span>, go do that, or you might be&#8230;rusty...</span></p><p><span>In </span>part 1<span> I explained why there are so many different programming languages: because languages come with tradeoffs, and everyone wants to choose their tradeoffs differently. We discussed how memory and how it&#8217;s managed is one of if not the most important of those tradeoffs, and how when it comes to memory management you pretty much need to choose between your program being fast, or your program being safe.</span></p><p><span>The speed vs. safety thing was always around, but it was ultimately manageable. Slow safe programs were fast enough for most users, and fast unsafe languages could broadly keep up with the speed of attackers trying to exploit any memory-related vulnerabilities that snuck into </span><a href="https://technically.dev/universe/production"><span>production</span></a><span>.</span></p><p><span>But the game hath changed. Today, increasingly lag-intolerant consumers rely on massive multiplayer games with millions of concurrent players, trading platforms where a millisecond of latency costs real money, and critical </span><a href="https://technically.dev/universe/infrastructure"><span>infrastructure</span></a><span> that nation-states are actively and effectively hacking. Which begged the question (again): can we have a programming language that is both fast to write and safe from a memory perspective?</span></p><p><span>Rust is a programming language that says maybe you don&#8217;t have to choose.</span></p><p><span>It was created by a Mozilla engineer named Graydon Hoare, started as a personal project in 2006, got picked up by Mozilla as an official project in 2009, and hit its stable 1.0 release in 2015. It was built from scratch to be as fast as C and C++ while making an entire category of bugs impossible to write due to its unique approach to the memory problem.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps you make practical sense of how software + AI work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><span>To understand how Rust pulls this thing off, we need to go a little deeper on memory (again). What does it look like to write in a programming languages that do or don&#8217;t require you to manually work with memory?</span></p><p><span>First, the simpler one. In higher level languages like Python there is something called </span><strong><span>the garbage collector</span></strong><span> &#8211; a glamorous position if there ever was one. The garbage collector is a sort of &#8220;engine&#8221; that runs periodically in Python programs to help handle your memory for you. It scans your memory story and cleans it up. And much like a garbage truck if you&#8217;ve ever been stuck behind one while 10 minutes late for something important, it&#8217;s slow as hell because garbage collection is a computationally intensive task. Again, tradeoffs.</span></p><p><span>In a low level language like C, you must </span><em><span>manually</span></em><span> interact with the memory system, allocating data for each piece in your program. Before you can store a user&#8217;s birthday to display it to them in an app, you need to allocate a slot for it, and when you are done with the birthday, you need to release the memory. By allocating a slot, I mean literally telling the computer: hey, I need you to store this variable (an allocation), and it will require 8 bytes and data, and you should do it here in particular. And then Mr. Computer, when we are done with this variable, you should delete that data (a release). Like I said, computers both dumb and smart.</span></p><p><span>This manual process skirts around the garbage truck &#8211; which means it&#8217;s much faster while running &#8211; but it&#8217;s incredibly time consuming and error prone to write. If you miss an allocation or release anywhere in your code, it&#8217;s likely your program will crash or be vulnerable to hackers.</span></p><p><span>Like I said, for what seems like forever these were your two choices. Easy breezy but very slow garbage collection, or rigorous and fast but highly labor intensive (and vulnerable) manual memory allocation. Rust does a third thing.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F479!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F479!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png 424w, https://substackcdn.com/image/fetch/$s_!F479!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png 848w, https://substackcdn.com/image/fetch/$s_!F479!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!F479!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F479!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!F479!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png 424w, https://substackcdn.com/image/fetch/$s_!F479!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png 848w, https://substackcdn.com/image/fetch/$s_!F479!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!F479!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7766e4df-5291-4d6a-8792-a02685bb56b1_2048x1280.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 aria-hidden="true" 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><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><h2><span>What makes Rust, Rust</span></h2><p><strong><span>The entire point of Rust is to enable developers to write manually allocated code that&#8217;s safe. </span></strong><span>It&#8217;s all about avoiding the vulnerabilities and bugs that tend to happen when you have to manually allocate memory. Both ways, western man.</span></p><p><span>So Rust&#8217;s primary thing, the thing it will </span><em><span>not</span></em><span> stop talking about at parties, is that it approaches memory management </span><em><span>differently</span></em><span>. It aims to be </span><strong><span>fast</span></strong><span>, so runtime memory management (the garbage truck) like in Python is a no-go. But those damn lower level languages are so unsafe. I saw three of them go into the bathroom together!</span></p><p><span>Rust&#8217;s Raison d&#8217;&#234;tre is the </span><strong><span>ownership system</span></strong><span>, which approaches our heralded tradeoff with a twist:</span></p><ul><li><p><span>You in fact </span><em><span>do</span></em><span> have to manage memory on your own. No garbage collection.</span></p></li><li><p><span>BUT, instead of manual memory allocation being the Wild West, Rust gives you a helpful partner of sorts to do that with you.</span></p></li></ul><p><span>Specifically, Rust elevates the role of the </span><strong><span>compiler</span></strong><span> from a simple translation machine to the world&#8217;s strongest and smartest bouncer. As you may recall, early computer scientists invented the compiler as the translation layer between human writable higher level languages and the 1s and 0s that the computer can actually run. The Rust compiler, however, does more than just translate.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A2Tf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A2Tf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png 424w, https://substackcdn.com/image/fetch/$s_!A2Tf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png 848w, https://substackcdn.com/image/fetch/$s_!A2Tf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!A2Tf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A2Tf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png" width="1456" height="842" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:842,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!A2Tf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png 424w, https://substackcdn.com/image/fetch/$s_!A2Tf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png 848w, https://substackcdn.com/image/fetch/$s_!A2Tf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!A2Tf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbb0837-a351-4a03-87c4-4bd1021a7deb_2048x1184.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 aria-hidden="true" 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><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><span>Where older manually allocated memory languages like C allow whatever bugs you write to end up in the compiled program ready to leak data or get exploited, the Rust compiler has an </span><em><span>extremely strict set of rules</span></em><span> that code </span><strong><span>must</span></strong><span> adhere to before being compiled. You physically cannot ship the bug because the compiler won&#8217;t let you build a program that isn&#8217;t responsible in regards to memory.</span></p><blockquote><p><span>&#8220;I don&#8217;t see how you can hate from outside of the club. You can&#8217;t even get in.&#8221;</span></p><p><em><span>- Chris Brown on his 2011 hit Look at me Now, and, the Rust compiler to improperly used memory</span></em></p></blockquote><p><span>So you get the speed of C, because there&#8217;s no garbage collector running in the background, but you don&#8217;t get the myriad memory bugs that have plagued C and C++ codebases for decades. The amazing Rust compiler catches crashes from accessing memory you already freed, security holes from forgetting to clean something up, all of it, before a single user ever touches the code.</span></p><p><span>This fabulous compiler is not a silver bullet. The issue is that Rust, with all its rules and requirements, is hard to write. Despite this however, developers love Rust. It&#8217;s been the most loved programming language in Stack Overflow&#8217;s annual developer survey every year since 2016, and every year it seems like more and more of the world&#8217;s software is written, or rewritten in Rust.</span></p><h2><span>The receipts: Rust in action</span></h2><p><span>The fast, safe, and beloved language is finally getting its flowers in the form of massive grassroots community growth, adoption by hardcore and influential dev teams, and endorsement by standards organizations and governments.</span></p><p><span>For years, &#8220;Rewrite It in Rust&#8221; was a joke. Any time someone on the internet mentioned a performance problem, a security bug, or really any problem at all, a Rust evangelist would show up in the comments and suggest, with complete sincerity, that the solution was to rewrite it in Rust. It became a meme, then a term of light mockery for a certain type of engineer who had discovered a new favorite language and would not shut up about it. The Rust community even has a mascot, Ferris the Crab, and a habit of spamming the &#129408; emoji into threads where it is not needed or wanted.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XgdC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XgdC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png 424w, https://substackcdn.com/image/fetch/$s_!XgdC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png 848w, https://substackcdn.com/image/fetch/$s_!XgdC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png 1272w, https://substackcdn.com/image/fetch/$s_!XgdC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XgdC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png" width="625" height="477" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:477,&quot;width&quot;:625,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!XgdC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png 424w, https://substackcdn.com/image/fetch/$s_!XgdC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png 848w, https://substackcdn.com/image/fetch/$s_!XgdC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.png 1272w, https://substackcdn.com/image/fetch/$s_!XgdC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8adacf9f-0205-4e50-9fce-3a3d2f953232_625x477.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 aria-hidden="true" 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><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><span>But as the years scrolled by, the Rust-hater became the Rust-curious after Mozilla rewrote a major service in Rust and </span><a href="https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/"><span>wrote a blog about it in 2017</span></a><span>. The Rust-curious turned to Rust-fan after Dropbox called it a &#8220;force multiplier&#8221; for their core file syncing service, and little by little Rust has started eating the world, turning skeptics into believers, one codebase at a time.</span></p><ul><li><p><a href="https://discord.com/blog/why-discord-is-switching-from-go-to-rust"><span>Discord rewrote the service that tracks who&#8217;s online and in which servers</span></a><span>, switching from Go to Rust, and saw latency improvements so dramatic the periodic spikes that plagued the Go version disappeared entirely.</span></p></li><li><p><a href="https://technically.dev/posts/what-does-cloudflare-do"><span>Cloudflare</span></a><span> rewrote a core piece of their network infrastructure and got 25% better performance at half the compute cost. </span><a href="https://technically.dev/posts/what-does-cloudflare-do"><span>Cloudflare</span></a><span> sits in front of about 20% of all web traffic.</span></p></li><li><p><a href="https://www.theregister.com/2023/04/27/microsoft_windows_rust/"><span>Microsoft has been rewriting parts of Windows in Rust for years.</span></a><span> The reason is that roughly 70% of the security vulnerabilities Microsoft has patched since 2006 trace back to memory safety issues.</span></p></li><li><p><span>The </span><a href="https://technically.dev/universe/linux"><span>Linux</span></a><span> </span><a href="https://technically.dev/universe/kernel"><span>Kernel</span></a><span> added Rust as a supported language in 2022 and researchers estimate it could eliminate around two-thirds of the security vulnerabilities in the components written in it.</span></p></li><li><p><a href="https://huggingface.co/docs/tokenizers/en/index"><span>Hugging Face rewrote their tokenizer library in Rust</span></a><span>, and it now processes a full gigabyte of text in under 20 seconds on a standard CPU, dramatically faster than the Python-based tokenizers it replaced.</span></p></li></ul><p><span>But don&#8217;t take my word for it, take Uncle Sam&#8217;s. </span><a href="https://bidenwhitehouse.archives.gov/wp-content/uploads/2024/02/Final-ONCD-Technical-Report.pdf"><span>The federal government published a report in 2024</span></a><span> recommending that the software industry move away from C and C++ toward memory-safe languages, naming Rust specifically.</span><a href="https://www.cisa.gov/resources-tools/resources/memory-safe-languages-reducing-vulnerabilities-modern-software-development"><span> The NSA and CISA have issued similar guidance.</span></a><span> When the feds start weighing in on what programming language you should use, the meme phase is probably over.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XW73!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XW73!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png 424w, https://substackcdn.com/image/fetch/$s_!XW73!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png 848w, https://substackcdn.com/image/fetch/$s_!XW73!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!XW73!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XW73!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!XW73!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png 424w, https://substackcdn.com/image/fetch/$s_!XW73!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png 848w, https://substackcdn.com/image/fetch/$s_!XW73!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!XW73!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2763178a-1e78-4098-97de-9b3f84e6594e_2048x1280.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 aria-hidden="true" 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><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><span>The trolls who mocked rust and spammed the meme were right that you probably shouldn&#8217;t undertake a full rust rewrite to change the color of a button, but wrong about most of the rest. Rust didn&#8217;t come with a flashy million-dollar marketing campaign; it came with pudding&#8230; in which there was proof that if your users want snappy, secure software (and they do) Rust can help make that happen.</span></p><h2><span>Lets try this again</span></h2><p><span>I think now we&#8217;re ready for that definition of Rust.</span></p><p><span>Rust is a statically-typed, compiled programming language that enforces memory safety through compile-time ownership semantics without requiring a garbage collector.</span></p><p><span>If you ask me, Rust adoption will continue to rise for its killer performance, tight memory safety, and growing presence in systems-level infrastructure, but also due to the rise of LLM-generated code. The fact that Rust is hard to write was a significant barrier to entry when actual humans were coding. But LLMs don&#8217;t feel that friction the same way; they can bang out thousands of lines of Rust no problem, which effectively lowers the cost of choosing it. And there seems to be a calcifying effect around language choices, with LLMs knowing the most about the languages that already have the most code written in them. Rust has a large, high-quality </span><a href="https://technically.dev/universe/open-source"><span>open source</span></a><span> footprint, which means models are well-trained on it.</span></p><p><span>There will likely be downstream consequences when it comes to maintaining the inevitable deluge of rust-slop given how steep the human rust-learning curve is, but in any case, we see no signs of slowing Rust&#8217;s massive growth in popularity.</span></p>]]></content:encoded></item><item><title><![CDATA[What's Harness Engineering?]]></title><description><![CDATA[If AI models are a commodity, the harness is the thing you want to own.]]></description><link>https://read.technically.dev/p/whats-harness-engineering</link><guid isPermaLink="false">https://read.technically.dev/p/whats-harness-engineering</guid><dc:creator><![CDATA[Paul Iusztin]]></dc:creator><pubDate>Tue, 21 Jul 2026 14:15:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ABh8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong><span>The TL;DR</span></strong></h2><p>An AI model on its own can only <strong>talk</strong>. </p><p>A <strong>harness</strong> is the software wrapped around it that lets it actually <strong>do things</strong>: touch your files, run your tools, and remember what happened.</p><ul><li><p>An AI model by itself only <strong>answers a prompt</strong>. A harness is what lets it <strong>act</strong>: use tools, remember, and take steps until a job is done.</p></li><li><p>Picture <strong>harnessing a horse</strong>: the horse is the raw power, the harness is what lets you put it to work without it bolting.</p></li><li><p>The AI coding agents you&#8217;ve heard of (<strong>Claude Code, Codex, Cursor</strong>) are all <strong>harnesses</strong>.</p></li><li><p>The <strong>frontier model</strong> is becoming a <strong>commodity</strong> (everyone rents the same few). Your harness<strong> </strong>configuration is what you want to own.</p></li></ul><p><span>The next decade of software won&#8217;t be &#8220;an app with AI added on.&#8221; </span></p><p><span>It&#8217;ll be harnesses, and the build-vs-buy call is yours to make. So read this!</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0RDi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0RDi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png 424w, https://substackcdn.com/image/fetch/$s_!0RDi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png 848w, https://substackcdn.com/image/fetch/$s_!0RDi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!0RDi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0RDi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png" width="1400" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0RDi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png 424w, https://substackcdn.com/image/fetch/$s_!0RDi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png 848w, https://substackcdn.com/image/fetch/$s_!0RDi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!0RDi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9359838-fa7f-4205-bbf8-9a735f00d7c0_1400x1000.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 aria-hidden="true" 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><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><span>For the past 6 months I&#8217;ve done a bet with myself: </span><strong><span>do </span></strong><em><strong><span>everything</span></strong></em><strong><span> through agentic tools, change a line of code or text only when I absolutely have to.</span></strong></p><p><span>At the beginning this made me incredibly slow, but as I progressed and turned into a power user, I started to see the value in harnessing AI models myself. Currently I am interacting with my computer 90% via Claude Code and I can see how harnesses have the potential to revolutionize how we think about software and computers in general.</span></p><p>Now let&#8217;s see why a raw model can&#8217;t do the job on its own, what a harness actually is, the everyday parts every harness is built from, and what all of it means for your company.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps you make practical sense of software + AI, once a week.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong><span>Why a Raw Model Isn&#8217;t Enough</span></strong></h2><p><span>On its own, an AI model does exactly one thing: you give it one input, it hands you one output, and then it stops. No memory of the last step, no ability to take the next. </span></p><p><span>That&#8217;s </span><em><span>not</span></em><span> the magic you feel in Claude Code or Codex. Those tools take dozens of steps on their own: reading your files, running things, catching their own mistakes, pulling what they need from memory or the internet, looping until the job is actually done. A raw model can&#8217;t do any of that by itself.</span></p><p><span>That repeat-until-done cycle (</span><em><span>read what&#8217;s there &#8594; decide the next step &#8594; do it &#8594; check the result &#8594; go again</span></em><span>) has a name. It&#8217;s the </span><strong><span>agent</span></strong><span> </span><strong><span>loop</span></strong><span>, and it&#8217;s the engine that turns a one-shot answer into finished work. </span></p><p><span>And the best ones don&#8217;t just act. They </span><em><span>check their own work</span></em><span>.</span><a href="https://x.com/bcherny/status/2007179832300581177"><span> Boris Cherny, who created Claude Code</span></a><span>, says the most important thing for getting great results is giving the AI a way to verify its own work: a feedback loop that, in his words, can </span><em><span>2&#8211;3&#215; the quality of the final result</span></em><span>. That self-correction is a harness feature, not a model one.</span></p><p><span>This takes us from </span><strong><span>&#8220;answers a question&#8221;</span></strong><span> to </span><strong><span>&#8220;does the job&#8221;:</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ABh8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ABh8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png 424w, https://substackcdn.com/image/fetch/$s_!ABh8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png 848w, https://substackcdn.com/image/fetch/$s_!ABh8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png 1272w, https://substackcdn.com/image/fetch/$s_!ABh8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ABh8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png" width="1400" height="780" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!ABh8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png 424w, https://substackcdn.com/image/fetch/$s_!ABh8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png 848w, https://substackcdn.com/image/fetch/$s_!ABh8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.png 1272w, https://substackcdn.com/image/fetch/$s_!ABh8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d2c0cc-3ac3-4ac5-8012-cfc65928cd58_1400x780.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 aria-hidden="true" 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><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>A raw model answers once and stops. A harness wraps it in a loop that keeps going until the job is actually finished.</em></figcaption></figure></div><p><span>If the model is the easy part and what&#8217;s built around it is the hard part, the obvious question is: what </span><em><span>is</span></em><span> a harness?</span></p><h2><strong><span>So What&#8217;s a Harness?</span></strong></h2><p><span>Picture a wild horse. It&#8217;s raw power it&#8217;s nearly useless until you </span><strong><span>harness</span></strong><span> it: reins to steer it, blinders to keep it focused on the road, a saddle so it can carry weight.</span></p><p><span>A model is the horse. The </span><strong><span>harness</span></strong><span> is the software wrapped around it. It adds the hands (tools), the memory, the reins (guardrails), and the loop that lets it take many steps. That combination (not the horse alone) is what does real work.</span></p><p><strong><span>An</span></strong><span> </span><strong><span>agent = a model + a harness</span></strong><span>. The </span><strong><span>agent</span></strong><span> is the working thing you actually use: a model with a harness wrapped around it. The model is the raw intelligence. </span></p><p><span>The harness is what puts it to work. LangChain (a popular toolkit for building these systems) frames it bluntly: the harness is everything that isn&#8217;t the model itself, and that &#8220;everything else&#8221; is where almost all of the engineering, and the magic, actually lives.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NWyy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NWyy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png 424w, https://substackcdn.com/image/fetch/$s_!NWyy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png 848w, https://substackcdn.com/image/fetch/$s_!NWyy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png 1272w, https://substackcdn.com/image/fetch/$s_!NWyy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NWyy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png" width="1400" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!NWyy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png 424w, https://substackcdn.com/image/fetch/$s_!NWyy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png 848w, https://substackcdn.com/image/fetch/$s_!NWyy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.png 1272w, https://substackcdn.com/image/fetch/$s_!NWyy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129fd74c-cfd2-4072-9113-1cf763f39498_1400x640.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 aria-hidden="true" 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><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>A model on its own is a horse, raw power, but useless. Add the harness (tools, memory, guardrails, and the loop) and you get an agent that does real work.</em></figcaption></figure></div><p><span>There&#8217;s a name for the work of building one, too. Mitchell Hashimoto (a veteran engineer, co-founder of </span><a href="https://technically.dev/posts/what-does-hashicorp-do"><span>HashiCorp</span></a><span>) calls it harness engineering: &#8220;anytime you find an agent makes a mistake, you take the time to engineer a solution such that the agent never makes that mistake again.&#8221; </span></p><p><span>So a harness is what that work leaves behind. Lessons about how the AI fails gets built into the wrapper so it stops failing that way (and instead finds new ways to fail :).</span></p><h2><strong><span>What&#8217;s Inside a Harness</span></strong></h2><p><span>At the center of the harness, we have the loop, the engine that keeps calling the model until the job is done. Plus a kit of 7 parts that allows us to steer the model&#8217;s behavior:</span></p><p><strong><span>Tools.</span></strong><span> Without them, the AI model can only provide &#8220;talk&#8221;. In other words, it can only output text, images or audio. With them, it can interact with the outer world, such as reading files from your computer, executing code, searching the web or editing a document.</span></p><p><strong><span>Memory</span></strong><span>. The AI forgets everything between sessions, so the harness gives it files to write to and read back: its long-term memory and to-do list. </span></p><p><span>The files are what let it remember anything at all and pick up where the last session left off. The simplest memory implementations are based on files, but depending on the complexity of your use case, you may need a more sophisticated solution based on </span><a href="https://technically.dev/universe/vector-database"><span>vector</span></a><span> or graph </span><a href="https://technically.dev/universe/database"><span>databases</span></a><span>.</span></p><p><strong><span>Context</span></strong><span>. The </span><a href="https://technically.dev/universe/context-window"><span>context window</span></a><span> is what the </span><a href="https://technically.dev/universe/llm"><span>LLM</span></a><span> sees at a time, in each iteration of its loop. The problem is that it&#8217;s limited to 128K, 256K, up to 1M tokens. As the </span><a href="https://technically.dev/universe/context-window"><span>context window</span></a><span> grows, the model starts to get confused and produce incorrect results, a problem known as &#8220;context rot.&#8221; The role of the harness is to keep the </span><a href="https://technically.dev/universe/context-window"><span>context window</span></a><span> sanitized by adding/removing components at each iteration. Ideally, you want to keep the context with exactly the right information that gets the job done.</span></p><p><strong><span>A </span><a href="https://technically.dev/posts/what-are-code-sandboxes"><span>sandbox</span></a></strong><span>. It&#8217;s a safe room where the AI can make a mess (run things, break things) without the risk of touching anything real in your business, such as deleting files, accessing sensitive data or even running malicious code on the computers from your private network. </span></p><p><span>The goal is to give the agent exactly as much access as it needs to get the job done. Otherwise, during its agentic loop, it can always decide to go rogue just to achieve its goals. It&#8217;s very common to start looking around for </span><a href="https://technically.dev/universe/api"><span>API</span></a><span> keys to access data from your database or other services.</span></p><p><strong><span>Guardrails.</span></strong><span> A big part of guardrails is the permission layer, which sets the rules for what the AI may do on its own: what runs freely, what needs your </span><em><span>okay</span></em><span> first, and what&#8217;s automatically denied. These need to be carefully balanced to avoid asking the human to accept each command (which adds a ton of friction, forcing the user to babysit the agent) while still asking for user input at essential points, such as deleting a file or changing one that&#8217;s not versioned.</span></p><p><strong><span>Orchestration.</span></strong><span> For complex jobs, 1 AI acts as a project lead, delegates to a team of specialist AIs, each handling a piece and then pulls the results together. A caution from experience: don&#8217;t reach for the multi-agent systems too early. I once split a job across 5 or 6 specialist AIs, and a single, well-set-up one beat the whole team.</span></p><p><strong><span>Interfaces.</span></strong><span> The same harness is reachable from your phone, laptop, browser, Slack, or WhatsApp.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vz_k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vz_k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!Vz_k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!Vz_k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!Vz_k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vz_k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Vz_k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!Vz_k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!Vz_k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!Vz_k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c81d05-30b1-48bc-84f5-1f3dc3b52ac7_1200x630.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 aria-hidden="true" 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><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>The full harness architecture.</em></figcaption></figure></div><h2><strong><span>The AI Tools You Already Know Are All Harnesses</span></strong></h2><p><span>Every popular AI tool you are using is a harness. Claude Code, Cursor, Codex: the same kind of model inside, a different harness wrapped around it.</span></p><p><span>Here&#8217;s what usually happens: when a product feels better than a plain chatbot (it remembers your project, fixes its own mistakes, actually finishes the task), that </span><em><span>feeling</span></em><span> is the </span><strong><span>harness</span></strong><span> doing its job. Two products can call the </span><em><span>exact same</span></em><span> model and feel worlds apart, purely because their harnesses are worlds apart.</span></p><p><span>And this isn&#8217;t just a vibe. In one public test done by LangChain, they changed only the harness around a coding agent (same model throughout) and it climbed from roughly 30th place into the top 5 on the </span><a href="https://technically.dev/universe/terminal"><span>Terminal</span></a><span> </span><a href="https://technically.dev/universe/benchmark"><span>Benchmark</span></a><span> used to evaluate agents.</span></p><p><span>Before we get to what this means for your company, let&#8217;s clear up 3 words that get thrown around as if they&#8217;re the same thing. </span></p><div class="callout-block" data-callout="true"><p><strong><span>&#128680; Confusion Alert</span></strong></p><p><span>1. </span><strong><a href="https://technically.dev/universe/prompt-engineering"><span>Prompt engineering</span></a></strong><span> = writing good instructions. Telling the AI clearly what you want.</span></p><p><strong><span>2. Context engineering</span></strong><span> = managing what the AI sees (the context window). You want to keep it </span><em><span>focused</span></em><span> (only what&#8217;s relevant), because piling on clutter actively confuses the model (the context rot issue).</span></p><p><span>3. </span><strong><span>Harness engineering</span></strong><span> = building the whole system around the model: the tools, the memory, the guardrails, the loop.</span></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T590!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T590!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png 424w, https://substackcdn.com/image/fetch/$s_!T590!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png 848w, https://substackcdn.com/image/fetch/$s_!T590!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png 1272w, https://substackcdn.com/image/fetch/$s_!T590!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T590!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png" width="1400" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!T590!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png 424w, https://substackcdn.com/image/fetch/$s_!T590!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png 848w, https://substackcdn.com/image/fetch/$s_!T590!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.png 1272w, https://substackcdn.com/image/fetch/$s_!T590!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c634f4c-fdb4-47a3-b085-2323c3c40595_1400x660.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 aria-hidden="true" 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><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>Prompt, context, and harness engineering are nested layers &#8212; each contains the one inside it, and harness engineering is the whole system around the model.</em></figcaption></figure></div><p><span>So harness engineering is the last step: the whole AI application around the model. Which raises the real question: should your team buy or build its own harness?</span></p><h2><strong><span>What This Means for Teams</span></strong></h2><p><span>Claude Code is a harness someone else built for general coding. It&#8217;s superb at that. But it will never know your finance rules, your data, your guardrails or your customers. The moment your AI needs to do </span><em><span>your</span></em><span> job, a generic harness hits a wall.</span></p><p><span>Still, a harness you build becomes its own product, with its own bugs, issues and maintenance overhead. Owning the layer can give you an advantage, but it&#8217;s an ongoing investment, not a one-and-done build. </span>The real question isn&#8217;t whether you can (Claude Code can build you a harness), it&#8217;s whether you should.</p><p><span>That&#8217;s why most people I know, including myself, are customizing harnesses (via skills and MCP servers) intended for coding, such as Claude Code, for their own use cases, or coupling them with Notion or Obsidian to transform them into their personal assistants.</span></p><p><span>But using coding harnesses for everything has one major drawback: they are optimized for coding, and the people building them will keep optimizing them for coding. This might lead them to behave more poorly with each version update.</span></p><p><span>Another huge drawback is that it&#8217;s almost impossible to build your own product on top of them. They are amazing as internal tools, but once you want to stitch a UI on top of them or distribute them to your users, you hit another wall.</span></p><p><span>That&#8217;s why we started seeing harnesses specialized for different domains, such as:</span></p><ul><li><p><strong><span>Creative:</span></strong><span> Descript (video), Canva Magic Studio &amp; Adobe Firefly (visuals), Figma AI (design)</span></p></li><li><p><strong><span>Legal:</span></strong><span> Harvey (drafting contracts), CoCounsel (reviewing contracts)</span></p></li><li><p><strong><span>Medical &amp; Healthcare:</span></strong><span> Abridge &amp; Nabla (generating clinical notes from doctor-patient conversations)</span></p></li><li><p><strong><span>Financial:</span></strong><span> I personally worked at ZTRON as a harness for financial advisors</span></p></li><li><p><strong><span>Productivity:</span></strong><span> Notion AI</span></p></li></ul><p><span>But there is a middle ground between building and buying. As harnesses are being standardized, major frameworks such as </span><a href="https://github.com/pydantic/pydantic-ai-harness"><span>Pydantic AI&#8217;s Harness</span></a><span>, </span><a href="https://pi.dev/"><span>Pi</span></a><span> or </span><a href="https://www.langchain.com/deep-agents"><span>LangChain&#8217;s Deep Agents</span></a><span> have recently entered the game. </span></p><p><span>They&#8217;re good open source starting points that provide the agentic loop, the 7 key parts and the option to easily add your own UI/UX and </span><a href="https://technically.dev/universe/distribution"><span>distribution</span></a><span>. </span></p><p><span>You don&#8217;t need to build a harness tomorrow, but it&#8217;s important to know that you </span><em><span>can</span></em><span> build a custom harness when you&#8217;re ready, and it&#8217;s a piece of your stack that&#8217;s worth owning.</span></p><h2><strong><span>Harness in Conversation</span></strong></h2><blockquote><p><em><span>&#8220;We&#8217;re still building out the harness around the model.&#8221;</span></em></p></blockquote><p><span>We have the AI. Now we&#8217;re building the software that lets it actually do the job.</span></p><blockquote><p><em><span>&#8220;That&#8217;s a model problem, not a harness problem.&#8221;</span></em></p></blockquote><p><span>The AI itself is getting it wrong, versus we just haven&#8217;t given it the right tools or memory yet. (Usually it&#8217;s the second one.)</span></p><blockquote><p><em><span>&#8220;We don&#8217;t want to be locked into someone else&#8217;s harness.&#8221;</span></em></p></blockquote><p><span>We want to own the layer that makes our AI </span><em><span>ours</span></em><span>, instead of renting it from a vendor.</span></p><blockquote><p><em><span>&#8220;We should switch to an open-source harness.&#8221;</span></em></p></blockquote><p><span>Move off a closed tool like Claude Code to an open-source alternative you can see inside and bend to your needs, such as OpenCode or Pi.</span></p><h2><strong><span>Further Reading</span></strong></h2><ul><li><p><span>If this isn&#8217;t enough harness engineering talk for you, I&#8217;m publishing a series on harness eng soon on my Substack, </span><a href="http://decodingai.com"><span>DecodingAI</span></a><span>.</span></p></li><li><p><span>Letting an AI check its own work is the single biggest lever for getting good results out of it, straight from</span><a href="https://x.com/bcherny/status/2007179832300581177"><span> the engineer who built Claude Code</span></a><span>.</span></p></li><li><p><span>If you want the full parts-list of a harness, plus the test where swapping only the wrapper took a coding agent from 30th place into the top 5, it&#8217;s all in</span><a href="https://www.langchain.com/blog/the-anatomy-of-an-agent-harness"><span> the anatomy of an agent harness</span></a><span>.</span></p></li><li><p><span>More on the &#8220;notebook&#8221; that lets an agent remember across sessions, in Anthropic&#8217;s guide to</span><a href="https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents"><span> effective harnesses for long-running agents</span></a><span>.</span></p></li><li><p><span>Learn</span><a href="https://blog.bytebytego.com/p/how-openai-codex-works"><span> how OpenAI&#8217;s Codex actually works</span></a><span>.</span></p></li><li><p><span>More on keeping the AI&#8217;s context window clean, and avoiding &#8220;context rot,&#8221; in Anthropic&#8217;s guide to</span><a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents"><span> effective context engineering</span></a><span>.</span></p></li></ul>]]></content:encoded></item><item><title><![CDATA[What does Turbopuffer do?]]></title><description><![CDATA[And what's going on in the search tooling market?]]></description><link>https://read.technically.dev/p/what-does-turbopuffer-do</link><guid isPermaLink="false">https://read.technically.dev/p/what-does-turbopuffer-do</guid><dc:creator><![CDATA[David Krevitt]]></dc:creator><pubDate>Tue, 14 Jul 2026 14:30:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!72Ge!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc2bf50-223b-4b09-be5a-146a799bb845_2048x1297.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><span>The TL;DR</span></h2><p><span>Turbopuffer is a search engine built on top of object storage (like </span><a href="https://technically.dev/posts/aws-for-the-rest-of-us"><span>AWS</span></a><span> S3).</span></p><ul><li><p><span>AI applications need to quickly search through lots of unstructured data (text + </span><a href="https://technically.dev/universe/embeddings"><span>embeddings</span></a><span>). Cursor searches through your codebase, Notion AI searches through your documents.</span></p></li></ul><ul><li><p><span>In the early days of AI applications, most vector search options (like </span><a href="https://technically.dev/universe/vector-[[database:database"><span>vector databases</span></a><span>) stored data on RAM to ensure fast </span><a href="https://technically.dev/universe/query"><span>query</span></a><span> times. This turned out to be quite expensive.</span></p></li></ul><ul><li><p><span>Turbopuffer offers a </span><strong><span>search engine</span></strong><span> on data stored in </span><strong><span>object storage</span></strong><span> (like AWS S3), and only pulls data into RAM when it&#8217;s needed. They claim this makes it 10x cheaper while still being fast.</span></p></li></ul><ul><li><p><span>Competitors like Pinecone and </span><a href="https://technically.dev/posts/what-does-elastic-do"><span>Elastic</span></a><span> also followed suit with &#8220;</span><a href="https://technically.dev/universe/server"><span>serverless</span></a><span>&#8221; vector search tooling.</span></p></li></ul><p><span>Search is one of the most competitive spaces in AI </span><a href="https://technically.dev/universe/infrastructure"><span>infrastructure</span></a><span>. Turbopuffer reportedly crossed $100M in ARR recently, so their early bet on object storage is paying off.</span></p><p><span>Their story is one of an obsessive focus on knowing what can be done with the tools </span><a href="https://technically.dev/universe/cloud"><span>cloud</span></a><span> providers like AWS + GCP have on offer. It&#8217;s a tale as old as 2006.</span></p><h2><span>Separation of storage and compute</span></h2><p><span>In 2006, AWS </span><a href="https://press.aboutamazon.com/2006/3/amazon-web-services-launches"><span>launched</span></a><span> a simple product without fanfare. It let developers store + retrieve unlimited numbers of files, and it promised not to lose track of them:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w3P6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w3P6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png 424w, https://substackcdn.com/image/fetch/$s_!w3P6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png 848w, https://substackcdn.com/image/fetch/$s_!w3P6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png 1272w, https://substackcdn.com/image/fetch/$s_!w3P6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w3P6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png" width="1456" height="406" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!w3P6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png 424w, https://substackcdn.com/image/fetch/$s_!w3P6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png 848w, https://substackcdn.com/image/fetch/$s_!w3P6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.png 1272w, https://substackcdn.com/image/fetch/$s_!w3P6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbd685d9-cf19-456c-8ffc-9183ca1029cb_1886x526.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 aria-hidden="true" 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><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><span>All software does is basically manipulate files, and S3 (Simple Storage Service) was a bottomless filing cabinet.</span></p><p><span>Renting it was much cheaper than buying your own filing cabinet of merely moderate size.</span></p><p><span>AWS </span><a href="https://aws.amazon.com/about-aws/whats-new/2006/08/24/announcing-amazon-elastic-compute-cloud-amazon-ec2---beta/"><span>launched</span></a><span> S3&#8217;s soulmate, EC2 (Elastic Compute Cloud) in a similarly low-energy way in August of 2006. It let you rent as many servers as you needed, whenever you needed them.</span></p><p><span>This pairing (the foundation of the Cloud) made developers rather thirsty. By separating compute from storage as separate cloud </span><a href="https://technically.dev/posts/what-are-microservices"><span>services</span></a><span>, you could reimagine stodgy, ubiquitous infrastructure like databases.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bBUO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bBUO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png 424w, https://substackcdn.com/image/fetch/$s_!bBUO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png 848w, https://substackcdn.com/image/fetch/$s_!bBUO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png 1272w, https://substackcdn.com/image/fetch/$s_!bBUO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bBUO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png" width="1456" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!bBUO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png 424w, https://substackcdn.com/image/fetch/$s_!bBUO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png 848w, https://substackcdn.com/image/fetch/$s_!bBUO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.png 1272w, https://substackcdn.com/image/fetch/$s_!bBUO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc18f0e2-c96b-4d79-9a94-bea0dceb608c_2048x1441.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 aria-hidden="true" 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><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><span>The creators of </span><a href="https://technically.dev/posts/what-does-snowflake-do"><span>Snowflake</span></a><span> were two of those developers, and the </span><a href="https://technically.dev/universe/analytics"><span>analytics</span></a><span> warehouse was a ripe first target. As </span><a href="https://technically.dev/posts/what-does-snowflake-do"><span>Snowflake</span></a><span> co-founder Benoit Dageville </span><a href="https://www.youtube.com/watch?v=XqzSjya54BU"><span>put it</span></a><span>:</span></p><blockquote><p><span>I always said that as older software guys we were at the mercy of hardware and its resources. The cloud was a game changer for analytic workloads that has lots of peaks and troughs in usage. It really needed that elasticity the cloud offered.</span></p></blockquote><p><span>Him and his co-founder Thierry Cruanes left Oracle and started Snowflake in 2012, which today has an ~$80B market cap. Larry Ellison had no comment.</span></p><p><span>These two AWS launches from 2006 unlocked an untold number of novel data infrastructure companies to be built.</span></p><ul><li><p><span>Analytics + </span><a href="https://technically.dev/universe/machine-learning"><span>machine learning</span></a><span>: </span><a href="https://technically.dev/posts/what-does-databricks-do"><span>Databricks</span></a><span>, Snowflake&#8217;s nemesis for data engineering workloads</span></p></li><li><p><span>Transactional databases: Neon, the transactional database (acquired by Databricks)</span></p></li><li><p><span>Streaming: WarpStream, the real-time event streaming service (acquired by their competitor </span><a href="https://technically.dev/universe/kafka"><span>Kafka</span></a><span>)</span></p></li><li><p><span>Search: Turbopuffer</span></p></li></ul><p><span>All have succeeded by rebuilding foundational data tooling on top of object storage like S3.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sAB8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sAB8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png 424w, https://substackcdn.com/image/fetch/$s_!sAB8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png 848w, https://substackcdn.com/image/fetch/$s_!sAB8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png 1272w, https://substackcdn.com/image/fetch/$s_!sAB8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sAB8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png" width="1456" height="946" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:946,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!sAB8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png 424w, https://substackcdn.com/image/fetch/$s_!sAB8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png 848w, https://substackcdn.com/image/fetch/$s_!sAB8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.png 1272w, https://substackcdn.com/image/fetch/$s_!sAB8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d131f26-cc86-427f-8e50-09e595ab9b73_2048x1331.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 aria-hidden="true" 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><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><h2><span>Enter vector search</span></h2><p><span>AI agents make analytics workloads look quaint by comparison. Just the vector search piece is a perfect storm of how to run up a cloud bill:</span></p><ol><li><p><strong><span>Embeddings are big</span></strong><span>. If a chunk of text is 1KB, an embedding vector representing the meaning of that text could be 6KB.</span></p></li><li><p><strong><span>Agents search more than humans</span></strong><span>. Way more. If you watch a coding agent work, it runs tons of searches. I usually only search &#8220;Oprah net worth&#8221; once a week.</span></p></li><li><p><strong><span>Agents produce more vectors</span></strong><span>. More </span><s><span>slop</span></s><span> code + documents means the search index grows faster than it would if it was just people making stuff.</span></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lgHi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lgHi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lgHi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lgHi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lgHi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lgHi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg" width="698" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:698,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!lgHi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lgHi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lgHi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lgHi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676fff9a-e15a-4775-8b36-05c94dc08f21_698x500.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 aria-hidden="true" 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><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><span>Search engines like </span><a href="https://technically.dev/posts/what-does-algolia-do"><span>Algolia</span></a><span> or Elastic at this time were designed for a person searching in a search box on a website. They needed instant feedback, so data was stored in RAM. High cost was a tradeoff for low latency.</span></p><p><span>For agents using vector search, the tradeoff needed to be different. High cost was untenable, so the solution would be to trade a little latency.</span></p><div class="callout-block" data-callout="true"><p><span>&#128161;</span><strong><span>Food for thought</span></strong></p><p><em><span>There&#8217;s debate as to whether agents need vector search, or whether they can just use keyword search (the &#8220;grep&#8221; tool) to hunt-and-peck their way through your codebase or documents.</span></em></p><p><em><span>Claude Code famously (currently) </span><a href="https://news.ycombinator.com/item?id=43164253"><span>doesn&#8217;t actually index your codebase</span></a><span> into a searchable vector index.</span></em></p><p><em><span>This is a pretty silly debate: not every use case is the same.</span></em></p></div><h2></h2>
      <p>
          <a href="https://read.technically.dev/p/what-does-turbopuffer-do">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What is Rust? Part 1: What is a Programming Language?]]></title><description><![CDATA[The fast, safe, super difficult to write programming language that&#8217;s finally getting its flowers.]]></description><link>https://read.technically.dev/p/whats-a-programming-language</link><guid isPermaLink="false">https://read.technically.dev/p/whats-a-programming-language</guid><dc:creator><![CDATA[Will Raphaelson]]></dc:creator><pubDate>Tue, 07 Jul 2026 14:30:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!icwK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Rust is a statically-typed, compiled programming language that enforces memory safety through -- *</span><em><span>record scratch*</span></em></p><p><span>Woah woah woah. Let&#8217;s back up.</span></p><h2><span>What is a programming language?</span></h2><p><span>Computers have the notable distinction of being at once one of the most intelligent inventions in human history and also being super dumb. They can technically do almost anything, but only if you tell them exactly what to do in exactly their language &#8211; the language of 1s and 0s.</span></p><p><span>See, a computer is a bundle of physical circuits that can be open (represented as 0) or closed (represented as 1), and all the data a computer uses and all the logic it performs is articulated to it in the language of 1s and 0s called </span><a href="https://technically.dev/universe/binary"><span>binary</span></a><span>; the OG programming language. It&#8217;s just ones and zeros all the way day.</span></p><p><span>Writing complicated logic with only two numbers at your disposal is obviously hard. Accordingly, telling computers what to do was a massive pain for many many years, so much so that it was generally confined to the domain of nerds at universities like Grace Hopper and Ada Lovelace. They&#8217;d write out the literal 1s and 0s the hardware understood, sometimes by physically flipping switches or feeding in stacks of cards with holes punched in them. This was, as you might expect, difficult, error prone, and a pretty far cry from the work you see modern software engineers doing at the specialty coffee shop.</span></p><div class="callout-block" data-callout="true"><p><strong>&#128027; Bug Report</strong></p><p>The term &#8220;bug&#8221; in software traces back to 1947, when Grace Hopper&#8217;s team found an actual moth stuck in their Harvard Mark II relay computer. They taped it into the logbook with the note &#8220;first actual case of bug being found.&#8221;</p></div><p><span>As these early computer scientists wrote more code, they realized a lot of their code did the same things, like adding two numbers or storing a name, and they concluded they needed an easier way to write these common instructions. They landed on the idea of a &#8220;higher level&#8221; programming language that read like English, which would then be run through a translator called the compiler that turned it into 1s and 0s for the machine. Easy for humans to write, easy for computers to run, everybody wins! Thus the first mainstream programming language was born: FORTRAN.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!icwK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!icwK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png 424w, https://substackcdn.com/image/fetch/$s_!icwK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png 848w, https://substackcdn.com/image/fetch/$s_!icwK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!icwK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!icwK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png" width="1456" height="864" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:864,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!icwK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png 424w, https://substackcdn.com/image/fetch/$s_!icwK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png 848w, https://substackcdn.com/image/fetch/$s_!icwK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!icwK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ea45a9-fe3d-4340-becf-9c345cce1daa_2048x1216.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 aria-hidden="true" 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><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><div class="callout-block" data-callout="true"><p><span>Confusion alert: when we talk about &#8220;high level&#8221; and &#8220;low level&#8221; languages, we&#8217;re not making a dig at lower level languages. It&#8217;s about abstraction. At the lowest level you have binary ones and zeros, the actual language of the machine. Assembly sits one rung above that, giving human-readable names to those same operations. Each &#8220;higher&#8221; layer up the stack abstracts away more of the underlying detail, trading fine-grained control for readability and ease.</span></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BG1J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BG1J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png 424w, https://substackcdn.com/image/fetch/$s_!BG1J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png 848w, https://substackcdn.com/image/fetch/$s_!BG1J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png 1272w, https://substackcdn.com/image/fetch/$s_!BG1J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BG1J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png" width="1456" height="988" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:988,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!BG1J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png 424w, https://substackcdn.com/image/fetch/$s_!BG1J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png 848w, https://substackcdn.com/image/fetch/$s_!BG1J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.png 1272w, https://substackcdn.com/image/fetch/$s_!BG1J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f369af4-86fa-4a43-a8b4-d370d4e67fb9_2048x1390.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 aria-hidden="true" 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><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><h2><span>Why are there so many programming languages?</span></h2><p><span>We don&#8217;t talk about programming languages much here at Technically because, well, for the purpose of understanding the world of tech at a high level, we don&#8217;t really think it matters. Most languages are more alike than they are different, and they all do basically the same things give or take a few things. So, why even have more than one language? You just said computers only speak 1s and 0s right and so we made FORTRAN to solve that. Why do developers today write in over a hundred of them?</span></p><p><strong><span>The answer is in tradeoffs</span></strong><span>. Since a language is a layer on top of 1s and 0s, each one makes slightly different design decisions on its journey to being English-like. The authors of FORTRAN made a thousand little judgment calls on your behalf. What gets to be easy and what stays hard? What happens automatically and what do you have to spell out by hand?</span></p><p><span>Some of FORTRAN&#8217;s decisions people liked, others they didn&#8217;t. So they wrote a different language, and then another, and then another, and each of these human-friendly programming languages prioritizes something different at the expense of something else. There is no best language, there is only the spectrum on which a host of tradeoffs sit.</span></p><p><span>For the purposes of understanding the wonderful world of Rust, we&#8217;re going to zoom in on one specific tradeoff: </span><strong><span>memory</span></strong><span>.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps you make practical sense of software + AI each week.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><span>A trip down memory lane</span></h2><p><span>When a program (some code) runs, it needs somewhere to keep the stuff it&#8217;s actively working with like:</span></p><ul><li><p><span>The user&#8217;s name</span></p></li><li><p><span>The current score of your little game</span></p></li><li><p><span>The contents of the text box you&#8217;re typing in right now</span></p></li></ul><p><span>This is what memory is for. You can think of it as the program&#8217;s desk; not long-term storage like a filing cabinet (that&#8217;s your hard drive), but the open workspace where things sit while you&#8217;re actually using and working with them.</span></p><p><span>The desk needs to be managed: periodically cleaned and organized. After all, it&#8217;s small, and the program never stops working. In practice this means setting new data down, grabbing data back when it&#8217;s needed, and clearing off the old stuff to make room. This is the harrowed discipline of </span><strong><span>memory management</span></strong><span>.</span></p><p><span>There are lots of different ways to manage memory. Some approaches prioritize speed, and others deliver safety.</span></p><ul><li><p><span>By </span><strong><span>speed</span></strong><span>, I mean exactly what it sounds like. How fast the program runs. How quickly the page loads, how little the game stutters, how fast the trade goes through.</span></p></li><li><p><span>By </span><strong><span>safety</span></strong><span>, I mean how well the language stops you from hurting yourself. A safe language makes it hard to write the kind of bug that crashes the program, leaks private data, or hands an attacker a way in. An unsafe language trusts you to never screw up, which, reader, you will.</span></p></li></ul><p><span>By way of example, many higher level languages, like Python, manage memory for you automatically. That makes them safe and forgiving, but it costs in terms of performance because the program is spending energy doing memory housekeeping chores in the background while it runs. I.e. Python is considered slow.</span></p><p><span>Many lower-level languages, like C, are wicked fast because they don&#8217;t do any automatic memory management, but that means they&#8217;re hard to write (you have to manage the memory yourself) and prone to failure.</span></p><p><span>There are other tradeoffs inherent in different programming languages too, which won&#8217;t be the focus of this series, but are worth mentioning:</span></p><ul><li><p><span>Static vs. dynamically typed. Does the language require you to declare what kind of data every variable holds (a number, a word, true/false) before it runs? Static typing catches bugs early but is more rigid to write. Dynamic typing is faster and looser to write, but errors show up at runtime in </span><a href="https://technically.dev/universe/production"><span>production</span></a><span>, where they hurt.</span></p></li><li><p><strong><span>Compiled vs. interpreted.</span></strong><span> Does the translation from code to binary happen upfront, or on the fly? Compiled languages do it all before the program runs, producing something fast and optimized. Interpreted languages translate as they go, which makes them more flexible and easier to experiment with, but slower when running.</span></p></li><li><p><strong><span>Ecosystem.</span></strong><span> A language comes with a community, a library of pre-built tools, and a job market. Python dominates data science not because it&#8217;s the fastest language (it isn&#8217;t) but because the tooling built around it is so mature that nothing else comes close.</span></p></li></ul><p><span>In any case, the memory tradeoff often ends up being the big one - the granddaddy of them all, the primary question a developer must ask themselves before embarking on a new engineering expedition: Do you want it fast or do you want it safe? Which way western man?</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lisj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lisj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png 424w, https://substackcdn.com/image/fetch/$s_!Lisj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png 848w, https://substackcdn.com/image/fetch/$s_!Lisj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png 1272w, https://substackcdn.com/image/fetch/$s_!Lisj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lisj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png" width="1456" height="683" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:683,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Lisj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png 424w, https://substackcdn.com/image/fetch/$s_!Lisj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png 848w, https://substackcdn.com/image/fetch/$s_!Lisj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.png 1272w, https://substackcdn.com/image/fetch/$s_!Lisj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a80941-050b-4a71-ac5f-cc1ef9cd0b16_2048x960.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 aria-hidden="true" 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><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><span>You might be wondering why memory in particular is so important, such that (as I&#8217;ll demonstrate) someone built an entire new language around making working with it better. In part two, we&#8217;ll go deeper on why the memory problem is more consequential than ever in the age of high speed trading, AI, and online gaming, and what one cracked engineer at Mozilla decided to do about it.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Everything is a Pipeline]]></title><description><![CDATA[Why technical concepts are often more alike then we might think.]]></description><link>https://read.technically.dev/p/everything-is-a-pipeline</link><guid isPermaLink="false">https://read.technically.dev/p/everything-is-a-pipeline</guid><dc:creator><![CDATA[Afzal Jasani]]></dc:creator><pubDate>Thu, 25 Jun 2026 14:31:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U-y3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F089ef23a-85a2-44e2-b503-0c35d7a21486_1154x576.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>We&#8217;re in a major cognitive dissonance era right now. AI is &#8220;moving so fast.&#8221; We all &#8220;feel behind.&#8221; So we use AI to deliver quick results (vibe coding, analyzing 30 page PDFs, Claude doing your taxes). But token maxxing leaves us feeling hollow, like Taco Bell after a night out. <br><br>Because it stops us from taking a moment to actually </span><em><span>think</span></em><span> or </span><em><span>understand</span></em><span> any&#8230;</span></p>
      <p>
          <a href="https://read.technically.dev/p/everything-is-a-pipeline">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What are code sandboxes?]]></title><description><![CDATA[Why coding agents need a safe place to play, just like we all do.]]></description><link>https://read.technically.dev/p/what-are-code-sandboxes</link><guid isPermaLink="false">https://read.technically.dev/p/what-are-code-sandboxes</guid><dc:creator><![CDATA[Justin]]></dc:creator><pubDate>Thu, 18 Jun 2026 14:30:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DeQ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>Sandboxes.</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DeQ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DeQ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png 424w, https://substackcdn.com/image/fetch/$s_!DeQ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png 848w, https://substackcdn.com/image/fetch/$s_!DeQ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png 1272w, https://substackcdn.com/image/fetch/$s_!DeQ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DeQ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png" width="700" height="398" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02602d33-734b-447b-9852-595ef1827ec6_700x398.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:398,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DeQ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png 424w, https://substackcdn.com/image/fetch/$s_!DeQ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png 848w, https://substackcdn.com/image/fetch/$s_!DeQ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.png 1272w, https://substackcdn.com/image/fetch/$s_!DeQ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02602d33-734b-447b-9852-595ef1827ec6_700x398.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 aria-hidden="true" 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><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><span>Though for most of my readers (who for some reason I assume were born in the 90&#8217;s) this word may evoke a quaint yet hauntingly-long-ago visage of their suburban childhoods, it means something else entirely to a software developer.</span></p><h2><strong><span>The TL;DR</span></strong></h2><p><span>Sandboxes are isolated computing environments where you can run code that you don&#8217;t entirely trust. Think of them as solitary confinement, but for a program.</span></p><ul><li><p><span>Much of software today requires you to run </span><strong><span>untrusted code</span></strong><span> &#8211; code written by a Large Language Model or even a human you don&#8217;t know.</span></p></li><li><p><span>Running untrusted code on your system is </span><strong><span>risky</span></strong><span>: it can breach your security, delete your data, and generally just mess with things.</span></p></li><li><p><span>A </span><strong><span>sandbox</span></strong><span> puts iron walls around this untrusted code so it can&#8217;t mess with things, while still allowing it to run and (hopefully) accomplish its task.</span></p></li><li><p><span>Sandboxes are absolutely </span><strong><span>exploding in popularity</span></strong><span> because of several different </span><a href="https://technically.dev/universe/llm"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">LLM</span></a><span>-related use cases.</span></p></li></ul><p><span>Sandboxes have been around for as long as I&#8217;ve been in tech. For years, products like </span><a href="https://retool.com/"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">Retool</span></a><span> (my former employer) have needed ways to let their users run arbitrary code&#8230;without being subject to the risks of their users running arbitrary code.</span></p><p><span>But with LLMs taking the center stage, they&#8217;ve gotten a second wind for the ages. There are now dozens (</span><em><span>dozens!</span></em><span>) of sandboxes for LLM startups vying for the business of small companies and enterprises alike who need a place to run random code. And I will explain them to you.</span></p><h2><strong><span>Coding agents, RL training, and other forms of untrusted code</span></strong></h2><p><span>To understand why sandboxes are having such a moment, we must first detour to understand this concept of &#8220;untrusted code&#8221; a little more deeply.</span></p><p><span>Simply put, </span><strong><span>untrusted code</span></strong><span> is code that you, yourself, have not examined closely line by line. Because you haven&#8217;t examined it closely line by line, you don&#8217;t know what it does. And because you don&#8217;t know what it does, running the code in the same places that you have your other code running is very risky. </span><em><span>Who knows</span></em><span> what it&#8217;s going to do?</span></p><p><span>Imagine you&#8217;re a prison warden (if I have any readers who are prison wardens, let me know in the comments). You&#8217;ve got your hundreds of inmates who are, for the most part, playing pretty nicely together. Then you get a call that a new prisoner is on his way; you don&#8217;t know anything about him, just that he&#8217;s rumored to be a high-profile gangbanger. Is he well behaved? Could he incite a riot? Will he try to escape? Who knows.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ae6T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ae6T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ae6T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ae6T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ae6T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ae6T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b25d0520-ee67-4f4b-83b0-ca727041abdb_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;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!ae6T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ae6T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ae6T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ae6T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d0520-ee67-4f4b-83b0-ca727041abdb_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 aria-hidden="true" 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><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><span>The warden peering into the entrance to the sandbox</span></em></figcaption></figure></div><p><span>With that uncertainty, you&#8217;re certainly not going to put him in Cell Block A with everyone else. Instead, you&#8217;ll cordon him off in solitary confinement where whatever he does won&#8217;t impact the orderly conduct of the rest of your subordinates.</span></p><p><span>In software engineering this is referred to as isolation. The prison is your </span><a href="https://technically.dev/universe/infrastructure"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">infrastructure</span></a><span> &#8211; the </span><a href="https://technically.dev/universe/server"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">server</span></a><span> your existing code runs on, the </span><a href="https://technically.dev/universe/database"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">database</span></a><span> it&#8217;s backed by, the </span><a href="https://technically.dev/universe/api"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">APIs</span></a><span> powering it. Everything for the most part is working well, and you don&#8217;t want to risk a new inmate fucking around with things.</span></p><p><span>So who are the gangbangers in our analogy? There are a few:</span></p><ul><li><p><strong><span>Internal coding agents</span></strong><span> &#8211; developers using LLMs to generate code for new features, fixing bugs, etc. This code is untrusted, so it needs a sandbox to test it before </span><a href="https://technically.dev/universe/merging"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">merging</span></a><span> into the rest of the codebase.</span></p></li><li><p><strong><span>Reinforcement Learning (RL)</span></strong><span> &#8211; when teams train their own coding agents, they need environments where the agents can play around and learn how to get better. Since the code they&#8217;re generating and running is (very) untrusted, they need a sandbox.</span></p></li><li><p><strong><span>(old school) Users </span></strong><span>&#8211; sometimes you want your users to be able to write code and run it on your systems.</span></p></li></ul><p><span>Sandboxes give developers an isolated environment to run and test these outputs &#8211; these gangbangers if you will &#8211; where they physically cannot negatively impact other parts of your stack. If they mess up, if they turn malicious, if they start a riot, the scope of damage can never extend beyond the sandbox itself.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Ytw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Ytw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!4Ytw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!4Ytw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!4Ytw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Ytw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_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;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!4Ytw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!4Ytw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!4Ytw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!4Ytw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54dc89ab-1d4f-41a8-86bb-1e4ea628fb67_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 aria-hidden="true" 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><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><span>Untrusted code, safely &#8220;doing its thing&#8221; in an isolated environment</span></em></figcaption></figure></div><p><span>By the way, this gangbanging is not theoretical. Code can absolutely get nasty and mess with your stuff. You&#8217;ve probably seen examples on X of coding agents &#8220;accidentally&#8221; deleting someone&#8217;s entire database. And for RL, logs of coding agents in sandboxes often show them attempting destructive behavior because they&#8217;re basically try anything (that&#8217;s how RL works).</span></p>
      <p>
          <a href="https://read.technically.dev/p/what-are-code-sandboxes">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How my non-engineering team at Sentry learned to ship]]></title><description><![CDATA[We moved 2,500 pages out of our CMS with Claude Code and Git. 4 months ago, most of us hadn't shipped.]]></description><link>https://read.technically.dev/p/how-matt-learned-to-ship</link><guid isPermaLink="false">https://read.technically.dev/p/how-matt-learned-to-ship</guid><dc:creator><![CDATA[Matt Henderson]]></dc:creator><pubDate>Thu, 04 Jun 2026 14:31:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fJfS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few months ago, I opened Claude Code and pointed it at our marketing site. The task was unglamorous: scan the site, find pages where internal linking was weak, and open pull requests with fixes.</p><p>Within minutes, the agent was crawling the repository and shipping pull requests across multiple pages at once. Then it hit a wall.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9QG0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9QG0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png 424w, https://substackcdn.com/image/fetch/$s_!9QG0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png 848w, https://substackcdn.com/image/fetch/$s_!9QG0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png 1272w, https://substackcdn.com/image/fetch/$s_!9QG0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9QG0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png" width="1232" height="318" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:318,&quot;width&quot;:1232,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9QG0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png 424w, https://substackcdn.com/image/fetch/$s_!9QG0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png 848w, https://substackcdn.com/image/fetch/$s_!9QG0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.png 1272w, https://substackcdn.com/image/fetch/$s_!9QG0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94de8e53-d931-4b1d-a71a-4469486052bd_1232x318.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 aria-hidden="true" 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><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>For the parts of our site that lived in GitHub as code, the agent ran wild:</p><p>18 pages updated in a single PR for a handful of AI tokens. But the pages that mattered most (like our blog), were locked behind a Content Management System (CMS) the agent couldn&#8217;t touch.</p><p>Moments like this led us to decide to kick off a migration. Four months later, ~2500 pages of <a href="https://technically.dev/posts/what-does-sentry-do">Sentry</a>&#8216;s marketing site live as Markdown and code in a Git repo, and we&#8217;re 100% out of our CMS. Here is what we learned.</p><h2><strong>Why we did it</strong></h2><p>Before the Claude Code session, we were actually expanding our CMS footprint. We wanted scalability for non-technical team members (me included at the time), guardrails to keep things on-brand, and a foundation for localization. Watching an agent do a month of SEO work in an afternoon and then stop dead at the CMS boundary changed the calculation.</p><p>Velocity was the real reason, not cost. We weren&#8217;t trying to escape a Contentful bill (though Cursor&#8217;s CMS had cost them<a href="https://leerob.com/agents"> nearly $57,000 in one year</a>, which is non-trivial). We were trying to escape the situation where an agent could update half of our site instantly and the other half not at all. That asymmetry was getting more painful by the week as we built more workflows around Claude Code.</p><p>There&#8217;s been a small wave of teams writing about similar moves: Lee Robinson<a href="https://leerob.com/agents"> migrated cursor.com</a> from a headless CMS back to Markdown in three days, spending $260 in AI tokens. Prefect<a href="https://www.prefect.io/blog/rebuilding-our-website-for-the-agent-era"> rebuilt their entire site</a> from scratch. Anita Kirkovska at Vellum<a href="https://x.com/anitakirkovska/status/2053941736049967285"> took a different path</a>, staying inside Sanity CMS but giving each marketer their own AI assistant with agent.md files that codify the team&#8217;s writing rules.</p><p>But it&#8217;s still early enough that best practices are still being written.  What was clear, was that we wanted to work on the website w/ coding agents, and having pages gated behind a CMS was a blocker.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically makes practical sense of software + AI.  Subscribe for more stories like this one.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>How we actually did it</strong></h2><p>Eli, our Sr. Growth Software Engineer wrote up the full technical playbook here, which is the right reference if you want the deep dive on Astro, Vite, the <a href="https://technically.dev/posts/how-vercel-became-the-ai-cloud">Vercel</a> Blob <a href="https://technically.dev/universe/cache">cache</a> we built for our marketing automation forms, and the <a href="https://technically.dev/universe/schema">schema</a>-to-frontmatter mapping work.</p><p>The highlights:</p><ul><li><p><strong>~2500 pages migrated by a team of 2.5 developers in a two-month window.</strong> Most of the actual code was written by Claude Code; the engineers spent most of their time planning, reviewing, and directing the agent.</p></li><li><p><strong>One directory at a time.</strong> Docs and marketing pages migrated first (easiest to template), then blog content, then the most complex interactive pages. We kept the CMS on a free tier for legacy content during the transition, which gave us a soft cutover instead of a hard one.</p></li><li><p>We changed frameworks at the same time, from Gatsby to Astro. Build times went from 14 minutes to under 6 in the migration itself, and after we shipped a Marketo form cache (the forms had been hitting an external <a href="https://technically.dev/universe/api">API</a> on every build), we got down to under 4. That works out to about 15.8 build hours saved daily across our ~95 builds/day.</p></li><li><p><strong>We consolidated ~200 bespoke pages into 3 templates</strong> during the migration. This made the codebase dramatically simpler, which makes it easier to use by coding agents. The agent doesn&#8217;t have to learn the quirks of 200 one-off pages; it learns three templates.</p></li><li><p><strong>Claude Code wrote most of the migration scripts</strong> that pulled content from Contentful&#8217;s API into our new Markdown files. We also experimented with Claude running Playwright visual regression tests against the old Gatsby site to catch unintended shifts.</p></li><li><p><strong>Broken staging builds are down ~95%</strong> and our Web Vitals score went from 89 to 97. Most of the broken-build reduction came from cutting external API dependencies out of the build process.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yiNO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yiNO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 424w, https://substackcdn.com/image/fetch/$s_!yiNO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 848w, https://substackcdn.com/image/fetch/$s_!yiNO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 1272w, https://substackcdn.com/image/fetch/$s_!yiNO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yiNO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png" width="298" height="108" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:108,&quot;width&quot;:298,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!yiNO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 424w, https://substackcdn.com/image/fetch/$s_!yiNO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 848w, https://substackcdn.com/image/fetch/$s_!yiNO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 1272w, https://substackcdn.com/image/fetch/$s_!yiNO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fe02295-3b90-46e9-bbbe-c002d9aaa920_298x108.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>What it unlocked</strong></h2><p>Things that used to require a Jira ticket, a project request, or a Looker dashboard now happen in a Claude Code session.</p><p>In the last four months, our growth team has shipped a lot more than previously possible:</p><ul><li><p><strong>147 pages edited across 2 PRs</strong> to fix link issues surfaced by our Screaming Frog crawler.</p></li><li><p><strong>50 legacy blog redirects cleaned up in about 5 minutes.</strong> This used to be a backlog ticket that nobody got to.</p></li><li><p><strong>116 internal-link improvement PRs</strong> opened by a<a href="https://github.com/Matth3nd3rson/hub-and-spoke-seo"> hub-and-spoke tool I built</a> that prioritizes pages by SEO value. It runs as a Claude Code skill and pulls authority data from Ahrefs via MCP.</p></li><li><p><strong>10 pages updated or built same-day</strong> for product launches and A/B test outcomes. Content that used to sit stale for months because nobody had cycles to update it.</p></li><li><p><strong>11 active A/B tests running concurrently</strong>, including a new solutions page I prototyped in an afternoon. Each of these would have been a cross-functional project request before.</p></li></ul><p>Two of the things we built deserve a longer look because they&#8217;re the artifacts most likely to be useful to other teams.</p><h3><strong>Skills as templates</strong></h3><p>We have Skills (AI instruction files) for each page type: landing pages, product pages, solutions, blog posts, cookbook recipes, workshop templates. Each one encodes the structure, the SEO requirements, the brand patterns, and the component library for that page type.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fJfS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fJfS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png 424w, https://substackcdn.com/image/fetch/$s_!fJfS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png 848w, https://substackcdn.com/image/fetch/$s_!fJfS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png 1272w, https://substackcdn.com/image/fetch/$s_!fJfS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fJfS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png" width="804" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdbaa131-cb0e-4441-b228-be634b74f825_804x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:804,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!fJfS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png 424w, https://substackcdn.com/image/fetch/$s_!fJfS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png 848w, https://substackcdn.com/image/fetch/$s_!fJfS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.png 1272w, https://substackcdn.com/image/fetch/$s_!fJfS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbaa131-cb0e-4441-b228-be634b74f825_804x622.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 aria-hidden="true" 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><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>The current set of /create-* Skills available to anyone working in our marketing repo.</em></figcaption></figure></div><p>When anyone on the team asks Claude to create a new landing page, it doesn&#8217;t start from a blank file. The Skill interviews them for the required fields (slug, display name, SEO <a href="https://technically.dev/universe/metadata">metadata</a>, hero copy), produces a structured Markdown or JSON file that matches the page-type schema, and opens a PR for review.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mhTq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mhTq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png 424w, https://substackcdn.com/image/fetch/$s_!mhTq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png 848w, https://substackcdn.com/image/fetch/$s_!mhTq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png 1272w, https://substackcdn.com/image/fetch/$s_!mhTq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mhTq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png" width="796" height="671" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:671,&quot;width&quot;:796,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!mhTq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png 424w, https://substackcdn.com/image/fetch/$s_!mhTq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png 848w, https://substackcdn.com/image/fetch/$s_!mhTq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.png 1272w, https://substackcdn.com/image/fetch/$s_!mhTq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdd181f-20b0-403a-9221-aedc56d55d22_796x671.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 aria-hidden="true" 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><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>A Skill in motion &#8212; /create-product-page walks the user through SEO metadata, copy, and assets before opening a PR.</em></figcaption></figure></div><p>This is the same consistency our CMS templates used to give us, except the agent actually follows the rules (humans are less observant than agents to pedantic instructions).</p><h3><strong>The developer cookbook</strong></h3><p>A few weeks ago we shipped the<a href="https://sentry.io/cookbook/"> Sentry Cookbook</a>, a collection of recipes that solve specific developer problems with copyable code.</p><p>It contains recipes like:</p><ul><li><p>&#8220;Debug undefined properties in <a href="https://technically.dev/universe/react">React</a> Native with Sentry Logs&#8221;</p></li><li><p>&#8220;Automate weekly performance digests with Claude Code + Sentry MCP&#8221;</p></li><li><p>&#8220;Monitor your MCP <a href="https://technically.dev/universe/server">server</a> with Sentry&#8221;</p></li></ul><p>We built it because of how we were watching our traditional blog get consumed: organic search traffic to long-form posts has been falling for two years, but LLMs and AI Overviews keep citing structured, executable content.</p><p>The cookbook format collapses the distinction between content for SEO and content for users. Both audiences (developers + LLMs) need the same shaped answer: structured, short, and code-first.</p><p>We&#8217;re early on with this approach, but early returns are looking good, and the structure feels right.</p><h2><strong>What&#8217;s harder than we expected</strong></h2><p>A few honest things that didn&#8217;t go smoothly:</p><ul><li><p><strong>Design fidelity took longer than the data migration.</strong> Anita made the same point in her Vellum writeup, and we hit it too. Pulling content from Contentful into Markdown was a scripted job. Getting the new Astro pages to <a href="https://technically.dev/universe/render">render</a> the same as the old Gatsby pages, pixel for pixel, was the slow part. Claude Code is good at producing functional code; matching a specific existing design 1:1 is still hard.</p></li><li><p><strong>Human Error.</strong> Someone on our team added an email validation rule to a form during the migration that they thought was innocuous. It tanked a key conversion <a href="https://technically.dev/universe/metric">metric</a> for a few days before we caught it.</p></li><li><p><strong>Build <a href="https://technically.dev/universe/infrastructure">infrastructure</a> was an under-appreciated source of failure.</strong> The Marketo cache we built late in the migration to fix recurring build breaks turned out to be one of the highest-leverage changes of the whole project, not because it sped up builds (though it did), but because it eliminated a class of failure we&#8217;d been quietly working around for years. Worth doing before you &#8220;need&#8221; to.</p></li><li><p><strong>The team learning curve is real but smaller than expected.</strong> I couldn&#8217;t write code four months ago. Most of our marketing team couldn&#8217;t either. A handful of us are opening PRs now, not because anyone learned to be an engineer, but because the environment forced enough fluency to keep up. If your team is going to do this, plan for the first month being slower than feels comfortable.</p></li></ul><h2><strong>What we&#8217;re working on next</strong></h2><p>Next on our team we&#8217;re tackling autonomous workflows: agents that can run on a schedule.</p><p>We&#8217;ve shipped one already, a workflow that routes specific kinds of Linear tickets directly to Claude. A ticket gets filed, an agent picks it up, a PR shows up for review.</p><p>So far it works best for small, well-scoped fixes (broken links, typo corrections, blurb updates), but we&#8217;re still figuring out which tasks are agent-ready and which need a human in the loop on every step.</p><p>The other thing we&#8217;re investing in is AI code review. The biggest risk with letting agents touch <a href="https://technically.dev/universe/production">production</a> is that quality control falls on whoever&#8217;s reviewing PRs, and reviewers miss things in a batch of 50 changes.</p><p>We&#8217;re still just scratching the surface. The migration itself is done, the velocity has been surprising, and the quick examples above are already more than we shipped in the year before this.</p><p>But every week we&#8217;re finding another workflow that could be moved off of SaaS and onto our codebase, another report that could be a Claude Code skill, another recurring task that could become a scheduled loop. Over time, I assume we&#8217;ll shift from spending time building this tooling to just using the tools we&#8217;ve built.</p><div><hr></div><p><strong>Resources:</strong></p><ul><li><p>Eli&#8217;s <a href="https://blog.sentry.io/cut-build-times-delete-cms/">technical playbook</a> on the Sentry migration (Astro, Vite, Markdown, the Marketo cache)</p></li><li><p>Lee Robinson&#8217;s<a href="https://leerob.com/agents"> migration writeup</a> for cursor.com</p></li><li><p>Prefect&#8217;s<a href="https://www.prefect.io/blog/rebuilding-our-website-for-the-agent-era"> rebuild post</a></p></li><li><p>Anita Kirkovska&#8217;s<a href="https://x.com/anitakirkovska/status/2053941736049967285"> in-CMS approach</a> using Sanity + agent.md</p></li><li><p>The<a href="https://sentry.io/cookbook/"> Sentry Cookbook</a></p></li><li><p>The<a href="https://github.com/Matth3nd3rson/hub-and-spoke-seo"> hub-and-spoke SEO tool</a> referenced above</p></li></ul>]]></content:encoded></item><item><title><![CDATA[All about Infrastructure as Code and Terraform]]></title><description><![CDATA[The deceptively simple text files that keep you from breaking your apps.]]></description><link>https://read.technically.dev/p/all-about-infrastructure-as-code</link><guid isPermaLink="false">https://read.technically.dev/p/all-about-infrastructure-as-code</guid><dc:creator><![CDATA[Will Raphaelson]]></dc:creator><pubDate>Thu, 28 May 2026 14:31:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c7d4ac9a-9b8f-426f-a48b-0eed2d21f3a3_1500x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At my first tech job, I attempted to change proverbial castes. To go from my lowly, near-subhuman station as an &#8220;implementation consultant&#8221; to something with status: an engineer (ooh, ahh). In particular, I went after an entry-level <a href="https://technically.dev/universe/devops">DevOps</a> engineer role, where I would take on the grunt work of systems administration, <a href="https://technically.dev/universe/infrastructure">infrastructure</a> provisioning, and acc&#8230;</p>
      <p>
          <a href="https://read.technically.dev/p/all-about-infrastructure-as-code">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What is Next.js?]]></title><description><![CDATA[The web framework your vibe-coded app is probably built in.]]></description><link>https://read.technically.dev/p/what-is-nextjs</link><guid isPermaLink="false">https://read.technically.dev/p/what-is-nextjs</guid><dc:creator><![CDATA[Justin]]></dc:creator><pubDate>Thu, 21 May 2026 14:31:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/39b4c5a7-c708-4981-bcce-b2226e3d3a72_1500x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>The TL;DR</strong></h2><p><a href="https://nextjs.org/">Next.js</a> is a web framework for React. It helps developers (and now agents) create web applications in React quickly and easily, as long as you follow a few rules.</p><ul><li><p>The magic we take for granted &#8211; type in a URL, see a website &#8211; relies on a million complicated things going on in the background</p></li><li><p><strong>Web frameworks</strong> help developers focus less on the logisti&#8230;</p></li></ul>
      <p>
          <a href="https://read.technically.dev/p/what-is-nextjs">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What’s a Package Manager?]]></title><description><![CDATA[And why are AI labs like Anthropic + OpenAI buying them up?]]></description><link>https://read.technically.dev/p/whats-a-package-manager</link><guid isPermaLink="false">https://read.technically.dev/p/whats-a-package-manager</guid><dc:creator><![CDATA[Will Raphaelson]]></dc:creator><pubDate>Thu, 14 May 2026 12:15:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9iAu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Package managers have historically been an important, but kind of boring, aspect of software development. Recently though two large acquisitions, of <a href="https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone">Bun by Anthropic</a> and of <a href="https://openai.com/index/openai-to-acquire-astral/">Astral by OpenAI</a>, have prompted renewed interest in these little <a href="https://technically.dev/universe/framework">frameworks</a>. Let&#8217;s take a look at what they are, and why billion-dollar frontier AI labs might be buying them up.</p><h2>Intro to package management</h2><p>The vast, vast majority of software, be it consumer apps like Snapchat and Strava, or B2B platforms like Salesforce and Workday, use <a href="https://technically.dev/universe/open-source">open source</a> software as building blocks. This is to say, they use code written and made public by other people to save themselves time when developing their own applications.</p><p>A classic example of a use case for leveraging open source code is if your app has anything to do with time, such as displaying the date and time to a user. Time is surprisingly complex: what time zone are users in, are they in daylight savings, do you want to display the day of the week as well? You could code up all this logic yourself, but it&#8217;s much easier to use code someone else already wrote to do this.</p><p>The world of package managers emerges when you ask: <strong>how do you actually </strong><em><strong>use</strong></em><strong> someone else&#8217;s code?</strong></p><p>One naive way might be copy-pasting code from someone else&#8217;s app or website into your own codebase, line for line. This would work, but is very inefficient. What happens if the author makes changes? What if there&#8217;s a security vulnerability discovered down the road?</p><p>For these reasons and more, the most common way that developers of open source software distribute their code is by bundling it into <em>packages</em> and publishing them for the world to use via a package manager. You can think of a package as a nice wrapper around the code that someone has authored, boxing up your little (or a lot) bit of code nicely so you can ship it to others without things getting messed up.</p><blockquote><p>&#128680; <strong>Confusion Alert </strong>&#128680;</p><p>The terms package, library, module, and framework are used mostly interchangeably in the industry, for simplicity, I&#8217;ll stick to package here.</p></blockquote><p>Package managers are programs that deal with the logistics of these &#8220;packages&#8221; of code: in particular, fetching and installing these open-source software packages. They are used almost anywhere people (or robots) write, test, or run code. The key elements of a package management system are the <strong>package manager</strong> and the <strong>package registry</strong>. Let&#8217;s quickly review how they work.</p><p>If I&#8217;m a developer starting a new project and I want to use someone else&#8217;s code for something (like handling dates), one of the first things I&#8217;m going to do is ensure I have a package manager installed on my system. The package manager makes it extremely easy to install the packages that I need. Each language maintains one or more official package manager, such as pip for Python, and npm for <a href="https://technically.dev/universe/javascript">Javascript</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EkmR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EkmR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 424w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 848w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 1272w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EkmR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png" width="1456" height="1185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1185,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!EkmR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 424w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 848w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 1272w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.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 aria-hidden="true" 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><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>For the example where I&#8217;m coding up an app where I need to display time to my user, if I was building in Python I&#8217;d use pip by opening up my <a href="https://technically.dev/universe/terminal">terminal</a> and typing pip install pendulum (pendulum is the package name). The package manager does a few things:</p><p>First, the package manager checks my system to see if pendulum is installed already. If it is, fantastic, it does nothing. If it is not, it goes out and downloads the package. But where does it go to get the package? It goes to the <strong>registry</strong>.</p><p>The package registry is a public, trusted repository of open source software packages on the internet. Each language maintains one or more official registries, such as PyPI (Python Package Index) for Python, not to be confused with pip, and the npm registry for JavaScript.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EkmR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EkmR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 424w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 848w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 1272w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EkmR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png" width="1456" height="1185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1185,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!EkmR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 424w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 848w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.png 1272w, https://substackcdn.com/image/fetch/$s_!EkmR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53fe9b5f-d875-4087-a7a5-bae4120a296c_1472x1198.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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9iAu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9iAu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png 424w, https://substackcdn.com/image/fetch/$s_!9iAu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png 848w, https://substackcdn.com/image/fetch/$s_!9iAu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png 1272w, https://substackcdn.com/image/fetch/$s_!9iAu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9iAu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png" width="1456" height="791" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:791,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!9iAu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png 424w, https://substackcdn.com/image/fetch/$s_!9iAu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png 848w, https://substackcdn.com/image/fetch/$s_!9iAu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.png 1272w, https://substackcdn.com/image/fetch/$s_!9iAu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f8535a8-9cd0-4a7f-92e7-8e509f4dceaa_1472x800.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 aria-hidden="true" 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><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>You can think of the registry as the warehouse where all of the boxed software goes to be shipped out. The authors of the software are (ideally) constantly uploading new and improved versions of their packages so users like you can benefit from the great wheels of progress.</p><p>This general process of ensuring I have the packages I need is referred to as <strong>dependency resolution &#8211; a dependency just means a package that your software needs in order to run &#8211;</strong> and it&#8217;s the core job of the package manager. And it&#8217;s a full-time job: as I code up more features, my dependencies will change, and the package manager needs to make sure what I need is installed at all times, and what I no longer need is purged from the system.</p><p>Over time, many package managers grew beyond just fetching code. See, going from code to real running software requires a few other steps. For example, after code is written and external packages are installed, something called a <strong>compiler</strong> or <strong>bundler</strong> needs to translate that code into a language that&#8217;s readable by the machines. After that, a different program actually needs to run the code, called the runtime. At least that&#8217;s how it was for a long time &#8212; different tools for different stages of the pipeline.</p><p>But newer tools like <a href="https://bun.com/">Bun</a> in the JavaScript world started collapsing this <em>entire toolchain</em> into one fast program that handles everything. This bundling is important context for understanding what AI labs actually bought, which we&#8217;ll get to shortly.</p><p>The thing I want you to know is that for the entirety of my time building software, and for decades before that, the package manager was a thing you used manually, slowly, and pretty infrequently. Starting or pulling a new project, updating a package, or running some tests locally. It was not software that anyone loved or waxed poetic about, it was just a thing you had to do.</p><p>This is because coding &#8212; making your software do what you want it to do by typing out instructions &#8212; takes a long time when humans do it. For human engineers, package management only has to be as fast as humans can decide what packages they need and can use them in their development cycle. Until recently, this was fine, because humans were the only entities that could write code.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically helps non-engineers make practical sense of software + AI, a few times a month on Thursdays.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>And then came the agents</h2><p>LLMs, on the other hand, can generate code really quickly. AI-powered coding agents can now take a loose set of requirements for a feature or whole app, plan the implementation, and then code it up across a massively parallel fleet of agents. And though the speed at which they can <em>generate</em> code is fast, they still need to <em>run </em>that code: each member of this fleet needs to resolve package dependencies, install packages in isolated environments, run tests and code, and clean up after themselves after they&#8217;re done. Just like humans do.</p><p>Even AI features geared toward non-developers increasingly require the ability to quickly write and run code. For example, when I ask Claude to produce a Word document, it installs an open-source JavaScript package called docx-js, writes code that uses that package to produce a document, and runs that code all within an isolated environment in the <a href="https://technically.dev/universe/cloud">cloud</a>.</p><p>So, using package managers went from a slow thing humans did once in a while to a thing that needs to happen tens or hundreds of times <em>a minute</em> when it&#8217;s agents writing the code. Where code runs went from a permanent thing I&#8217;d think about once per project, to something more ephemeral that needs to be rapidly spun up and torn down many times an hour.</p><p>What this means is that package managers are now critical <a href="https://technically.dev/universe/infrastructure">infrastructure</a> for AI products. They&#8217;re in the &#8220;hot path&#8221;, as we say in the biz. Every time Claude Code produces a file, or Codex writes and tests a function, package managers and runtimes are doing work on every single invocation. If they&#8217;re slow, the product feels slow. If they break, the product breaks.</p><p>Anthropic and OpenAI both have whole suites of products that involve agentic coding, from terminal-based offerings like Claude Code and Codex to their desktop apps and more. I believe that the folks at these labs realized early on that a big bottleneck in the quality of their products was going to be the sluggish package manager ecosystem. So they bought the best ones out there. And the tools they bought were the ones that had already grown beyond just package management into all-in-one toolchains that handle package management, building, and code execution.</p>
      <p>
          <a href="https://read.technically.dev/p/whats-a-package-manager">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI, tractors, and the productivity paradox]]></title><description><![CDATA[Where are AI's productivity gains hiding? What kitted out Model Ts can teach us.]]></description><link>https://read.technically.dev/p/the-ai-productivity-paradox</link><guid isPermaLink="false">https://read.technically.dev/p/the-ai-productivity-paradox</guid><dc:creator><![CDATA[Sachin]]></dc:creator><pubDate>Thu, 30 Apr 2026 13:31:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xxIb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The question everyone seems to be asking these days with respect to AI is: if it&#8217;s so impactful as claimed, why is it not showing up in any economic stats?</p><p>It is not the first time that such a paradox has shown up in the deployment of a new technology. In 1987, <a href="https://en.wikipedia.org/wiki/Productivity_paradox">Robert Solow remarked</a> that you can see the computer age everywhere except in the productivity statistics. Erik Brynjolfsson later coined the term &#8220;productivity paradox&#8221; in 1993 to describe this very phenomenon. The massive investment in information technology through the 1970s and 1980s produced no measurable uptick in productivity growth. It took nearly a decade of organizational restructuring before the gains showed up in the late 1990s. We may be in a similar lag period with AI.</p><p>One answer to why this delay happens may lie in how early technology develops through the under-studied activity of kit-making.</p><p>A kit is a set of components that are meant to be tinkered with and have no single &#8220;correct&#8221; method of usage. Steam engines were famously kits. In 1763, <a href="https://www.science.org/doi/10.1126/science.1060460">James Watt was asked to repair a scale-model Newcomen steam engine at Glasgow University.</a> The job led him to see how wastefully the Newcomen design used steam, and a year and a half later he hit on the idea of a separate condenser &#8212; building his first prototype using a brass surgical syringe as the cylinder. When he partnered with Matthew Boulton to commercialize the design, they didn&#8217;t produce finished steam engines. Instead, they sold engineering kits with extensive instructions that required on-site assembly. Boulton &amp; Watt made a killing and transformed their age. Someone even named <a href="https://boultonwatt.com/">a startup incubator</a> after them.</p><p>This rough template has foreshadowed technological revolution ever since. Whether in radio, automobiles, aircraft, electronics, or personal computers, communities of talented kit-building amateurs have disproportionately influenced early innovation. Michael Schrage, a research fellow at MIT&#8217;s Sloan School, <a href="https://makezine.com/article/technology/kits-and-revolutions/">puts this well:</a> kitonomic innovation doesn&#8217;t follow the money, the money follows the kits. The proliferation of cheap kits signals a market sector ripe for revolution more reliably than the presence of expensive cutting-edge products. On the influence of kit-making on the information age, he writes:</p><blockquote><p>So while there may be no &#8220;Steve Jobs of Kits&#8221; yet, there is surely no Steve Jobs without kits. There&#8217;s no Bill Gates or Akio Morita without kits either. Their market-transforming entrepreneurial leaps all emerged from kit-enabled cottage industries. The two Steves &#8212; Jobs and Wozniak &#8212; literally built Apple from kits. Gates and Paul Allen started Microsoft as a software systems supplier for DIY computer kit builders. Morita and Masaru Ibuka launched Sony with kits to turn AM radios into shortwave receivers. From the prewar &#8220;cat&#8217;s-whisker&#8221; playfulness of crystal radio kits to postwar floods of surplus electronics, kits became a medium, mechanism, and marketplace for next-generation invention.</p></blockquote><p>Even within kits there is an important difference between amateurs tinkering to make money <em>directly</em> from the technology itself, and users repurposing kits to <em>interpret</em> a technology in a way that fits their own context. The first kind of kit-builder is someone like Wozniak at Homebrew, building computers because <em>the computer itself</em> is the product. The second kind is a farmer in 1915 Iowa jacking up the rear wheel of his Model T to run a corn sheller. He doesn&#8217;t care about the car as a product. He cares about shelling corn.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Technically is a weekly publication that helps you make practical sense of software, AI, and sometimes farm machinery.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><strong>Users Interpret New Technology</strong></h3><p>There is an excellent paper by Ronald Kline and Trevor Pinch arguing that this second kind of creativity, what they call the &#8220;interpretative flexibility&#8221; of rural users, is what eventually led to the <a href="https://technically.dev/universe/production">production</a> of tractors and specialized trucks. Their <a href="https://technically.dev/universe/framework">framework</a> comes from the Social Construction of Technology (SCOT) tradition, which holds that different social groups assign different meanings to the same artifact. What counts as a &#8220;working&#8221; technology is not settled by engineering alone. It is settled by what communities of users actually do with it.</p><p>The paper documents how the period from roughly 1903 to 1950 was dominated by rural users employing automobiles in ways that manufacturers never intended and sometimes actively discouraged. Farm men saw the car not merely as transport but as a general source of power. As early as 1903, a Kansas farmer advised readers of the Rural New Yorker to block up the hind axle and run a belt from the wheel to a corn sheller, grinder, saw, pump, or any other machine the engine was capable of running. Cars powered washing machines, cream separators, water pumps, hay balers, wood saws, cider presses, and corn grinders. From the paper:</p><p><em>&#8220;A rancher even used a Cadillac to shear his sheep. A Maine farm man put a car to so many uses in 1915 that tax assessors did not know whether to classify it as a pleasure vehicle or a piece of agricultural machinery. Farm men also used their cars as snowmobiles, tractors, and agricultural transport vehicles.&#8221;</em></p><p>Then kit manufacturers took advantage of this. Although firms brought out kits to convert the car into a stationary power source as early as 1912, advertisements for these kits did not appear in large numbers until 1917, during wartime shortages of farm labor and horses. Some companies simply sold a pulley to be attached to a jacked-up wheel.</p><p>Eventually, most kit manufacturers realized that jacking up one wheel put undue strain on the differential gear, since one wheel would spin while the other sat stationary on the ground. Most kits were therefore designed to overcome the differential problem, taking power from the crankshaft or rear axle instead. The Lawrence Auto Power Company in St. Paul sold a $35 kit consisting of a tie-rod, two pulleys, and a metal stand that could operate a feed grinder, corn sheller, silo filler, wood saw, and cream separator.</p><p>More elaborate kits allowed the car to act as an agricultural tractor. Food shortages during the war led the federal government to encourage farmers to &#8220;plow to the fences,&#8221; which gave added incentive to buy tractors or conversion kits. Kline and Pinch found three prewar instances where farm men yoked the automobile to the plow. The conversion kits that came out in a flurry in 1917 typically consisted of tractor-like drive wheels, a heavy axle, reduction gears, a larger radiator, and forced-feed lubrication, selling for $97.50 to $350. They counted twenty-two companies manufacturing these kits.</p><p>Then came what Kline and Pinch call &#8220;closure.&#8221; By the late 1910s and 1920s, manufacturers like Ford had observed these &#8220;creative&#8221; uses by people of the farm and ergo started producing dedicated tractors and trucks as specialized products. Ford told its dealers in 1916 that it did not want them converting Ford cars into trucks and other makeshifts not sanctioned by the company. Ford released its first one tonne truck in 1916, hoping to put an end to truck conversion kits. The American Tractor Association, a powerful trade group, even requested that the War Industries Board prohibit entirely the manufacture of kits that converted automobiles into tractors. Even though commercial tractors were available in 1918, widespread use of kits continued well into the great depression, until the New Deal when families had an influx of capital to invest in specialized farm equipment.</p><p>Post-closure, the social interpretation of the car as a vehicle for transporting people stabilized. The interpretative flexibility that Kline and Pinch described completely disappeared by the early 1950s. Farm people had stopped using their autos for grinding grain, plowing fields, or carrying produce to town. Instead, they bought tractors and pickup trucks in large numbers. These new artifacts were ones that manufacturers had developed partly in response to the new interpretations of the car that rural users had pioneered decades earlier. As Kline and Pinch put it, &#8220;The users, so easily overlooked in writing the story of technology, had made their mark.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xxIb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xxIb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png 424w, https://substackcdn.com/image/fetch/$s_!xxIb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png 848w, https://substackcdn.com/image/fetch/$s_!xxIb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png 1272w, https://substackcdn.com/image/fetch/$s_!xxIb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xxIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png" width="1456" height="891" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:891,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!xxIb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png 424w, https://substackcdn.com/image/fetch/$s_!xxIb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png 848w, https://substackcdn.com/image/fetch/$s_!xxIb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.png 1272w, https://substackcdn.com/image/fetch/$s_!xxIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e39d89-ec15-40df-9792-33f85a95e9b3_1526x934.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 aria-hidden="true" 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><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 interesting bit about this for our argument is that this general-purpose use of cars, where they were modified and repurposed as farm equipment, is not something that shows up in economic statistics from the time. Kline and Pinch note that most of the kit companies seem to have led a relatively short life. The Pullford Company of Quincy, Illinois, was an exception, bringing out a $135 kit in 1917 and advertising it continuously until at least 1940. But most of these businesses were ephemeral. The products they made were local solutions to local problems, sold in small quantities to a dispersed population of tinkerers. Government surveys of the era counted how many farms had automobiles, tractors, trucks, and stationary gasoline engines, but they did not count how many farms were using a jacked-up Ford to run a cream separator.</p><h3><strong>Living in Experiential Kit Time</strong></h3><p>The kit stage in the development of a technology is characterized by rapid experiments from amateurs and tinkerers. Most of these experiments turn out to be just interesting experiments or remain relevant for a short enough time that nobody bothers to record them. Healthy innovation cultures need the human capital that this tinkering produces. But that human capital is invisible to economic stats.</p><p>Just like how people throw away or don&#8217;t look at vibe coded projects, they don&#8217;t attempt to remember or productize the general-purpose uses they engineer during the kit era. The focus is on the act itself, on developing tacit skills through doing. There is a local development of skills in a small group, but it is rarely documented because there is no time to waste on documentation. And besides, chances are that the project is not worth documenting to begin with.</p><p>The subjective experience of kit making is similar to a religious procession or participation in Burning Man, where you have to be there and do the thing to understand what the hype is about. The memory it generates lives in the public and embodied layers, in islands of early adopters and makers willing to put up with the jankiness of this stage of a technology&#8217;s development.</p><h3><strong>Kits and the Firm</strong></h3><p>In his 1937 paper &#8220;The Nature of the Firm,&#8221; Ronald Coase asked a simple question: why do firms exist at all? If markets are efficient, why don&#8217;t individuals just contract with each other for every task?</p><p>His answer was that firms exist to reduce transaction costs. The costs of discovering prices, negotiating contracts, and coordinating production are often so high that it becomes cheaper to organize activity within a single entity. The boundaries of the firm are drawn where the cost of organizing one more transaction internally equals the cost of doing it through the open market. In simpler terms, if you had to bid on an hourly paid engineer every time you have some work to do, your organization will not get much done.</p><p>But Coase&#8217;s framing leaves out the other half of the ledger. Paul Lawrence and Jay Lorsch, in their 1967 book <em>Organization and Environment</em>, showed something that will sound intuitive to anyone reading this with a desk job: that coordinating activity <em>inside</em> a firm isn&#8217;t free either. As organizations take on more diverse work, their teams become <em>differentiated </em>&#8212; they develop their own time horizons, their own goals, their own ways of thinking about problems. The engineering team working on production ready software will move at a different speed and have a slightly different culture than the R&amp;D team working on a new AI product.</p><p>Holding those worlds together requires <a href="https://technically.dev/universe/integration">integration</a>: liaison roles, cross-functional teams, and formal integrator positions whose entire job is translating between teams that no longer share a common frame. The more differentiated you become, the harder and more expensive <a href="https://technically.dev/universe/integration">integration</a> gets. Integration is expensive, but the ability to integrate different functions and teams is also a defensible moat for a company. You may know from your own working experience that not all companies are successful at <a href="https://technically.dev/universe/integration">integration</a>. Successful companies solve for <a href="https://technically.dev/universe/integration">integration</a> over and over again at different scales.</p><p>One way firms have historically reduced both kinds of cost (external transaction cost and internal integration cost) is by creating an accumulated memory layer of the experiments and skills from the kit phase. From the Kline and Pinch paper, you could think of the tractor as a product of the skills and knowledge that accumulated through the general-purpose use of cars by farmers in the 1910s and 1920s, combined with the evolution of the underlying engine technology. Ford didn&#8217;t invent the idea of using an automobile engine to pull a plow. Farmers did. Ford&#8217;s contribution was to take that scattered, tacit knowledge and embed it in an organization capable of producing a dedicated gasoline run machine at scale.</p><p>This integration of information and skill was possible because the environment had become less uncertain - prior to the Second World War, most families preferred to use automobiles over tractors so as to avoid additional expenditure. Then the New Deal provided families with capital to invest in farm specific equipment, which created a larger, more stable market for tractors.</p><p>Similarly, the first Apple computer was an accumulation of kit-stage experiments at Homebrew computing clubs, combined with the R&amp;D capabilities of Xerox labs. Firms turn accumulated memory of the kit stage of a technology into flows of capital through products. That process is itself an integration feat &#8212; pulling differentiated knowledge from workshops, labs, and factory floors into a single coherent artifact. This is undoubtedly a capability that only exists for the organization and not the individual.</p><p>To summarize, a modern firm accumulates memory in the form of organizational design, documentation, and specialization, then turns that into flows of capital and productivity through products. The really good firms keep doing this over and over again. Each product cycle is a chance to absorb what was learned in the previous kit phase and formalize it into the integration machinery &#8212; the roles, routines, and shared vocabularies that let differentiated subunits cooperate on the next product.</p><h3>The Firm and LLMs</h3><p>The firm&#8217;s traditional advantage was twofold: it could internalize transaction costs the open market couldn&#8217;t handle cheaply, and it could build integration machinery to hold differentiated expertise together under one roof. <a href="https://technically.dev/universe/llm">LLMs</a> erode both advantages, but not symmetrically.</p><p>On the market side, LLMs are rapidly making it cheaper for an individual to find specialists, evaluate contractors, synthesize scattered knowledge, and write enforceable specifications &#8212; these classic transaction costs are collapsing fast.</p><p>On the internal side, the picture is stranger. LLMs can automate some integration work, <a href="https://hbr.org/2026/02/ai-doesnt-reduce-work-it-intensifies-it">but they also accelerate the pace and volume of output inside each subunit, deepening the differentiation that integration has to span.</a> The interpretive burden of reconciling AI-assisted outputs across teams lands on individuals rather than disappearing. At least for now, internal integration costs in most firms are going <em>up</em>, not down. Several surveys of AI use in the workplace have shown that people are producing more work than previously <em>and dealing</em> with task expansion, scope creep, and<a href="https://fortune.com/2026/03/10/ai-brain-fry-workplace-productivity-bcg-study/"> &#8216;AI brain fry&#8217;</a>.</p><p>This brings us back to the question we started with. If AI is so impactful, why isn&#8217;t it showing up in the productivity stats? The Solow paradox answer is that firms haven&#8217;t reorganized yet. The computer took nearly a decade to show up in productivity numbers because the organizational work &#8212; flattening hierarchies, redrawing workflows, retraining workers, rebuilding integration machinery around the new technology &#8212; took nearly a decade to do. We are in the same lag now but with a different shape. Inside firms, integration costs are rising because differentiation between individuals and teams is accelerating faster than integration mechanisms can adapt.</p><p>The intensification of work that people feel with AI use points to this increasing integration cost. Outside firms, transaction costs are falling faster than people have habits for exploiting them &#8212; workers are not yet used to reaching past the org chart and engaging with markets constantly, and firms are not yet structured to let them. Caught in the middle, the output of AI is real but illegible to the statistics.</p><p>What comes out the other side of this lag is probably a bifurcation. Firms that can afford the integration machinery to harness AI across many differentiated teams and individuals will get very large, because the returns to scale on that machinery are enormous once it&#8217;s built &#8212; the hyperscalers are already showing what this looks like. Anthropic for example is not just a research lab, it&#8217;s also involved in <a href="https://newsroom.accenture.com/news/2025/accenture-and-anthropic-launch-multi-year-partnership-to-drive-enterprise-ai-innovation-and-value-across-industries">consulting</a>, <a href="https://www.anthropic.com/economic-index">economics</a> and media.</p><p>Firms that cannot afford that machinery will get very small, because the falling transaction costs in the market make the solo operator with an LLM stack a viable competitor to the mid-sized integrated firm. A single person with the right tools is, in a real sense, running a differentiated organization of one, paying none of the integration costs that would have made that organization impossible a decade ago. The mid-market &#8212; big enough to need serious integration but not big enough to amortize AI-era integration <a href="https://technically.dev/universe/infrastructure">infrastructure</a> &#8212; gets squeezed from both sides.</p><p>The productivity gains from this transition will without a doubt <em>eventually</em> show up in the statistics. But they will show up as the rise of a few enormous firms and a long tail of very small ones, with the integrated middle hollowing out. By the time the numbers confirm it, we will already have moved on to arguing that quantum computing, or whatever comes next, is failing to show up in the stats &#8212; forgetting that the kit stage is always invisible, and the reorganization always takes longer than anyone expects.</p>]]></content:encoded></item><item><title><![CDATA[When not to vibe code]]></title><description><![CDATA[Should I ship something myself, or call in engineering help?]]></description><link>https://read.technically.dev/p/when-not-to-vibe-code</link><guid isPermaLink="false">https://read.technically.dev/p/when-not-to-vibe-code</guid><dc:creator><![CDATA[Sarah Krasnik Bedell]]></dc:creator><pubDate>Thu, 23 Apr 2026 14:31:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/214233db-a1a0-4dd8-8d35-c9b53b484fbc_1500x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Running growth experiments at Railway, I ship changes to our web properties and content all the time.</p><p>As a technical person, but by no means a <a href="https://technically.dev/universe/frontend">frontend</a> engineer, I like to vibe code as much as I can - from growth experiments, to POCs, internal tooling, new designs, the list goes on.</p><p>It&#8217;s a balance, and I&#8217;m always trying to figure out what I should try to build myself, vs looping in the engineering team. We have a culture of being as independent as possible, without creating burden on other teams.</p><p>The most common use case I encounter is shipping a new landing page. I can open Claude Code (or any coding agent), describe the goal of the page, and voila, I have an MVP. However, the vibe coded result is just that: an MVP.</p><p>The dilemma then arises: should I ship it myself, or should I loop in engineering?</p><p>I&#8217;ve found that answering that requires considering two factors: <strong>consequences</strong> and <strong>ownership</strong>.</p><h2>You build it, you own it</h2><p>Even if a coding agent wrote every line of code, I still own the resulting product. I own both the successes and the failures.</p><p>So I need to consider:</p><p><strong>What happens when what I shipped breaks? </strong>A formatting bug on an internal dashboard is annoying, but a 404 on a live page serving millions of users is an incident.</p><p>You could call this the blast radius. Is an issue just a nuisance to me + my direct team, or does it extend to our users + customers?</p><p>Who owns making the fix? Whoever is paged at 2am needs to have all the context to fix the underlying issue. For most <a href="https://technically.dev/universe/production">production</a> web <a href="https://technically.dev/universe/infrastructure">infrastructure</a>, this person is likely not me, the marketer.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://read.technically.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Consider subscribing to Technically for more first-person accounts of non-engineers using AI at work. </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Ship internal tooling yourself</h2><p>Some of the most useful tools I&#8217;ve built with coding agents don&#8217;t need an engineer, because they never touch production infrastructure. Internal tools for data analysis or customer research don&#8217;t need an immediate fix if they break.</p><p>For example, each of the tools below took less than 4 hours to create on my own, and could even be public on the web by being deployed to Railway. They save me + our customer engineers tons of manual research time.</p><p>While not perfect, internal tools help me both understand behavior and solve problems in a much more automated way than I would otherwise.</p><p>This type of tooling is internal, not a core part of the product, used weekly by a few people, and if it breaks, the blast radius is mostly just my own time.</p><p>A few examples of internal tools I&#8217;ve vibe coded:</p><h3>Template verification tool</h3><p>Before admitting a company into Railway&#8217;s <a href="https://railway.com/partners">partner program</a>, we ensure they have a template that meets our best practices guidelines. Verifying this used to involve a support engineer launching the template and QAing it.</p><p>Now, I have an <a href="https://template-best-practices-production.up.railway.app/">app</a> to verify whether templates meet the standards by just entering the URL. This enables me to be self-sufficient and makes verification fairly instant.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fszq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fszq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png 424w, https://substackcdn.com/image/fetch/$s_!Fszq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png 848w, https://substackcdn.com/image/fetch/$s_!Fszq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!Fszq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fszq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png" width="920" height="2048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2048,&quot;width&quot;:920,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Fszq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png 424w, https://substackcdn.com/image/fetch/$s_!Fszq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png 848w, https://substackcdn.com/image/fetch/$s_!Fszq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!Fszq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fcf7f5c-50a1-4a95-95e1-17e91676e0da_920x2048.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 aria-hidden="true" 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><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>An example output from validating template structure</em></figcaption></figure></div><h3>Awareness campaign metrics dashboard</h3><p>In 2026, Railway is prioritizing broad-market awareness. This means sponsorships + brand campaigns. These are notoriously hard to track, particularly because they depend on metrics that we can&#8217;t directly collect, like YouTube views. I built a dashboard where I can enter links of YouTube videos and OSS tools we sponsor, and with the Youtube <a href="https://technically.dev/universe/api">API</a> and public `npm` data, map their engagement metrics and release dates over our growth metrics to view correlation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1iXb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1iXb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png 424w, https://substackcdn.com/image/fetch/$s_!1iXb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png 848w, https://substackcdn.com/image/fetch/$s_!1iXb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png 1272w, https://substackcdn.com/image/fetch/$s_!1iXb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1iXb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png" width="1456" height="884" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:884,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!1iXb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png 424w, https://substackcdn.com/image/fetch/$s_!1iXb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png 848w, https://substackcdn.com/image/fetch/$s_!1iXb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.png 1272w, https://substackcdn.com/image/fetch/$s_!1iXb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa11fe9c3-ce73-453e-8573-088c259514db_2048x1243.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 aria-hidden="true" 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><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">Mapping Railway&#8217;s growth over the growth of <a href="https://technically.dev/universe/open-source">open source</a> projects we sponsor</figcaption></figure></div><h3>Content quality checker app</h3><p>Community is everything to us - which is why we&#8217;ve invested in our <a href="https://railway.com/affiliate-program">affiliate program</a> to reward users who share about Railway.</p><p>As an exploration, I looked into what it would be like to automate monetary rewards (we call them bounties) for user-generated content.</p><p>This app takes a link or plain text and audits the content against a set of criteria to check for authenticity and accuracy. <em>Note: this isn&#8217;t live, and purely a POC.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xJMU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xJMU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png 424w, https://substackcdn.com/image/fetch/$s_!xJMU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png 848w, https://substackcdn.com/image/fetch/$s_!xJMU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png 1272w, https://substackcdn.com/image/fetch/$s_!xJMU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xJMU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png" width="1456" height="1281" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1281,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!xJMU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png 424w, https://substackcdn.com/image/fetch/$s_!xJMU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png 848w, https://substackcdn.com/image/fetch/$s_!xJMU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.png 1272w, https://substackcdn.com/image/fetch/$s_!xJMU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab86ce4-3fc6-49df-a4eb-d47f1b7ad6eb_1616x1422.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 aria-hidden="true" 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><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>Auditing user-generated content programmatically</em></figcaption></figure></div><p>Claude Code has completely changed my workstream - by investing just a few hours into vibe coding a tool that&#8217;ll help me do my core work, I&#8217;m able to make more informed decisions while burdening adjacent teams less with new ideas.</p><h3>When you need engineering</h3><p>Going back to vibe coding that landing page.</p><p>What if it&#8217;s not just a landing page, but a completely new section of the site, at a new subdomain, with new structure. That makes it a bit more complex.</p><p>I&#8217;d need to consider:</p><p><strong>Traffic and scale. </strong>What happens to the site if it reaches 1M daily users? At Railway, our website infrastructure is maintained by our engineering team - so we have load handling, caching, CDN configuration, and graceful degradation already in place. These aren&#8217;t things as a marketer I&#8217;d want to setup or own.</p><p><strong>Security. </strong>If the page collects user data or touches payments, this is particularly important. Even simple landing pages can be subject to attacks. There&#8217;s no way I would vibe code anything related to our <a href="https://technically.dev/posts/what-does-stripe-do">Stripe</a> <a href="https://technically.dev/universe/integration">integration</a>, for instance.</p><p><strong>Defensive thinking. </strong>I  caught a gnarly bug once where all the buttons on one marketing page broke, because we switched from capital case to sentence case, but button paths were hardcoded to capital case. An engineer might&#8217;ve caught this with defensive programming, but the coding agent did not.</p><p><strong>Monitoring. </strong>Anything user-facing should have tests and checks in place so if there&#8217;s an issue, I know about it before our users do.</p><p>All of these combine to form  the underlying <strong>engineering system</strong>.</p><p>Wherever possible, I much prefer to ship within existing systems that my engineering team has already set up, vs adding new systems myself. This allows me to iterate quickly, while leaving ownership to the engineers.</p><p>A few examples where I could implement improvements myself on top of existing engineering systems:</p><ul><li><p>Implementing a new <a href="https://railway.com/partners">landing page for partners</a> when launching our partner program in September 2025. It used existing design components, existing form integrations, and existing web infrastructure. The only truly new piece was the URL and copy.</p></li><li><p>Testing a new banner within the product experience that promotes Railway&#8217;s referral program. The banner design existed, and the <a href="https://technically.dev/universe/graphql">GraphQL</a> <a href="https://technically.dev/universe/query">query</a> for new users was already exposed to the frontend to show it to only a subset of users.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3bsz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3bsz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png 424w, https://substackcdn.com/image/fetch/$s_!3bsz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png 848w, https://substackcdn.com/image/fetch/$s_!3bsz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!3bsz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3bsz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png" width="1456" height="1152" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1152,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!3bsz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png 424w, https://substackcdn.com/image/fetch/$s_!3bsz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png 848w, https://substackcdn.com/image/fetch/$s_!3bsz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!3bsz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14ba80c-32e8-4502-96ca-ecb4fe4c561d_2048x1620.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 aria-hidden="true" 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><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><em>Railway&#8217;s partners page, mostly vibe-coded by me</em></p><p>The key insight here: while I am no frontend or design engineer by any means, I could self-serve growth experiments both on the website and within the product that are visual and copy-based, without introducing new infrastructure complexity.</p><h2>How I choose when to vibe code</h2><p>There&#8217;s a time and a place for non-engineers making code changes (in my case to web properties) with agents. For many of us, the time is now, so let&#8217;s pick the place.</p><p><strong>Start with tasks you own end to end</strong>. If you own the outcome and have all the context for any fixes required, coding agents enable us to ship things we don&#8217;t have the skillset or time to do by hand. Research, internal tools, and analysis all fall into this bucket.</p><p><strong>For frontend (web) work, separate ownership</strong>. Engineering maintains the systems, non-engineers build on top of those systems, with review. The key question is not &#8220;can I build this page&#8221;, it&#8217;s &#8220;does the system this page would live on already exist&#8221;.</p><p><strong>Engineering-heavy work</strong>, like actual product implementation, should be owned by engineers. Non-engineers might implement MVPs to illustrate strategy and vision, but ultimately the user-facing stakes require engineering rigor in a production system.</p><p>The biggest shift coding agents have facilitated is where the handoff happens.</p><p>Non-engineers (in marketing, growth, dev rel, product, etc) have far more leverage today than we did a year ago. But for our use of coding agents to be sustainable, we have to work within the right boundaries, so we don&#8217;t get our friends in engineering paged at 2am.</p>]]></content:encoded></item><item><title><![CDATA[What's an inference provider?]]></title><description><![CDATA[How the rise of open source AI models is fueling the growth of a new infrastructure category.]]></description><link>https://read.technically.dev/p/whats-an-inference-provider</link><guid isPermaLink="false">https://read.technically.dev/p/whats-an-inference-provider</guid><dc:creator><![CDATA[Will Raphaelson]]></dc:creator><pubDate>Thu, 16 Apr 2026 14:30:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!raHe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><p>Hey friends, quick note for you:</p><p>There are a few sure things in life. Death, taxes, and website rebrands. We cannot help you with the first two, but&#8230;</p><p>ICYMI, we recently redesigned the <a href="https://technically.dev">technically.dev</a> site. It should be a lot easier to read and look through now. We also brought back a crowd favorite: <a href="https://technically.dev/learning-tracks">learning tracks</a>. We&#8217;ve added new tracks like <a href="https://technically.dev/learning-tracks/how-ai-models-actually-work">How AI Models Actually Work</a> + <a href="https://technically.dev/learning-tracks/from-spreadsheets-to-databases">From Spreadsheets to Databases</a>. </p><p>And to celebrate, we&#8217;ve created a new <a href="https://technically.dev/subscribe">All-access subscription</a><strong> </strong>there that gets you access to all learning tracks (and the entire Technically archives).  </p><p>If you&#8217;re a paid Substack subscriber, you will get <strong>automatic access</strong> to this All-access subscription &#8212;&nbsp;just make sure to <a href="https://technically.dev/signup">sign up</a> on technically.dev with the same email as your Substack account.</p><p>If you&#8217;re curious to test the waters, you can start by <a href="https://technically.dev/signup">creating a free account</a> that lets you unlock a couple free posts a month. Enjoy!</p></div><p>Amidst the frenzy of AI, a new category of <a href="https://technically.dev/universe/infrastructure">infrastructure</a> vendor has emerged: The <a href="https://technically.dev/universe/inference">inference</a> provider. This white-hot newish(ish) vertical is producing some pretty big headlines for a category that, as we&#8217;ll see, is often overshadowed by big AI labs like <a href="https://technically.dev/posts/what-does-openai-do">OpenAI</a> and Anthropic. TogetherAI is in talks to raise at $7.5B, Fireworks raised at $4B last year, and Modal is in talks to raise at $2.5B &#8211; all of these are doubling and doubling every few months it would seem. NVIDIA splashed $20 billion for Groq&#8217;s inference chip technology in December, its largest acquisition to date.</p><p>So yes, inference is white hot. But what do these companies actually do? And why are they worth so much money?</p><p>Let&#8217;s dig in, shall we?</p><h2>What&#8217;s inference?</h2><p>AI didn&#8217;t take long to become totally ubiquitous. It answers your questions, summarizes your meeting notes, codes up your apps, and, if you&#8217;re a bad friend, writes your birthday cards. All of it, every AI product you touch, boils down to two things: <strong>training and inference</strong>.</p><p><strong><a href="https://technically.dev/universe/training">Training</a></strong> is how a <a href="http://technically.dev/posts/what-is-machine-learning">model learns</a>. You take a massive amount of text and use it to produce a mathematical equation that captures patterns in language: what words tend to follow what, how ideas relate to each other, what a reasonable response to a question looks like. Models like GPT and Claude were trained on enormous amounts of text from the internet, and what emerged are systems that can produce generally fluent, useful language.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J0fw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J0fw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J0fw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J0fw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J0fw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J0fw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J0fw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J0fw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J0fw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J0fw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c87a77e-7ffe-456e-b280-b2661dfca3ca_2048x1335.jpeg 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 aria-hidden="true" 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><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><strong>Inference</strong> is when the model actually does its job. Every time you send a message to <a href="https://technically.dev/universe/chatgpt">ChatGPT</a> and it responds, that&#8217;s inference. Every time Claude summarizes a document or an AI coding assistant autocompletes a function, that&#8217;s inference too. It&#8217;s the model taking what it learned during training and applying it to your input, in real time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!raHe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!raHe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!raHe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!raHe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!raHe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!raHe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png" width="1200" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97678,&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://read.technically.dev/i/193091470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.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_!raHe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!raHe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!raHe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!raHe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc73501a9-7323-4543-ab52-42da77fd32ae_1200x800.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 aria-hidden="true" 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><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>Training models has historically been the sexy part of AI, done by people in glasses, wearing turtlenecks, and holding PhDs. They are paid many dollars. Serving models, on the other hand is plumbing, but as it turns out, as every company races to add AI to their app, the plumbers are doing pretty well for themselves. Dedicated inference providers have emerged as a major force in the AI application stack, offering a convenient managed inference service for developers building AI-powered features.</p><p>In its purest and most managed form, the OpenAI and Anthropic (we&#8217;ll call them frontier labs) <a href="https://technically.dev/universe/api">API</a>s are AI inference providers. They have both trained the models and set them up for you to use easily. You make an API call: (&#8220;write my wedding vows&#8221;) and get back an inference: (&#8220;Webster&#8217;s dictionary defines love as&#8230;&#8221;). So what are we talking about here? Why would you use something special?</p><h2>Why use an inference provider?</h2><p>As someone using AI or building into your app, you have two major choices. You can use a <strong>closed-source</strong> model like ChatGPT or Claude. These are proprietary models &#8211; nobody knows how they were trained &#8211; and the only way to use them is through the people who trained them, OpenAI and Anthropic. These labs (as well as other closed-source providers like Runway, Midjourney, and Google) are very good at training models, and generally their models will be the best on the planet, but also cost the most.</p><p>Then there are <a href="https://technically.dev/universe/open-source">open source</a> models. These are built by companies or the community, and released for all to use. The weights of these models (the key to the fancy prediction equation) and sometimes even the training code are open to the public. You can download and run them yourself or even tweak them if you&#8217;d like. The most popular ones are Llama from Meta, Qwen from Alibaba, and DeepSeek.</p><p>With open-source models, you have a choice in how you actually use them. You can self-host by spinning up your own infrastructure, loading the model weights, and managing everything yourself. Or you can instead use an inference provider: a company that hosts open-source models <em>for you</em> and lets you access them through an API, just like you would with a closed-source lab.</p><p>There are a few reasons a developer might use an inference provider over just calling the inference <a href="https://technically.dev/universe/endpoint">endpoints</a> of the frontier labs directly, or running OSS models themselves.</p><p><strong>Cost.</strong> The newest Frontier models are expensive. If your use case doesn&#8217;t actually need a state of the art model like GPT-5.4 or Claude Opus, you can run an open-weights model like LLaMA on an inference provider for a fraction of the price. For high-volume, straightforward tasks like summarization, classification, or extraction, you probably don&#8217;t need the best model on the market, and the savings add up fast.</p><p><strong>Speed.</strong> The big frontier labs generally optimize for model capability over latency. If you&#8217;re building something where response time matters (autocomplete, real-time agents), inference providers running on optimized hardware can get you significantly faster performance.</p><p><strong>Resilience at scale.</strong> If you&#8217;re <a href="https://lovable.dev/blog/routing-billions-of-tokens-per-minute">big enough</a> that OpenAI having an outage means your product has an outage, you have a problem. Inference providers let you route across multiple models and backends through a single API, so you&#8217;re not in hell it every time one provider has a bad day.</p><p>Native <a href="https://technically.dev/universe/integration">integration</a> with your <a href="https://technically.dev/universe/cloud">cloud</a>. The public cloud inference provider offerings like <a href="https://technically.dev/posts/aws-for-the-rest-of-us">AWS</a> Bedrock or Google VertexAI have an advantage in the enterprise because their models and endpoints are colocated with your other infrastructure, which can matter to security and data-residency-conscious buyers. They also tend to offer the most straightforward paths to fine-tuning and customization, which is when you take a base model and train it further on your own data so it performs better for your specific use case.</p><p>All this, at least for me, actually reverses the question - why would you call the frontier labs&#8217; APIs when the inference providers are cheaper and faster? There are at least a few reasons:</p><ul><li><p>You need the latest and greatest models (remember, the inference providers are often hosting the open weights models, which are older)</p></li><li><p>Cost and/or latency are not a concern for you (congrats, happy for you)</p></li><li><p>You&#8217;re a noob and didn&#8217;t know about inference providers (me, until recently)</p></li></ul><h2>The inference provider spectrum</h2><p>Like many software categories, there is a spectrum from:</p><ul><li><p>Easy to use with fewer customizations and control for a lot of money...</p></li><li><p>&#8230;to pure infra providers that you configure to do what you want, with full control (and responsibility over) the infrastructure for less money.</p></li></ul><p>Let&#8217;s take a look at that spectrum.</p><h3>Most Managed: First-Party Model APIs</h3><p>I already touched on this, but the AI labs themselves provide inference endpoints and, as such, are technically inference providers. You call their API, and you get a response without managing infra. It&#8217;s the simplest way to add AI to a product, and where most teams start. You get access to the newest and best models, but you also pay per call (among other things), so it&#8217;s usually the most expensive.</p><ul><li><p><strong>OpenAI</strong>: The company that started the current wave; their API format has become the de facto standard that most other providers copy.</p></li><li><p><strong>Anthropic</strong>: Makes Claude; strong enterprise adoption, and known for handling very long documents.</p></li><li><p><strong>Google (Gemini)</strong>: Lots of models; deeply integrated into Google Cloud and Workspace suites.</p></li></ul><p>Technically, the platform of the model provider isn&#8217;t the <em>only</em> way to access them.</p><h3>Cloud Hyperscalers: Enterprise AI Platforms</h3>
      <p>
          <a href="https://read.technically.dev/p/whats-an-inference-provider">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[I Let Claude Code Autonomously Run Ads for a Month]]></title><description><![CDATA[In January, I gave an AI agent $1,500, full control of a Meta Ads account, then walked away.]]></description><link>https://read.technically.dev/p/i-let-claude-code-autonomously-run</link><guid isPermaLink="false">https://read.technically.dev/p/i-let-claude-code-autonomously-run</guid><pubDate>Thu, 09 Apr 2026 14:31:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pSl0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3d1ba01-98b0-4a07-ba1a-5355cd3ab736_558x1398.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Going forward we&#8217;ll occasionally feature first-hand accounts of people building personal AI tooling to take on some part of their non-coding work. </em></p><p><em>This is a story from Giorgio Liapakis of <a href="https://wibci.com.au/">wibci</a>.  If you have a story to tell, drop us a note at editors@technically.dev.  </em></p><p>In January, I gave an AI agent $1,500, full control of a Meta Ads account, then walked&#8230;</p>
      <p>
          <a href="https://read.technically.dev/p/i-let-claude-code-autonomously-run">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[A Beginner’s Guide to Bring Your Own Cloud]]></title><description><![CDATA[The profitable but challenging deployment model sweeping the nation.]]></description><link>https://read.technically.dev/p/beginners-guide-to-bring-your-own</link><guid isPermaLink="false">https://read.technically.dev/p/beginners-guide-to-bring-your-own</guid><dc:creator><![CDATA[Will Raphaelson]]></dc:creator><pubDate>Thu, 26 Mar 2026 14:31:19 GMT</pubDate><enclosure url="https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8ad5f442-febc-4917-bfa2-705713562ce2_1100x220.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>What if I told you that there are customers out there willing to pay you 2-5x your normal price, for the exact same product? They don&#8217;t want extra features or a fancier dashboard. In fact, they don&#8217;t even want you to host the software on your <a href="https://technically.dev/universe/server">servers</a> &#8211; they want to do it (and pay for it) themselves. Sick, right?</p><p>Maybe. This increasingly popular <a href="https://technically.dev/universe/deploy">deployment</a> model goes by a few names (self-managed, customer-managed, customer-<a href="https://technically.dev/universe/cloud">cloud</a>-deployed), but we&#8217;ll call it BYOC (Bring Your Own Cloud), and if you&#8217;re building B2B software, it&#8217;s worth understanding what makes some BYOC offerings successful, and some a huge dumpster fire.</p><p>Trickiness aside, the BYOC ask from customers is becoming commonplace. As data regulations get stricter and security teams get more power over vendor decisions, more enterprise buyers are walking into sales calls with a version of the same question: &#8220;Can this run in our cloud?&#8221;. Those vendors that can confidently say yes are making buku bucks.</p><h2>The SaaS deal</h2><p>SaaS works because of a simple trade: as the customer you give up control, and in return, you get convenience. Instead of managing your own servers, you pay the vendor to do it for you. No servers to manage, no upgrades to coordinate, no infra team needed. The vendor handles all of that, and you get a website to log into. For most companies, this is great. You should probably stop reading here if your customers are all happy with this arrangement.</p><p>But &#8220;most companies&#8221; is not &#8220;all companies,&#8221; and the ones where this deal falls apart tend to have very, <strong>very</strong>, large budgets.</p><h2>Mo money mo problems</h2><p>For buyers in financial services, healthcare, defense, and large tech (among others), <a href="https://technically.dev/universe/multi-tenant">multi-tenant</a> SaaS creates problems that aren&#8217;t really solvable with a better sales pitch.</p><blockquote><p><strong>&#128680; Confusion Alert</strong></p><p>Multi-tenant just means that multiple customers are using software that resides on a single physical (or virtual) server. Your data is in the same shared <a href="https://technically.dev/universe/database">database</a> as everyone else&#8217;s. If you use Gmail, that&#8217;s multi-tenant. So is X, Sheets, Claude, you name it.</p></blockquote><p>Here are some of those problems:</p><ul><li><p><strong>Data residency and sovereignty</strong>: some companies can&#8217;t have their data leave their own servers, period.</p></li><li><p><strong>Security posture inheritance</strong>: in SaaS, your customer&#8217;s security is only as good as yours&#8230;and they might not want to take a bet that you know what you&#8217;re doing.</p></li><li><p><strong>Performance and egress costs</strong>: SaaS requires moving a lot of data around the internet, which is expensive AF, in some cases, even more expensive than the software itself.</p></li><li><p><strong>Vendor lock-in</strong>: if your SaaS runs on one specific cloud provider, your customer is now locked into that cloud, even if they already use a different one.</p></li></ul><p>If you&#8217;re a cool, lean, startup moving fast and breaking things, these may sound like lame problems to you. But these are Fortune 500 problems. Get ya money up.</p><h2>The spectrum</h2><p>For all of these reasons and more, companies want to keep things running in their own clouds, your software included. But what that means in practice is very squishy. There&#8217;s a whole spectrum of deployment models that blend vendor-managed and customer-managed <a href="https://technically.dev/universe/infrastructure">infrastructure</a>. Understanding where you sit on it is probably a good first step.</p><p><strong>Fully managed multi-tenant SaaS.</strong> You run everything. Customer gets a login. Everyone&#8217;s data sits in the same general pool of infrastructure. This is the default, and it works great for most buyers.</p><p>Single-tenant SaaS. You still run it, but each customer gets their own isolated infrastructure like databases and <a href="https://technically.dev/universe/api">API</a> servers, in the cloud. Better for compliance and sometimes performance, but you&#8217;re still holding the data.</p><p>Hybrid Architecture. This one is a bit wonky, but worth mentioning. Basically, sensitive data lives in the customer&#8217;s account (called the data plane in this architecture), and non-sensitive data and functionality lives on centralized infrastructure hosted by the vendor (control plane). This can help alleviate some of the pains of fully self-hosted setups, such as a lack of observability for <a href="https://technically.dev/universe/debugging">debugging</a>, because the data plane can communicate error logs and such back up to the control plane.</p><p>Fully self-hosted (pure BYOC). This is the most extreme, but also most lucrative version of BYOC, and the one we&#8217;ll generally focus on here. The customer runs the entire software stack in their own environment. These days, that usually means you ship a containerized (fancy word for packaged) version of your software that runs on <a href="https://technically.dev/universe/kubernetes">Kubernetes</a>, which helps with installs and upgrades. But you lose visibility into what&#8217;s actually happening and debugging without cluster access is painful. Works if your customers have strong platform teams. Doesn&#8217;t if they don&#8217;t.</p><h2>The economics of BYOC</h2><p>If you&#8217;re selling a SaaS product at $50K/year to a mid-market customer, the BYOC version of that same product can go for $150-250K/year. Sometimes more. The functionality is the same. What the customer is paying for is the right to run it inside their own environment, on their own infrastructure, under their own security and compliance posture. So the obvious question is: why would they pay more for less?</p>
      <p>
          <a href="https://read.technically.dev/p/beginners-guide-to-bring-your-own">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How AI content detectors work]]></title><description><![CDATA[Is the third bot the charm?]]></description><link>https://read.technically.dev/p/how-ai-content-detectors-work</link><guid isPermaLink="false">https://read.technically.dev/p/how-ai-content-detectors-work</guid><dc:creator><![CDATA[Christy Bieber]]></dc:creator><pubDate>Thu, 19 Mar 2026 14:30:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2t4_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b451897-4850-4879-9e47-c7ac1d8b53eb_1600x969.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At the start of 2025, I experienced a first in my 16+ year career as a writer. I was told that the blog I had submitted was revealed by an AI detector to be 36% AI.</p><p>Imagine my surprise, as I became a writer to <em>write</em> actual content, not to become a prompt engineer. The idea that I&#8217;d turn over <em>my</em> job to a bot (who, it just so happens, I&#8217;m afraid is coming <em>&#8230;</em></p>
      <p>
          <a href="https://read.technically.dev/p/how-ai-content-detectors-work">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>