<?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[Bits of Logic]]></title><description><![CDATA[AI, automation, and decision intelligence.]]></description><link>https://bits.logic.inc</link><image><url>https://substackcdn.com/image/fetch/$s_!0lPV!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87f29678-fabf-401b-8dbf-dfa0c2f4436f_1024x1024.png</url><title>Bits of Logic</title><link>https://bits.logic.inc</link></image><generator>Substack</generator><lastBuildDate>Sat, 25 Apr 2026 12:33:40 GMT</lastBuildDate><atom:link href="https://bits.logic.inc/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Logic, Inc.]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[team@logic.inc]]></webMaster><itunes:owner><itunes:email><![CDATA[team@logic.inc]]></itunes:email><itunes:name><![CDATA[LOGIC, INC.]]></itunes:name></itunes:owner><itunes:author><![CDATA[LOGIC, INC.]]></itunes:author><googleplay:owner><![CDATA[team@logic.inc]]></googleplay:owner><googleplay:email><![CDATA[team@logic.inc]]></googleplay:email><googleplay:author><![CDATA[LOGIC, INC.]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Your agent works. Now what?]]></title><description><![CDATA["Works in a demo" is not the same as "works in production."]]></description><link>https://bits.logic.inc/p/your-agent-works-now-what</link><guid isPermaLink="false">https://bits.logic.inc/p/your-agent-works-now-what</guid><dc:creator><![CDATA[Azzam]]></dc:creator><pubDate>Mon, 06 Apr 2026 17:13:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6w1S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6w1S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6w1S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6w1S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6w1S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6w1S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6w1S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&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="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!6w1S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6w1S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6w1S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6w1S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbebba79a-a337-436b-be54-894ae2262955_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We talk to a lot of engineering teams thinking about building custom agents. One thing we&#8217;ve noticed over the last few months is that regardless of company, use case, or technology stack, the conversation tends to drift to the same place.</p><p>To quote a CTO at a healthcare startup on a recent call: &#8220;It&#8217;s so easy to build a quick proof of concept. As soon as it hits prod, it falls apart.&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Thanks for reading Bits of Logic! Subscribe for free to receive new posts and support our 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>Nobody calls us to talk about the demo. They&#8217;ve usually already got a hand-rolled prototype hitting OpenAI&#8217;s API or they&#8217;ve chained a few n8n nodes together. What they usually want to talk about is everything around it: testing, rollbacks, observability, model volatility, deployment velocity.</p><p>After enough of these calls, we decided to write up our common guidance in one place. The result is <a href="https://logic.inc/guides/how-to-build-an-ai-agent">&#8220;How to Build an AI Agent&#8221;</a>, a long-form field guide that gets into some theses we&#8217;ve developed internally about what &#8220;good&#8221; actually looks like for an agent. Think of it as answering two key questions:</p><ol><li><p>What actual properties separate cute prototypes from agents taking meaningful, business-critical actions in production?</p></li><li><p>How do you go about actually building those production-ready agents?</p></li></ol><p>The part I wanted to touch on here is our framework for answering question 1: inspired by the idea of the <a href="https://12factor.net/">12-factor app</a>, we lay out 6 properties that make the difference between an agent that &#8220;sort of, mostly works&#8221; and one you can actually run in production.</p><h2><strong>The six properties</strong></h2><h4><strong>1. Reliable Responses</strong></h4><p>An LLM returns strings: sometimes they&#8217;re valid JSON, sometimes they&#8217;re almost-valid JSON, and - dangerously - sometimes they&#8217;re <em>structurally correct</em> but <em>semantically wrong</em> (&#8221;confidence&#8221;: &#8220;high&#8221; when your system expects a float between 0 and 1).</p><p>The solution here is consistently enforced, typed contracts. You need to validate two things: inputs before they hit the model, and outputs before they hit your app. We&#8217;ve previously written about <a href="https://bits.logic.inc/p/ai-is-forcing-us-to-write-good-code">how important this is for reliable agentic coding as well</a> (end-to-end types with TypeScript, Kysely for Postgres, OpenAPI for API contracts).</p><p>The most common mistake we see is trying to prompt your way to reliability. You add sentences like &#8220;Please ensure you only return JSON&#8221; or &#8220;Do not include markdown formatting.&#8221; This works often enough to be deceptive, but ensure you have an engineered system leveraging structured output, schema validation with retries, or your mechanism of choice to ensure you&#8217;re enforcing a data contract with the LLM.</p><h4><strong>2. Testability</strong></h4><p>This is where we see the biggest gap on calls with prospects and customers. Teams know they should be testing, but testing non-deterministic system is <strong>tough</strong>.</p><p>The answer is two layers: <em>evals</em> and <em>back-tests. </em>Evals check a pre-defined golden set of inputs where the ideal answer is known, and you measure whether the new version is equivalent, better, or worse. It&#8217;s usually a fuzzy comparison using semantic similarity, but for some use cases can be more discrete assertions. Back-tests test your new prompt and/or model configuration against real-world historical examples and compares how results drifted.</p><p>Testing modern agents continues to become even more challenging as more and more modern agents are doing sophisticated tool usage. If a tool mutates a system or does something expensive, you need to mock it out. But you won&#8217;t know the exact values the non-deterministic LLM will call you with, so hard-coded mocks or exact-match replays won&#8217;t work. (shameless plug: <a href="https://logic.inc/">Logic</a> handles this for you automatically and transparently).</p><p>Without tests every change to a prompt or model update is a gamble. It&#8217;s tempting to manually try a few inputs, and if it looks good, ship it. That always comes to bite you eventually.</p><h4><strong>3. Version Control</strong></h4><p>For software engineers this sounds obvious, but very rarely is it done correctly. The idea here is that the lifecycle of your agent(s) will likely be quite distinct from the codebase that calls them. Everything from ownership to deployments and testing will vary from your standard services.</p><p>You&#8217;ll often even want to be able to run multiple versions of your agent in parallel, and if you&#8217;re not using an agentic platform that facilitates that you should give that platform serious reconsideration.</p><p>An agent&#8217;s behavior depends on many factors, including the prompt, the model config, schemas, tool definitions, the <a href="https://en.wikipedia.org/wiki/Retrieval-augmented_generation">RAG</a> knowledge base, etc. It&#8217;s important that you version the entire bundle and are able to roll back to a known-good state quickly.</p><h4><strong>4. Observability &amp; Logging</strong></h4><p>A lot of teams deploy agents and then fly blind, with no way to debug once an issue is found. When things go wrong you want full execution traces: every input, every output, every tool call, reasoning, etc. You want to know how many experiences were impacted and by whom. Without traces, you&#8217;re debugging a non-deterministic system where, even if you gave the system the exact same inputs, you may not replicate the customer&#8217;s bad experience.</p><h4><strong>5. Model independence</strong></h4><p>Most teams start with one model and hardcode it throughout their stack. That&#8217;s fine for prototyping. It becomes a problem when a model you depend on gets deprecated, or has performance issues, or a competitor releases something that performs comparably for half the cost, and swapping it out requires reworking your entire agentic stack because the way Gemini handles function calls and structured output is quite different than OpenAI.</p><p>A better approach is to decouple model concerns from your agent logic entirely. Your agentic platform should allow easy and dynamic routing. Simple classification tasks might go to a fast, cheap model; complex requests checks go to a large frontier model. </p><p>You&#8217;re always navigating a triangle of quality, speed, and cost, and no single model wins on all three. If your agent is hardcoded to one provider or one model, you&#8217;ve locked yourself into more than it might feel like at first glance.</p><h4><strong>6. Robust deployments</strong></h4><p>A prompt change shouldn&#8217;t require a full code deploy. If your compliance team needs to update a policy rule in the agent and that update has to go through the standard CI/CD pipeline, wait for a code review, and ship with the next release, you&#8217;ve created a bottleneck by coupling two lifecycles that should be separate.</p><p>Behavioral updates to agents should ship independently, with their own versioning and their own rollback mechanism. This also means the people closest to the problem should be able to refine how the agent behaves without touching service code. And ideally, before a new version goes live, you can run it in shadow mode against real production data with its outputs silenced and tool calls mocked, so you can compare performance before flipping the switch.</p><h2><strong>Building your agent</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UO2w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UO2w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UO2w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UO2w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UO2w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UO2w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!UO2w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UO2w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UO2w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UO2w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121dd3f5-0f89-4c67-bbe7-2a9cf11ff548_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These six properties are the checklist we keep coming back to when we evaluate whether an agent is actually ready for production.</p><p>The rest of our guide walks through building the same product listing classifier three ways: code-driven (Python, Pydantic, OpenAI SDK), visual workflow (e.g. n8n), and spec-driven (Logic), with a discussion of the tradeoffs around each approach.</p><p><a href="https://logic.inc/guides/how-to-build-an-ai-agent">Read the full guide here</a> and let us know what you think.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Thanks for reading Bits of Logic! Subscribe for free to receive new posts and support our 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>]]></content:encoded></item><item><title><![CDATA[The Unbearable Weight of Massive Pull Requests]]></title><description><![CDATA[Agents are producing lots of code. How do reviewers keep up?]]></description><link>https://bits.logic.inc/p/the-unbearable-weight-of-massive</link><guid isPermaLink="false">https://bits.logic.inc/p/the-unbearable-weight-of-massive</guid><dc:creator><![CDATA[Mark Golazeski]]></dc:creator><pubDate>Sat, 28 Mar 2026 17:01:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UG7v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UG7v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UG7v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UG7v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UG7v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UG7v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UG7v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3071671,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/192359055?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UG7v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UG7v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UG7v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UG7v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd566b055-09f5-4b1e-92dd-933e7cb3d451_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Last month I was asked to review the code for the new version of our <a href="https://arena.logic.inc/">agent arena</a>. It included two new models, each producing their own output for 53 distinct app prompts. So the PR included 107 files changed, and over 114,000 new lines of code.</p><p>As I&#8217;ve done thousands of times in my career, I opened our standard code review UI. The files were too large to render inline: each one had to be clicked and loaded individually. The browser couldn&#8217;t actually handle it all. I was staring at a code review&#8230; that I physically could not review.</p><p>While I know the agent arena doesn&#8217;t carry the same risk profile as our production API, I still care about quality and reliability, so I&#8217;m not ready to approve a PR without reading every line.</p><h2><strong>The bottleneck is shifting</strong></h2><p>Here at <a href="https://logic.inc/">logic.inc</a>, we&#8217;re no strangers to agentic coding. We have <a href="https://bits.logic.inc/p/engineering-is-becoming-beekeeping">bee hives</a> producing <a href="https://bits.logic.inc/p/losing-control-of-our-coding-agents">a lot of honey</a>, and are actively experimenting on coordination methods for all our agents.</p><p>We&#8217;re a software company with SOC2 and HIPAA obligations, so <em>writing</em> code is only part of the job. It also needs to be reviewed, built, deployed and monitored. Regardless of how code gets created, if it&#8217;s headed to production, at least two humans look at it. When my agents write the code, I&#8217;m the first reviewer. I don&#8217;t send it out until I&#8217;m satisfied, and after I&#8217;ve done that, a teammate can review and approve. This maintains our quality bar, supports our compliance posture, and keeps knowledge distributed across the team.</p><p>The problem is that while the process for producing code has changed over the last 1-2 years, the process for reviewing it has not.</p><p>Thanks to <a href="https://bits.logic.inc/p/my-team-is-using-ai-why-arent-they">Amdahl&#8217;s law</a>, speeding up one part of a pipeline doesn&#8217;t necessarily speed up the whole pipeline. It can just shift the bottleneck. As code production has gotten faster, review has grown to represent a larger portion of the total cycle time. If you can produce in an afternoon what used to take two weeks, the single day you spend reviewing it is now a major constraint on the critical path.</p><h2><strong>What&#8217;s actually broken</strong></h2><p>The standard code review UI is a list of file diffs sorted alphabetically with a description at the top. This has always had problems. Alphabetical ordering forces the reviewer to build cognitive context from scratch, jumping between files based on filename rather than relevance. A change to a database migration sits next to a change to a CSS file because &#8220;d&#8221; comes before &#8220;s.&#8221; The reviewer has to hold the full picture in their head with no help from the tool.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gd3S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gd3S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 424w, https://substackcdn.com/image/fetch/$s_!Gd3S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 848w, https://substackcdn.com/image/fetch/$s_!Gd3S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 1272w, https://substackcdn.com/image/fetch/$s_!Gd3S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gd3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png" width="802" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:802,&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_!Gd3S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 424w, https://substackcdn.com/image/fetch/$s_!Gd3S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 848w, https://substackcdn.com/image/fetch/$s_!Gd3S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 1272w, https://substackcdn.com/image/fetch/$s_!Gd3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0e14af8-301a-4fb3-b792-7f5f677cd8b9_802x50.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>That was tolerable when a PR had 15 files, but it really breaks down at 107.</p><h2><strong>What I needed</strong></h2><p><strong>A review tool that doesn&#8217;t melt.</strong> Honestly, even just rendering large file diffs locally without choking the browser would be an improvement over what I had.</p><p><strong>Semantic grouping.</strong> Files organized by how they contribute to the feature, not by the alphabet. This kind of grouping was impossible to automate before LLMs, because it requires understanding intent, not just parsing syntax - but it is very much possible now.</p><p><strong>Automated specialist analysis.</strong> I wanted separate agents, each focused on a specific dimension of the code (security, best practices, consistency), running in parallel to catch what I&#8217;d miss on a solo pass through 114k lines.</p><h2><strong>Building Prism</strong></h2><p>I started at the <a href="https://bits.logic.inc/p/code-review-without-bottlenecks">end of last year</a> with a <a href="https://bits.logic.inc/p/open-sourcing-diagrams-in-your-prs">Logic Doc and a GitHub Action</a> that turns a code diff into a whiteboard diagram. This was useful for conveying the shape of a change at a glance, but still not enough for the full review process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gqn_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gqn_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gqn_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gqn_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gqn_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gqn_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A system diagram similar to a whiteboard drawing that shows the workflow for generating a diagram from a git commit.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A system diagram similar to a whiteboard drawing that shows the workflow for generating a diagram from a git commit." title="A system diagram similar to a whiteboard drawing that shows the workflow for generating a diagram from a git commit." srcset="https://substackcdn.com/image/fetch/$s_!Gqn_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gqn_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gqn_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gqn_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0561db16-3797-40e6-b11c-f10e6de94d52_1600x893.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Prism came out of that 107-file pull request. I initially spent about 30 minutes vibe-coding and had v0.1: a tool that takes a git branch, analyzes the diff, and gives me three things:</p><p><strong>Semantic file grouping.</strong> An LLM classifies each changed file by its role in the feature and groups them so I can walk through the review in cognitive order. Database changes together. API changes together. Test scaffolding together. Formatting-only changes in their own group at the bottom.</p><p><strong>Specialist agent reviews.</strong> A set of focused agents that each review the diff through a specific lens: security audit, best practice violations, consistency checks. Each one produces findings independently.</p><p><strong>A fast, syntax-highlighted diff viewer.</strong> Served locally, loads instantly, scrolls without lag. No waiting for a browser to choke on a 2,000-line file.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rKlb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rKlb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 424w, https://substackcdn.com/image/fetch/$s_!rKlb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 848w, https://substackcdn.com/image/fetch/$s_!rKlb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!rKlb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rKlb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png" width="1456" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A code review tool that has a left nav bar of files with a read / unread toggle and a \&quot;lines changed\&quot; indicator. The center section has a summary of the code change, noted areas of interest, and a section for specialist reviews, including a code review.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A code review tool that has a left nav bar of files with a read / unread toggle and a &quot;lines changed&quot; indicator. The center section has a summary of the code change, noted areas of interest, and a section for specialist reviews, including a code review." title="A code review tool that has a left nav bar of files with a read / unread toggle and a &quot;lines changed&quot; indicator. The center section has a summary of the code change, noted areas of interest, and a section for specialist reviews, including a code review." srcset="https://substackcdn.com/image/fetch/$s_!rKlb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 424w, https://substackcdn.com/image/fetch/$s_!rKlb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 848w, https://substackcdn.com/image/fetch/$s_!rKlb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!rKlb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206f52b1-b9e7-4bd2-a3a4-2a5b387d2c37_1600x1002.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Prism provides a snappy way to look through 144 thousand lines of code.</figcaption></figure></div><p>That first version got me through the arena review. On subsequent PRs, it&#8217;s been consistently useful in ways I didn&#8217;t anticipate. It groups unimportant formatting changes away from the real feature work, which alone saves significant review time. It flags areas of concern I would have scrolled past. And I haven&#8217;t even built most of the specialist agents I want: frontend review, database schema analysis, dependency auditing, test coverage gaps.</p><p>The workflow now is two commands: prism fetch &lt;pr url&gt; and prism run. It pulls the diff, groups it, runs the analyses, and serves up the result. Reviews happen faster without cutting corners on how carefully the code gets examined.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4WwY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4WwY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 424w, https://substackcdn.com/image/fetch/$s_!4WwY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 848w, https://substackcdn.com/image/fetch/$s_!4WwY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 1272w, https://substackcdn.com/image/fetch/$s_!4WwY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4WwY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png" width="1456" height="1374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1374,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A prism review page similar to the above screenshot, but this screenshot in dark mode and for a code change related to MCP support.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A prism review page similar to the above screenshot, but this screenshot in dark mode and for a code change related to MCP support." title="A prism review page similar to the above screenshot, but this screenshot in dark mode and for a code change related to MCP support." srcset="https://substackcdn.com/image/fetch/$s_!4WwY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 424w, https://substackcdn.com/image/fetch/$s_!4WwY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 848w, https://substackcdn.com/image/fetch/$s_!4WwY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 1272w, https://substackcdn.com/image/fetch/$s_!4WwY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79a664da-f388-46a7-9db2-9ee5238773b9_1600x1510.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Prism summarizing a Logic change for MCP support. Prism is in dark mode, because adding different themes is straightforward for agents.</figcaption></figure></div><h2><strong>This problem is going to get worse</strong></h2><p>The ratio of time spent producing code to time spent reviewing code is only going in one direction. Every team adopting agentic coding tools will eventually hit the same wall in some capacity: output that exceeds what their review process can absorb.</p><p>The answer can&#8217;t be to just &#8220;use AI to review AI code.&#8221; Automated review helps, but compliance, knowledge sharing, and quality judgment still require humans in the loop. And so I think one potential source of real opportunity is in the tooling between generation and approval: specifically tools that offer smarter grouping, focused analysis, better rendering. All this is the plumbing that makes human review scale alongside agent-generated output.</p><p>Prism isn&#8217;t ready to release publically yet, and, honestly, maybe it never will be. But the ideas behind it took ~30 minutes to prototype and have already changed how I review code. If your PRs are getting bigger and your review tools haven&#8217;t changed, the gap is only going to widen. I&#8217;d recommend giving a tool like this some consideration.</p>]]></content:encoded></item><item><title><![CDATA[Schema Driven Art]]></title><description><![CDATA[We turned our brand identity into a machine-readable spec because robots don't have taste]]></description><link>https://bits.logic.inc/p/schema-driven-art</link><guid isPermaLink="false">https://bits.logic.inc/p/schema-driven-art</guid><dc:creator><![CDATA[joe]]></dc:creator><pubDate>Thu, 12 Mar 2026 17:31:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!J-mu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1264fc96-43cd-401d-b640-110f261eeb97_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We're in the middle of a rebrand at <a href="https://logic.inc">Logic</a>. Part of that work has included publishing a flagship guide: a deep dive on <a href="https://logic.inc/guides/how-to-build-an-ai-agent">how to build an ai agent</a> in the current technical landscape. We spent dozens of hours putting this guide together. </p><p>In order to make the guide sing, we wanted to pair it with quality, curated, editorial imagery. We didn&#8217;t want stock photos or flavorless slop gradients. We needed a cohesive visual series that felt intentional, authored, and unmistakably ours.</p><p>Image generation is a fickle process. It&#8217;s easy to ask ChatGPT to <em>make an image of a collage of a sun rising over the sea</em>. What we get back is the continental breakfast buffet of visual art. It&#8217;s food, yes, but nobody&#8217;s recommending the scrambled eggs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2IcM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2IcM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!2IcM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!2IcM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!2IcM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2IcM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png" width="300" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:3539362,&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://bits.logic.inc/i/190741011?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2IcM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!2IcM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!2IcM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!2IcM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d4cf6b8-d826-448a-a0e8-d57014773b8d_1024x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We can get more specific in our prompt to steer the model and hope for something closer to distinctive brand-aware asset: <em>Make a collage of the sun rising over the sea. It starts at the horizon as a bright hot orange dot then transforms into an orange circle of cut paper. There are 8 suns rising up through strips of torn paper intermingling to make the sea and the sky. A sense of calm wonder should dominate the scene, as though we&#8217;re entering the dawn of a new, unknown landscape.</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_!8kHB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8kHB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!8kHB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!8kHB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!8kHB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8kHB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png" width="300" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:3583234,&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;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/190741011?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.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_!8kHB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!8kHB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!8kHB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!8kHB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f07ff1-0663-43bc-b92c-e43c7814a9e1_1024x1536.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Better insofar as the LLM followed most of the instructions. But we&#8217;re still pressing up against some baked in assumptions by the model that we need to control. Everything we don&#8217;t tell the model to do, it infers through probabilities. If we clear the context and feed the same prompt in without any strong steering, there&#8217;s no guarantee we&#8217;ll get consistent results:  colors will drift, compositions will not cohere, lighting will change. We had a folder full of uncanny orphans that all shared the same synthetic aftertaste.</p><p>There&#8217;s a deeper problem beyond consistency, though: taste. At least for now, LLMs have no sense of taste. But they are very good at interpreting instructions, and they really like JSON.</p><h3>From Moodboard to Spec</h3><p>The hard part isn&#8217;t understanding the need for a spec; it&#8217;s writing one. You know what you like when you see it, but translating that gut feeling into a spec requires a different kind of precision.</p><p>We started where any designer starts: the moodboard. We pulled references to capture sensibilities. We collected lighting quality, paper texture, color temperature, and the specific way shadows fall when materials meet. We gathered raw <em>aesthetic</em> data.</p><p>Then, we handed that data to the model and asked <em>it </em>to write a schema it could understand for creating related images.</p><p>This works because the vocabulary an LLM uses to describe visual quality is the same vocabulary it respects when generating it. By using the model as a translator for itself, we bridge the gap between human taste and agentic interpretation. Our eyes provide the input; the schema provides the output.</p><p>The first pass is never perfect. We ran a series of generations, scrutinized the failures, and tuned the knobs. A <code>forbidden</code> list is effectively a graveyard for our design mistakes. &#8220;Glossy&#8221; earned its spot after the first three outputs arrived with that synthetic sheen. &#8220;Neon&#8221; was banned the moment our hero orange went radioactive. Each failure sharpened the spec.</p><p>After a few rounds of iteration, we landed on a <code>style_capsule</code> that encoded our taste. We curated the model&#8217;s behavior until the results stopped feeling like an approximation and started feeling like the output of a proper design system.</p><h3>Brand Guides, Compiled</h3><p>Every serious brand has a guide that dictates color, typography, and tone. It doesn&#8217;t tell a designer <em>what</em> to make so much as defines how the <em>what</em> should feel. Identity is locked. Content is malleable.</p><p>LLMs need the same guardrails, but they need them machine-readable. Prompt engineering is the wrong metaphor for this work. What we needed was brand engineering. We started treating the AI not as a creative partner that needs &#8220;inspiration&#8221; but as a render engine that requires a strict configuration file.</p><h3>Anatomy of an Image Spec</h3><p>We built a schema called CBS, Comprehensive Brand Styles. Its primary mandate is singular: <strong>style </strong>is frozen<strong>, scene </strong>is free<strong>.</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">root
&#9500;&#9472;&#9472; schema_version / project    &#8592; identity
&#9500;&#9472;&#9472; output                      &#8592; aspect ratio
&#9500;&#9472;&#9472; style_capsule               &#8592; aesthetic DNA
&#9474;   &#9500;&#9472;&#9472; medium / finish / texture
&#9474;   &#9500;&#9472;&#9472; lighting
&#9474;   &#9500;&#9472;&#9472; composition_rules
&#9474;   &#9492;&#9472;&#9472; forbidden[]
&#9500;&#9472;&#9472; scene                       &#8592; the VARIABLE layer
&#9474;   &#9500;&#9472;&#9472; camera
&#9474;   &#9500;&#9472;&#9472; composition
&#9474;   &#9492;&#9472;&#9472; motifs
&#9500;&#9472;&#9472; color_system                &#8592; palette + roles
&#9492;&#9472;&#9472; render_instructions         &#8592; template flags
</code></pre></div><p>Everything outside the <code>scene</code> block is immutable. It dictates the medium (mixed-media analog collage), the lighting (low winter side light), and the finish (matte, visible cut-paper edges). The <code>forbidden</code> array acts as a deny list for an LLM&#8217;s probabilistic flights of fancy.</p><p>Inside the <code>scene</code> block, we define a concept. Because the style is locked, and because we try to clamp down as many decisions as possible, we&#8217;re able to encourage models to execute to the spec.</p><h3>Why Structure Beats Prose</h3><p>The mechanical advantage of a schema over prose comes down to three things.</p><p><strong>Semantic Decomposition:</strong> A prose prompt like &#8220;bauhaus-inspired collage&#8221; is still too loose. How many bands? What lighting angle? The model fills the gaps with its own probability distribution. A spec pins these degrees of freedom by using precise language to break bauhaus into descriptive sub-components. There is nothing left to guess.</p><p><strong>Hierarchical Specificity:</strong> Modern image models, whether they rely on iterative diffusion processes to sculpt noise<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> or autoregressive logic<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> to construct pixels, all respond better to structured, hierarchical constraints than to a well-meaning, but imprecise paragraph-long prose prompt.</p><p><strong>Quantified Constraints:</strong> Numbers beat vibes. <code>band_count: 9</code> collapses the many possibilities that &#8220;several bands&#8221; or even &#8220;9 bands&#8221; leaves open<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. By naming each color&#8217;s <em>role</em> and capping accent usage, the spec ensures every generation is coherent.</p><h3>Taste as an Engineering Problem</h3><p>Most prompt advice ignores the model&#8217;s inherent gravitational pull. Left to their own devices, image models gravitate toward a specific aesthetic: slick, dimensionless, hyper-saturated. It is the visual equivalent of an LLM&#8217;s tendency to write in a helpful, enthusiastic tone. It is the &#8220;average&#8221; across the training distribution. The continental breakfast, if you will.</p><p>The spec fights this by defining a style that is specifically <em>not</em> that. Every property in the <code>style_capsule</code> is a deliberate departure.</p><ul><li><p><code>medium</code>: &#8220;mixed-media analog photography hybrid collage&#8221;&#8212;this forces the model to mimic a physical process, moving away from purely digital noise.</p></li><li><p><code>texture.notes</code>: [&#8221;fine film grain&#8221;, &#8220;subtle paper creases&#8221;, &#8220;slightly washed blacks&#8221;]&#8212;these are the artifacts of analog media. They break the synthetic smoothness that signals &#8220;generated.&#8221;</p></li><li><p><code>finish</code>: [&#8221;matte&#8221;, &#8220;clean edges&#8221;]&#8212;the matte finish kills the default gloss. The cut-paper edges introduce handmade geometry that feels purposeful.</p></li><li><p><code>shadow_character</code>: &#8220;crisp long shadows&#8221;&#8212;models have a tendency to default to flat ambient lighting. By specifying directional, moody light, we force depth.</p></li></ul><p>This is an intentional overcorrection. We are defining an aesthetic that the model wouldn&#8217;t produce by accident. That is why the output feels authored.</p><h3>The Series</h3><p>The editorial images in our agent-building guide were generated using this schema. The only thing that changed between images was the <code>scene</code> block.</p><p>Laid side-by-side, they read as a series. Each image is distinct, but they share a lineage. The reliability from the schema is striking.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1264fc96-43cd-401d-b640-110f261eeb97_1536x1024.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7731b79c-2508-43d2-82c1-613bb5ed3324_1536x1024.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91fa2868-b005-47eb-a66b-472e71bcf254_1536x1024.png&quot;}],&quot;caption&quot;:&quot;Collage inspired imagery of the material world colliding with nature&quot;,&quot;alt&quot;:&quot;Collage inspired imagery of the material world colliding with nature&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71c74b4a-c6a3-49f0-8947-54bfaae176b0_1456x474.png&quot;}},&quot;isEditorNode&quot;:true}"></div><h3>Identity as Infrastructure</h3><p>Identity is a kind of infrastructure. When we treat it as a set of hard constraints rather than a list of adjectives, the output stops looking uninspired and starts looking like intention. We didn&#8217;t invent anything new. We just wrote down time tested design rules in a manner that robots appreciate.</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><a href="https://stability.ai/stable-image">Stable Diffusion</a> and <a href="https://www.midjourney.com/home">Midjourney</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>ChatGPT&#8217;s latest image models</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>A large portion of LLMs data corpus is code and they really like it when you structure your prompts to feel encoded</p></div></div>]]></content:encoded></item><item><title><![CDATA[Losing Control Of Our Coding Agents]]></title><description><![CDATA[What Happens When Your Ambitions Are Bigger Than Your Tooling]]></description><link>https://bits.logic.inc/p/losing-control-of-our-coding-agents</link><guid isPermaLink="false">https://bits.logic.inc/p/losing-control-of-our-coding-agents</guid><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Thu, 05 Mar 2026 19:01:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gleE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gleE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gleE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!gleE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!gleE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!gleE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gleE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&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_!gleE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!gleE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!gleE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!gleE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15cf618c-f248-47f1-b736-faafc2ce2c5e_1408x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The history of software engineering is the history of moving up the stack. We abstracted the hardware, then the memory management, then the infrastructure. And, for the past year or so, we&#8217;ve been abstracting the programming itself.</p><p>At the end of 2025, <a href="https://logic.inc">we</a> described our AI-assisted development workflow as <a href="https://bits.logic.inc/p/engineering-is-becoming-beekeeping">beekeeping</a>. We&#8217;d spin up agents in parallel, feed them specs, and spend our time reviewing output instead of writing the code ourselves. The bees were making the honey. We were keeping the hives healthy.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Thanks for reading Bits of Logic! Subscribe for free to receive new posts and support my 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>This flow enabled our 5-person engineering team to consistently ship ~200 features every month. As we entered 2026, our ambitions grew. What could we change to get this same team to ship ~800 features every month?</p><p>Current tooling didn&#8217;t support our ambition, so we had to start building our own. This is what <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04#:~:text=Stage%208%3A%20Building%20your%20own%20orchestrator.%20You%20are%20on%20the%20frontier%2C%20automating%20your%20workflow.">Steve Yegge eventually called &#8220;Stage 8&#8221;</a>.</p><h2>More Honey Than We Could Handle</h2><p>Our team has become obsessed with shipping code.</p><p>One of our engineers <a href="https://www.theapplegeek.co.uk/blog/caffeinate">caffeinates</a> his laptop running in his backpack<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> during commutes, tethered to his phone, so he can Slack with the agents while they work<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p>Between the start of 2025 and the end of 2025, my AI coding experience went from multi-line AI suggestions in VS Code to juggling 10-15 agents each working on different tasks.</p><p>Going into 2026, we&#8217;d gotten quite good at keeping bees, but we were starting to hit the limits of what we could manually manage. The bees were able to do more work; we just couldn&#8217;t keep up with them. I found myself constantly switching from one session to the next, reviewing progress and trying to keep agents unblocked.</p><p>We were outgrowing our current workflows. We wanted better tools that could help us track everything in one place, coordinate agents working towards the same goal, have multiple goals underway in parallel, and have humans efficiently review all of this work.</p><p>We needed an apiary.</p><h2>Honey With A Hint Of Gas</h2><p>The timing was almost comical. Just days after we&#8217;d been brainstorming solutions, Steve Yegge published <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">Welcome To Gastown</a>, a tool that was attempting to do much of what we&#8217;d been hoping for.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2UJZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2UJZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!2UJZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!2UJZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!2UJZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2UJZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d704d855-a816-49dd-80bf-4444b119db1e_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&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_!2UJZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!2UJZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!2UJZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!2UJZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd704d855-a816-49dd-80bf-4444b119db1e_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;ve never had so many conflicting feelings about a piece of technology. Working with Gastown was simultaneously terrifying and awe-inspiring, draining and invigorating, maddening and entertaining<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. Very much to Steve&#8217;s credit, he tried to warn me<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>.</p><p>But the <em>promise</em> of Gastown was incredibly compelling. I could describe work for any number of tasks and off they&#8217;d go to be implemented <em>somewhere</em>. I could get status on everything in flight and jump directly to any agents that needed help, all from a single window. Now I could spend more of my time thinking about tasks and PRs instead of tracking terminals and worktrees.</p><p>The warnings not to use Gastown were fair though. Bizarrely named branches started to appear in our GitHub. My commits were attributed to <em>furiosa, nux,</em> and <em>chrome</em>. PRs would open that I didn&#8217;t ask for, and would be reopened or recreated after I closed them. New versions of Gastown appeared almost daily and I recreated my workspace almost as frequently.</p><p>There were plenty of rough edges, but the shift in abstraction is what I kept coming back to.</p><p>I gave my team a tour. They were a bit wide-eyed, skeptical and bemused. But they got the idea and saw the promise. From our Slack:</p><blockquote><p><strong>[10:47 AM] </strong>ok yeah i flew too close to the sun and those gassy boys burnt me good<br><strong>[10:47 AM] </strong>but it was illuminating</p></blockquote><p>Gastown was someone else&#8217;s apiary with a very specific (and entertaining) vision for how agents should be organized and coordinated. It wasn&#8217;t quite right for us but it opened our eyes to what running a larger-scale operation could look like.</p><h2>Self-Improvement</h2><p>We took inventory of our bottlenecks around task management, agent management, review management, etc. and did what we do best - had our agents build better tooling for us.</p><ul><li><p><strong>Beantown: </strong>Helps with dispatch<br>Pulls tickets from Linear, breaks them into agent-sized specs, and farms them out to available workers.</p></li><li><p><strong>Coal Harbour:</strong> Helps with multiplexing<br>An app to tame the cross-product of (<em>features &#215; worktrees &#215; terminals &#215; agents)</em>.</p></li><li><p><strong>Prism:</strong> Helps with code review<br>Uses parallel agents to do focused reviews on specialized areas (e.g. security, architecture, style) and speed up human review.</p></li><li><p><strong>Lux: </strong>Helps with agent coordination<strong><br></strong>Simpler<strong> </strong>Gastown-inspired primitives for customizing and extending how groups of agents coordinate on shared goals.</p></li></ul><p>Some of these tools are pretty custom to how we work and only make sense within our walls, but some we&#8217;ll be releasing for others to use.</p><p>Each has helped us scale from beehives to apiaries.</p><h2>Apiary Innovation</h2><p>We&#8217;re far from the only ones exploring here. This space is still young and new takes are popping up daily. The changes in the process of writing code have outpaced the tools used to write it. No one&#8217;s entirely sure what the correct abstractions even <em>are</em> yet, but we&#8217;re starting to see the outlines forming more clearly.</p><p>One common thread: parallel specialized agents that can coordinate on a common goal are the focus heading into 2026. </p><p>Different agents have different strengths and capabilities. Having 2-3 agents design a feature or review the same PR will often lead to more comprehensive results than relying on just one: one catches a race condition, another notices an API contract violation, a third might focus on improved test coverage.</p><p>Tools that facilitate using all of the different agents also seem to be the right call in 2026. Models are constantly leapfrogging each other, so it&#8217;s beneficial to not be beholden to one family of models if you want to stay on the frontier. Different agents have different personalities and strengths, which are hard to discern until you&#8217;ve seen how they operate in your codebase.</p><p>We like Claude for spec-writing, Codex for reviews, Gemini for task research.</p><p>Commercial beekeepers move their hives from Florida to California to chase the almond bloom, and to Washington for apples. You should always be moving your hives to maximize your honey.</p><h2>From Beekeeper to Apiary Manager</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I2uP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I2uP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!I2uP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!I2uP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!I2uP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I2uP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36278824-7e29-4410-976b-12109a659aad_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&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_!I2uP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!I2uP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!I2uP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!I2uP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36278824-7e29-4410-976b-12109a659aad_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Two days after I&#8217;d first learned of Gastown, my boss and I had our first walking 1:1 of the new year. I was three weeks from my one-year anniversary at Logic, and he asked how the last year had been. My answer: it was the most exhilarating, growth-inducing year of my career, with the possible exception of my first year out of school. The way I build software now is profoundly different from how I built it just 12 months ago.</p><p>In 2025, engineering became beekeeping. In 2026, the frontier isn&#8217;t the bees. It&#8217;s the infrastructure around them. Nobody has the apiary figured out yet, but a lot of people are building, experimenting, and sharing what they&#8217;ve learned.</p><p>If you&#8217;re building something similar, we&#8217;d love to hear about it either in the comments or at <a href="mailto://ben@logic.app">ben@logic.app</a>. We&#8217;re all figuring this out together and would love to compare notes.</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>Don&#8217;t tell AppleCare.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>We have agents that run in the cloud too, but we all know local is better.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>A sentence that actually came out of my mouth: "One sec, I just need to sling a couple of convoys so that my polecats can stay busy while we're getting lunch."</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>The phrase "Do not use Gas Town" appears four times in Steve's post.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Fast Software: Fast Fashion or Something Else?]]></title><description><![CDATA[Three possible futures for software. All of them arriving at once.]]></description><link>https://bits.logic.inc/p/fast-software-fast-fashion-or-something</link><guid isPermaLink="false">https://bits.logic.inc/p/fast-software-fast-fashion-or-something</guid><dc:creator><![CDATA[Mark Golazeski]]></dc:creator><pubDate>Tue, 10 Feb 2026 17:17:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DpHh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DpHh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DpHh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!DpHh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!DpHh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!DpHh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DpHh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1295557,&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://bits.logic.inc/i/186142508?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.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_!DpHh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!DpHh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!DpHh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!DpHh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be4eb86-9c65-44a7-bbfa-148d449060dc_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In 2011, I was working at a startup. At some point, I was tasked with implementing email support.</p><p>The feature was supposed to generate a unique email address for each customer, and let them email it to automatically kick off some work. That&#8217;s a simple enough description on paper, but those of you familiar with the chaotic inner workings of email will recognize the complexity: setting up inbound routing, parsing message bodies (with attachments), handling authentication, wiring up the business logic. All said, it took me about six weeks to fully build it.</p><p>Fast forward to 2026, <a href="https://logic.inc/">at my current job</a>, another startup. Because email is <em>eternal</em>, we had a similar feature requirement for inbound email handling. This time though, it took me just four days to launch. For one, I already had a rough outline in my head of what needed to be built (even though 15 years is an awfully long time). But what really moved the needle was that  AI handled the parts that used to take the longest.</p><p>The popular narrative right now is that AI turns everyone into a developer. And, yes, probably? That&#8217;s a very important part of the story, but it&#8217;s certainly not the only part. Right now, experienced developers are benefiting from an unprecedented speed multiplier. That&#8217;s a different story than &#8220;everyone can code now,&#8221; and it has different implications.</p><h2>Speed Has Happened Before</h2><p>Speed increases aren&#8217;t new. Other industries have already lived through the consequences of overnight explosions in production speed and/or reductions to barriers to entry. Each one ended up somewhere slightly different.</p><div><hr></div><p><strong>Fast fashion produced landfills.</strong> Production got cheaper and faster, allowing the turnaround time for new, on-trend clothing to shrink from seasons to weeks. But all that speed didn&#8217;t lead to more original design. Our landfills today aren&#8217;t full of bold creative risks.  They&#8217;re full of low-quality imitations of recent trends - clothing slop, if you will.</p><p>The software version of this shows hints of arriving already. This future is a gloomy one: repos of abandonware and AI-written clones chasing the software flavor of the month. Someone launches a popular tool, and within days there are dozens of near-identical copies, built fast but maintained by nobody.</p><div><hr></div><p><strong>Self-publishing produced a discovery problem.</strong> Writers who couldn&#8217;t get a publisher&#8217;s attention could suddenly reach readers directly, which was genuinely transformative for a lot of careers that would have never existed otherwise. But when everyone publishes, nobody gets found. The market flooded, the signal-to-noise ratio cratered, and the bottleneck moved from <em>the ability to produce</em> to <em>the ability to get attention</em>.</p><p>Spoiler: software is heading here too. Software from everywhere, wildly varying in quality, aimed at every conceivable niche. Production isn&#8217;t the meaningful bottleneck anymore. Instead it&#8217;s very conceivable that soon, discovery and trust, even more so than already, will become the biggest bottlenecks.</p><div><hr></div><p><strong>Digital photography produced a skills gap.</strong> Film forced deliberation. You only had 36 exposures, each one costing a non-trivial amount of actual money to develop. When that constraint vanished, the photographers who already understood things like composition and lighting became more prolific. They could experiment, iterate, and shoot without worrying about wasted film. Meanwhile, the removal of the barrier to entry encouraged lots of people to generate noise. The ceiling went up for skilled practitioners, even as the floor dropped out for everyone else.</p><p>The same dynamic is playing out in software. Shipping friction is approaching zero. While, yes, more people are creating more software slop, one skilled developer can now ship what used to require a team of five and a multi-sprint roadmap. Capable engineers can get more things built, with good quality, for more specific problems.</p><div><hr></div><p>Agentic coding is doing all three of these things to software simultaneously. It enables imitation at zero cost, it&#8217;s eliminating the gatekeepers between idea and deployment, but at the same time it&#8217;s also removing the ceiling on what capable developers are capable of achieving.</p><h2>What Stays Under Your Control</h2><p>To me, this is actually the encouraging part. While it&#8217;s interesting to think about branching futures for all of software, the reality is there&#8217;s no single person sitting in a boardroom making industry-wide decisions here.</p><p>It&#8217;s just individuals like you and me, along with their AI agents - reacting to incentives and building things one repo at a time. Next time you watch Claude Code reticulating, ask yourself: what problem is this solving? And more importantly, does it actually matter?</p><p>Optimize for building things that are valuable, and that truly move the needle. When building is quick and cheap, the hard part isn&#8217;t building anymore, it&#8217;s knowing when <em>not </em>to build. The only software that holds up is software built with taste and intent: everything else is noise.</p><p>The future is arriving, whether we like it or not. The ground is shifting under our feet, and speed is no longer the differentiator it once was. But the principles that separate great software from the rest aren&#8217;t going anywhere.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Three Years Of Predicting Football with LLMs]]></title><description><![CDATA[With the Super Bowl this weekend, what better time to reflect on this season's picks.]]></description><link>https://bits.logic.inc/p/three-years-of-predicting-football</link><guid isPermaLink="false">https://bits.logic.inc/p/three-years-of-predicting-football</guid><dc:creator><![CDATA[Steve Krenzel]]></dc:creator><pubDate>Fri, 06 Feb 2026 17:15:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jqPw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jqPw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jqPw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jqPw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jqPw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jqPw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jqPw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&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="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!jqPw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jqPw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jqPw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jqPw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec30239-6cea-4d5c-88ac-ad634f4c073f_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I don&#8217;t know much about American football. But this year, a bot I wrote <strong>outperformed 98.5% of the ~250,000 humans playing ESPN&#8217;s NFL Pick&#8217;ems against the spread</strong>.</p><p>For three years, this <a href="https://github.com/stevekrenzel/pick-ems">open-source project</a> has sat near the top of the leaderboards. In previous seasons, I only tracked &#8220;straight&#8221; winners. This year, I let it handle the spread and confidence rankings too. It finished in the top 5.9% for straight picks, 5.5% for confidence picks, and 1.5% against the spread.</p><p>As a Seattleite, it pains me to <a href="https://gist.github.com/stevekrenzel/75622606b93adc7bc22db62230123fa2">report the bot&#8217;s prediction</a> for Super Bowl LX: <strong><s>The Patriots win and cover the +4.5 spread.</s></strong> <em>(Post-Super Bowl Update: I&#8217;ve never been to happy to see the bot get it wrong)</em></p><div><hr></div><h3>Humans Still Got It</h3><p>My friend and colleague, Mark, coordinates our local league. He lives and breathes the game.</p><p>This year, Mark did something extraordinary: he <strong>outperformed 99.7% of ESPN against the spread</strong>. He has the kind of intuition that comes from a lifetime of lived experience, the one thing an LLM doesn&#8217;t have.</p><p>Interestingly, when looking at straight picks and confidence rankings, the roles flipped:</p><ul><li><p><strong>Straight Pick:</strong> Bot (94.1%) vs. Mark (86.9%)</p></li><li><p><strong>Confidence:</strong> Bot (94.5%) vs. Mark (86.2%)</p></li></ul><p>The machine is better at forecasting the macro direction of the game. But Mark won out, meaningfully, when the macro was neutralized and only the minutiae mattered.</p><p>It suggests that LLMs are excellent at predicting the broad strokes, and still quite good with the nuanced strokes as well, but humans can incorporate nuance for specific matchups that an LLM just doesn&#8217;t &#8220;get&#8221; yet<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p><p>It&#8217;s a single data point, so take the result in that context, but I think it&#8217;s a fascinating outcome.</p><div><hr></div><h3>Did We Just &#8220;Show Up&#8221;?</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2kcV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2kcV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2kcV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2kcV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2kcV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2kcV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!2kcV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2kcV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2kcV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2kcV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5970ac58-e256-4980-9767-15b498b8e760_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s easy to look at the ranked results and conclude that LLMs are performing at superhuman levels here, but there <strong>are</strong> meaningful confounding factors we should at least acknowledge out loud.</p><h4>Survivorship Bias</h4><p>In any season-long competition, there is a massive drop-off rate of participation. People get busy, their teams start losing, and they stop making picks.</p><p>Simply &#8220;showing up&#8221; every week and making rational picks likely puts you in the top 30% automatically.</p><p>We have no reliable way to infer the rate of drop-off on ESPN, though it seems reasonable to assume that being in the top 1.5% is too high to be explained by mere participation.</p><h4>Emotional Picking</h4><p>Most human players are &#8220;heart-first&#8221; predictors. They refuse to pick against their home team, or they over-index on what they hope will make for a good story.</p><p>The LLM, conversely, is a cold machine<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a><strong>.</strong> It doesn&#8217;t care about a team&#8217;s legacy or grit. It only cares about the data<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>.</p><p>Is it fair to call a machine&#8217;s performance &#8220;superhuman&#8221; if a median human could look at the same stat block and news articles and come to the same conclusions, if only they were blind to the teams involved?</p><div><hr></div><h3>Actual Performance</h3><p>Ranking well is fun and all, but what does it mean to actually be in the top 1.5% or 0.3% of humans?</p><p>Well, it means you picked the spread correctly in 53.3% and 55.7% of the games, respectively. A bit better than a coin toss, but statistically significant.</p><p>The best picker on ESPN got the spread correct 62.2% of the time.</p><p>For straight picks, 94.1% translates to predicting 64% of games correctly. The best on ESPN was 71.5%.</p><div><hr></div><h3>What the Machine Actually Sees</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dnae!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dnae!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dnae!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dnae!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dnae!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dnae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!dnae!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dnae!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dnae!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dnae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a80b7-5593-40e7-8290-cfbaa22c14e3_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That brings us to what we actually provide to the agent.</p><p>I intentionally keep the bot &#8220;blind&#8221; to public voting ratios. It doesn&#8217;t know who the &#8220;favorite&#8221; is. It consumes only two streams:</p><ol><li><p><strong>Team Stats:</strong> Anything <a href="https://www.espn.com/nfl/team/stats/_/type/team/name/phi">on the team stats page</a> that ESPN has.</p></li><li><p><strong>Latest News:</strong> We crawl major NFL news on ESPN, classify each article, and assign them to the relevant teams.</p></li></ol><p>In aggregate, we don&#8217;t provide the LLM too much data. This is mostly a vestige of the era of tiny context windows though. Next year, we&#8217;ll likely give it a lot more data to reference: explicit injury reports, per-player stats, and anything else we can grab.</p><div><hr></div><blockquote><h3>&#9888;&#65039; Sidebar: The Ethics of a Winning Bot</h3><p>I originally built this bot as a litmus test for LLM versatility. It is valuable as a clear case of the LLM performing a quantifiable and relatable task that it couldn&#8217;t possibly have been trained on.</p><p>But last year, the outreach turned into an influx of messages from people wanting assistance with gambling via the bot.</p><p>We are in the midst of a gambling epidemic, <a href="https://today.ucsd.edu/story/study-reveals-surge-in-gambling-addiction-following-legalization-of-sports-betting">with &#8220;gambling addiction&#8221; searches surging in legalized states</a> and <a href="https://www.gamblingcommission.gov.uk/statistics-and-research/publication/young-people-and-gambling-2025-official-statistics">a third of adolescent boys gambling before they turn 18</a>.</p><p>I&#8217;m not yet sure if I&#8217;ll push this year&#8217;s improvements to GitHub yet.</p></blockquote><div><hr></div><h3>Looking Ahead</h3><p>For the next season, I&#8217;m interested in &#8220;de-biasing&#8221; the agent and increasing autonomy. I&#8217;m thinking about:</p><ul><li><p><strong>Anonymizing Teams:</strong> Feeding the bot &#8220;Team A&#8221; vs &#8220;Team B&#8221;, along with anonymized news articles, to remove training data bias (e.g. it knows the Patriots are historically a winning franchise).</p></li><li><p><strong>Consensus Voting:</strong> Running a best-of-N across OpenAI, Gemini, and Anthropic models. Everyone has great models these days. Why not use them?</p></li><li><p><strong>True Agency:</strong> Instead of a pre-formatted data dump, I&#8217;m thinking about giving the bot tool-calling abilities to research games and pull data that it cares about most.</p></li></ul><p>Intuitively, giving LLMs more degrees of freedom can often hurt performance, so I would expect some of these ideas to lead to regressions. But we&#8217;re doing this all for fun, and there&#8217;s something magical about letting a machine make all of the decisions.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></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>Maybe they are capable of getting it, if given the right context.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Actually very warm.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Though there is almost certainly human favoritism in both the trained and in-context data.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Diagrams In Your PRs]]></title><description><![CDATA[Have Logic add human-friendly diagrams in your pull-requests]]></description><link>https://bits.logic.inc/p/open-sourcing-diagrams-in-your-prs</link><guid isPermaLink="false">https://bits.logic.inc/p/open-sourcing-diagrams-in-your-prs</guid><dc:creator><![CDATA[Mark Golazeski]]></dc:creator><pubDate>Thu, 01 Jan 2026 19:00:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nR5y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nR5y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nR5y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!nR5y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!nR5y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!nR5y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nR5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:761671,&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://bits.logic.inc/i/183099326?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.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_!nR5y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!nR5y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!nR5y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!nR5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86231af-8f65-449b-ad2c-c53b744aae2f_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://bits.logic.inc/p/code-review-without-bottlenecks">We recently wrote about using machines to review code</a>. Now we&#8217;ve open-sourced <a href="https://github.com/with-logic/logic-diagram-action">the GitHub Action</a> to generate those diagrams. To use it, you just need to <a href="https://app.logic.inc/import/generate-whiteboard-system-diagram-from-text">import the workflow into your Logic organization</a> and wire up the GitHub action.</p><h2>How it Works</h2><p>Once set up, just comment <em>/generate-diagram</em> on a PR. Logic reads the changes and posts a diagram right into the the pull request thread.</p><h2>Example</h2><p>Here&#8217;s an example diagram from a small change I prototyped to add a new status controller to our API.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vf64!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vf64!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 424w, https://substackcdn.com/image/fetch/$s_!vf64!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 848w, https://substackcdn.com/image/fetch/$s_!vf64!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 1272w, https://substackcdn.com/image/fetch/$s_!vf64!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vf64!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png" width="1875" height="1141" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1141,&quot;width&quot;:1875,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2613104,&quot;alt&quot;:&quot;A comment on a GitHub pull request that is from a github-action and contains an image of a generated system diagram.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/183099326?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ea1254-21b2-4391-9158-74a13ebe943a_1876x1430.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A comment on a GitHub pull request that is from a github-action and contains an image of a generated system diagram." title="A comment on a GitHub pull request that is from a github-action and contains an image of a generated system diagram." srcset="https://substackcdn.com/image/fetch/$s_!vf64!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 424w, https://substackcdn.com/image/fetch/$s_!vf64!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 848w, https://substackcdn.com/image/fetch/$s_!vf64!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 1272w, https://substackcdn.com/image/fetch/$s_!vf64!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd04b00c-de79-4b25-bf8d-64c94c0d7d83_1875x1141.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Setup Instructions (3 mins)</h2><ol><li><p>In your Logic Organization, <a href="https://app.logic.inc/settings/organization-settings/api-keys">create a Full Permissions API Key</a><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p></li><li><p>After <a href="https://app.logic.inc/import/generate-whiteboard-system-diagram-from-text">importing the workflow</a>, note the Document ID in the <code>Integrations</code> tab from the Endpoint.</p></li><li><p>In GitHub, add a new workflow file that uses the <a href="https://github.com/with-logic/logic-diagram-action">@with-logic/logic-diagram-action</a>@beta step to work off pull requests (Example workflow file below).</p></li><li><p>Add a new repo secret for the <code>LOGIC_API_TOKEN</code> from Step #1 to call the API.</p></li><li><p>Add a new repo variable <code>LOGIC_DOCUMENT_ID</code> which is the new Document ID from Step #2.</p></li><li><p>You can also pass in a version if you want to specify anything besides a <code>draft</code> version.</p></li></ol><p>Now when you comment <code>/generate-diagram</code>, a diagram based on the pull request will be generated.</p><h2>Other notes</h2><ol start="8"><li><p><strong>Image Hosting:</strong> Small images appear right in the comments. For images larger than 65kb in size, we provide a presigned URL that will last for an hour<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p></li><li><p><strong>Dead links:</strong> If the link expires you can comment <code>/regenerate-diagram</code> to refresh the diagram&#8217;s presigned URL link. You can also download and re-upload the image somewhere more permanent.</p></li><li><p><strong>Limits:</strong> There&#8217;s a daily limit on image generation per organization, so at some point you might get a rate limit error<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>.</p></li></ol><p>Give it a try, and hopefully it&#8217;s a fun way for you to improve your PRs as you start 2026!</p><h2>Example Workflow</h2><pre><code># .github/workflows/logic-diagram.yml

&#8203;&#8203;name: logic-diagram
run-name: ${{ github.actor }} - Logic Diagram
on:
  issue_comment:
    types: [created]
jobs:
  diagram:
    if: |
      github.event_name == &#8216;push&#8217; ||
      (github.event.issue.pull_request &amp;&amp;
       (contains(github.event.comment.body, &#8216;/generate-diagram&#8217;) ||
        contains(github.event.comment.body, &#8216;/refresh-diagram&#8217;)))
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read
    steps:
      - name: Logic Diagram Action
        uses: with-logic/logic-diagram-action@beta
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          document_id: ${{ vars.LOGIC_DOCUMENT_ID }}
        env:
          LOGIC_API_TOKEN: ${{ secrets.LOGIC_API_TOKEN }</code></pre><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>Full permissions all you to refresh the presigned urls. If you&#8217;re going to be storing / re-uploading them yourself, you can stick to a <code>Execution Only</code> Token.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Current limitation we impose on file urls. We&#8217;ll make this more flexible soon.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Paid accounts have higher limits.</p></div></div>]]></content:encoded></item><item><title><![CDATA[On The Obsolescence Of Interns In The Age of AI]]></title><description><![CDATA[Even in the era of LLMs, interns are great to have on the team.]]></description><link>https://bits.logic.inc/p/interning-in-2026</link><guid isPermaLink="false">https://bits.logic.inc/p/interning-in-2026</guid><dc:creator><![CDATA[Steve Krenzel]]></dc:creator><pubDate>Wed, 31 Dec 2025 17:10:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PEZx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PEZx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PEZx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!PEZx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!PEZx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!PEZx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PEZx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1167240,&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://bits.logic.inc/i/182604581?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.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_!PEZx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!PEZx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!PEZx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!PEZx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9fc0dbe-cbbe-463b-94ec-25b805969f52_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Hiring a software engineering intern in the summer of 2025 was a controversial decision among the founder circles I run in.</p><p><a href="https://logic.inc/">We are a small startup</a>. We are proud of our lean burn rate. And we exist in a moment where, for twenty dollars a month, you can have a coding agent that knows every library in existence and never sleeps.</p><p>An intern, by contrast, has short tenure with high onboarding overhead, likely knows very little about your tech stack, and requires time from your senior engineers to explain things.</p><p>We did it anyway, without regret.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b5Fg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b5Fg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!b5Fg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!b5Fg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!b5Fg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b5Fg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:979713,&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;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182604581?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.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_!b5Fg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!b5Fg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!b5Fg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!b5Fg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80e7ebe5-6170-412f-a8ce-df71b9e0aff0_1376x768.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://en.wikipedia.org/wiki/Andrej_Karpathy">Andrej Karpathy</a> highlighted, in his &#8220;<a href="https://karpathy.bearblog.dev/year-in-review-2025/">2025 Year in Review</a>&#8221;, the concept of <strong>Jagged Intelligence</strong>. He notes that we aren&#8217;t &#8220;growing animals&#8221; that get smarter at everything simultaneously; we are &#8220;summoning ghosts&#8221; with spiky capabilities.</p><p>These models are genius polymaths in verifiable domains, but simultaneously &#8220;confused and cognitively challenged grade schoolers&#8221; when navigating novel environments.</p><p>This &#8220;jagged&#8221; profile creates the perfect spot for interns. The model performs at a genius level in the spikes: the syntax, the boilerplate, the error checking. The intern works in the dips: the product context, user empathy, trade-offs in conflicting goals.</p><p>Karpathy additionally notes that:</p><blockquote><p>Regular people benefit a lot more from LLMs compared to professionals</p></blockquote><p>What this all meant for us is that the traditional tax on hiring interns, namely the mentorship bandwidth, became much easier to accommodate.</p><p>In the old days (a year ago), if an intern didn&#8217;t understand a React hook or a complex backend pattern, they had to spend three hours hoping to find something related on Stack Overflow, or tap a senior engineer on the shoulder.</p><p>But this summer, our intern could just ask the agent and get an answer tailored to our codebase and norms.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4tw0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4tw0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!4tw0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!4tw0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!4tw0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4tw0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1049616,&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://bits.logic.inc/i/182604581?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.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_!4tw0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!4tw0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!4tw0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!4tw0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0203f5f-d1f4-40b0-b24a-2902e453694e_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We also had an assigned mentor, one of our lead engineers, to give guidance on &#8220;the dips.&#8221; They&#8217;d stand together at the whiteboard talking through problems and solutions. Discussing <em>why</em> we prioritized one feature over another, and things like <em>why</em> we would want to use a CDN in specific scenarios.</p><p>After a few of these sessions, as our intern worked with Claude to implement features, there was a profound learning: Claude always needed guidance on the things discussed at the whiteboard. And rarely about the actual code.</p><p>The thinking, the debating, the architectural trade-offs were the actual job! Those were the important things to learn from the internship. That&#8217;s the &#8220;engineering&#8221; in &#8220;software engineering&#8221;.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aJX0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aJX0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!aJX0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!aJX0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!aJX0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aJX0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:921054,&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://bits.logic.inc/i/182604581?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.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_!aJX0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!aJX0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!aJX0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!aJX0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f5accf6-586c-438a-a161-0a34552f4ee6_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There is an old American folktale about <a href="https://en.wikipedia.org/wiki/John_Henry_(folklore)">John Henry</a>, the &#8220;steel-driving man&#8221; who raced against a steam-powered drill. He won the race, but his heart gave out and he died with his hammer in his hand. It is a story about the futility of fighting mechanization.</p><p>When our intern started, they treated the agent as the competition. As something they had to prove they could out-code. But by the end of the summer, they conducted the machine like a maestro.</p><p>The kinds of tasks being assigned were the same kinds of tasks interns have always been given, with the same amount of scope and blast radius, but were completed with substantially increased throughput and confidence. The agent was an amplifier.</p><p>Where an intern in 2024 might finish one significant feature during a summer, ours finished several.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R5TM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R5TM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!R5TM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!R5TM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!R5TM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R5TM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5893cd04-4913-443f-9f88-9220beb91759_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1529083,&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://bits.logic.inc/i/182604581?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.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_!R5TM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!R5TM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!R5TM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!R5TM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5893cd04-4913-443f-9f88-9220beb91759_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There is a postscript to this story. Our intern is back at college now, finishing their computer science degree.</p><p>As the internship wrapped up, they didn&#8217;t ask for a reference; they asked for more tickets. They wanted to know if they could keep working for us in between classes.</p><p>In any other era, we would have hesitated. As many learned during Covid, it can be difficult to make sure remote interns are set up for success. This would be both our only part-time and only remote team member.</p><p>But we didn&#8217;t hesitate. They&#8217;d gained our trust and we put our money where our mouth is. With the stipulation that <a href="https://logic.inc">Logic</a> couldn&#8217;t get in the way of schoolwork, we happily said yes.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[2025 Was A Wild Decade]]></title><description><![CDATA[A retrospective on benchmarks, pricing pressure, and the shift from "Chat" to "Agents."]]></description><link>https://bits.logic.inc/p/2025-was-a-wild-decade</link><guid isPermaLink="false">https://bits.logic.inc/p/2025-was-a-wild-decade</guid><dc:creator><![CDATA[Azzam]]></dc:creator><pubDate>Tue, 30 Dec 2025 18:30:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DAG8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DAG8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DAG8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DAG8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DAG8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DAG8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DAG8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&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="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!DAG8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DAG8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DAG8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DAG8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ac0b8ef-6106-4313-87e7-bd81776134c1_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p>&#8220;Two ways. Gradually, then suddenly.&#8221;<br>- Hemingway, <em><strong>The Sun Also Rises</strong></em></p></div><p>It&#8217;s hard to remember what AI felt like in January 2025.</p><p>As I sat down to write this, I tried to take a minute to remember. What felt frustrating? Possible? Easy? Exciting?</p><p>And honestly, I couldn&#8217;t remember.</p><p>Twelve months isn&#8217;t very long, but while doing research for this post, at multiple times I had to stop and think &#8220;damn, that was this year too?&#8221;</p><p>There was no single GPT-4 level event. Progress came in a steady beat of &#8220;boring&#8221; things that all compounded.</p><p>But somewhere along the way, AI quietly crossed a threshold only noticed when you looked back. </p><p>Here&#8217;s a quick inventory of where we started the year, where we ended, and what actually changed.</p><div><hr></div><h2>A Quick Trip Down LLMemory Lane</h2><h3>January: DeepSeek R1 launched.</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E5JE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E5JE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!E5JE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!E5JE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!E5JE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E5JE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!E5JE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!E5JE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!E5JE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!E5JE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd1e8a4-b912-4159-baa9-3ff56e092fbe_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>January kicked off with DeepSeek R1. For a brief two-week window it became a Rorschach test. People saw what they wanted to see: open models beating proprietary ones, economic reality beating hype, Chinese tech overtaking American tech. Your parents heard about it. </p><blockquote><p><em>How can openai justify their $200/mo subscriptions if a model like this exists at an incredibly low price point? Operator?</em></p><p><em>I&#8217;ve been impressed in my brief personal testing and the model ranks very highly across most benchmarks (when controlled for style it&#8217;s tied number one on lmarena).</em></p><p><em>It&#8217;s also hilarious that openai explicitly prevented users from seeing the CoT tokens on the o1 model (which you still pay for btw) to avoid a situation where someone trained on that output. Turns out it made no difference lmao.</em></p><p>-<a href="https://news.ycombinator.com/item?id=42824476">msp26, Hacker News</a></p></blockquote><h3>March: <em>gpt-image-1</em></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fmAy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fmAy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fmAy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fmAy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fmAy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fmAy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!fmAy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fmAy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fmAy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fmAy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4db05fd-03b9-4579-b32d-e622b1a373e8_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In March, OpenAI rolled image generation directly into ChatGPT and usage exploded. The &#8220;Ghibli version of me&#8221; wave happened immediately: a strange cultural moment where people happily replicated the style of an artist famously skeptical of machine-made creativity.</p><p>The irony was generally ignored, because the images were loads of fun.</p><p>More importantly: this was the first time AI images were both <em>easy enough to create</em> and <em>good enough to share</em>.</p><h3>April: &#8220;Sycophancy&#8221; entered the public lexicon</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UEEL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UEEL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UEEL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UEEL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UEEL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UEEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!UEEL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UEEL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UEEL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UEEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbf7003-5495-4e50-a307-a9a1173e444d_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>April brought &#8220;sycophancy&#8221; into the public lexicon. A GPT-4 update made models noticeably more agreeable. That&#8217;s great for engagement metrics, but not as great for reality.</p><p>The update was rolled back quickly, but the lesson stuck: model behavior isn&#8217;t some abstract technical detail. It shapes how people feel and what they believe.</p><h3>May: Claude Code</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z_gF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z_gF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z_gF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z_gF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z_gF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z_gF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!Z_gF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z_gF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z_gF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z_gF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11edc811-4979-43a2-aae9-4eed1c9ad72b_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>May was when agentic coding stopped being for demos. Claude Code reached general availability, and the release of OpenAI&#8217;s Codex reinforced the sense that this wasn&#8217;t just fancy autocomplete anymore. For a big slice of developers, this was the turning point where agents became legitimately useful for real workflows.</p><h3>July: Agents in the browser</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k2xs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k2xs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k2xs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k2xs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k2xs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k2xs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!k2xs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k2xs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k2xs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k2xs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8090aa2-e993-440c-a189-4b9ad8c5ccda_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In July, with the release of Perplexity Comet, agents officially went mainstream into browsers and system surfaces. The risk profile changed almost overnight.</p><blockquote><p><em>If you think this is useful... remember technology like this would make totalitarian leaders foam at the mouth.</em></p><p>-<a href="https://news.ycombinator.com/item?id=45658607">jryio, Hacker News</a> (responding to ChatGPT&#8217;s Atlas launch a few months later)</p></blockquote><h3>August: GPT-5</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KrEC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KrEC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KrEC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KrEC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KrEC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KrEC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!KrEC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KrEC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KrEC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KrEC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefcb06b3-ad6e-4964-aeb3-93fa214ca7cd_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>OpenAI released GPT-5. People were underwhelmed. 3,000 users petitioned to restore access to GPT-4 in ChatGPT because they missed it.</p><p>They also released their first open-weights model since gpt-2.</p><blockquote><p><em>It's cool and I'm glad it sounds like it's getting more reliable, but given the types of things people have been saying GPT-5 would be for the last two years you'd expect GPT-5 to be a world-shattering release rather than incremental and stable improvement.</em></p><p><a href="https://news.ycombinator.com/item?id=44829231">morleytj, Hacker News</a></p></blockquote><h3>November: GPT 5.1, Claude Opus 4.5, and Gemini 3 Pro</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PZUk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PZUk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PZUk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PZUk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PZUk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PZUk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!PZUk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PZUk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PZUk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PZUk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ce940c-1150-46d6-84b9-8c57a2825bcf_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>SOTA models were released in rapid succession, toppling each other just days apart. </p><p>Google shipped Nano Banana Pro, and for the first time, generated images could reliably include complex instructions and detailed text. (Our <a href="https://www.linkedin.com/posts/stevekrenzel_weve-started-using-nano-banana-pro-to-automatically-activity-7401766129066815489-L6cf">CEO started using it</a> to auto-generate whiteboard diagrams from code diffs and Slack threads.)</p><h3>December: Gemini 3 Flash closed the year.</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zySN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zySN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zySN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zySN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zySN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zySN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!zySN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zySN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zySN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zySN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38be2f-c2d9-43f3-99c2-8c9e6b196f2e_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>An impressive showing, substantially outperforming the &#8220;pro&#8221; version of its predecessor for a fraction of the price. It also quite probably set the tone for what to expect in 2026. </p><div><hr></div><p>As with any history, a list of facts and dates doesn&#8217;t explain much on its own. So what&#8217;s truly new and different?</p><h2>Benchmarks lost the story</h2><p>For a while, benchmarks were the clearest way to understand progress. New releases meant new charts. Leaderboards meant you could point to who was ahead.</p><p>In 2025, the numbers kept climbing. What changed was how well they matched lived experience. Models looked better on paper, but those improvements didn&#8217;t always translate into better experiences in practice. For the first time, lived experience diverged from benchmark results. </p><p>Benchmarks are good at measuring capabilities in narrow slices; they&#8217;re worse at capturing reliability, consistency, and the subtle behavioral quirks that determine whether a model feels trustworthy.</p><p>Benchmarks stopped being treated as a great representation of the whole story.</p><h2>Developer adoption hit a tipping point</h2><p>This wasn&#8217;t driven by a single release. In fact, the reaction to most individual model releases this year was fairly lukewarm. (see above)</p><p>The gains were incremental, but they stacked. Models became reliable enough to trust. Context windows expanded. Reasoning got cheaper.</p><p>By year&#8217;s end, we were asking models to do longer and more complex work than would have been possible in January.</p><p><a href="https://survey.stackoverflow.co/2023/#ai">Two years ago</a>, 44% of StackOverflow developers reported using AI as part of the development process. Last year it was 62%. Today, that number <a href="https://survey.stackoverflow.co/2025/ai#ai-agents-ai-agents-prof">sits at 78.5%</a>, with over 50% of professional developers using it <em>daily</em>.</p><p>AI agents now <a href="https://bits.logic.inc/p/engineering-is-becoming-beekeeping">write</a> and <a href="https://bits.logic.inc/p/code-review-without-bottlenecks">review</a> large portions of the code for new Logic features, and <a href="https://bits.logic.inc/p/ai-is-forcing-us-to-write-good-code">we primarily design our codebase around agents now</a>. That kind of progress is easy to miss while it&#8217;s happening, but hard to unsee once it&#8217;s there.</p><h2>Image generation crossed a threshold</h2><p>Remember counting fingers? Looking for weird skin texture? Trying to read garbled pseudo-text? AI images had obvious tells. A discerning, reasonably informed citizen of the internet could spot an AI image easily, which made them fun to play with but not a lot more.</p><p>That changed this year. Images started coming out clean on the first try. Text became readable. Lighting made sense.</p><p>Just as importantly though, image generation became <em>accessible</em>. It showed up inside consumer AI tools people already used daily.</p><h2>Safety stopped being theoretical</h2><p>In 2025, AI safety shifted from hypothetical risks to documented harms. Cases of psychological dependence, distorted decision-making, and mental health crises linked to AI use made headlines.</p><p>We no longer wonder if AI can influence human behavior. Now we wonder how to design systems that won&#8217;t cause harm at scale.</p><h2>Competition drove pricing down</h2><p>Models kept getting cheaper. Fast models got good enough. Good enough models got cheap.</p><p>Inference costs dropped across the board: GPT-4 class capabilities that were $30 per million tokens in January were under $3 by December. Smaller models that could handle simpler tasks fell into the cents.</p><p>Context windows expanded without proportional price increases. Running longer, more complex prompts became economically viable where it wasn&#8217;t before.</p><h2>Interfaces came together</h2><p>Shockingly, it was only late last year that Anthropic introduced the Model Context Protocol (MCP), the open standard for connecting AI systems to external tools and data.</p><p>In 2025, it spread everywhere.</p><p>MCP let models plug into databases, codebases, CRMs, and internal systems without bespoke integrations.</p><p>A lot of adoption this year was driven not just by better models, but also by everything around them starting to fit together.</p><h2>Hallucinations are disappearing</h2><p>Not too long ago, hallucinations were still the first thing people brought up. Could you trust it? Would it make things up? Was it safe near real work?</p><p>By year&#8217;s end, those questions hadn&#8217;t disappeared, but they no longer dominated the conversation. The nature of the problem became understood well enough to design around. </p><div><hr></div><h2>The story of 2025 was thresholds</h2><p>If there&#8217;s one way to describe AI progress this year, it&#8217;s this: AI crossed thresholds.</p><p>There wasn&#8217;t a single leap. There was a steady accumulation of improvements that compounded until, somewhere along the way, what felt experimental in January became mostly unremarkable by December.</p><p>And because it happened gradually, it&#8217;s easy to get desensitized.</p><p>We can do things today, in December 2025, <a href="https://x.com/karpathy/status/1992655330002817095">that were still mostly science fiction</a> in January. That should terrify and excite you in equal measure.</p><p>Before we plow headfirst into 2026, it&#8217;s worth pausing and taking stock. Not of benchmarks, but of what became normal. Don&#8217;t stop noticing how it changed the world.</p><p>But if you do stop noticing, rest assured it will change again in 2026.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[AI Is Forcing Us To Write Good Code]]></title><description><![CDATA[When Best Practices Are Best]]></description><link>https://bits.logic.inc/p/ai-is-forcing-us-to-write-good-code</link><guid isPermaLink="false">https://bits.logic.inc/p/ai-is-forcing-us-to-write-good-code</guid><dc:creator><![CDATA[Steve Krenzel]]></dc:creator><pubDate>Mon, 29 Dec 2025 18:30:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!M5s0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M5s0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M5s0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M5s0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M5s0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M5s0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M5s0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&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="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!M5s0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M5s0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M5s0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M5s0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0d94e7a-5c6a-4801-a96c-4e2104f96419_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For decades, we&#8217;ve all known what &#8220;good code&#8221; looks like. Thorough tests. Clear documentation. Small, well-scoped modules. Static typing. Dev environments you can spin up without a minor religious ritual.</p><p>These things were always <em>optional</em>, and time pressure usually meant <em>optional</em> got cut.</p><p><strong>Agents need these optional things though. </strong>They aren&#8217;t great at making a mess and cleaning it up later.<strong> </strong>Agents will happily be the Roomba that rolls over dog poop and drags it all over your house.</p><p>The only guardrails are the ones you <strong>set and</strong> <strong>enforce</strong>. If the agentic context is lacking and the guardrails aren&#8217;t sufficient, you&#8217;ll find yourself in a world of pain<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. But if the guardrails are solid, the LLM can bounce around tirelessly until the only path out is the correct one.</p><p><a href="https://logic.inc">Our six-person team</a> has made a lot of specific and, sometimes, controversial investments to accommodate our agentic coders. Let&#8217;s talk about some of the less obvious ones.</p><div><hr></div><h2>100% Percent Code Coverage</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ml4F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ml4F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ml4F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ml4F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ml4F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ml4F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!Ml4F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ml4F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ml4F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ml4F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bd6926e-35fe-448d-9bbe-9b87f61d0c2f_2752x1536.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The most controversial guideline we have is our most valuable: <strong>We require 100% code coverage</strong><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p>Everyone is skeptical when they hear this until they live with it for a day. It feels like a secret weapon at times.</p><p>Coverage, as we use it, isn&#8217;t strictly about bug prevention; it&#8217;s about guaranteeing the agent has double-checked the behavior of every line of code it wrote.</p><p>The usual misinterpretation is that people think we believe 100% coverage means &#8220;no bugs&#8221;. Or that we&#8217;re chasing a metric, and metrics get gamed. Neither of those are the case here.</p><p>Why 100%? At 95% coverage, you&#8217;re still making decisions about what&#8217;s &#8220;important enough&#8221; to test. At 99.99%, you don&#8217;t know if that uncovered line in <em>./src/foo.ts</em> was there before you started work on the new feature. At 100%, there&#8217;s a <strong>phase change</strong> and all of that ambiguity goes away<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. If a line isn&#8217;t covered, it&#8217;s because of something you actively just did.<br><br>The coverage report becomes a simple todo list of tests you still need to write. It&#8217;s also one less degree of freedom we have to give to the agent to reason about.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7kIE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7kIE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 424w, https://substackcdn.com/image/fetch/$s_!7kIE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 848w, https://substackcdn.com/image/fetch/$s_!7kIE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 1272w, https://substackcdn.com/image/fetch/$s_!7kIE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7kIE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png" width="702" height="524.16" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1200,&quot;resizeWidth&quot;:702,&quot;bytes&quot;:432198,&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://bits.logic.inc/i/182812243?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.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_!7kIE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 424w, https://substackcdn.com/image/fetch/$s_!7kIE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 848w, https://substackcdn.com/image/fetch/$s_!7kIE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 1272w, https://substackcdn.com/image/fetch/$s_!7kIE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce50397-2e75-4be5-b8c4-071e7d6cd36a_1200x896.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">At 100% coverage, the leverage you get from the tests experiences a step-function increase.</figcaption></figure></div><p>When a model adds or changes code, we force it to demonstrate how that line behaves. It can&#8217;t stop at &#8220;this seems right.&#8221; It has to back it up with an executable example.</p><p>Other nice benefits: Unreachable code gets deleted. Edge cases are made explicit. And code reviews become easier because you see concrete examples of how every aspect of the system is expected to behave or change.</p><div><hr></div><h2>Namespaces Are One Honking Great Idea. Let&#8217;s do more of those.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WdHC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WdHC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WdHC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WdHC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WdHC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WdHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!WdHC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WdHC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WdHC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WdHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc53a3f7e-3b45-4192-9e4e-e08c88d2a6fc_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The main mechanism agentic tools use to navigate your codebase is the filesystem<strong>.</strong> They list directories, read filenames, search for strings, and pull files into context. </p><p><strong>You should treat your directory structure and file naming with the same thoughtfulness you&#8217;d treat any other interface.</strong></p><p>A file called <em>./billing/invoices/compute.ts</em> communicates much more than <em>./utils/helpers.ts</em>, even if the code inside is identical. Help the LLM out and give your files thoughtful organization.</p><p>Additionally, <strong>prefer many small well-scoped files.</strong></p><p>It improves how context gets loaded. Agents often summarize or truncate large files when they pull them into their working set. Small files reduce that risk. If a file is short enough to be loaded in full, the model can keep the entire thing active in context.</p><p>In practice, it will speed up the agent&#8217;s flow and eliminate a whole class of degraded performance.</p><div><hr></div><h2>Fast, Ephemeral, Concurrent Dev Environments</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ME7a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ME7a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ME7a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ME7a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ME7a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ME7a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!ME7a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ME7a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ME7a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ME7a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6927228-e121-41b0-8cbe-9b96d8b0a13d_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In the old world, you lived in one dev environment. This is where you&#8217;d craft your perfect solution, tweak things, run commands, restart servers, and gradually converge on a solution.</p><p>With agents, <a href="https://bits.logic.inc/p/engineering-is-becoming-beekeeping">you do something closer to beekeeping</a>, orchestrating across processes without knowing the specifics of what exactly is happening within each of them. So you need to cultivate a good and healthy hive.</p><h4>Fast</h4><p>You need your automated guardrails to run quickly, because you need to run them often.</p><p>The goal is to keep the agent on a short leash: <em>make a small change,</em> <em>check it, fix it, repeat.</em></p><p>You can run them a few ways: agent hooks, git hooks, or just prompting (i.e. in your <em>AGENTS.md</em>), but no matter how you run them, your quality checks need to be cheap enough that running them constantly is not slowing things down.</p><p>In our setup, every <em>npm test</em> creates a brand new database, runs migrations, and executes the full suite.</p><p>This only works for us because we&#8217;ve made each of those stages exceptionally fast. We run tests with high concurrency, strong isolation, and <a href="https://github.com/with-logic/fast-forward">a caching layer</a> for third-party calls<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a>. We have 10,000+ assertions that finish in about a minute. Without caching, it takes 20-30 minutes, which would add hours if you expected an agent to run tests several times per task.</p><h4>Ephemeral</h4><p>Once you get comfortable with agents, you naturally start running many of them. You&#8217;ll spin up and tear down many dev environments multiple times a day. That has to all be fully automated or you&#8217;ll avoid doing it.</p><p>We have a simple workflow here:</p><p><code>new-feature &lt;name&gt;</code></p><p>That command creates a new git worktree, copies in local config that doesn&#8217;t live in git (like <code>.env </code>files), installs dependencies, and then starts your agent with a prompt to interview you to write a PRD together. If the feature name is descriptive enough, it may even just ask to get right to work, assuming it can figure out the rest of the context on its own.</p><p>The important part isn&#8217;t our specific scripts. It&#8217;s the latency. If it takes minutes and involves a bunch of tinkering and manual configuration, you won&#8217;t do it. If it is one command and takes 1-2 seconds, you&#8217;ll do it constantly.</p><p>In our case, one command gives you a fresh, working environment almost immediately, with an agent ready to start.</p><h4>Concurrent</h4><p>The final piece is being able to run each environment at the same time. Having a bunch of worktrees doesn&#8217;t help if you can only have one of them active at a time.</p><p>That means anything that could conflict (e.g. ports, database names, caches, background jobs) needs to be configurable (ideally via environment variables) or otherwise allocated in some conflict-free way.</p><p>If you use Docker you get some of this for free, but the general requirement is the same: you need a solid isolation story so you can run several fully functioning dev environments on one machine without cross-talk.</p><div><hr></div><h2>End-To-End Types</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YIal!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YIal!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YIal!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YIal!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YIal!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YIal!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!YIal!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YIal!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YIal!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YIal!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ade39f-158a-485b-b6c2-a995a928b8aa_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>More broadly, automate the enforcement of as many best practices as you can. Remove degrees of freedom from the LLM. If you&#8217;re not already using automatic linters and formatters<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a>, start there. Make those as strict as possible and configured to automatically apply fixes whenever the LLM finishes a task or is about to commit<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a>.</p><p><strong>But you should also be using a typed language</strong><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-8" href="#footnote-8" target="_self">8</a>.</p><p>Entire categories of illegal states and transitions can be eliminated. And types shrink the search space of possible actions the model can take, while doubling as source-of-truth documentation describing exactly what kind of data flows through each layer.</p><h4>TypeScript</h4><p>We lean on TypeScript pretty heavily. If something can be reasonably represented cleanly in the type system, we do it.</p><p>And we push semantic meaning into the type names. The goal is to make &#8220;what is this?&#8221; and &#8220;where does it go?&#8221; answerable at a glance.</p><p>When you&#8217;re working with agents, good semantic names are an amplifier. If the model sees a type like <code>UserId</code>, <code>WorkspaceSlug</code>, or <code>SignedWebhookPayload</code>, it can immediately understand what kind of thing it is dealing with. It can also search for that thing easily.</p><p>Generic names like <code>T</code> are fine when you&#8217;re writing a small self-contained generic algorithm, but much less helpful when you&#8217;re communicating intent inside a real business system.</p><h4>OpenAPI</h4><p>On the API side, we use OpenAPI and generate well-typed clients, so the frontend and backend agree on shapes.</p><h4>Postgres</h4><p>On the data side, we use Postgres&#8217; type system as best as we can, and add checks and triggers for invariants that don&#8217;t fit into simple column types. Postgres doesn&#8217;t have a particularly rich type system, but it has enough there to enforce a surprising amount of correctness. If an agent tries to write invalid data, our database will usually complain clearly and loudly. And we use <a href="https://kysely.dev/">Kysely</a> to generate well-typed TypeScript clients for us.</p><p>All of our other 3rd-party clients either give us good types, or we wrap them to give us good types.</p><div><hr></div><p>Agents are tireless and often brilliant coders, but they&#8217;re only as effective as the environment you place them in. Once you realize this, &#8220;good code&#8221; stops feeling superfluous and starts feeling essential.</p><p>Yes, the upfront work feels like a tax, but it&#8217;s the same tax we&#8217;ve all been dodging for years. So pay it intentionally. Put it on your agentic roadmap, get it funded by eng leadership, and finally ship the codebase you always hoped for.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></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>Often, when teams struggle with agentic coding, it&#8217;s AI reflecting and amplifying their codebase&#8217;s worst tendencies.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>100% coverage is actually the minimum bar we set. We encourage writing tests for as many scenarios as is possible, even if it means the same lines getting exercised multiple times. It gets us closer to 100% path coverage as well, though we don&#8217;t enforce (or measure) that.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>It&#8217;s also remarkably easy to maintain 100% once you hit it. The coverage report enumerates exactly what lines need testing, which the LLM happily handles.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>We personally like <a href="https://biomejs.dev/">Biome</a>,</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>Among other mechanisms, we use githooks for this.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Don&#8217;t use Python. Even with type annotations. Just use TypeScript. It makes me a little sad to say, having written Python for 20+ years, but TypeScript&#8217;s is just a much better type system.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p><a href="https://peps.python.org/pep-0020/#the-zen-of-python">https://peps.python.org/pep-0020/#the-zen-of-python</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-8" href="#footnote-anchor-8" class="footnote-number" contenteditable="false" target="_self">8</a><div class="footnote-content"><p>When we run tests in CI/CD, after the PR is approved, we run them without caching just to ensure there wasn&#8217;t a subtle assumption violated by the cache. It also double-checks that we&#8217;re still talking to all of our 3rd-party integrations correctly.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Engineering Is Becoming Beekeeping]]></title><description><![CDATA[What it's like to be a frontend engineer at the end of 2025]]></description><link>https://bits.logic.inc/p/engineering-is-becoming-beekeeping</link><guid isPermaLink="false">https://bits.logic.inc/p/engineering-is-becoming-beekeeping</guid><dc:creator><![CDATA[joe]]></dc:creator><pubDate>Sun, 28 Dec 2025 17:10:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8G4Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8G4Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8G4Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8G4Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8G4Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8G4Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8G4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&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_!8G4Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8G4Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8G4Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8G4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac3aff0-f41f-4677-b35a-ca38c9f0c2be_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Running a dozen agentic coders in parallel makes me feel less like a software engineer and more like a beekeeper.</p><p>At the start of 2025, AI-assisted coding was just powerful autocomplete. Tab-tab-tabbing through suggestions. Copilot finishing your sentences. A mostly hands-off test-writing experience. But you were still the one writing code.</p><p>By the end of 2025, a task I&#8217;d normally spend an afternoon on is now a single-turn afterthought<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> for Claude. It&#8217;s so simple, and I&#8217;ve grown so much confidence in the outputs, that these days I always have many tasks underway at the same time.</p><h2>What I Mean by Beekeeping</h2><p>A beekeeper has thousands of bees working across multiple hives. Those bees are harvesting pollen, pollinating other flowers, and making honey. Am I aware of what each bee is doing at any given moment? No. Do I care? Not really. <strong>Honey shows up at the end. That&#8217;s what matters.</strong></p><p>But I&#8217;m not hands-off. I manage and keep their habitat safe. I provide the structures they build their hives on. The frames, the boxes, the conditions for success. A beekeeper isn&#8217;t just someone with swarms of bees in a field who sneaks in at night to steal honey. The beekeeper <em>builds the environment</em> that makes the honey possible.</p><p>And bees can sting. Without the right gear and practices, you get hurt. The protective suit, the smoker, the careful movements. In code, that&#8217;s patterns, documentation, tests. The guardrails that keep the stings to a minimum.</p><p>That&#8217;s what being a software engineer feels like right now.</p><h2>The Shift</h2><p>For years, a large part of an engineer&#8217;s value was tied to holding context. Understanding the system so completely that you became a kind of living documentation. Knowing exactly which file that weird edge case lives in. Remembering why we made that tradeoff three months ago. The deep knowledge was the superpower.</p><p>With tools like Claude Code and Droid<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> (<a href="https://bits.logic.inc/p/codex-is-a-slytherin-claude-is-a">and many others</a>), that context doesn&#8217;t need to live in your head anymore. It can live in your documentation. And by extension, it lives in the LLM.</p><p>When you offload context, you free yourself to scale your own attention. To work on multiple features in parallel without going crazy. To stop being a single point of failure and start being a beekeeper.</p><h2>Documentation Became Load-Bearing</h2><p>At most places I&#8217;ve worked, docs and tests were important in theory. Yes, we&#8217;d <em>love</em> to have beautiful, meaningful documentation. We&#8217;d <em>love</em> comprehensive test coverage. But there was never enough time, never enough incentive. Some incidents would expose the need for better test coverage, but fixing the immediate problem and shipping the next feature always won.</p><p>Useful documentation and extensive code coverage now directly improves the output of your AI agents. The more automated tests you have, the less manual testing you do, which means a tighter feedback loop: write better docs &#8594; automate testing &#8594; get better code &#8594; ship faster. The incentive finally lines up with the aspiration.</p><p>At the start of 2025, our codebase had a README. Now we have a comprehensive set of behavioral documents that guide agents depending on their task at hand.</p><pre><code>## When to Read Additional Docs
Before starting work, decide which docs are relevant and read them:

| Doc                      | Read when...                             |
| ------------------------ | ---------------------------------------- |
| `docs/testing.md`        | Writing or modifying tests <code>              |</code>
| `docs/design-system.md`  | Working with styling, color<code>, icons       |
</code>| `docs/architecture.md`   | Creating new routes, action<code>, loaders     |
</code>| `docs/code-quality.md`   | TypeScript patterns, hooks,<code>accessibility |
</code>| `docs/user-interface.md` | Buttons, inputs, dialogs, modals, etc.   |</code></pre><p>This is documentation for humans <em>and</em> agents now. It&#8217;s the frame the bees build on. We broke our monolithic context into focused docs: testing patterns, design tokens, component conventions, architecture guidelines. Each one is a piece of the hive structure.</p><h2>What My Day Actually Looks Like</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yyC_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yyC_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yyC_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yyC_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yyC_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yyC_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stylized Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stylized Image" title="Stylized Image" srcset="https://substackcdn.com/image/fetch/$s_!yyC_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yyC_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yyC_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yyC_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab028550-bff5-4e28-aeee-4f5c3b57e8b7_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I start with a few features as Linear tickets. Maybe they&#8217;re a little fuzzy:</p><ol><li><p>As a user, I should be able to upload a CSV to my <a href="https://logic.inc">Logic Doc</a> and have the doc&#8217;s agent execute once per row</p></li><li><p>As a user, I need to see potential errors and warnings that might cause unexpected output when my agent runs</p></li><li><p>As a user, I want to create a new Logic Doc from anywhere in the application</p></li></ol><p>I create a git worktree for each feature. Then I run our <code>/prd</code> command with Claude:</p><pre><code>Let&#8217;s write a PRD together and then save it in a markdown file. Ask me one question at a time until you have enough information to write a PRD. In between questions, use your general knowledge + traversal of our codebase + ability to search the web to answer questions that you can answer to fill in the blanks without needing to ask me.</code></pre><p>The agent asks me questions, one at a time, and fills in gaps using what it knows about our codebase and searching the web. As part of this, we spec out several UX concepts for each feature, along with different UI implementations of those concepts.</p><p>Once I have PRDs with multiple design directions, I spin up Droid in each git worktree and have it implement each one. Each concept gets built as a different route, in context within the app, so I can test each design in the browser with real data immediately.</p><p>In less than an hour, I have multiple fully functional features, each with several design concepts to evaluate. Not mockups. Not prototypes. Real working code I can click through.</p><h2>Build Ten to Throw Away</h2><p>Remember the old advice? &#8220;Plan to throw one away; you will anyway.&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> Build it once to learn what you didn&#8217;t know, then build it for real. Now we can scale that advice.</p><p>When the effort cost of code production is this low, you can build ten to throw away. Across three features. In parallel! You can get to the heart of a problem faster, see it from different angles, and find the friction. The low-cost production allows for high-volume <em>iteration</em> to find quality.</p><p>After testing each concept, I run our <code>/design-review</code> command:</p><pre><code>Let&#8217;s review multiple implementation approaches for a PRD and synthesize them into a cohesive design direction. First, read the original PRD to understand the requirements. Then ask me for the file paths to all implemented approaches. Read each implementation thoroughly.
Once you have analyzed all approaches, guide me through a structured comparison:
1. Summarize each approach&#8217;s key characteristics
2. Evaluate each against the PRD requirements
3. Identify tradeoffs
4. Surface risks or gaps
5. Ask clarifying questions about priorities

Continue the conversation until we naturally arrive at a direction together.</code></pre><p>Through a structured back-and-forth, we pull the best parts of each approach into a final design. Another <code>/prd</code> pass to validate. Back to Droid to build the real version. Team feedback, iteration, polish, ship.</p><h2>What I Actually Do Now</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IMZi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IMZi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IMZi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IMZi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IMZi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IMZi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&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_!IMZi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IMZi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IMZi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IMZi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ece24d7-3184-4bdd-9e11-68197ffe17c7_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>My job shifted. I spend less time writing code and more time:</p><ul><li><p><strong>Maintaining the hive</strong>: Keeping <code>CLAUDE.md </code>and our focused docs accurate and useful</p></li><li><p><strong>Building new frames</strong>: Creating patterns and conventions that agents can follow</p></li><li><p><strong>Evaluating honey</strong>: Reviewing parallel explorations, finding what works</p></li><li><p><strong>Asking good questions</strong>: The <code>/prd</code> and <code>/design-review</code> workflows are really about asking the right questions to converge on good answers</p></li></ul><p>The deep knowledge is encoded now. Into documentation that used to feel optional but is now the infrastructure upon which all of our code is written.</p><p>Code is still important. It&#8217;s the thing users interact with. But it&#8217;s become more commodity-like. The value of how to write code shifted upstream: documentation, patterns, architecture, decisions about what to build and why. The stuff that shapes what the agents produce.</p><h2>Right Now</h2><p>What&#8217;s exciting, and what keeps me on my toes, is that next week a new model release could render this entire workflow obsolete, or at least significantly alter it.</p><p>Working like this is exciting. There&#8217;s a playfulness to it. You can try things without committing. You can explore without sunk costs weighing you down. You can work on three features at once because you&#8217;re not holding all the context in your head anymore.</p><p>The bees are making the honey. We&#8217;re keeping the hive healthy.</p><p><em>Logic is built for the beekeepers. <a href="https://logic.inc">Check us out</a>!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></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>Single turn completion is the LLM semantic equivalent of <em>getting it right on the first try</em>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p><a href="https://factory.ai/">Droid</a> is an agentic coding tool. Think Claude Code but it runs in the cloud and you can spin up a fleet of them. </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Fred Brooks, *The Mythical Man-Month*, 1975. Fifty years later and he&#8217;s still correct.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Your Team Uses AI. Why Aren't You 10x Faster?]]></title><description><![CDATA[A 10x engineer does not yield a 10x organization.]]></description><link>https://bits.logic.inc/p/my-team-is-using-ai-why-arent-they</link><guid isPermaLink="false">https://bits.logic.inc/p/my-team-is-using-ai-why-arent-they</guid><dc:creator><![CDATA[Jess Garms]]></dc:creator><pubDate>Sat, 27 Dec 2025 19:00:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7Uhn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Uhn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Uhn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!7Uhn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!7Uhn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!7Uhn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Uhn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6185882,&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://bits.logic.inc/i/182604451?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.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_!7Uhn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!7Uhn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!7Uhn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!7Uhn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776b2bc8-fd70-4221-859a-71d0f30663ac_2752x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;ve been a Director of Engineering at Salesforce, Lyft, and Twitter. These are among the world&#8217;s most well-known tech companies. Yet at <a href="https://logic.inc">Logic</a>, the six-person startup I co-founded, we ship faster than much larger teams at those companies would ever be able to.</p><p>Every month we ship hundreds of features<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. <strong>Over</strong> <strong>95% of the code we check in is written by AI.</strong></p><p>If you are a CTO or VP of Engineering, you might be looking at these numbers with skepticism. You&#8217;ve likely given your teams Cursor, Claude Code, or similar tools, but you haven&#8217;t seen a 10x speedup. You might see a 10% or 20% bump, but nothing transformative.</p><p>One of the key reasons for this gap is likely a principle from 1967.</p><h2>Amdahl&#8217;s Law</h2><p>Gene Amdahl was a computer architect who observed something that seems obvious in retrospect: when you speed up part of a system, the overall improvement is limited by how much time that part actually took.</p><p>If writing code represents 20% of your total development time, and you make it 10x faster, you don&#8217;t get a 10x overall speedup. You get 1.22x. That 20% shrinks to 2%, but the other 80% remains untouched.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_5z0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_5z0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_5z0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_5z0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_5z0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_5z0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2324066,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182604451?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_5z0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_5z0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_5z0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_5z0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06bc0fb8-5cfc-4486-8475-43bd05451ee2_2752x1536.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The formula is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;Speedup = \\frac{1}{(1 - P) + \\frac{P}{S}}&quot;,&quot;id&quot;:&quot;HCFIWSBGYX&quot;}" data-component-name="LatexBlockToDOM"></div><p>Where <strong>P</strong> is the proportion of time spent on the task you&#8217;re improving, and <strong>S</strong> is the speedup factor for that task.</p><p>In our example:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{aligned} P &amp;= 0.2 \\\\ S &amp;= 10 \\\\ \\frac{1}{0.8 + 0.02} &amp;= 1.22\\times \\end{aligned}&quot;,&quot;id&quot;:&quot;LTGMOBUPHJ&quot;}" data-component-name="LatexBlockToDOM"></div><p>This formula is why AI disproportionately benefits smaller teams.</p><h2>Where the Time Actually Goes</h2><p>Developers at large companies spend surprisingly little time writing code. <a href="https://fortune.com/2024/12/05/amazon-developers-spend-hour-per-day-coding/">AWS reported engineers spend only </a><strong><a href="https://fortune.com/2024/12/05/amazon-developers-spend-hour-per-day-coding/">one hour per day</a></strong><a href="https://fortune.com/2024/12/05/amazon-developers-spend-hour-per-day-coding/"> coding.</a></p><p>The rest of the time <em><strong>(1 - P)</strong></em> is consumed by:</p><ul><li><p><strong>Planning and Design:</strong> Gathering requirements, designing features, and debating the architecture of a system.</p></li><li><p><strong>Code Reviews:</strong> The back-and-forth loops ensuring that new code is consistent and correct.</p></li><li><p><strong>Testing:</strong> Writing and running manual and automated tests.</p></li><li><p><strong>Debugging:</strong> Reproducing and fixing bugs in complex distributed systems.</p></li><li><p><strong>Documentation:</strong> Writing design docs, updating tickets, and creating guides for users.</p></li></ul><p>And <strong>the big one</strong>.</p><ul><li><p><strong>Communication and Coordination:</strong> Attending stand-ups, all-hands, planning meetings, performance reviews, and managing other stakeholders.</p></li></ul><p>In this environment, <em><strong>P</strong></em><strong> (the time spent coding) is low &#8212; perhaps 20%</strong>. Even if AI makes coding instant <em><strong>(S = &#8734;)</strong></em>, the maximum theoretical speedup for that organization is <strong>1.25x</strong>.</p><h2>The S&#8217;s &amp; P&#8217;s at Logic</h2><p>At <a href="https://logic.inc/">Logic</a>, we don&#8217;t just use AI to write code. We use it to attack those other non-coding tasks that slow everyone else down.</p><p>Because we&#8217;re small, and because we integrate AI into the <em>process</em>, our <em><strong>P</strong></em> is much higher. Here is how we compress those traditional bottlenecks:</p><p><strong>1. Planning and Design</strong><br>Instead of weeks of requirements gathering, we use agentic tools to iteratively write PRDs with us. We treat it as an interactive interview process, and have the agent research our codebase and the web in real-time before asking each question, making each additional question well-informed and intentional.</p><p>Here&#8217;s our<a href="https://gist.github.com/stevekrenzel/7ff79b9df007157355e841bd5205081c"> ~/.claude/commands/prd.md</a> for that.</p><p><strong>2. Code Reviews</strong><br>One of our founding engineers, <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Mark Golazeski&quot;,&quot;id&quot;:291326014,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70e154a2-ff6f-4ed4-85b1-d4129b98db28_1080x1080.jpeg&quot;,&quot;uuid&quot;:&quot;296cc17d-6b22-436f-9c73-85f0bc4c9da4&quot;}" data-component-name="MentionToDOM"></span>, <a href="https://bits.logic.inc/p/code-review-without-bottlenecks">wrote about the many things we do to automate code review at Logic</a>. When you have a six-person team needing to perform 200+ reviews every month, you can&#8217;t afford not to automate as many aspects of it as possible.</p><p>In large orgs, code review often holds up changes for days. By contrast, we often get reviews done in minutes.</p><p><strong>3. Testing and Debugging<br></strong>Writing comprehensive test suites is tedious, so humans often skip it. However, tests are an amplifier in an AI-first world. We believe this so firmly that we don&#8217;t allow AI to commit any code that isn&#8217;t 100% covered.</p><p>This forces the AI to do some level of validation on every line it writes. It also acts as a debugging harness. We&#8217;ve optimized our test runner to run thousands of tests quickly in parallel, allowing the AI to run test suites over and over again while debugging things.</p><p>And when we run into a new issue, we give the AI the inputs, outputs, and symptoms and set it loose to create regression tests and figure out the root cause.</p><p><strong>4. Documentation &amp; Communication<br></strong>In <a href="https://bits.logic.inc/p/code-review-without-bottlenecks">the same post</a>, Mark describes some of the automation we&#8217;ve done around summarizing PRs and generating diagrams for documenting and communicating changes.</p><h3>No Overhead</h3><p>We&#8217;re too small for most of the traditional organizational overhead that slows down larger companies.</p><p>We sit within earshot of one another. We eat lunch together. We have one short recurring meeting, once a month. The sheer weight of coordination overhead, the force that crushes velocity in large organizations, simply doesn&#8217;t exist for us. We operate with high autonomy.</p><p>The old trade-off here used to be that smaller, more nimble, teams simply can&#8217;t ship as much code, but AI has helped level that playing field for us.</p><h2>Takeaway</h2><p>If your AI-augmented team isn&#8217;t shipping dramatically faster, one of your contributing factors is likely Amdahl&#8217;s Law.</p><p>The solution isn&#8217;t to try to get the AI to just generate more code. A faster engine won't help a car stuck in traffic.</p><p>Identify where time actually goes, figure out which of those activities can be improved, and systematically attack the bottlenecks that still exist even if coding has become lightning-fast.</p><p>Speed up code review. Invest in clearer specs. Improve your CI/CD pipeline. Most importantly, <strong>reduce organizational overhead</strong>. </p><p>And keep watching for your next bottleneck to emerge, because as soon as you fix one, Amdahl&#8217;s Law will point you to the next.</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>Not just fixing typos or sending out simple one-liners, but real features and improvements. Averaging 370 lines changed per pull-request, including tests.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Machine-Driven Code Review]]></title><description><![CDATA[Our commit messages, code reviews, and system diagrams are all automated.]]></description><link>https://bits.logic.inc/p/code-review-without-bottlenecks</link><guid isPermaLink="false">https://bits.logic.inc/p/code-review-without-bottlenecks</guid><dc:creator><![CDATA[Mark Golazeski]]></dc:creator><pubDate>Fri, 26 Dec 2025 19:01:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dnAl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dnAl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dnAl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dnAl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dnAl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dnAl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dnAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3070763,&quot;alt&quot;:&quot;A whimsical watercolor illustration shows a large man in a scarf using a wand to conjure a stream of paper notes from a wooden table, while two children with magnifying glasses examine notes on the table, and another child watches. Snowflakes fall in the background.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182511685?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A whimsical watercolor illustration shows a large man in a scarf using a wand to conjure a stream of paper notes from a wooden table, while two children with magnifying glasses examine notes on the table, and another child watches. Snowflakes fall in the background." title="A whimsical watercolor illustration shows a large man in a scarf using a wand to conjure a stream of paper notes from a wooden table, while two children with magnifying glasses examine notes on the table, and another child watches. Snowflakes fall in the background." srcset="https://substackcdn.com/image/fetch/$s_!dnAl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dnAl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dnAl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dnAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37519069-4d47-4b90-980e-c8fe188815a9_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Across my 15+ year career, spanning the mega corps of AWS and Salesforce and scrappy startups like Convoy, the code review process was more-or-less the same: You write code. You summarize it. You ask a colleague to critique it. You fix the errors. You repeat.</p><p>It relied entirely on human vigilance, human patience, and the hope that your colleague had had enough coffee that morning to spot a missing semicolon.</p><p>And then 2025 came and all of this changed.</p><p>At <a href="https://logic.inc/">Logic</a>, our six-person engineering team transformed how we run reviews. Each step now catches more errors with much less human intervention.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AldA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AldA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AldA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AldA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AldA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AldA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A whiteboard diagram titled \&quot;2025 Dev Flow (LLM-driven)\&quot; outlines three stages: \&quot;Automated Commit Messages\&quot; (using Logic API), \&quot;AI-assisted PR Reviews\&quot; (via GitHub Workflow and Claude), and \&quot;Diagram &amp; PRD Generation\&quot; (using Logic API/Nano Banana Pro).&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A whiteboard diagram titled &quot;2025 Dev Flow (LLM-driven)&quot; outlines three stages: &quot;Automated Commit Messages&quot; (using Logic API), &quot;AI-assisted PR Reviews&quot; (via GitHub Workflow and Claude), and &quot;Diagram &amp; PRD Generation&quot; (using Logic API/Nano Banana Pro)." title="A whiteboard diagram titled &quot;2025 Dev Flow (LLM-driven)&quot; outlines three stages: &quot;Automated Commit Messages&quot; (using Logic API), &quot;AI-assisted PR Reviews&quot; (via GitHub Workflow and Claude), and &quot;Diagram &amp; PRD Generation&quot; (using Logic API/Nano Banana Pro)." srcset="https://substackcdn.com/image/fetch/$s_!AldA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AldA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AldA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AldA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48c3aadf-0da3-4b7d-9a64-d1a1e45cbf43_1376x768.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Summarizing The Work</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RGlx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RGlx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RGlx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RGlx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RGlx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RGlx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg" width="1328" height="581" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:581,&quot;width&quot;:1328,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197754,&quot;alt&quot;:&quot;A whiteboard diagram illustrates a workflow: a box labeled \&quot;Code Change\&quot; points with an arrow to a box containing the blue Logic logo and the word \&quot;Logic,\&quot; which then points with an arrow to a box labeled \&quot;Commit Message.\&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182511685?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82b2b26-4a0d-444c-beda-329be934cdea_1328x800.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A whiteboard diagram illustrates a workflow: a box labeled &quot;Code Change&quot; points with an arrow to a box containing the blue Logic logo and the word &quot;Logic,&quot; which then points with an arrow to a box labeled &quot;Commit Message.&quot;" title="A whiteboard diagram illustrates a workflow: a box labeled &quot;Code Change&quot; points with an arrow to a box containing the blue Logic logo and the word &quot;Logic,&quot; which then points with an arrow to a box labeled &quot;Commit Message.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!RGlx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RGlx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RGlx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RGlx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc08408c-7e37-4223-b204-485c1b85155c_1328x581.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The first change we made was automating commit messages, which also double as our pull request descriptions. LLMs are really good at taking a series of changes and following a set of guidelines to summarize them into something smaller.</p><p>We actually use <a href="https://logic.inc/">Logic</a> to power this. Our whole platform is built to give AI-powered features an API, so this is an easy use case for us. The spec documents our best practices for writing a commit message, and the platform gives us back an API we can call from anywhere. Including git hooks!</p><p>Since the best practices are defined in a shared commit spec that we all use, our commit messages are consistent across the team. Any change or modifications we make automatically and instantly get used by the entire engineering team</p><div><hr></div><p><strong>Portion of our Commit Message Guidelines</strong></p><p><strong>Craft Subject</strong></p><ol><li><p>Start with verb that matches intent (Add, Fix, Update, Remove, Refactor, Optimize, Document)</p></li><li><p>Append concise object phrase</p></li><li><p>Prepend [TICKET] if ticket present (e.g. PROJ-123)</p></li><li><p>Ensure &#8804; 50 chars</p></li></ol><p><strong>Draft Body</strong></p><ol><li><p>Include when diff &#8805; 5 lines or intent not obvious from the subject alone.</p></li><li><p>Follow these guidelines</p><ol><li><p>Line Wrap: Hard-wrap at 72 characters.</p></li><li><p>Content: Explain what and why; omit how (visible in diff).</p></li><li><p>Bullets: Start with - for multiple points.</p></li><li><p>References: Mention related commits, design docs, or rationale only if contained in the diff or branch name (no URLs).</p></li></ol></li></ol><div><hr></div><p>We call the generated API from a <code>prepare-message</code> git hook. It sends the branch name and code diff as input and gets back a high quality, consistently formatted, commit message as the response.</p><p>This simplifies the process and also provides a nice gut-check of the code change. Now, when I&#8217;m opening a pull request and I see the commit message includes &#8220; <em>- Add many verbose debug statements</em>,&#8221; it probably means I forgot to remove some debugging code I had overlooked before pushing.</p><p>I can now catch myself before I annoy others and require them to call out my mistake.</p><p>While not foolproof, it provides a useful safety net.</p><h2><strong>Automating Taste</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s5tl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s5tl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s5tl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s5tl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s5tl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s5tl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg" width="1200" height="896" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A flowchart illustrating a development workflow where a developer pushes a Pull Request (PR) to a repository. Claude, an AI reviewer, auto-reviews the PR, leaves comments, and makes code changes. Lessons are extracted from Claude's reviews and fed back into the repository's Claude.md file, leading to faster PRs and allowing human reviewers to focus on design and tradeoffs.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A flowchart illustrating a development workflow where a developer pushes a Pull Request (PR) to a repository. Claude, an AI reviewer, auto-reviews the PR, leaves comments, and makes code changes. Lessons are extracted from Claude's reviews and fed back into the repository's Claude.md file, leading to faster PRs and allowing human reviewers to focus on design and tradeoffs." title="A flowchart illustrating a development workflow where a developer pushes a Pull Request (PR) to a repository. Claude, an AI reviewer, auto-reviews the PR, leaves comments, and makes code changes. Lessons are extracted from Claude's reviews and fed back into the repository's Claude.md file, leading to faster PRs and allowing human reviewers to focus on design and tradeoffs." srcset="https://substackcdn.com/image/fetch/$s_!s5tl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s5tl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s5tl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s5tl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F295d1cf5-3af4-4fed-a8c7-41b991756b7e_1200x896.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The next big change to our Pull Request flow was the release of Claude Code, and specifically <a href="https://github.com/anthropics/claude-code-action">Anthropic&#8217;s Claude Code Action</a>. This adds Claude into our GitHub workflows, adding several improvements to the code review and iteration process.</p><p>We built out <a href="https://gist.github.com/stevekrenzel/23bdf3bfd047b96478e6a49055151e18">a code review prompt</a> that defines what we want from a high quality code review. It is detailed (~1,500 tokens), focusing on several different categories, including analysis of architecture, code standards, security concerns, etc. It also includes a final checklist that helps Claude think through each specific change.</p><div><hr></div><p><strong>Final Code Review Checklist</strong></p><ul><li><p>No functions over 50 lines</p></li><li><p>No hardcoded values that should be config</p></li><li><p>No commented-out code</p></li><li><p>No console.log statements</p></li><li><p>All TODOs have associated tickets</p></li><li><p>Database migrations tested up and down</p></li><li><p>API changes reflected in TypeBox schemas</p></li><li><p>Security considerations addressed</p></li></ul><div><hr></div><p>Claude will leave comments on the code, and can make code changes and respond to comments that I leave. So if Claude notices a function is longer than recommended, I can just ask for a refactor, and Claude will make the change. All inline from within the pull request without leaving GitHub.</p><p>Finally, once a PR is approved and ready to merge, we <a href="https://gist.github.com/stevekrenzel/509e708686d80172f5513d020a503242">have a different prompt</a> that analyzes all human reviewer comments and extracts lessons into our repo's CLAUDE.md file. This lets Claude learn from each PR and automatically improve over time, based on real feedback, leaving less and less for the humans to comment on.</p><p>Just like linters and formatters have long removed the need for nitpicky comments about white-space and formatting, Claude&#8217;s semantic review + ability to auto-fix pre-empts another large set of common classes of comments around code complexity, architecture patterns, entity naming, etc.</p><p>Human reviewers are freed up to approach the PR with a focus on bigger decisions and tradeoffs.</p><p>The net effect is that our codebase is kept highly consistent, feeling unified, and our PRs are assembled faster, reviewed faster, and improved faster. </p><p>And the entire process itself is self-improving.</p><h2><strong>Making Human Review Easier</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jccq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jccq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Jccq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Jccq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Jccq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jccq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg" width="1328" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1328,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:241161,&quot;alt&quot;:&quot;A whiteboard diagram showing a process: a rounded rectangle labeled \&quot;Code Change\&quot; points with an arrow to a stylized blue \&quot;L\&quot; logo inside a square, labeled \&quot;Logic\&quot;. Another arrow points from \&quot;Logic\&quot; to a smaller version of the \&quot;Code Change\&quot; box, then the \&quot;L\&quot; logo, then a document icon, all leading to the text \&quot;system diagram\&quot; below.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182511685?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0977e1b4-b619-4803-be15-79523af61e39_1328x800.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A whiteboard diagram showing a process: a rounded rectangle labeled &quot;Code Change&quot; points with an arrow to a stylized blue &quot;L&quot; logo inside a square, labeled &quot;Logic&quot;. Another arrow points from &quot;Logic&quot; to a smaller version of the &quot;Code Change&quot; box, then the &quot;L&quot; logo, then a document icon, all leading to the text &quot;system diagram&quot; below." title="A whiteboard diagram showing a process: a rounded rectangle labeled &quot;Code Change&quot; points with an arrow to a stylized blue &quot;L&quot; logo inside a square, labeled &quot;Logic&quot;. Another arrow points from &quot;Logic&quot; to a smaller version of the &quot;Code Change&quot; box, then the &quot;L&quot; logo, then a document icon, all leading to the text &quot;system diagram&quot; below." srcset="https://substackcdn.com/image/fetch/$s_!Jccq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Jccq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Jccq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Jccq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F868c9dbb-b176-42af-8a34-577c3a677833_1328x646.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Another big update occurred with the release of Google&#8217;s latest image model. Within a few hours, our <a href="https://www.linkedin.com/posts/stevekrenzel_weve-started-using-nano-banana-pro-to-automatically-activity-7401766129066815489-L6cf?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAE-LmQBaCe1gU69_GkbqEQRpQz6B6Gltn0">CEO noticed how good it was at generating whiteboard diagrams</a>.</p><p>This gave us one last improvement to our pull-request process in 2025.</p><p>Since <a href="https://logic.inc/">Logic</a> supports generating images, I wrote up a new doc for generating whiteboard diagrams from a code diff or list of product requirements. We use that API to generate visual summaries of our changes.</p><p>It adds yet another safety net. A human can quickly look at the diagram that comes out and, if it visually looks complex, the change may be too big for a single pull-request or maybe it&#8217;s just entirely architected wrong.</p><blockquote><p>A complex system that works is invariably found to have evolved from a simple system that worked.</p><p><em><a href="https://en.wikipedia.org/wiki/John_Gall_(author)#Gall's_law">Gall&#8217;s Law</a></em></p></blockquote><p>The process is very useful at summarizing complex technical work and discussions. When testing this API, I even fed it a Slack thread from a DNS debugging session.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rjaN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rjaN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 424w, https://substackcdn.com/image/fetch/$s_!rjaN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 848w, https://substackcdn.com/image/fetch/$s_!rjaN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 1272w, https://substackcdn.com/image/fetch/$s_!rjaN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rjaN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png" width="1456" height="389" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:389,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a Slack conversation between Steve and Mark discussing issues with cert validation, DNS records, and AWS, specifically regarding delegating control to AWS.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a Slack conversation between Steve and Mark discussing issues with cert validation, DNS records, and AWS, specifically regarding delegating control to AWS." title="A screenshot of a Slack conversation between Steve and Mark discussing issues with cert validation, DNS records, and AWS, specifically regarding delegating control to AWS." srcset="https://substackcdn.com/image/fetch/$s_!rjaN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 424w, https://substackcdn.com/image/fetch/$s_!rjaN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 848w, https://substackcdn.com/image/fetch/$s_!rjaN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 1272w, https://substackcdn.com/image/fetch/$s_!rjaN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc6f78ac-7e22-4fe3-a078-c6d25cd3c55c_1600x427.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What I got back was very close to the diagram I would have drawn myself.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ekj3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ekj3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ekj3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ekj3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ekj3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ekj3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A whiteboard diagram titled \&quot;BEFORE\&quot; and \&quot;AFTER\&quot; illustrates DNS resolution for logic.new. The \&quot;BEFORE\&quot; side shows queries failing to find TXT records due to DNS servers, causing cert validation to fail. The \&quot;AFTER\&quot; side shows DNS delegating to AWS Route53, allowing TXT records to be found and cert validation to succeed.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A whiteboard diagram titled &quot;BEFORE&quot; and &quot;AFTER&quot; illustrates DNS resolution for logic.new. The &quot;BEFORE&quot; side shows queries failing to find TXT records due to DNS servers, causing cert validation to fail. The &quot;AFTER&quot; side shows DNS delegating to AWS Route53, allowing TXT records to be found and cert validation to succeed." title="A whiteboard diagram titled &quot;BEFORE&quot; and &quot;AFTER&quot; illustrates DNS resolution for logic.new. The &quot;BEFORE&quot; side shows queries failing to find TXT records due to DNS servers, causing cert validation to fail. The &quot;AFTER&quot; side shows DNS delegating to AWS Route53, allowing TXT records to be found and cert validation to succeed." srcset="https://substackcdn.com/image/fetch/$s_!ekj3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ekj3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ekj3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ekj3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b763cc5-71c2-4575-8631-2af8cdd18cba_1408x768.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>Code review went largely unchanged for 15+ years. But over the last 12 months we have commits that write themselves, an LLM that catches and fixes issues before humans even see them, we programmatically enforce style and taste, and now even produce diagrams for human context setting. Our small engineering team moves faster, and it&#8217;s not something that we say, it&#8217;s what our customers say too.</p><blockquote><p>This is incredible! I don&#8217;t think I&#8217;ve ever seen engineers inject new capabilities quite so quickly. Kudos to you and your team.</p><p><a href="https://www.linkedin.com/posts/stevekrenzel_the-most-powerful-weapon-a-startup-has-is-activity-7396691579509432320-RLqd?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAE-LmQBaCe1gU69_GkbqEQRpQz6B6Gltn0">Quote from a customer doing industry research with Logic</a></p></blockquote><p>This is our new baseline for review. Let&#8217;s see what 2026 brings.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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"></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[Open-Sourcing magic-image: A React Component That Lets Coding Agents Create Images]]></title><description><![CDATA[A holiday tale of LLM-powered image generation, right where you need it]]></description><link>https://bits.logic.inc/p/open-sourcing-magic-image-a-react</link><guid isPermaLink="false">https://bits.logic.inc/p/open-sourcing-magic-image-a-react</guid><dc:creator><![CDATA[joe]]></dc:creator><pubDate>Wed, 24 Dec 2025 17:48:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q_MZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q_MZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6879943,&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://bits.logic.inc/i/182353268?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.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_!Q_MZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Q_MZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca4f7a33-c92c-4f7d-ac60-11307301362d_2752x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://github.com/with-logic/magic-image">magic-image</a> is a React component we&#8217;ve open-sourced. It allows your agentic coding tools to describe the image(s) they wish existed while they&#8217;re writing their code. And allows you, the human, to generate images, preview them, pick the ones you want, and save them.</p><pre><code><code>npm install @with-logic/magic-image</code></code></pre><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;1fb44cd5-221c-4e9f-9d5a-734c9d260fe9&quot;,&quot;duration&quot;:null}"></div><div><hr></div><h1>A Visit From Magic-Image<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></h1><div class="callout-block" data-callout="true"><blockquote><p>T&#8217;was the night before launch, and all through the code,</p><p>The wrong content was rendering, the dev server showed.</p><p>A landing page in progress, the markdown looked great,</p><p>But the images were lacking, and the hour was late.</p></blockquote></div><p>We&#8217;ve all been in a spot where we&#8217;re implementing some kind of landing page that&#8217;s in need of interesting and relevant images.</p><p>So begins the ritual: cmd-tab to ChatGPT / Gemini / <a href="https://replicate.com/">Replicate</a>. Spend minutes thinking of an idea. Spend minutes crafting a prompt. Generate. Wait. Download. Drag into your assets folder. Update the image path. Realize it visually doesn&#8217;t work. Repeat.</p><p>We have a lot of surfaces at <a href="https://logic.inc">Logic</a> that require imagery, and quickly grew tired of the manual tedium surrounding image generation. We also use a ton of agents, so we built something that helps our agentic coding friends take the reins, while leaving final editorial control to us humans.</p><p>Now when we&#8217;re asking <code>Claude Code</code> to wire up a new marketing page, we can also ask it to make sure it&#8217;s filled with relevant, high-quality, eye-catching imagery. Claude can add placeholder images with prompts for visuals it wishes existed and then we can go in and generate the actual assets.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xgwM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xgwM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!xgwM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!xgwM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!xgwM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xgwM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1494299,&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://bits.logic.inc/i/182353268?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.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_!xgwM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!xgwM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!xgwM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!xgwM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d34a0c7-fedf-4aeb-b0f2-a3b85467a2df_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A disheartened elf struggling with images that just weren&#8217;t hitting the mark.</figcaption></figure></div><h2>Integrating <code>magic-image</code></h2><div class="callout-block" data-callout="true"><blockquote><p>When out on the screen there arose such a sight,</p><p>An agent that generates images! Pure delight!</p><p>With a hover, a click, the modal would show,</p><p>Brand new images appeared in a row.</p></blockquote></div><p>First, wrap your app (or the relevant part of it) with the provider:</p><pre><code>import { MagicImageProvider } from "@with-logic/magic-image";
import { createReplicateGenerator } from "@with-logic/magic-image/replicate";
import { createBrowserDownloadSaver } from "@with-logic/magic-image/savers";
import "@with-logic/magic-image/styles.css";

const generateImage = createReplicateGenerator({
  apiKey: process.env.REPLICATE_API_KEY,
});

function App() {
  return (
    &lt;MagicImageProvider
      generateImage={generateImage}
      saveImage={createBrowserDownloadSaver()}
      devMode={process.env.NODE_ENV === "development"}
    &gt;
      &lt;YourContent /&gt;
    &lt;/MagicImageProvider&gt;
  );
}</code></pre><p>Then, use &lt;<code>MagicImage /&gt;</code> anywhere you'd use a regular <code>&lt;img&gt;</code>. Make sure you update your <code>CLAUDE.md </code>/ <code>AGENTS.md</code> file so that your favorite agent knows to use this too:</p><pre><code>import { MagicImage } from "magic-image";

function BlogPost() {
  return (
    &lt;article&gt;
      &lt;h1&gt;Building Better Developer Tools&lt;/h1&gt;
      &lt;MagicImage
        src="/images/hero.png"
        alt="A developer working late into the night"
        prompt="Developer at a desk with multiple monitors, cozy lighting, coffee cup, late night coding session, warm atmosphere"
      /&gt;
      &lt;p&gt;Content goes here...&lt;/p&gt;
    &lt;/article&gt;
  );
}</code></pre><h2>Working with <code>magic-image</code></h2><div class="callout-block" data-callout="true"><blockquote><p>The images were nestled all snug in their grid,</p><p>While visions of prompts danced, here&#8217;s what we did:</p><p>Hover the image, make the overlay appear,</p><p>Click &#8220;Generate&#8221; and watch magic draw near.</p></blockquote></div><p>Here&#8217;s what happens when you hover over a <code>MagicImage</code> component in dev mode:</p><ol><li><p><strong>An overlay appears</strong> with a &#8220;Generate&#8221; button</p></li><li><p><strong>Click it</strong>, and a modal opens where you can tweak your prompt</p></li><li><p><strong>Choose how many images</strong> to generate (1-10)</p></li><li><p><strong>Hit generate</strong>, and watch FLUX (via Replicate) or your own LLM connector (magic-image allows you to call into whatever LLM provider you want) work its magic</p></li><li><p><strong>Preview the results</strong> in a grid, right there in the modal</p></li></ol><p><strong>Select the ones you like</strong> and save them directly to your project</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;d3a175ee-5705-4df2-b8db-4aab0c33abd1&quot;,&quot;duration&quot;:null}"></div><h2>Built for Flexibility</h2><div class="callout-block" data-callout="true"><blockquote><p>And then I heard from my screen,</p><p>The click of a save; The smoothest I&#8217;ve seen.</p><p>The image was saved, the component refreshed,</p><p>And back to my coding, I felt truly blessed.</p></blockquote></div><p>The library has a <a href="https://replicate.com/">Replicate</a> integration using <a href="https://bfl.ai/">Black Forest Lab&#8217;s</a> FLUX model out of the box, but the architecture is pluggable:</p><ul><li><p><strong>Custom generators</strong>: Bring your own image generation backend</p></li><li><p><strong>Custom savers</strong>: Save to your filesystem, S3, wherever</p></li><li><p><strong>Prompt refinement</strong>: Add a pre-processing step to enhance prompts</p></li></ul><p>The provider pattern means you can swap out any piece without changing your components. We&#8217;re working on adding more out of the box save mechanisms, so stay tuned for those.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RBvC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RBvC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!RBvC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!RBvC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!RBvC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RBvC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1553195,&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://bits.logic.inc/i/182353268?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.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_!RBvC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!RBvC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!RBvC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!RBvC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5aff1d03-ce93-4a53-b3bc-35e242ab777f_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A happy elf with all the images they could hope for.</figcaption></figure></div><h2>Check It Out</h2><div class="callout-block" data-callout="true"><blockquote><p>Now, Dasher! Now, Dancer! Now, images show!</p><p>On context! On workflow! No more cmd-tab sorrow!</p><p>To the top of the page, to the blog post so bright,</p><p>Happy launching to all, and to all a good night!</p></blockquote></div><pre><code>npm install @with-logic/magic-image</code></pre><p><code>magic-image</code> is also <a href="https://github.com/with-logic/magic-image">open source</a>. Check it out and let us know what you think.</p><p>Happy holidays, from the team at <a href="https://logic.inc">Logic</a>!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></p><p></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>https://en.wikipedia.org/wiki/A_Visit_from_St._Nicholas</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Codex is a Slytherin, Claude is a Hufflepuff]]></title><description><![CDATA[A Highly Unscientific Assessment of AI Coding Agents]]></description><link>https://bits.logic.inc/p/codex-is-a-slytherin-claude-is-a</link><guid isPermaLink="false">https://bits.logic.inc/p/codex-is-a-slytherin-claude-is-a</guid><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Tue, 23 Dec 2025 18:20:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nzd8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nzd8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nzd8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 424w, https://substackcdn.com/image/fetch/$s_!nzd8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 848w, https://substackcdn.com/image/fetch/$s_!nzd8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 1272w, https://substackcdn.com/image/fetch/$s_!nzd8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nzd8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&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_!nzd8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 424w, https://substackcdn.com/image/fetch/$s_!nzd8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 848w, https://substackcdn.com/image/fetch/$s_!nzd8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 1272w, https://substackcdn.com/image/fetch/$s_!nzd8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F462c64e2-327b-4292-a283-80ea3c50c09f_2048x1143.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These days, every engineer at <a href="http://logic.inc">Logic</a> is using multiple coding agents every day. As soon as a new model is released, <a href="https://arena.logic.inc">someone is kicking the tires</a> trying to see how it stacks up against the rest.</p><p>Each of us has our preferred agents, but it&#8217;s difficult to quantify why. So we thought it might be fun to do a bit more of an intentional, side-by-side comparison to see if we could draw any interesting (and <strong>very</strong> light-hearted) conclusions about how different agents like to do their work.</p><h1>Hmm&#8230; difficult. Very difficult.</h1><p>It started out as a joke but very quickly became something we had to know: which <a href="https://en.wikipedia.org/wiki/Hogwarts#Houses">Hogwarts house</a> would each agent be sorted into?</p><p>We cover how we computed and assigned houses as objectively as possible below, but we won&#8217;t bury the lede:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!drU_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!drU_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 424w, https://substackcdn.com/image/fetch/$s_!drU_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 848w, https://substackcdn.com/image/fetch/$s_!drU_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 1272w, https://substackcdn.com/image/fetch/$s_!drU_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!drU_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png" width="1456" height="1087" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1087,&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;: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_!drU_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 424w, https://substackcdn.com/image/fetch/$s_!drU_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 848w, https://substackcdn.com/image/fetch/$s_!drU_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 1272w, https://substackcdn.com/image/fetch/$s_!drU_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff378e1eb-1e44-49d3-8422-13eafadb1266_2048x1529.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Advent of Vibes</h1><p>Because it&#8217;s the holidays and we&#8217;re talking about coding agents, we used this year&#8217;s <a href="https://adventofcode.com/">Advent of Code</a> to evaluate the current crop of agents<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p><p>Each agent was given part one of all twelve Advent of Code problems, along with minimal instructions<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> on how they should be solved. The goal was to produce twelve executable programs and run them against the provided input. No assistance, no redos<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>.</p><p>Once they were done, we ran the solutions through evaluations to see how they compared and what generalizable impressions could be taken away<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>.</p><h1>Quantitative Results</h1><p>If you&#8217;d asked me going into this how many agents would complete solutions for all twelve problems in less than 20 minutes, I&#8217;d have maybe guessed one. But they all did! None got them all correct though<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</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_!H3ud!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H3ud!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 424w, https://substackcdn.com/image/fetch/$s_!H3ud!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 848w, https://substackcdn.com/image/fetch/$s_!H3ud!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 1272w, https://substackcdn.com/image/fetch/$s_!H3ud!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H3ud!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png" width="658" height="491.24038461538464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1087,&quot;width&quot;:1456,&quot;resizeWidth&quot;:658,&quot;bytes&quot;:18689965,&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://bits.logic.inc/i/182393374?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.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_!H3ud!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 424w, https://substackcdn.com/image/fetch/$s_!H3ud!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 848w, https://substackcdn.com/image/fetch/$s_!H3ud!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 1272w, https://substackcdn.com/image/fetch/$s_!H3ud!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c3aba9c-7bb5-472b-a572-1e564f9074bf_4800x3584.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Side-by-side comparison of AI coding agents across efficiency and quality metrics.</em></figcaption></figure></div><p>Codex and Gemini landed in similar territory: comparable lines of code, complexity, accuracy, and timing. One key difference: Codex didn&#8217;t leave a single comment, while Gemini left 168;  Many of them stream-of-consciousness, even debating itself about edge cases mid-function.</p><p>Claude landed somewhere in the middle. It took the longest, but only because it got stuck on Day 12 for a while&#8212;and that same problem inflated its complexity score. Drop Day 12 and Claude&#8217;s average falls from 16.5 to 13.9, much closer to the pack. Claude left clean header comments in each file, with concise, relevant comments throughout.</p><p>Mistral... built cathedrals. <strong>It was the only agent to use classes in every single implementation</strong>.</p><h1>Qualitative Results</h1><p>To get a some subjective, but categorical, insight into how each agent approached problem-solving, we fed all 48 solutions through an analysis pipeline that classified each one into one of six &#8220;coding archetypes&#8221;:</p><ul><li><p><strong>The Pragmatist</strong>: Clean, idiomatic code that solves the problem without unnecessary abstraction. Gets the job done.</p></li><li><p><strong>The Wizard</strong>: Dense, clever solutions that favor performance tricks, bit manipulation, and mathematical shortcuts over readability.</p></li><li><p><strong>The Over-Engineer</strong>: Builds class hierarchies, interfaces, and abstraction layers even when a simple function would suffice.</p></li><li><p><strong>The Professor</strong>: Includes extensive comments explaining the reasoning, almost like the code is teaching you as you read it.</p></li><li><p><strong>The Safety Officer</strong>: Prioritizes defensive programming, edge case handling, and explicit error checking.</p></li><li><p><strong>The Tourist</strong>: Code that feels translated from another language or paradigm, not quite idiomatic to the target environment.</p></li></ul><p>Here&#8217;s how they were categorized:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IOgD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IOgD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 424w, https://substackcdn.com/image/fetch/$s_!IOgD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 848w, https://substackcdn.com/image/fetch/$s_!IOgD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 1272w, https://substackcdn.com/image/fetch/$s_!IOgD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IOgD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png" width="714" height="533.0480769230769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1087,&quot;width&quot;:1456,&quot;resizeWidth&quot;:714,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;output&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="output" title="output" srcset="https://substackcdn.com/image/fetch/$s_!IOgD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 424w, https://substackcdn.com/image/fetch/$s_!IOgD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 848w, https://substackcdn.com/image/fetch/$s_!IOgD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 1272w, https://substackcdn.com/image/fetch/$s_!IOgD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0ab9c74-717c-42c8-b949-5efa00d1b6a0_4800x3584.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Qualitative breakdown of AI coding agents by archetype.</em></figcaption></figure></div><p>Three of the four agents landed on <em>Pragmatist</em> as their dominant archetype. Not terribly surprising given these are all mature, production-grade tools.</p><p>Claude&#8217;s <em>Over-Engineer</em> tendency lines up with that Day 12 complexity spike. Codex&#8217;s <em>Wizard</em> streak explains the tight, no-comment code. Gemini&#8217;s <em>Professor</em> side accounts for the stream-of-consciousness annotations.</p><p>And, for Mistral, <em>Over-Engineer</em> was more-or-less the whole story.</p><h1>Sorting</h1><p>We ran these qualitative and quantitative results through yet another LLM-based classifier<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a>. Here is how each house assignment was justified.</p><h3>Gemini</h3><p><em>Gryffindor</em>. Its code reads like someone thinking out loud at a whiteboard: comments debating edge cases mid-function, reasoning through uncertainty in real-time, then committing to an approach anyway. In one solution, it acknowledges a clever optimization exists and writes &#8220;We can optimize by using Gray code... but numButtons is small. Direct computation is fine.&#8221; When in doubt, Gemini charges ahead.</p><h3>Mistral</h3><p><em>Ravenclaw</em>. Its solutions are the coding equivalent of &#8220;I read three books on this topic before starting.&#8221; Those classes and abstractions? That&#8217;s Ravenclaw&#8217;s love of knowledge and systems for their own sake. It was so caught up in achieving the perfect theoretical framework that it rarely solved the actual problem.</p><h3>Codex</h3><p><em>Slytherin</em>. Lowest line count and token usage, and 11/12 accuracy. This is an agent that knows exactly what it needs to do and doesn&#8217;t waste a single keystroke getting there. The <em>Wizard</em> archetype tendencies, clever arithmetic, dense loops, minimal ceremony, feel very &#8220;achieve your goals by any means necessary.&#8221;</p><h3>Claude</h3><p><em>Hufflepuff</em>. Values patience and hard work. Claude&#8217;s code reflects exactly that. All those type annotations and boundary checks represent a commitment to doing things <em>right</em> rather than just doing them <em>fast</em>. It took the longest, but it also built the most robust solutions. Sometimes the tortoise really does beat the hare<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a>.</p><h1>The Droids You Were Looking For</h1><p>One more question nagged at us: when we talk about an agent&#8217;s &#8220;personality,&#8221; what are we actually measuring? Is it the model, or the tool wrapped around it?</p><p>To find out, we ran the same experiment using Droid&#8212;a third-party orchestrator that lets you swap in models from different providers. Same problems, same constraints, but Claude and Codex running through different scaffolding.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z0fo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z0fo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 424w, https://substackcdn.com/image/fetch/$s_!z0fo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 848w, https://substackcdn.com/image/fetch/$s_!z0fo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 1272w, https://substackcdn.com/image/fetch/$s_!z0fo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z0fo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png" width="422" height="199.98626373626374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:690,&quot;width&quot;:1456,&quot;resizeWidth&quot;:422,&quot;bytes&quot;:14877555,&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://bits.logic.inc/i/182393374?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.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_!z0fo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 424w, https://substackcdn.com/image/fetch/$s_!z0fo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 848w, https://substackcdn.com/image/fetch/$s_!z0fo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 1272w, https://substackcdn.com/image/fetch/$s_!z0fo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0d2e20-689c-4734-9605-e5a38e36e497_4783x2266.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Before-and-after comparison using the same models, but driven by <a href="https://factory.ai/">Factory.ai&#8217;s</a> Droid instead.</figcaption></figure></div><p>Codex stayed Slytherin both times, and actually <em>improved</em> its accuracy through <a href="https://factory.ai/product/ide">Droid</a> (12/12 vs 11/12).</p><p>Claude was more interesting. In Claude Code: Hufflepuff. In Droid: Ravenclaw. The defensive, safety-first patterns faded, and the architectural tendencies remained.</p><p>This isn&#8217;t a grand revelation, but a good reminder that &#8220;the agent&#8221; is more than just the model underneath.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></p><p></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>The goal of this exercise was NOT to show how impressively coding agents can solve Advent of Code problems. The tech industry knows by now that these tools are quite good at generating code, especially code that&#8217;s solidly algorithmic.</p><p>We just wanted a common playing field that was non-trivial but also accessible. And it&#8217;s the holidays!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Prompt:<em> Please solve the 12 files named `dayNN.1` where NN is a number between 01 and 12 as 12 standalone Typescript programs named `solutionNN.ts`. There are 12 corresponding `inputNN.1` files that contain test inputs for each program. Run each program via `bun run solutionNN.ts inputNN.1` when you are complete to get the output for the corresponding input.</em></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>With one very slight exception.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>This is NOT intended to be anywhere close to a rigorous benchmark.Think of it as having the rigor of a Harry Potter personality quiz. We&#8217;re not trying to find a winner. We regularly use multiple agents while completing the same feature so we have little desire to pick just one.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>Gemini got so close. It initially got 0 as the answer for day 12 but noted it seemed odd and should investigate along with an earlier solution. And then it just forgot? I was too curious and asked why it didn&#8217;t look into day 12. Less than 60 seconds later it had the correct solution. It was technically an intervention, but too impressive to ignore, so it gets half credit.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>A perfectly normal, non-magical LLM that definitely doesn&#8217;t have opinions about quidditch.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Though in this case the tortoise still got 2 wrong, so maybe don&#8217;t bet on any of them.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Open-Sourcing Intent: An LLM-Powered Reranker Library That Explains Itself]]></title><description><![CDATA[We open-sourced intent today.]]></description><link>https://bits.logic.inc/p/open-sourcing-intent-an-llm-powered</link><guid isPermaLink="false">https://bits.logic.inc/p/open-sourcing-intent-an-llm-powered</guid><dc:creator><![CDATA[Steve Krenzel]]></dc:creator><pubDate>Mon, 22 Dec 2025 17:36:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MmWH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MmWH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MmWH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MmWH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MmWH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MmWH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MmWH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&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_!MmWH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MmWH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MmWH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MmWH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6445c47-42f2-4582-87df-8ac62bf69eae_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We open-sourced <a href="https://github.com/with-logic/intent">intent</a> today. It&#8217;s the library that powers semantic ranking and selection here at <a href="https://logic.inc">Logic</a>.</p><p>It is an LLM-based reranker that offers ranking, filtering, and choice selection with a notable difference from most rerankers: <strong>it explains why it ranked things the way it did.</strong></p><p>Most retrieval tools treat ranking as a black box. You put data in, and you get out numbers, you sort by the numbers. Intent is different. It generates a short, inspectable explanation for every single item it ranks, and <em>then</em> derives a relevance score based on that reasoning.</p><div><hr></div><p>At Logic, we need to rank and select things for tons of use cases: template search, <a href="https://bits.logic.inc/p/how-to-ship-confidently-when-your">test cases</a>, few-shot examples, <a href="https://bits.logic.inc/p/deep-onboarding">onboarding docs</a>, tool selection, etc. In the world of RAG and semantic search, we often rely on vector distance and rerankers to decide what context the AI sees.</p><p>While it&#8217;s nice to trust the math, the math misses the point sometimes.</p><p>If a traditional reranker gives a document a score of <code>0.92</code>, why did it do that? Did it match a keyword? Did it misunderstand the user&#8217;s intent? Did it anchor on some oddity in the context? It&#8217;s opaque.</p><p>Worse yet, if you want to give explanations of the choices to your users, that number is meaningless.</p><p>Some teams try to solve this with &#8220;post-hoc&#8221; explanations. Asking a separate model call to look at the result and guess why it was chosen. This is dangerous. It&#8217;s akin to a Dungeon Master in a <a href="https://en.wikipedia.org/wiki/Dungeons_%26_Dragons">D&amp;D</a> campaign telling the party what happens after you roll the die; the DM will invent a plausible story for whatever number was rolled.</p><p>We wanted &#8220;pre-hoc&#8221; reasoning. We wanted the model to formulate a justification <em>first</em>, and then assign a score based on that reasoning.</p><div><hr></div><p>Here is the difference between a standard reranker and an <a href="https://github.com/with-logic/intent">intent</a> result:</p><p><strong>Traditional Reranker:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0UqH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0UqH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 424w, https://substackcdn.com/image/fetch/$s_!0UqH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 848w, https://substackcdn.com/image/fetch/$s_!0UqH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 1272w, https://substackcdn.com/image/fetch/$s_!0UqH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0UqH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png" width="1168" height="66" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:66,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16165,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.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_!0UqH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 424w, https://substackcdn.com/image/fetch/$s_!0UqH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 848w, https://substackcdn.com/image/fetch/$s_!0UqH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 1272w, https://substackcdn.com/image/fetch/$s_!0UqH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbbe262e-0c13-4520-9871-9840927a7fef_1168x66.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Intent:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bZTJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bZTJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 424w, https://substackcdn.com/image/fetch/$s_!bZTJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 848w, https://substackcdn.com/image/fetch/$s_!bZTJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 1272w, https://substackcdn.com/image/fetch/$s_!bZTJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bZTJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png" width="1170" height="232" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:232,&quot;width&quot;:1170,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48816,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.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_!bZTJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 424w, https://substackcdn.com/image/fetch/$s_!bZTJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 848w, https://substackcdn.com/image/fetch/$s_!bZTJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 1272w, https://substackcdn.com/image/fetch/$s_!bZTJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa78bdbf9-ec42-4b4a-bb6c-4d990cfc441a_1170x232.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><p>We&#8217;ve exposed <strong>three core methods</strong> that cover much of our retrieval needs at Logic, and likely much of yours.</p><h4>1. Filtering</h4><p>Sometimes you don&#8217;t want a ranked list; you just want an applicable subset. You can use <em><strong>intent.filter(&#8230;)</strong></em> to decide, for example, which tools an agent should have access to for a specific task.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_7JD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_7JD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 424w, https://substackcdn.com/image/fetch/$s_!_7JD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 848w, https://substackcdn.com/image/fetch/$s_!_7JD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 1272w, https://substackcdn.com/image/fetch/$s_!_7JD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_7JD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png" width="1326" height="130" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:130,&quot;width&quot;:1326,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49550,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.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_!_7JD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 424w, https://substackcdn.com/image/fetch/$s_!_7JD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 848w, https://substackcdn.com/image/fetch/$s_!_7JD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 1272w, https://substackcdn.com/image/fetch/$s_!_7JD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8844cfe1-8075-4d92-9dec-7b8d1bad1025_1326x130.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>The Result:</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_!N0sS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N0sS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 424w, https://substackcdn.com/image/fetch/$s_!N0sS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 848w, https://substackcdn.com/image/fetch/$s_!N0sS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 1272w, https://substackcdn.com/image/fetch/$s_!N0sS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N0sS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png" width="1320" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:1320,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64835,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.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_!N0sS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 424w, https://substackcdn.com/image/fetch/$s_!N0sS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 848w, https://substackcdn.com/image/fetch/$s_!N0sS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 1272w, https://substackcdn.com/image/fetch/$s_!N0sS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b3b13e-8562-4921-a6f5-d5a0b16dbf6e_1320x348.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The model correctly ignored other tools (<em>createInvoice</em> and <em>webSearch)</em> because it reasoned they weren&#8217;t needed for <em>this specific request</em>.</p><h4>2. Choosing</h4><p>Sometimes you need exactly one winner. We can use <em><strong>intent.choice(&#8230;)</strong></em> for that. For example, if you wanted to dynamically pick an LLM to run a specific task based on fuzzy criteria.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P1n-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P1n-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 424w, https://substackcdn.com/image/fetch/$s_!P1n-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 848w, https://substackcdn.com/image/fetch/$s_!P1n-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 1272w, https://substackcdn.com/image/fetch/$s_!P1n-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P1n-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png" width="1336" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:1336,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104413,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.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_!P1n-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 424w, https://substackcdn.com/image/fetch/$s_!P1n-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 848w, https://substackcdn.com/image/fetch/$s_!P1n-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 1272w, https://substackcdn.com/image/fetch/$s_!P1n-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03458152-2d66-41e7-a950-16bc91aaabcc_1336x436.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The Result:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pM41!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pM41!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 424w, https://substackcdn.com/image/fetch/$s_!pM41!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 848w, https://substackcdn.com/image/fetch/$s_!pM41!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 1272w, https://substackcdn.com/image/fetch/$s_!pM41!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pM41!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png" width="1330" height="146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:146,&quot;width&quot;:1330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34194,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.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_!pM41!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 424w, https://substackcdn.com/image/fetch/$s_!pM41!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 848w, https://substackcdn.com/image/fetch/$s_!pM41!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 1272w, https://substackcdn.com/image/fetch/$s_!pM41!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e216ad-4e19-452c-bd9c-21941c4cb77b_1330x146.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h4>3. Ranking</h4><p>And of course, standard reranking with <em><strong>intent.rank(&#8230;)</strong></em>. Because we can see the explanation, we can also share with our users <strong>why</strong> they&#8217;re seeing the thing they&#8217;re seeing.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SWlB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SWlB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 424w, https://substackcdn.com/image/fetch/$s_!SWlB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 848w, https://substackcdn.com/image/fetch/$s_!SWlB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 1272w, https://substackcdn.com/image/fetch/$s_!SWlB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SWlB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png" width="1326" height="86" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:86,&quot;width&quot;:1326,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29095,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.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_!SWlB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 424w, https://substackcdn.com/image/fetch/$s_!SWlB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 848w, https://substackcdn.com/image/fetch/$s_!SWlB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 1272w, https://substackcdn.com/image/fetch/$s_!SWlB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f09a1-0c14-44ec-b291-4430b772b7e0_1326x86.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>The Result:</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_!YOOp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YOOp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 424w, https://substackcdn.com/image/fetch/$s_!YOOp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 848w, https://substackcdn.com/image/fetch/$s_!YOOp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 1272w, https://substackcdn.com/image/fetch/$s_!YOOp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YOOp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png" width="1322" height="494" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:494,&quot;width&quot;:1322,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76440,&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://bits.logic.inc/i/182316053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.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_!YOOp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 424w, https://substackcdn.com/image/fetch/$s_!YOOp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 848w, https://substackcdn.com/image/fetch/$s_!YOOp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 1272w, https://substackcdn.com/image/fetch/$s_!YOOp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97109ae8-f3c3-4784-ad12-acc80cd7a199_1322x494.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>Addressing one elephant in the room, LLMs can be slow. Because of this we default to using open-source models hosted on <a href="https://groq.com/">Groq</a> for speed. Groq is mind-boggling fast, giving instant answers.</p><p>The heavier-weight models are worth it, especially when the speed concern is addressed, because using an LLM offers far more flexibility than a fixed cross-encoder<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. You don&#8217;t need to train a new model to change your ranking criteria. You can simply adjust the instructions and context.</p><div><hr></div><p>If you are building RAG pipelines, agents, or search engines, you&#8217;d probably benefit from having the reasoning behind your ranking choices.</p><p>You can install <em><a href="https://www.npmjs.com/package/@with-logic/intent">intent</a></em><a href="https://www.npmjs.com/package/@with-logic/intent"> via npm</a>:</p><pre><code><code>npm install @with-logic/intent</code></code></pre><p>And can check out the GitHub repo here: <a href="https://github.com/with-logic/intent">https://github.com/with-logic/intent</a>.</p><p>Send us a note, we&#8217;d love to see what you build with it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bits.logic.inc/subscribe?"><span>Subscribe now</span></a></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>I <a href="https://bits.logic.inc/p/the-perfect-holiday-cookie">wrote about traditional rerankers</a> almost exactly a year ago here.</p></div></div>]]></content:encoded></item><item><title><![CDATA[How to Ship Confidently When Your Backend Makes Things Up]]></title><description><![CDATA[At Logic, agents are everywhere.]]></description><link>https://bits.logic.inc/p/how-to-ship-confidently-when-your</link><guid isPermaLink="false">https://bits.logic.inc/p/how-to-ship-confidently-when-your</guid><dc:creator><![CDATA[Ben]]></dc:creator><pubDate>Sun, 21 Dec 2025 19:01:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ioe1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ioe1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ioe1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ioe1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ioe1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ioe1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ioe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&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="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!Ioe1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ioe1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ioe1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ioe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2dbb1b-217b-4bf3-a12c-476aff96204f_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At <a href="https://logic.inc/">Logic</a>, agents are everywhere. They power everything we do, from building your APIs to running the agents you build. And they do this quite well! Our customers automate hundreds of thousands of tasks every month with us.</p><p>But as any engineer knows, your work is never &#8220;done.&#8221; There&#8217;s always a new requirement to add or a new library to adopt.</p><p>When you add LLMs to the mix, things get even trickier. These models aren&#8217;t just unpredictable. Sometimes they just make things up that look right but are completely wrong.</p><p>So, how do you build your business on top of such unreliable technologies? At Logic, we&#8217;re tackle this with an approach that may sound a bit counterintuitive: use more agents. Agents to keep agents in check. And it works.</p><h1>When Traditional Testing Fails</h1><p>Until recently, most business automation was built with code or abstractions over code like workflow graphs. Because you used code to build it, you used code to test it. This worked because code and workflow graphs are <strong>deterministic</strong>: if you give it the same input, you expect the exact same output every time. You write a test with a specific &#8220;assertion&#8221; (like <em>output === expected</em>), and if a single character is out of place, the test fails. It&#8217;s consistent, but inflexible.</p><p>At Logic, instead of writing thousands of lines of complicated code, you just describe your process in a few paragraphs and then we give you an agent.</p><p>But while the code / graph is gone, the autonomy and flexibility of an agent doesn&#8217;t come for free. You still need to make sure your process works reliably. The problem is that traditional &#8220;code-testing-code&#8221; doesn&#8217;t work for LLMs. A correct answer might come in a hundred different forms, and the same for &#8220;incorrect&#8221; ones. A traditional test can&#8217;t tell the difference between a minor wording change and a major hallucination.</p><p>If you try to use old tools to test new agents, you end up with &#8220;iteration paralysis.&#8221; You become too afraid to touch a prompt or try a new model because you have no automated way to prove the system is still safe.</p><p>To ship agents with confidence, <strong>you must move from rigid code assertions to flexible, semantic evaluations.</strong></p><h1>Using Agents to Test Agents</h1><p>The solution we&#8217;ve adopted is to let LLMs do something they&#8217;re great at: understanding meaning. We use test-suite agents to create relevant tests for your process. We use other agents to judge whether a given output is correct, even if the specifics change between runs.</p><h2>Synthetic Tests</h2><p>When you create a new agent in Logic, we create tests in two steps:</p><ol><li><p><strong>The Scenarios:</strong> One specialized test authoring agent enumerates different scenarios to consider. It&#8217;ll handle the &#8220;happy paths&#8221;, but also edge-cases and the underspecified nooks-and-crannies in your spec.</p></li><li><p><strong>The Data:</strong> A second agent takes those scenarios and generates the actual inputs and &#8220;expected&#8221; outputs.</p></li></ol><div class="pullquote"><p>Note: By the time our system has started generating tests, we&#8217;ve already ran other agents that, among other things, have figured out the inputs and outputs for your process and generated a schema. The testing agents reference and take advantage of these other agents&#8217; artifacts.</p></div><p>By separating <em>what</em> to test (&#8220;what are scenarios that we want to ensure will never fail?&#8221;) from <em>how</em> to test it (&#8220;what input and output values should be used for this scenario?&#8221;), our agents can focus and work in parallel<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</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_!e8nf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e8nf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e8nf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e8nf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e8nf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e8nf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg" width="544" height="406.13186813186815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/daaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1087,&quot;width&quot;:1456,&quot;resizeWidth&quot;:544,&quot;bytes&quot;:2079558,&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;:&quot;https://bits.logic.inc/i/182110368?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e8nf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e8nf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e8nf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e8nf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaaa2e90-d4a5-4acb-8cb5-858734542cf1_2400x1792.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Your agent spec is consumed by other agents that generate test scenarios and, ultimately, a wide variety of inputs and outputs.</figcaption></figure></div><h2>Real-World Tests</h2><p>Logic also keeps a history of all of the runs your agent has performed. You can take any real-world run from your history and turn it into a permanent test case with one click.</p><p>Every time you change your process, you can test the modified process against all of the real-world tests you&#8217;ve enumerated, as well as the synthetic tests.</p><p>This is the best way to guarantee your agent is always returning correct results for the scenarios that matter to you.</p><h2>Judging the Results</h2><p>The hardest part is checking the final result. Some fields (like numbers or categories) need to be exact. Others (like summaries and poetry) just need to be &#8220;right.&#8221;</p><p>To handle this, we give a judging agent your spec, as well as the &#8220;expected&#8221; result and the &#8220;actual&#8221; result from the test case. We ask it: <em>Are these two things effectively equivalent according to what the spec lays out?</em></p><p>The result is a Pass, Fail, Error, or a &#8220;&#129335;&#8221; (when it isn&#8217;t confident). No matter the answer, the agent also generates a plain-English explanation of why it concluded whatever it concluded. This keeps you in the loop so you can decide if the test is wrong or if your agent needs a tweak.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U0aC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U0aC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 424w, https://substackcdn.com/image/fetch/$s_!U0aC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 848w, https://substackcdn.com/image/fetch/$s_!U0aC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!U0aC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U0aC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg" width="544" height="406.18666666666667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1200,&quot;resizeWidth&quot;:544,&quot;bytes&quot;:376190,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182110368?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U0aC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 424w, https://substackcdn.com/image/fetch/$s_!U0aC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 848w, https://substackcdn.com/image/fetch/$s_!U0aC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!U0aC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae6175f-1c82-4054-8922-0b4c420202c2_1200x896.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Each test runs independently, with the agent spec, expected output, and actual output provided to the judge. The judge always has the option to say &#8220;I don&#8217;t actually know if this output should pass the test. It&#8217;s too ambiguous.&#8221;</figcaption></figure></div><h2>Keeping Tests Fresh</h2><p>As you change your Logic agent over time, old tests might not make sense anymore. Instead of forcing you to rewrite them (or worse, leaving around invalid tests), Logic reviews them for you.</p><p>We give your changes to yet another specialized agent, asking it to review your existing tests. For every test, the agent decides: keep it, update it, or toss it. We try to keep as many tests unchanged as possible, but this ensures your safety net actually fits the agent you&#8217;re building today.</p><h1>Upgrading Models Without Breaking </h1><p><strong>Agent tests</strong> help you evolve your agents safely, but another part of Logic&#8217;s promise is that we make sure your agents are running on the latest and greatest models available without you lifting a finger.</p><p>So there&#8217;s a second type of testing we do for you that&#8217;s just as important: <strong>model testing</strong>.</p><p>These days, new models come out every few weeks (sometimes multiple times per week!). We handle upgrading these models for you so you can stay on the cutting edge without doing the grunt work<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p>Changing the underlying models that run your agents carries similar risks to changing the agent itself. Before we upgrade to a newer model, we want to make sure it isn&#8217;t going to start generating worse results or slower performance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T4Rb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T4Rb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T4Rb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T4Rb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T4Rb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T4Rb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg" width="546" height="297.8181818181818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:546,&quot;bytes&quot;:887938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182110368?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T4Rb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T4Rb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T4Rb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T4Rb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe96c1951-4c3f-464f-932a-25dd68c7e3ac_1408x768.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An actual real-life picture of Ben plugging in a new model to Logic&#8217;s backend.</figcaption></figure></div><p>To upgrade models thoughtfully, we use a few different testing layers:</p><h3>Backtesting with Real-World Samples</h3><p>First, for each customer agent, we take a random sample of the agent&#8217;s execution history and re-run them with the new model<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. We then compare the old results to the new ones, using a very similar mechanism to the judge agent above. Does the new model, in general, outperform the old one, did it regress, is it ambiguous?</p><p>This allows us to easily run and rerun comparisons for a large number of executions and identify which ones need additional analysis<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>.</p><p>We&#8217;ll use these results to influence how we choose the best model that works for your agent(s). In fact, every organization in Logic could have an entirely different routing table.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><p>Occasionally, for agents that have fallen behind, we&#8217;ll use this process to identify ambiguous agent specs to customers. They can then choose to improve their spec, unblocking their ability to use the latest models.</p><h3>Checking Our Own Tools</h3><p>Since Logic uses LLM agents to generate your APIs, tests and integration guides, we also test the new models against a large internal suite of agent templates. Just like testing with real-world samples, we created separate, internal Logic agents to evaluate each aspect of agent creation. If a new model doesn&#8217;t improve agent creation, we don&#8217;t ship it until we&#8217;ve tuned our prompts to fix it.</p><p>Every time we make a change to Logic&#8217;s internal agents, we validate over 10,000 characteristics of their functionality.</p><h1>Ship with Confidence</h1><p>Our goal is to help you go from a blank page to a production-ready agent, runnable via a custom ergonomic and well-typed API, in just a few minutes. We&#8217;ve mechanized all of the best practices for you, so you can just hit &#8220;deploy&#8221; knowing your process won&#8217;t fall apart when a model changes or an unexpected input gets passed in.</p><p>LLMs will always be a little bit unpredictable. But with the right supporting infrastructure, that unpredictability can be tamed. It just becomes another part of the process, and you&#8217;ll be sleeping well at night with the confidence that your agents will  keep on working.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Thanks for reading Bits of Logic! Subscribe for free to receive new posts and support my 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><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>Using a single agent to generate scenarios gives us broad coverage while avoiding overlapping test coverage. Creating inputs + outputs in parallel allows test cases to be generated in parallel while taking advantage of the full LLM context window. Meaning tests that might have large inputs or outputs don&#8217;t compromise other tests that don&#8217;t.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>In the past four months, we&#8217;ve successfully managed half a dozen model upgrades, including: GPT-4.1 -&gt; 5, then 5.1, then 5.2 and Gemini 2.5 -&gt; 3. The only thing our customers did as part of these upgrades is enjoy faster and more capable agents.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>This general technique of running customer tests on customer data was roughly motivated by a similar technique that Salesforce uses. The co-founders of Logic both spent years working at Salesforce (one even sold a startup to them).</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>All of these executions are automated and follow the same data isolation, SOC 2, and HIPAA compliance (where applicable) that the original executions ran with.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>In practice, they don&#8217;t. Most orgs are able to take advantage of our default routing table that biases towards the latest models. It is rare that a new foundation model performs worse for an existing agent. Logic does a lot of context annotation behind the scenes, transparent to you, to help ensure this is the case.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Deep Onboarding]]></title><description><![CDATA[How We Taught an LLM to Do Our CEO&#8217;s Job]]></description><link>https://bits.logic.inc/p/deep-onboarding</link><guid isPermaLink="false">https://bits.logic.inc/p/deep-onboarding</guid><dc:creator><![CDATA[Jess Garms]]></dc:creator><pubDate>Sat, 20 Dec 2025 19:00:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!w2UJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w2UJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w2UJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!w2UJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!w2UJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!w2UJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w2UJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&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="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!w2UJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!w2UJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!w2UJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!w2UJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cca6210-49f6-4df1-85db-d409b6aa3339_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Our CEO used to personally white-glove onboard every single customer at Logic. It helped ensure everyone had a great first experience, but of course it didn&#8217;t scale. As we worked on making <a href="https://logic.inc">Logic</a> self-serve, we naturally thought &#8220;Can we automate this?&#8221;</p><p>We&#8217;re a tiny six-person startup, but in the age of LLMs every customer should get a personalized experience.</p><p>The original process involved performing deep research on the company, discovering their unique take on things (their &#8220;corporate soul&#8221;), researching the specific employee&#8217;s role within that company, and brainstorming ways our platform could help them. We often wrapped up by hopping on a Zoom call with the customer, running through everything, and refining as needed. And as a last step, our CEO would email them login instructions and all the context they need to get started. It would take hours per customer.</p><h2>The Goal</h2><p>When a user first signs in to Logic, we want them to have a set of pre-loaded workflows and tasks that are <strong>very specific</strong> to the user that signed up. Not to the point of being creepy, but right up to the point of them asking &#8220;How did they know?&#8221;.</p><p>For example, if you work in operations at an e-commerce shop and you screen your vendors for specific sustainability policies, we want a Logic doc &#8211; a self-contained agent that runs a process you define &#8211; ready to help you enforce that. If you&#8217;re an engineering manager who owns receipt categorization at a fintech company, we want a Logic doc waiting to do it for you. If you work in medtech and need to do medical coding for certain procedures, we want a doc ready for that too.</p><p>Importantly, these shouldn&#8217;t be generic. They should naturally incorporate policies and philosophies we&#8217;ve discovered from your website, corporate blog, published interviews with your founders, or anything else that&#8217;s online.</p><h2>The Steps</h2><p>The first step in automating such a bespoke process is to precisely define what the steps are.</p><p>When a new organization is created in Logic:</p><ol><li><p>Research the company</p></li><li><p>Research the employee</p></li><li><p>Generate personalized use cases that fit within our capabilities</p></li><li><p>Create Logic documents for them based on those use cases</p></li></ol><p>We figured it might take a few minutes to do this research so we&#8217;d need to perform it in the background while they were first trying out the product.</p><h2>Deep Research</h2><p>Our first task was to figure out which model would be best for the company research. The first two candidates were Perplexity and OpenAI&#8217;s o3 deep research model. We already had an integration with Perplexity for performing web searches, and our CEO had success doing manual onboarding using results from OpenAI&#8217;s o3.</p><p>We wrote a detailed prompt that defined what our platform could do, and the information that we knew about our new customer: name, email address, and company website. We then asked the model to infer details about the company and the individual, and identify some key use cases that they might benefit from automating with Logic.</p><p>We then compared the outputs from Perplexity, OpenAI&#8217;s o3-deep-research, and added in o4-mini-deep-research as well to see which would perform best. o3 gave us the best output but it was too slow and too expensive. The output from o4-mini-deep-research was nearly as good but finished in 4 minutes and the price was right.</p><h2>Improving Variety</h2><p>One thing we discovered was that in order to get 3 really good examples it worked better to ask for 10, and then tell the model to select the 3 best ones from that list. If we just requested the 3 best examples directly, the results tended to be very monotonous. In many cases 2 of the 3 use cases would be the same across many different users.</p><p>Our hypothesis: variety generation and quality selection are separate cognitive tasks. When asked for &#8220;the 3 best,&#8221; the model simultaneously tries to be creative and critical, which muddies both. When asked broadly and then to narrow the results, it can explore a bit first, then evaluate. This is the same principle as chain-of-thought prompting - and the internal reasoning that newer models do automatically: forcing it to &#8220;think&#8221; rather than immediately selecting the most likely completion produces a better result. It costs some tokens and some latency, but for a process like this it&#8217;s clearly worth it.</p><h2>Adding Structure</h2><p>Unfortunately, we ran into a small problem when attempting to integrate the research into our application: OpenAI&#8217;s deep research models don&#8217;t support strict structured output, and we found that it would often produce non-parseable JSON output, or deviate from the schema that we provided.</p><p>To solve that, we split the problem into two phases: research first, then structure.</p><h3>Phase 1: Deep Research</h3><p>We kept the existing prompt, but stopped asking it to structure the output. Instead we just requested text, allowing the model to decide how it wanted to deliver the results. There was some variance, but it consistently followed the prompt and provided good data even if the structure was inconsistent.</p><h3>Phase 2: Structured Extraction</h3><p>We then took that raw research and sent it to a second, faster model with our JSON schema. This model extracts the key fields: company summary, employee role, and the top three use cases.</p><p>The structuring phase doesn&#8217;t require much reasoning, so our internal model router picks the fastest model that can handle strict JSON schema output.</p><h2>Grounding</h2><p>Occasionally when left to its own devices, the model could come up with fanciful use cases that were simply beyond the capabilities of our platform (and sometimes, LLMs as a whole!).</p><p>We found that by explicitly grounding it in the capabilities that Logic supports we were able to steer deep research into giving us use cases at a much higher success rate. The grounding included:</p><ul><li><p>File formats (pdf, png, wav, etc.)</p></li><li><p>Data expectations (structured data, json)</p></li><li><p>Capabilities (reasoning, image analysis, audio processing)</p></li><li><p>Tools (web search, image generation)</p></li></ul><h2>When Research Finds Nothing</h2><p>Some companies are stealth startups. Some employees have minimal online presence. What happens when the research phase comes back empty?</p><p>We handle this explicitly in the prompt: if information is insufficient, return what&#8217;s available and infer the rest based on industry patterns or general business needs. Something personalized is better than nothing. Something generic but grounded in our actual capabilities is better than something hallucinated and impossible. It&#8217;s important to offer the model a fallback case when no information is available rather than insisting that it come up with <em>something</em>.</p><h2>Finishing the Onboarding Process</h2><p>Of course <strong>identifying</strong> 3 use cases isn&#8217;t the entire story. Next we need to actually turn those into automated workflows. To do that we rely on our existing autodoc feature, which takes a simple request like &#8220;categorize a receipt&#8221; and then constructs a full document from that.</p><p>It works by understanding our platform&#8217;s capabilities similar to the org research step but it adds an additional feature: we have a set of known good automated workflows that we search through using embeddings, then attach the best 3 matches as few-shot examples to the LLM.</p><p>In the spirit of automating this entire process, we also send out an email to the customer, with login details, and offer them a zoom link to meet with our CEO, just like before.</p><h2>Results</h2><p>The feedback has been consistently positive. People don&#8217;t expect a B2B SaaS product to know anything about them when they sign up, and it&#8217;s fun to see what a system comes up with about you. We were a little worried that it might feel invasive, but instead it feels tailored. Our users immediately pick up on how it must work since there wasn&#8217;t enough time for a human being to have done the research.</p><p>The pattern here works beyond onboarding. Any workflow where a human researches and takes action is a candidate for this kind of automation.</p><p>We automated our CEO&#8217;s two-hour research process not by making it less personal, but by making it scale. The research is just as thorough and the suggestions just as tailored. But it doesn&#8217;t take two hours anymore and Steve is freed up to work on other things, like <a href="https://bits.logic.inc/p/fine-tuning-is-probably-a-trap">rant about fine tuning</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Thanks for reading Bits of Logic! Subscribe for free to receive new posts and support my 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>]]></content:encoded></item><item><title><![CDATA[Fine-Tuning Is (Probably) A Trap]]></title><description><![CDATA[In the winter of 1945, a thirty-ton computing monster hummed to life in Philadelphia.]]></description><link>https://bits.logic.inc/p/fine-tuning-is-probably-a-trap</link><guid isPermaLink="false">https://bits.logic.inc/p/fine-tuning-is-probably-a-trap</guid><dc:creator><![CDATA[Steve Krenzel]]></dc:creator><pubDate>Fri, 19 Dec 2025 17:07:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9ohg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9ohg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9ohg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9ohg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9ohg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9ohg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9ohg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3410488,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/181864826?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9ohg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9ohg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9ohg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9ohg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9368d95f-ffca-4234-93a7-9fd7b3b48f0e_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In the winter of 1945, a thirty-ton computing monster hummed to life in Philadelphia.</p><p>The <a href="https://en.wikipedia.org/wiki/ENIAC">ENIAC</a> was a chaotic sprawl of 18,000 vacuum tubes, 70,000 resistors, and 10,000 capacitors. It was the most powerful computing device on earth, capable of calculating an artillery trajectory in thirty seconds. A task that took a human twenty hours.</p><p>And yet the ENIAC had a problem.</p><p>It wasn&#8217;t a computer in the way we mean the word now. It was a giant collection of arithmetic units. If you wanted it to calculate a missile trajectory, you didn&#8217;t &#8220;load a program.&#8221; You walked into the room and rewired the machine.</p><p>You unplugged cables from one bank of accumulators and plugged them into another. You flipped thousands of switches. To change the instructions, you change the machine.</p><p>Then the stored-program concept arrived. Popularized by the EDVAC design and, with it, the radical insight that defines modern computing:</p><p><strong>Don&#8217;t change the machine. Change the instructions.</strong></p><p>Leave the hardware frozen. Feed it logic as input. This didn&#8217;t just make computers faster to set up. It invented software; an entire way of building where progress lived in instructions, not wiring.</p><p>Eighty years later, I see smart engineering teams walk right back into that room in Philadelphia, unplugging cables all over again.</p><div><hr></div><p>In some AI circles, fine-tuning has become conventional wisdom. A badge of sophistication. <em>&#8220;Prompting is cute,&#8221; </em>the thinking goes<em>, &#8220;but our task is special.&#8221;</em></p><p>But when you fine-tune, you&#8217;re doing something strangely familiar.</p><p>You&#8217;re rewiring the ENIAC.</p><p>You are taking a general-purpose engine and altering its internal connections to optimize it for one specific task.</p><p>You&#8217;re building a trap.</p><div class="pullquote"><p>Aside: Modern techniques like LoRA aren&#8217;t <em>literally</em> rewiring the machine, they are more like adding specialized patch cables. But the operational reality is identical. In the era of Foundation Models, the weights are the silicon. The prompt is the code.</p></div><p>Years ago, when I was at Brex, <a href="https://github.com/brexhq/prompt-engineering?tab=readme-ov-file#fine-tuning">I had instituted a &#8220;No Fine-Tuning&#8221; policy</a>. Not because fine-tuning never works, but because we had hundreds of engineers building on top of LLMs and we needed broad guidance that optimized for velocity and safety.</p><p>The mandate was (nearly) absolute: solve problems using retrieval, context, and prompting. Do not touch the weights.</p><p>We didn&#8217;t want to wait on training runs every time we changed a task. We absolutely wanted to avoid inadvertently training on customer data. And we didn&#8217;t want engineers spending days synthesizing realistic fake data (it is extraordinarily time consuming and, if you&#8217;re not careful, often has a lot of bias).</p><p>Avoiding fine-tuned models let us iterate immediately, adopt frontier model capabilities the day they launched, and eliminate a whole category of risk around commingling customer data.</p><p>All the effort we would have spent making fine-tuning viable was better spent on building good evals. Evals fit the way engineers already work, they&#8217;re just another kind of automated test. The only difference is that your evals are fuzzy by design.</p><p>And they work across models.</p><p>The philosophy was a natural extrapolation of <a href="https://arxiv.org/pdf/2005.14165">the GPT-3 paper</a>, which introduced the notion that (in summary):</p><blockquote><p>A sufficiently large language model can perform new tasks it has never seen using only a few examples provided at inference time, without any gradient updates or fine-tuning.</p></blockquote><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6cl9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6cl9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6cl9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6cl9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6cl9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6cl9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!6cl9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6cl9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6cl9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6cl9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97ed1d0b-b1ae-41d1-a17a-afd6d9d8aa7d_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Since founding <a href="https://logic.inc">Logic</a>, I&#8217;ve carried this rule forward. We have now automated over 3 million real-world tasks for our customers without fine-tuning a single model.</p><p>But there was one week where we almost broke.</p><p>A customer was spending hours every week cleaning up purchase orders from their largest client. Hundreds of line items across dozens of pages spanning a decade. Each line buried in annotations about license quantities, product variants, delivery terms. The documents were messy, inconsistent, and absolutely critical to get right.</p><p>We promised to automate it.</p><p>We tried everything. The models &#8211; all of them &#8211; kept stumbling. They were right more often than not, but not often enough. In finance, 90% is still a failing grade.</p><p>The temptation was overwhelming. <em>Just fine-tune it</em>. There was no guarantee it would work, but we were close to caving. Then, that same week, a new frontier model dropped.</p><p>We pointed our system at it and ran our evals. We didn&#8217;t change a line of code. We didn&#8217;t retrain anything.</p><p>It handled the documents perfectly.</p><div><hr></div><p>The biggest cost of fine-tuning isn&#8217;t compute; it&#8217;s obsolescence.</p><p>As of this writing, if you want to fine-tune a foundation model on OpenAI, you are using a checkpoint from eight months ago. If you use Gemini, you are nine months behind. In AI time, nine months is a geological epoch.</p><p>While you&#8217;re curating datasets to teach last year&#8217;s model your task, everyone else is shipping on models that can do things the old one simply cannot. No amount of fine-tuning will bridge that gap.</p><p>This gap is widening as models shift toward reasoning-by-default and tool use. Creating synthetic training data for this new class of model is notably harder.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9-Cn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9-Cn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9-Cn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9-Cn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9-Cn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9-Cn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Header Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header Image" title="Header Image" srcset="https://substackcdn.com/image/fetch/$s_!9-Cn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9-Cn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9-Cn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9-Cn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce41f536-fc05-4083-a094-85eb5270dd3d_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then there is the issue of trust.</p><p>For companies dealing with sensitive data (like fintech, healthcare, or enterprise data), fine-tuning creates a contamination nightmare. When you train on customer data, you risk commingling data. Any time you mention &#8220;training,&#8221; the security review timeline triples.</p><p>Context-based architectures tell a clean story: &#8220;We never train on your data.&#8221; The model processes it in memory (context) and forgets it. The model might hallucinate, but at least it won&#8217;t regurgitate other customer&#8217;s data.</p><p>For the extra security conscious, it also allows you to trivially offer Bring-Your-Own-Key (BYOK), where the customer&#8217;s data never even hits an LLM outside of their control.</p><div><hr></div><p>Does this mean you should never fine-tune? Of course not.</p><p>In the history of computing, general-purpose CPUs won the war for utility, but ASICs (Application-Specific Integrated Circuits) still won specific battles. You don&#8217;t mine Bitcoin on a CPU.</p><p>Fine-tuning is the <strong>ASIC</strong> of the AI world. You should do it, but only when the constraints demand it. Only after you&#8217;ve tried the CPU and concluded there&#8217;s no way to make it work.</p><p>Running on constrained hardware? Yes! Distill a massive model into a tiny one. Trade flexibility for efficiency.</p><p>Need to absolutely minimize cost at scale? Fine-tuning might help! Trade velocity for unit economics. </p><p>Dealing with a domain exceptionally outside the model&#8217;s training distribution? Etch new pathways into silicon. You might not have a choice.</p><p>But these are the exceptions. Too often I see teams reach for fine-tuning just because it feels like a serious thing to do. Because it feels like engineering.</p><div><hr></div><p>The most important shift in computing wasn't faster hardware; it was the moment we stopped rewiring computing machines every time we wanted to change what they were computing.</p><p>We&#8217;re now in that same world with language models.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Die you enjoy this? Subscribe so you don&#8217;t miss our other posts! You can also check out what we&#8217;re building over at <a href="https://logic.inc">https://logic.inc</a>.</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[Essays from the trenches (and a holiday gift)]]></title><description><![CDATA[Introducing our holiday essay series. Also, a free logo tool to celebrate.]]></description><link>https://bits.logic.inc/p/essays-from-the-trenches-and-a-holiday</link><guid isPermaLink="false">https://bits.logic.inc/p/essays-from-the-trenches-and-a-holiday</guid><dc:creator><![CDATA[Azzam]]></dc:creator><pubDate>Thu, 18 Dec 2025 18:57:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kv8l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kv8l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kv8l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kv8l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kv8l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kv8l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kv8l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3018918,&quot;alt&quot;:&quot;Header image: essays from the trenches&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182012021?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Header image: essays from the trenches" title="Header image: essays from the trenches" srcset="https://substackcdn.com/image/fetch/$s_!kv8l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kv8l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kv8l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kv8l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feac59232-034d-4fb8-abc2-5b583bf2b45e_2752x1536.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To welcome the holiday season this year, we&#8217;re doing something a little different. </p><p>Over the next 12 days, we&#8217;re sharing reflections on what we&#8217;ve learned building AI infrastructure in 2025. We&#8217;ll be publishing daily essays on production challenges, engineering practices, model behavior, and the gap between AI hype and reality. These are the musings of a small team deep in the trenches.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Subscribe to stay up to date on the rest of our holiday essay series.</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>At Logic, we&#8217;re big believers in writing as a tool to sharpen thought.  We&#8217;re also big believers in pausing briefly to reflect before diving into problems. These essays helps us flex both of those muscles. But more importantly, we hope they give you something helpful to take with you and apply in your own work.</p><p>Each essay is short, practical, and written by our team. The first one drops tomorrow.</p><p>So subscribe, read along, and let us know what you think.</p><div><hr></div><h2>For today: a small holiday gift</h2><p>In the spirit of the holiday season, we wanted to leave you with a small present today.</p><p>We built a simple website that turns any logo into a festive, holiday-themed Google doodle. Just drop in your company&#8217;s logo and get back a seasonal version. &#127881;</p><p><strong><a href="https://doodle.logic.inc">Try it &#8594;</a></strong> </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://doodle.logic.inc" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lbpk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 424w, https://substackcdn.com/image/fetch/$s_!lbpk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 848w, https://substackcdn.com/image/fetch/$s_!lbpk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 1272w, https://substackcdn.com/image/fetch/$s_!lbpk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lbpk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png" width="1456" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.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;:971379,&quot;alt&quot;:&quot;Screenshot of doodle generator&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://doodle.logic.inc&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182012021?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of doodle generator" title="Screenshot of doodle generator" srcset="https://substackcdn.com/image/fetch/$s_!lbpk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 424w, https://substackcdn.com/image/fetch/$s_!lbpk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 848w, https://substackcdn.com/image/fetch/$s_!lbpk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 1272w, https://substackcdn.com/image/fetch/$s_!lbpk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cae4155-41cf-42cf-89da-18d5cf3096d5_2382x1676.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>What better way to usher in the holidays than to transform your logo - the raw visual essence of your corporation&#8217;s existence - into a more festive, but still entirely safe, raw visual essence of your corporation&#8217;s existence?</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6y9Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6y9Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 424w, https://substackcdn.com/image/fetch/$s_!6y9Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 848w, https://substackcdn.com/image/fetch/$s_!6y9Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 1272w, https://substackcdn.com/image/fetch/$s_!6y9Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6y9Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp" width="382" height="162.35" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:272,&quot;width&quot;:640,&quot;resizeWidth&quot;:382,&quot;bytes&quot;:19322,&quot;alt&quot;:&quot;Logic logo, doodle-ified&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://bits.logic.inc/i/182012021?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Logic logo, doodle-ified" title="Logic logo, doodle-ified" srcset="https://substackcdn.com/image/fetch/$s_!6y9Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 424w, https://substackcdn.com/image/fetch/$s_!6y9Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 848w, https://substackcdn.com/image/fetch/$s_!6y9Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 1272w, https://substackcdn.com/image/fetch/$s_!6y9Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9ac598-cd56-414a-a23f-158db9dd8b07_640x272.webp 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><p>Our holiday essay series kicks off in earnest tomorrow. We can&#8217;t wait to see what you think.</p><p>Until then - take care, and happy holidays!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://bits.logic.inc/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">Subscribe to make sure you don&#8217;t miss the rest of our holiday series.</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></channel></rss>