<?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[The Pragmatic Engineer: Deepdives]]></title><description><![CDATA[Long-form educational articles every Tuesday. These articles typically go deep into a topic relevant for software engineers or engineering managers, and tend to offer actionable advice.]]></description><link>https://newsletter.pragmaticengineer.com/s/deepdives</link><image><url>https://substackcdn.com/image/fetch/$s_!eod5!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27076b05-e3f4-4d05-9621-3da4f7f189cd_300x300.png</url><title>The Pragmatic Engineer: Deepdives</title><link>https://newsletter.pragmaticengineer.com/s/deepdives</link></image><generator>Substack</generator><lastBuildDate>Sun, 09 Aug 2026 01:13:44 GMT</lastBuildDate><atom:link href="https://newsletter.pragmaticengineer.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Gergely Orosz]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[pragmaticengineer@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[pragmaticengineer@substack.com]]></itunes:email><itunes:name><![CDATA[Gergely Orosz]]></itunes:name></itunes:owner><itunes:author><![CDATA[Gergely Orosz]]></itunes:author><googleplay:owner><![CDATA[pragmaticengineer@substack.com]]></googleplay:owner><googleplay:email><![CDATA[pragmaticengineer@substack.com]]></googleplay:email><googleplay:author><![CDATA[Gergely Orosz]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How building software is changing at Anthropic]]></title><description><![CDATA[A deepdive on what&#8217;s changed in how the leading AI lab makes software. Ever more code review and testing is done by AI, two-pizza teams very much alive, and more. Details from inside of Anthropic]]></description><link>https://newsletter.pragmaticengineer.com/p/inside-anthropic</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/inside-anthropic</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 28 Jul 2026 15:49:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0GCi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Much-improved AI tooling is changing how we build software, and I want to take a peek into how the future of software engineering may unfold under its influence. What better place for that than with tech&#8217;s most &#8220;AI-pilled&#8221; teams: the AI labs themselves.</span></p><p><span>So, I visited the two leading AI labs to see how teams and engineers do things day to day. In this article and in an upcoming follow-up, I&#8217;ll share what I learned about how AI is reshaping software engineering principles many of us are accustomed to &#8211; and what&#8217;s stayed mostly the same despite the AI wave.</span></p><p><span>In a later article, we&#8217;ll compare findings from Anthropic and OpenAI to see what their ways of working might mean for the overall direction of software engineering.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0GCi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0GCi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 424w, https://substackcdn.com/image/fetch/$s_!0GCi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 848w, https://substackcdn.com/image/fetch/$s_!0GCi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 1272w, https://substackcdn.com/image/fetch/$s_!0GCi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0GCi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png" width="1456" height="694" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:694,&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_!0GCi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 424w, https://substackcdn.com/image/fetch/$s_!0GCi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 848w, https://substackcdn.com/image/fetch/$s_!0GCi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 1272w, https://substackcdn.com/image/fetch/$s_!0GCi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff86124b7-b1c1-4e0e-9f57-42f5e6de75ed_2048x976.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Inside Anthropic&#8217;s HQ (left). AI development milestones framed on the wall (right)</figcaption></figure></div><p><span>Thanks to Anthropic for showing me inside their lab in San Francisco. I talked with four people:</span></p><ul><li><p><strong><a href="https://www.linkedin.com/in/katelynlesse/"><span>Katelyn Lesse</span></a></strong><span>, Head of Engineering for Claude Platform, whose organization owns the infrastructure that Claude runs on</span></p></li><li><p><strong><a href="https://x.com/jarredsumner?lang=en"><span>Jarred Sumner</span></a></strong><span>, creator of Bun, now at Anthropic on Bun and Claude Code</span></p></li><li><p><strong><a href="https://x.com/trq212"><span>Thariq Shihipar</span></a></strong><span>, who works across Claude Code engineering and education</span></p></li><li><p><strong><a href="https://www.linkedin.com/in/david-hershey/"><span>David Hershey</span></a></strong><span>, at Anthropic&#8217;s Applied AI organization in a role resembling a sales engineer, working with customers like Cursor, Cognition, and Perplexity</span></p></li></ul><p><span>Thanks to them, I got a sense of where things are headed at the leading AI lab &#8211; and possibly for the wider industry.</span></p><p><em><span>Before we continue, The Pragmatic Engineer will be </span><a href="https://newsletter.pragmaticengineer.com/about#%C2%A7publishing-schedule-and-holidays"><span>on summer break</span></a><span> for the next week and a half. This means no Thursday article this week, and no articles next week. I appreciate your understanding and support!</span></em></p><p><span>Back to today&#8217;s deepdive, we cover:</span></p><ol><li><p><strong><span>Complex &amp; long: Claude Managed Agents</span></strong><span>. One of the most complicated projects took the Claude Platform team six months to ship, and created a new primitive to use at the agent infra level. Infra projects still need re-architecting mid-way through and take time to get right.</span></p></li><li><p><strong><span>Twelve-month project done in 11 days: Bun rewrite to Rust. </span></strong><span>Migrating a 500K+ line project to another language used to take a small team a year, making it impractical. With Fable and $165K of tokens, it recently took the creator of the project less than two weeks.</span></p></li><li><p><strong><span>Changing engineering practices</span></strong><span>. Inside the AI lab with more than 3,500 employees, prototyping is more fluid, verification is more time-consuming than implementation, code review and testing are increasingly done by AI.</span></p></li><li><p><strong><span>Team-level changes. </span></strong><span>Design is more ongoing and less upfront, teams work on more projects, a maximum of two engineers per project, and more.</span></p></li><li><p><strong><span>Still the same: </span></strong><span>two-pizza teams, planning is important, PRDs are relevant in complex projects, context switching is a challenge, the ratio of time spent on coding vs testing not changing that much.</span></p></li><li><p><strong><span>Changing the &#8220;standout&#8221; software engineer archetype? </span></strong><span>Deep understanding, including of a layer below what you work on, is valuable, along with the ability to coordinate work.</span></p></li><li><p><strong><span>Will AI replace software engineering? </span></strong><span>The more hands-on software engineers get with AI at the lab, the less they fear their jobs are going away.</span></p></li></ol><h2><span>1. Complex &amp; long: Claude Managed Agents</span></h2><p><span>The Claude Platform team&#8217;s most complex project in the past year was building Claude Managed Agents, a pre-built harness for production agents that runs in the cloud on infrastructure managed by Anthropic, or on your team&#8217;s own infrastructure, with any sandbox you choose. The project took around six months from idea until launch in April. Katelyn Lesse, head of engineering for Claude Platform, shared the story.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8a-1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8a-1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8a-1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8a-1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8a-1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8a-1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&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_!8a-1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8a-1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8a-1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8a-1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8978dd-0a93-4ca0-be99-6accd8673ce8_2048x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>With Katelyn Lesse, at Anthropic</span></em></figcaption></figure></div><h3><span>Claude Platform</span></h3><p><span>This team sits between the model/accelerator layer (Claude models operate on GPUs) and the product/application layer (with products like Claude Code and Claude Cowork):</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!65a0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!65a0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 424w, https://substackcdn.com/image/fetch/$s_!65a0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 848w, https://substackcdn.com/image/fetch/$s_!65a0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!65a0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!65a0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png" width="962" height="1056" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1056,&quot;width&quot;:962,&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_!65a0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 424w, https://substackcdn.com/image/fetch/$s_!65a0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 848w, https://substackcdn.com/image/fetch/$s_!65a0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!65a0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0fd550-8768-48e5-a278-6c5208be6410_962x1056.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Where Claude Platform sits inside of Anthropic</span></em></figcaption></figure></div><p><span>Katelyn on what the Platform team does:</span></p><blockquote><p><span>&#8220;We&#8217;re on the &#8216;token hot path.&#8217; The prompt comes in, then we tokenize it. Then, things like safeguards and billing all happen within our layer.&#8221;</span></p></blockquote><p><em><span>What the Claude team calls &#8220;Platform,&#8221; I think more of as &#8220;API.&#8221;</span></em><span> Claude Platform operates the API, and owns responsibilities an API would have. </span><em><span>Of course, the team does more than that, and Claude Managed Agents is one case we cover here.</span></em></p><p><strong><span>The platform layer is being migrated from Python to Rust. </span></strong><span>Originally, this layer was written for Python for the &#8220;usual&#8221; reasons at AI companies: it&#8217;s a convenient language and AI researchers use Python already, which enables quick iteration. But Python is single-threaded, and at scale, when the API is under high load, it&#8217;s not as performant as Rust.</span></p><h3><span>Harness infrastructure demand</span></h3><p><span>The project came together due to customers wanting their own &#8220;harness infrastructure&#8221;, says Katelyn:</span></p><blockquote><p><span>&#8220;We started with a model where you get an API to define an agent, then you get an API to start a session with an agent. The reality of what the world wants and needs right now is people running their own infrastructure. So, we started to build a self-hosted sandbox.</span></p><p><span>But then, what we started to hear from lots of customers is that they&#8217;re trying to hack harnesses together, running their own &#8220;harness infrastructure,&#8221; and this gave us the idea for Claude Managed Agents.&#8221;</span></p></blockquote><h3><span>The largest part: planning</span></h3><p><span>In this project, Katelyn said the single biggest matter was planning:</span></p><blockquote><p><span>&#8220;There are products you can jump straight to prototyping, but then there are ones where you need to start by architecting it properly. For example, if we build a TypeScript CLI &#8211; which is pretty trivial for what needs to be built &#8211; we could go straight to prototyping. But with Claude Managed Agents, we needed to first figure out what we are doing.</span></p><p><span>Of course, we did some upfront prototyping for Managed Agents: hacking and spiking things. But prototyping itself was more about understanding the requirements.</span></p><p><strong><span>Our planning process looked more like a typical pre-AI planning process. </span></strong><span>You know how every team has the project, where everyone comes up with some version of the same idea and people keep floating and circling it around until you finally do it? Managed Agents was this for our team. When we started the project, we had documents dating back up to two years about ideas and suggestions.</span></p></blockquote><p><span>Post-planning, when the project officially kicked off, a PRD (product requirements document) was created:</span></p><blockquote><p><span>&#8220;In the end, it was the Product Manager and the Tech Lead on our API Agents team who decided to pull the trigger and kick off this project. We&#8217;d get in a room, go through it, and get aligned. But it wasn&#8217;t just us: we&#8217;d have to align with teams around the business, other cloud providers, and other engineering teams. For example, we have a sandboxing team inside of the Platform org: and so this team was consulted on the design of Managed Agents, given this product would spawn a lot of sandboxes.</span></p><p><strong><span>Just like before, we had a PRD, it was a Google Doc. </span></strong><span>We used a Google Doc because we needed to coordinate all interested people. This has not gone away.</span></p><p><span>Similarly, my product counterpart and I run product reviews.&#8221;</span></p></blockquote><p><span>Some processes from before AI, like the PRD, are still useful in complex projects today, for getting large groups of people on the same page.</span></p><h3><span>Build for an internal customer first</span></h3><p><span>With planning complete, the team decided to do a &#8220;spike&#8221; and stress-test the idea and architecture, by building the backend of Claude Code on the web. Remote execution of code with an agent harness was a similarly shaped problem to the one they wanted to solve for customers. The thinking was to start by solving it for the Claude Code team before tackling it in a more generic way for customers.</span></p><p><strong><span>Internal teams are more fluid than before AI. </span></strong><span>Katelyn:</span></p><blockquote><p><span>&#8220;Pre-AI, we might have hit the Claude Code team up with a bunch of big requirements documents, and they would have then hit us back with another set of documents. Now it was much easier: someone on our team built a few components, took it over to the Claude Code team, and they started to hack around it. We could figure out how this component plugs into this part of their product, and the other way around. It was just a faster and easier process, getting this first internal version of the product up and running.</span></p><p><span>Aligning with other teams on interfaces remains important, and it&#8217;s easier.</span><strong><span> </span></strong><span>Back in the day, you&#8217;d have to come with a fully spec&#8217;d interface to use. Now, we could do it a lot more fluidly: we could stand up a stub service that shadowed traffic to start with, and iron out the interfaces with the Claude Code team as we went. They did some hacking on it and gave feedback, we made changes while building out the service under the interface, then went back to make it work.&#8221;</span></p></blockquote><p><span>They launched a service for Claude Code&#8217;s mobile app to spin up a sandbox, boot up Claude Code and run it. The service went to production and the Claude Platform team took the learnings.</span></p><h3><span>Re-architecting midway through</span></h3><p><span>It&#8217;s likely a familiar scenario many engineers can relate to, that after planning a project and getting underway, you see that you&#8217;re going to need to change the architecture. It happened on this project, too.</span></p><p><strong><span>The platform team ended up re-architecting Managed Agents based on learnings from the Claude Code &#8220;spike.&#8221; </span></strong><span>Re-architecting meant decoupling the &#8220;brain&#8221; of Claude and its harness from the &#8220;hands&#8221; (sandboxes &amp; tools that perform actions) and the &#8220;session&#8221; (the log of events). Each became an interface that made few assumptions about each other.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ODEN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ODEN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 424w, https://substackcdn.com/image/fetch/$s_!ODEN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 848w, https://substackcdn.com/image/fetch/$s_!ODEN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 1272w, https://substackcdn.com/image/fetch/$s_!ODEN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ODEN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png" width="1456" height="763" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:763,&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_!ODEN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 424w, https://substackcdn.com/image/fetch/$s_!ODEN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 848w, https://substackcdn.com/image/fetch/$s_!ODEN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 1272w, https://substackcdn.com/image/fetch/$s_!ODEN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91e11771-4d1b-424f-be24-03eb3a4a5ba5_1882x986.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>High-level architecture of Claude Managed Agents after the re-architecture</span></em></figcaption></figure></div><p><span>The team also built an abstraction around vaults and credentials. Credentials can safely be stored inside </span><a href="https://platform.claude.com/docs/en/managed-agents/vaults"><span>a vault</span></a><span>. All calls using credentials are made via a proxy which has a session token. It is the proxy that fetches the right credentials from the vault: the credentials are never seen by the agent, sandbox, or session. Credentials are only injected at the egress boundary when the service is invoked:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R6yh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R6yh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 424w, https://substackcdn.com/image/fetch/$s_!R6yh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 848w, https://substackcdn.com/image/fetch/$s_!R6yh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 1272w, https://substackcdn.com/image/fetch/$s_!R6yh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R6yh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png" width="1456" height="1372" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1372,&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_!R6yh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 424w, https://substackcdn.com/image/fetch/$s_!R6yh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 848w, https://substackcdn.com/image/fetch/$s_!R6yh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 1272w, https://substackcdn.com/image/fetch/$s_!R6yh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8697499a-a569-417f-b21d-f125de5dc490_1568x1478.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Adding credentials the harness never sees</span></em></figcaption></figure></div><p><span>Internal &#8220;dogfooding&#8221; helped surface hard problems to solve. A few examples:</span></p><ul><li><p><span>Reliability and scalability: these are really hard to do well for agents because if connection to the sandbox is lost, the whole agent dies and you lose state</span></p></li><li><p><span>Credentials and access control: also hard and problematic, especially when first building the service</span></p></li></ul><p><em><span>The Managed Agents team shared </span><a href="https://www.anthropic.com/engineering/managed-agents"><span>more about this re-architecting project</span></a><span>.</span></em></p><p><strong><span>The project took about six months, by no means a rapid process. </span></strong><span>Katelyn emphasized that pre-AI, a project like this would have probably been in the realm of two years. Managed Agents is one of the biggest projects the Claude Platform team has built, and more complex than it looks: for example, adding support for running agents on AWS, GCP and Azure.</span></p><h2><span>2. Twelve-month project done in 11 days: Bun rewrite to Rust</span></h2><p><span>As covered before, Jarred Sumner is the creator of Bun, a popular JavaScript runtime with 22 million monthly downloads currently and Claude Code as a dependency.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bYpH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bYpH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bYpH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bYpH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bYpH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bYpH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&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_!bYpH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bYpH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bYpH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bYpH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c1f66a-54ca-4ece-b9ef-04c31b953c34_1536x2048.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>With Jarred Sumner (left), creator of Bun</span></em></figcaption></figure></div><p><span>Bun is written in Zig, a performant, productive language. However, it&#8217;s not memory safe and memory issues </span><a href="https://bun.com/blog/bun-in-rust?ref=blog.pragmaticengineer.com"><span>kept coming up</span></a><span>. Jarred thought that rewriting the project to an also-performant, memory-safe language like Rust could be an option &#8211; except that rewrites like this turned out as follies in the past. </span><a href="https://bun.com/blog/bun-in-rust"><span>Jarred</span></a><span> (emphasis mine:)</span></p><blockquote><p><span>&#8220;Historically, rewrites are a terrible idea. Excluding comments, Bun is 535,496 lines of Zig. A rewrite in another language would take a small team of engineers a full year. It would mean freezing bugfixes, security fixes or feature development for that time. The least risky approach to getting something shippable would be a mechanical port from Zig to Rust, with the minimal number of behavioral changes, using the exact same test suite we already use for testing Bun.</span></p><p><span>Fortunately, Bun&#8217;s own test suite is written in TypeScript which means it doesn&#8217;t depend on the runtime&#8217;s programming language.</span></p><p><strong><span>A year of zero user-facing impact was not an option we could consider.</span></strong><span> So, enforcement through code style to fix stability issues was our best bet, and was our plan when we added Rust-inspired smart pointers to Bun&#8217;s codebase.</span></p><p><span>But honestly, I didn&#8217;t want to do it. Homegrown smart pointers offer worse ergonomics than Rust, with none of the guarantees.&#8221;</span></p></blockquote><p><span>But then, Jarred asked if AI could do the heavy lifting and wondered how much the migration could be sped up. </span><strong><span>In the end, he completed the rewrite from start to merge in 11 days, using 64 parallel agents and $165,000 in tokens at API price. </span></strong><span>Here&#8217;s Jarred on how his AI-heavy rewrite compared:</span></p><blockquote><p><span>&#8220;By hand, I think this would&#8217;ve taken three engineers with full context on the codebase about a year, during which time we wouldn&#8217;t be able to improve Node.js compatibility, fix bugs, fix security issues or implement new features. We never would&#8217;ve done that. The realistic alternative was to do nothing and keep fixing the bugs at the top of this post forever.&#8221;</span></p></blockquote><p><span>There was a lot more to the project than typing out the &#8220;...make zero mistakes&#8221; prompt:</span></p><ul><li><p><span>Jarred made a detailed plan and style guide on how to migrate</span></p></li><li><p><span>He set up the project so agents would not use Git worktrees which he found slow, but worked on different files in the same codebase</span></p></li><li><p><span>He created an orchestration system where each AI agent came up with suggestions of what to change, but did not make a change to the file to avoid conflicts; an orchestrator AI agent created the commits</span></p></li><li><p><span>The most time and tokens went on fixing the compile bugs, tests, and verifying that things worked</span></p></li><li><p><span>Bun itself has a very robust test harness: when all tests pass, it&#8217;s a high-confidence signal that the rewrite works</span></p></li><li><p><span>Crucially, Jarred is </span><em><span>the</span></em><span> ultimate domain expert in Bun: he created the project and knows the codebase better than anyone</span></p></li></ul><p><span>The rewrite has been shipped to production and powers Claude Code today.</span></p><p><em><span>We cover a lot more on this in </span><a href="https://blog.pragmaticengineer.com/the-pulse-what-can-we-learn-from-buns-rapid-rust-rewrite-with-ai/"><span>What can we learn from Bun&#8217;s rapid Rust rewrite with AI?</span></a></em></p><h2><span>3. Changing engineering practices</span></h2><p><span>So, what has changed in how teams build software at Anthropic, compared to the pre-AI days? That&#8217;s the question of this article, and it seems that many things are different. Let&#8217;s go through it:</span></p><h3><span>AI lab-specific practices</span></h3><p><span>Some things as normal as breathing at AI labs like Anthropic stand out as different with an outside perspective:</span></p><ul><li><p><strong><span>Everyone runs multiple AI agents all the time. </span></strong><span>Running 3-10 parallel agents is a given. Folks I talked with had their agents running in the background or cloud.</span></p></li><li><p><strong><span>No token budget, usage not tracked. </span></strong><span>One major difference between AI labs and everyone else is that there </span><em><span>really</span></em><span> is no token limit or token leaderboards that promote tokenmaxxing; people already use agents all the time.</span></p></li><li><p><strong><span>Very high autonomy. </span></strong><span>Work is becoming more structured inside AI labs, but there&#8217;s still massive autonomy compared to Big Tech and most startups. When everyone has unlimited tokens, it&#8217;s pretty easy to prototype any idea.</span></p></li></ul><h3><span>Prototyping and &#8220;spiking&#8221; is far more fluid</span></h3><p><span>It was several times faster to prototype early approaches for Claude Managed Agents. Similarly, &#8220;spiking&#8221; the Claude Code mobile backend implementation was much faster than pre-AI, Katelyn told me.</span></p><h3><span>Verification takes longer than implementation</span></h3><p><span>Jarred made a point about the split between implementation and validation in his 11-day rewrite to Rust. Roughly, it was:</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N0px!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N0px!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 424w, https://substackcdn.com/image/fetch/$s_!N0px!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 848w, https://substackcdn.com/image/fetch/$s_!N0px!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 1272w, https://substackcdn.com/image/fetch/$s_!N0px!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N0px!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png" width="1456" height="317" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:317,&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_!N0px!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 424w, https://substackcdn.com/image/fetch/$s_!N0px!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 848w, https://substackcdn.com/image/fetch/$s_!N0px!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 1272w, https://substackcdn.com/image/fetch/$s_!N0px!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d5471e-bdc4-4485-846d-3833b3d6dc5b_1928x420.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Implementation of the Rust rewrite took far less time than fixing it up, then validating that it works as expected</figcaption></figure></div><p><span>The &#8220;implementation&#8221; part of rewriting the code from Zig to Rust took about 15% of the time, while 85% went on fixing things up: getting it to compile, fixing tests, verifying that it worked.</span></p><h3><span>Most tokens no longer spent on implementation</span></h3><p><strong><span>Thariq:</span></strong></p><blockquote><p><span>&#8220;We see that few tokens are spent on actual implementation. Most are spent on discovery of unknowns, prototyping, mocking, and then in verification and testing.&#8221;</span></p></blockquote><p><span>Jarred&#8217;s Bun rewrite echoes this: he spent more tokens on fixing up the implementation and verifying that it worked than on the implementation itself!</span></p><h3><span>Code review and more testing by AI</span></h3><p><span>Jarred:</span></p><blockquote><p><span>&#8220;Critiquing the code and testing it with agents is a new approach we do a lot more of</span><strong><span>.</span></strong><span> I think a lot about trust when you merge a lot of code. How do you merge 100+ PRs a day, and make sure the code works? At this pace, you need to trust the code without the ability to read it all yourself. And I think it&#8217;s a few things:</span></p><ul><li><p><strong><span>Code review</span></strong><span>: it needs to be really good and automated. I&#8217;m clearly tooting our own horn here, but I find Claude&#8217;s code review to be really good. Claude&#8217;s code review catches bugs that would take me an hour of closely reading the code to figure out. The caveat is that it&#8217;s expensive!</span></p></li><li><p><strong><span>Security scanning</span></strong><span>: for this Rust rewrite we did 11 runs of the Claude Security Scanner.</span></p></li><li><p><strong><span>Fuzz testing</span></strong><span>: we&#8217;ve also been doing different types of fuzzing (</span><a href="https://en.wikipedia.org/wiki/Fuzzing"><span>fuzz testing</span></a><span>), where we had Claude write a fuzzer for things like parser fuzzing.</span></p></li></ul><p><span>Running out-of-process testing, where it happens in a different process/session from coding, is one way to build trust in the code. I expect more of this.&#8221;</span></p></blockquote><h3><span>New pattern: fanning out work to AI</span></h3><p><span>Jarred described a new way he works:</span></p><blockquote><p><span>&#8220;A new approach I&#8217;m using is fanning out a lot of the work to many Claudes at the same time. I did this with the Bun rewrite, but I use it for other work. This approach works very well for me, and I feel it&#8217;s pretty underused.&#8221;</span></p></blockquote><h3><span>Time-saving automations powered by agents more widespread</span></h3><p><span>Jarred listed several time-saving automations set up by the Bun team to run an active open-source project with a small team, while the team works on Claude Code:</span></p><ul><li><p><span>Every time someone files an issue, Claude runs to try and reproduce the issue. If it succeeds, it starts another container, which then tries to fix the issue and submit a PR.</span></p></li><li><p><span>The agent tasked with submitting a PR has to write a test that fails in the system version (the one without the patch) of Bun, and passes in the debug build with the patch, before it is allowed to submit a PR</span></p></li><li><p><span>There are other automations, like if there is no test, the PR is auto-rejected; all linters are run: Claude Code review is run, CodeRabbit&#8217;s code review is run, and the agents go back and forth on the GitHub pull request</span></p></li></ul><h3><span>Auto-merge of pull requests: coming soon?</span></h3><p><span>Pull requests are merged manually when all quality gates pass, but this could become automatic at some point. Once all the above checks pass, all (AI) code review comments are addressed, tests are added to new code, etc. As an interesting aside, a lot of GitHub activity is Claude talking to Claude!</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oU4s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oU4s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 424w, https://substackcdn.com/image/fetch/$s_!oU4s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 848w, https://substackcdn.com/image/fetch/$s_!oU4s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 1272w, https://substackcdn.com/image/fetch/$s_!oU4s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oU4s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png" width="1456" height="1193" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1193,&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_!oU4s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 424w, https://substackcdn.com/image/fetch/$s_!oU4s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 848w, https://substackcdn.com/image/fetch/$s_!oU4s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 1272w, https://substackcdn.com/image/fetch/$s_!oU4s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa28345d7-0db1-4e25-86de-507ce45bc994_1894x1552.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Claude talking to Claude. Source: </span><a href="https://github.com/oven-sh/bun/pull/34144"><span>Bun</span></a></em></figcaption></figure></div><p><span>But manual merging may vanish in low-risk cases, at least for the Bun project. Jarred told me:</span></p><blockquote><p><span>&#8220;Today, a person presses &#8216;merge&#8217; but within a few months, I expect:</span></p></blockquote><ul><li><p><span>Automated reviewer LGTMs</span></p></li><li><p><span>&#8594; another Claude with a fresh context window judges if it&#8217;s simple and low blast-radius</span></p></li><li><p><span>&#8594; if it is: auto-merge!&#8221;</span></p></li></ul><h3><span>Test assumptions with each model generation</span></h3><p><span>Inside Anthropic, the team keeps testing their priors. Thariq gave an interesting example:</span></p><blockquote><p><span>&#8220;The thing with agents is that you have to revisit any assumptions you have made because it can change with a new model generation. For that reason, we deleted 80% of the Claude Code system prompt recently because the model has gotten smarter.</span></p><p><strong><span>Using HTML is another assumption we needed to re-examine.</span></strong><span> HTML is one of those things which Claude is a lot smarter at than many of us expected. I&#8217;ve started preferring HTML as an output format over Markdown, and see this being used by others on the Claude Code team.</span></p><p><span>HTML can convey much richer information compared to markdown, HTML documents are easier to read and share.&#8221;</span></p></blockquote><h2><span>4. Team-level changes</span></h2><p><span>At Anthropic, there are also changes in how engineering teams operate, compared to pre-AI.</span></p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/inside-anthropic">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Pushing software engineering limits with “napkin math”]]></title><description><![CDATA[Turbopuffer cofounder Simon Eskildsen on the benefits of longer tenure, using first principles to build durable software &#8211; and why founders should be cautious when raising VC money]]></description><link>https://newsletter.pragmaticengineer.com/p/pushing-software-engineering-limits</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/pushing-software-engineering-limits</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 21 Jul 2026 16:52:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/h8TBLKyo7Rs" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><span>Hi, this is Gergely with the monthly, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. If you&#8217;ve been forwarded this email, you can </span><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com"><span>subscribe here</span></a><span>.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.pragmaticengineer.com/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://newsletter.pragmaticengineer.com/subscribe?"><span>Subscribe now</span></a></p><p><span>After I recently interviewed Simon Eskildsen, co-founder and CEO of turbopuffer, on the main stage at the AI Engineer&#8217;s World Fair, many people at the event told me they found him relatable and inspiring for his choices to stick with one company for close to a decade, his belief in the power of &#8220;napkin math&#8221; to reveal why products run slowly or cost too much, and for his insight about how too much of VC funding is about ego, not business needs.</span></p><p><span>This article contains the most interesting parts from that conversation; in particular, the concept of &#8220;napkin math&#8221; &#8211; doing quick calculations to get rough answers &#8211; as a way to challenge existing systems to improve. The full 55-minute-long video of the discussion at the AI Engineer&#8217;s World Fair is available to watch:</span></p><div id="youtube2-h8TBLKyo7Rs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;h8TBLKyo7Rs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/h8TBLKyo7Rs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://youtu.be/h8TBLKyo7Rs&quot;,&quot;text&quot;:&quot;Watch the full interview&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://youtu.be/h8TBLKyo7Rs"><span>Watch the full interview</span></a></p><p><span>Today, we cover:</span></p><ol><li><p><strong><span>Algorithmic programming speedrun.</span></strong><span> While in high school, Simon competed in the International Olympiad for Informatics (IOI) which pushed him to learn about writing correct programs that are fast and memory-efficient, and more.</span></p></li><li><p><strong><span>Eight years of infra at Shopify. </span></strong><span>There are many upsides to longer tenure: Simon learned infrastructure concepts, dug deep into databases running across regions, and learned to write software that ages well.</span></p></li><li><p><strong><span>&#8220;Napkin math&#8221; as a superpower.</span></strong><span> Simon became obsessed with finding the theoretical limits of compute operations, such as sending over data and reading bytes. This held him in good stead at Shopify, and then at his startup.</span></p></li><li><p><strong><span>Origins of turbopuffer</span></strong><span>. When ChatGPT took off, context windows were small, and so stuffing them with the right information was key for AI applications. Fast search was needed, but the search solutions were surprisingly expensive. Using &#8220;napkin math&#8221;, Simon discovered they were </span><em><span>far</span></em><span> more expensive than necessary.</span></p></li><li><p><strong><span>A new product without VC funding &amp; Cursor as customer no.1. </span></strong><span>After raising $8M in seed funding, Cursor rolled the dice on the new turbopuffer team after Simon helped with their search &amp; database needs.</span></p></li><li><p><strong><span>Reasons to raise venture capital</span></strong><span>. Fund R&amp;D, fund growth, stroke founders&#8217; egos, and more.</span></p></li></ol><p><em><span>Disclaimer: turbopuffer is a season sponsor </span><a href="https://pragmaticpodcast.com/"><span>of the podcast</span></a><span>, but as with all our deepdives, this article is independent of podcast sponsorships.</span></em></p><h2><span>1. </span>Algorithmic programming speedrun</h2><p><span>A self-taught professional, Simon skipped college to work at Shopify and spent nearly a decade there building a variety of systems. His interest in computers started after initially getting into building websites aged 12. Growing up in Denmark, he dabbled in HTML with tools like Microsoft FrontPage and Adobe&#8217;s Dreamweaver.</span></p><p><span>While still a teenager, Simon &#8220;hit a wall&#8221; by exhausting the Danish-language part of the internet for learning programming, and got into the World of Warcraft MMO game, which helped him acquire English.</span></p><p><span>After discovering the International Olympiad for Informatics (IOI), he decided to enter, despite a very competitive, multi-stage selection process open to all Danish high schools. IOI problems are pretty similar to Leetcode problems: algorithmic challenges that value correctness, speed, and memory usage.</span></p><p><span>Simon cleared the online qualification round and was invited to the Danish Nationals. This was more than a competition: a weekend-long bootcamp to teach participants more advanced programming techniques such as recursion (which Simon already knew), the </span><a href="https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm"><span>divide-and-conquer algorithm</span></a><span>, and </span><a href="https://en.wikipedia.org/wiki/Dynamic_programming"><span>dynamic programming</span></a><span>; one of the more tricky concepts to master for algorithmic programming.</span></p><p><span>I tip my hat to the organizers for creating a challenging bootcamp and offering the opportunity for people like Simon, who wasn&#8217;t aware of what &#8220;NP complete&#8221; meant when he entered. </span><a href="https://sirupsen.com/my-journey-to-the-international-olympiad-in-informatics"><span>He recalls</span></a><span>:</span></p><blockquote><p><span>&#8220;The routine was that every four hours we&#8217;d be introduced to a new &#8220;programming concept&#8221;, and receive ~2-6 tasks where this, combined with previously introduced concepts, had to be applied. All the solutions had to be submitted to the same site I submitted my qualification solutions to, as it was all part of the final evaluation. The tasks were incredibly challenging, like nothing I had ever tried before.</span></p><p><span>Sometimes in extreme desperation combined with tiredness from the trip, I&#8217;d think about taking the next train home. This feeling would disappear with the utter joy and confidence that arose whenever I would finally solve a task, and creep back once again when I found myself still struggling after an hour on a new problem. But this kept me going. By Saturday afternoon, I had almost managed to get up to speed with the others, and was doing the same tasks as them.&#8221;</span></p></blockquote><p><span>Ultimately, Simon claimed one of six spots in the Danish national team, making it through to the regional finals.</span></p><p><strong><span>Aware of how little he knew about programming, Simon doubled down to catch up. </span></strong><span>He realized that most other participants were better prepared and that he had to do something to survive the next qualifying round. So, he got to work:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gp-r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gp-r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 424w, https://substackcdn.com/image/fetch/$s_!Gp-r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 848w, https://substackcdn.com/image/fetch/$s_!Gp-r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 1272w, https://substackcdn.com/image/fetch/$s_!Gp-r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gp-r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png" width="1294" height="916" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:916,&quot;width&quot;:1294,&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_!Gp-r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 424w, https://substackcdn.com/image/fetch/$s_!Gp-r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 848w, https://substackcdn.com/image/fetch/$s_!Gp-r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 1272w, https://substackcdn.com/image/fetch/$s_!Gp-r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d73bb2-e470-41b1-afe7-059ddbd78d55_1294x916.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Simon&#8217;s desk with Donald Knuth&#8217;s &#8220;The Art of Computer Programming,&#8221; and the training week he created</figcaption></figure></div><p><span>As Simon recalled:</span></p><blockquote><p><span>&#8220;I armed myself with a borrowed copy of &#8220;The Art of Computer Programming&#8221;, worked through the exercises, read up on common algorithms on Wikipedia, completed tasks on USACO, and memorized the critical parts of my Vim config for the competition computers. I managed to create quite an intense training weekend for myself.&#8221;</span></p></blockquote><p><span>The regional finals were even more challenging than the Nationals, and participants struggled to write performant solutions to the problems. Despite putting in the effort, Simon was pretty sure he was out of the competition, </span><a href="https://sirupsen.com/my-journey-to-the-international-olympiad-in-informatics"><span>and recorded</span></a><span> his learnings:</span></p><blockquote><p><span>&#8220;[From the programming competition] I learned that you must avoid digging holes. Repeatedly, I found myself so fixated on getting a particular idea to work that I&#8217;d get absolutely nowhere. Sometimes, you have to bite the bullet, delete your program, find a new sheet of paper, and start from scratch. A good case of this is when you start working around a general solution to solve specific edge-cases. I learned that there is almost always a simple way to solve a problem without explicitly handling edge-cases. If there are two edge-cases, there&#8217;s almost certainly two more. The simple solution will handle edge-cases automatically &#8211; even those you might not have considered.&#8221;</span></p></blockquote><p><span>But as it turned out, two months later he was told he had been selected to represent Denmark in the final phase of the competition. Simon continued to push himself out of the comfort zone of web development, using HTML, a bit of PHP, and getting into algorithmic programming.</span></p><p><strong><span>Another decision that would later bear fruit career-wise was starting a blog while at high school &#8211; though he didn&#8217;t know it at the time.</span></strong><span> In 2010, Simon launched </span><a href="https://sirupsen.com/"><span>his English-language blog</span></a><span> but posted only one or two articles per year; mostly short ones describing problems he&#8217;d solved:</span></p><ul><li><p><a href="https://sirupsen.com/a-simple-imgur-bash-screenshot-utility"><span>A five-line script</span></a><span> to take screenshots and upload them to Imgur, all from the command line (2010)</span></p></li><li><p><a href="https://sirupsen.com/setting-up-unicorn-with-nginx"><span>Setting up a Ruby HTTP server</span></a><span> on NGINX using the library </span><a href="https://tomayko.com/blog/2009/unicorn-is-unix"><span>Unicorn</span></a><span> (2010)</span></p></li><li><p><a href="https://sirupsen.com/stop-relying-on-your-orm-and-learn-sql"><span>Why Simon favors SQL</span></a><span> over ORMs: Object-Relational Mappings (ORMs) are frameworks to abstract SQL, these were very popular around that time (2011)</span></p></li></ul><p><span>Two posts he published would go on to have an impact on his life. One was about </span><a href="https://sirupsen.com/my-journey-to-the-international-olympiad-in-informatics"><span>his IOI experience and learnings</span></a><span>. The other only came about after he suffered the disaster of fatally dropping his iPhone during his final year in high school.</span></p><h2><span>2. </span>Eight years of infra at Shopify</h2><p><span>With his smartphone dead, Simon was forced to switch to an old-school Nokia &#8220;dumb&#8221; phone. He wrote a short article about the experience titled </span><a href="https://sirupsen.com/iphone"><span>Why I&#8217;m glad my iPhone broke</span></a><span>, which </span><a href="https://news.ycombinator.com/item?id=5109159"><span>went viral on Hacker News</span></a><span>, making it to the front page of the site with many comments.</span></p><p><span>It seems that someone at Shopify, in Canada, read the article and others by him &#8211; including the summary of his impressive performance at the International Olympiad for Informatics &#8211; as a recruiter from Shopify flew Simon out to interview in Ottawa, Canada, where he was offered a software engineering position at the company.</span></p><p><strong><span>In his new job on the infrastructure team, Simon made notes about things he didn&#8217;t understand and read up on new concepts. </span></strong><span>As he told me:</span></p><blockquote><p><span>&#8220;When I started at Shopify, I was insecure about having not studied computer science and my biggest exposure to programming had been the IOI. If nothing else, preparing for the IOI taught me that you can sit down, read a paper, and figure it out if you spend enough time on it. So, I did that repeatedly.</span></p><p><span>In my first year at Shopify, every time I heard something I didn&#8217;t know, I noted it down on a piece of paper. Then, that evening, I would read up about it.</span></p><p><span>For example, if someone at work mentioned TCP, I assumed that surely they would know </span><em><span>exactly</span></em><span> what&#8217;s in the three-way handshake and how TLS is layered on top. And I also assumed they&#8217;d looked at Wireshark and all of that. I don&#8217;t think that&#8217;s true, but that&#8217;s what I thought at the time! So, I dug deep into everything I encountered.&#8221;</span></p></blockquote><p><span>Working in infrastructure meant solving interesting engineering problems at a time when Shopify was growing 120-140% in load year-on-year; Simon was exposed to problem domains like:</span></p><ul><li><p><strong><span>Ruby on Rails and databases: </span></strong><span>Shopify was already one of the world&#8217;s largest Ruby on Rails monolith applications, and working on infrastructure meant being close to the database layer</span></p></li><li><p><strong><span>Sharding and cutting over:</span></strong><span> as Simon&#8217;s manager used to say, &#8220;you cannot cache writes&#8221;, so Shopify had to move from running on a single group of machines to a shard (partitioned) setup of machines. The team did the cut-over (moving to the shard) just a week before Black Friday, the busiest time of the year.</span></p></li><li><p><strong><span>Multi-data centers: </span></strong><span>expanding database footprint from one data center (DC) to multiple DCs</span></p></li><li><p><strong><span>Splitting up key services:</span></strong><span> Shopify had a 128GB machine (massive for the time) running Redis as a key-value store. Nobody dared touch it until one day the service went down. Then, the team split responsibilities up into separate services.</span></p></li></ul><p><strong><span>Simon built a framework to simulate networking conditions called </span><a href="https://github.com/shopify/toxiproxy"><span>toxiproxy</span></a><span>. </span></strong><span>The idea came to him while attempting to write a more thorough, systems-level test to see how Shopify&#8217;s application held up during partial outages. He created a matrix of Shopify&#8217;s services, and wanted to write a complete test suite for this matrix, to see if the system was resilient enough to handle some parts of the system being down. For example:</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9au0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9au0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 424w, https://substackcdn.com/image/fetch/$s_!9au0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 848w, https://substackcdn.com/image/fetch/$s_!9au0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 1272w, https://substackcdn.com/image/fetch/$s_!9au0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9au0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png" width="512" height="135" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:135,&quot;width&quot;:512,&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_!9au0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 424w, https://substackcdn.com/image/fetch/$s_!9au0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 848w, https://substackcdn.com/image/fetch/$s_!9au0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 1272w, https://substackcdn.com/image/fetch/$s_!9au0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fdba208-a817-42fe-b4a0-f6ba813d8541_512x135.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em><span>An example of a test case Simon wanted to run</span></em></figcaption></figure></div><p><span>As Simon </span><a href="https://shopify.engineering/building-and-testing-resilient-ruby-on-rails-applications"><span>wrote</span></a><span> about this problem at the time:</span></p><blockquote><p><span>&#8220;Having tests for the matrix was a must; otherwise we couldn&#8217;t guarantee the state of the matrix wouldn&#8217;t degrade over time. Since the tools mentioned previously require root access, we investigated proxies to simulate latency and downtime at the TCP level, but didn&#8217;t find one that suited our needs. We needed an online API to edit proxies and to support deterministic latencies, which made it suitable for integration testing.&#8221;</span></p></blockquote><p><span>This was the inspiration that led to toxiproxy. As Simon told me on stage:</span></p><blockquote><p><span>&#8220;Toxiproxy is a proxy that sits in between the application and the databases. With the proxy in place, you could do things like make an API call to the proxy, instructing it to simulate taking the database down, or making it slow.</span></p><p><span>Over time, we added a bunch of other ways to inject failures. With this proxy, we did not have to mock low-level drivers, but we could test failure handling really well.&#8221;</span></p></blockquote><p><span>Toxiproxy was </span><a href="https://github.com/shopify/toxiproxy"><span>open sourced</span></a><span> in 2014, and apparently still runs in Shopify&#8217;s CI system 12 years later, to Simon&#8217;s knowledge!</span></p><p><strong><span>The biggest benefit of a long tenure at a company was learning to write software that ages well. </span></strong><span>Simon told me that this was the lesson that made it so worthwhile, and how often the simple solution someone put together in a week or two outlasted the big, multi-team RFC-driven solutions. That was a lesson he still uses today.</span></p><h2><span>3. </span>&#8220;Napkin math&#8221; as a superpower</h2><p><span>While at Shopify, Simon became interested in figuring out the theoretical limits of certain computer operations. For example, how much bandwidth does DRAM have for memory transfer? How long does a round-trip operation to AWS S3 take, and how much does it cost? What does a gigabyte of memory cost?</span></p><p><span>He sought the actual numbers, wrote a script to collect them, and created a table with the data:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W-hZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W-hZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 424w, https://substackcdn.com/image/fetch/$s_!W-hZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 848w, https://substackcdn.com/image/fetch/$s_!W-hZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 1272w, https://substackcdn.com/image/fetch/$s_!W-hZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W-hZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png" width="1336" height="854" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:854,&quot;width&quot;:1336,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157203,&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://newsletter.pragmaticengineer.com/i/207938613?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.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_!W-hZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 424w, https://substackcdn.com/image/fetch/$s_!W-hZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 848w, https://substackcdn.com/image/fetch/$s_!W-hZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 1272w, https://substackcdn.com/image/fetch/$s_!W-hZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c561ff1-c96d-48f0-8396-a0c2572f17a8_1336x854.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Some of the numbers Simon measured &amp; memorized<span>. See </span><a href="https://github.com/sirupsen/napkin-math"><span>the full table on GitHub</span></a></figcaption></figure></div><p><strong><span>Simon started to memorize key numbers with flash cards. </span></strong><span>He wanted to be able to instantly recall all important numbers. As he told me:</span></p><blockquote><p><span>&#8220;Napkin math was essentially just this table that I maintain on GitHub. There&#8217;s probably like 50 of these numbers and then a script that generates them all.</span></p><p><span>For example, what does a gigabyte of memory cost? $2. What does a gigabyte of S3 cost? Two cents. What does a gigabyte of this cost? 10 cents. What does it cost on spot? What does it cost on a three-year commit? I had a massive table, then I created flashcards for almost every single cell so I know all these numbers.</span></p><p><span>This was a project I started taking on at Shopify because I would review projects and these numbers would be helpful.&#8221;</span></p></blockquote><p><strong><span>Napkin math enabled him to challenge design decisions based on benchmarks that had issues. </span></strong><span>As he told me:</span></p><blockquote><p><span>&#8220;When reviewing a project, a product team would tell me that they chose Database A over Database B because they benchmarked both, and Database A was better. I hate benchmarks because making design decisions based on benchmarks is not a satisfying answer to me.</span></p><p><span>For example, you&#8217;re saying that with Database A, as per the benchmark, it takes 10 seconds to do this one thing. But it should take 10 milliseconds if you do the napkin math. Say, it&#8217;s a search query. Okay, you&#8217;re searching for three terms then. Each term has this many documents that match it. That&#8217;s this many megabytes. We intersect this many lists. You have DRAM bandwidth on multiple cores, at 100 GB/sec. So if you do the math, it should be 10 milliseconds.</span></p><p><span>So, now you&#8217;re telling me that the benchmark for the same thing takes 10 seconds, which means one of us is wrong! Either there&#8217;s a gap in my understanding &#8211; which is possible! &#8211; or the benchmark measures the wrong thing.</span></p><p><span>Often, it would be things like the person doing the benchmark and not realizing that the query would be a distributed one, running across a hundred different nodes. And in this case, of course the p99 is going to be very high!&#8221;</span></p></blockquote><p><strong><span>Simon went even deeper into &#8220;napkin math&#8221; after leaving Shopify. </span></strong><span>He </span><a href="https://sirupsen.com/napkin/problem-10-mysql-transactions-per-second"><span>investigated</span></a><span> whether MySQL&#8217;s maximum transactions per second is equivalent to fsyncs per second (the number of file writes per second a system can handle). He discovered that MySQL can handle more writes than the operating system could sync to the file, which was a surprise:</span></p><blockquote><p><span>&#8220;It takes ~3 seconds to perform 16,000 insertions, or ~5,300 insertions per second. This is 5x more than the 1,000 fsyncs per second our napkin math told us would be the theoretical maximum transactional throughput!</span></p><p><span>Typically, with napkin math we aim for being within an order of magnitude, which we are. But when I do napkin math, it usually establishes a lower bound for the system, i.e., from first-principles, how fast could this system perform in ideal circumstances?</span></p><p><strong><span>Rarely is the system 5x faster than the napkin math says.</span></strong><span> When we identify a significant-looking gap between the real-life performance and the expected performance, I call it the &#8220;first-principle gap.&#8221; This is where curiosity sets in. It typically means there&#8217;s (1) an opportunity to improve the system, or (2) a flaw in our model of the system. In this case, only (2) makes sense, because the system is faster than we predicted.&#8221;</span></p></blockquote><p><span>Simon </span><a href="https://sirupsen.com/napkin/problem-10-mysql-transactions-per-second"><span>started to investigate</span></a><span>, and learned that MySQL does grouping of transactions (not doing an fsync for every write), and it also does smart merging of multiple fsync operations that would be processed in parallel, effectively doing a &#8220;group commit&#8221; to further improve performance. This is a learning he&#8217;d later use: grouping writes together on top of S3, to reduce latency and improve cost.</span></p><p><span>Personally, I find it amazing how much you can learn with some measurements and by asking questions about how a system achieves results that go against what the &#8220;napkin math&#8221; suggested should be its limit!</span></p><h2><span>4. Origins of turbopuffer</span></h2><p><span>&#8220;Napkin math&#8221; also played a part in the creation of turbopuffer. Simon told me that three things had to combine for the project to come to life.</span></p><p><strong><span>1. Search was a difficult project at Shopify. </span></strong><span>Building search was one of Simon&#8217;s final projects at the company, and he did not have a good time with it. He used a popular database vendor but struggled to have it perform napkin math. The query plans were not exposed easily by the database, so he could not figure out what was missing and why it wasn&#8217;t performing the napkin math without reading massive amounts of source code. Also, the search infra was difficult to operate.</span></p><p><strong><span>2. Napkin math became a surprisingly efficient reasoning tool. </span></strong><span>As a toolkit, napkin math gave Simon a way to reason about what could be achievable with a machine, if utilized perfectly.</span></p><p><strong><span>3. His friends&#8217; startups needed fast search badly because of AI. </span></strong><span>In early 2023, Simon helped a few friends with infra at their startups, many of whom had the same problem: LLM context windows were very small (4-8 KB), and they needed to fill them with the right parts of documents, but this demanded very fast search. One startup budgeted that their new search vendor would cost $30K/month, while the existing infra bill was only $5K/month! For a bootstrapped Canadian company, the cost was too high, so they didn&#8217;t ship the AI feature.</span></p><p><span>Simon could not stop thinking about why search was so expensive, and why it didn&#8217;t line up with what the &#8220;napkin math&#8221; predicted the cost should be. Eventually, he laid out a basic architecture to make it fast and cheap:</span></p><ol><li><p><span>Store the data to search in AWS S3</span></p></li><li><p><span>Do some clustering and organize the files</span></p></li><li><p><span>Get latency down. S3 is cheap and reliable, but has high latency</span></p></li></ol><p><span>Driven by curiosity about how that could work, he set out to build it. As he told me:</span></p><blockquote><p><span>&#8220;I just became fully obsessed that summer [of 2023] with building it. The first version was the simplest possible thing. I&#8217;m a very pragmatic person, so I didn&#8217;t get buried in detail. I barely read the literature on log-structured merge (</span><a href="https://en.wikipedia.org/wiki/Log-structured_merge-tree"><span>LSM</span></a><span>).</span></p><p><span>The simplest way to do this is to run a clustering algorithm on the vectors. You get the clusters, and then put the clusters in files. The files are called &#8216;cluster_01&#8217;, &#8216;cluster_02&#8217;, &#8216;cluster_03.&#8217; Then you have a file called centroids of the clusters. Then, you search by downloading centroids, looking into them, then downloading the closest clusters.</span></p><p><span>There were a few optimizations around merging clusters that were adjacent in files, just to control costs and boost performance. But this was the core of it.&#8221;</span></p></blockquote><p><span>What about performance? Simon:</span></p><blockquote><p><span>&#8220;For the first version, I didn&#8217;t even implement a dedicated caching layer. I just put the reverse proxy (NGINX) in front of S3, and that was it! The performance improvement came from caching all of the S3 objects. It was the simplest possible layer at the NGINX level.&#8221;</span></p></blockquote><h2><span>5. A new product without VC funding &amp; Cursor as customer no.1</span></h2><p><span>I first heard of turbopuffer last year, when I interviewed Cursor cofounder Sualeh Asif about how they built the AI coding harness. From our previously published </span><a href="https://newsletter.pragmaticengineer.com/p/cursor"><span>Cursor deepdive</span></a><span>:</span></p><blockquote><p><span>&#8220;The ongoing need to re-shard as usage grew became error-prone and frustrating. Sualeh told me the biggest lesson the team learned was to avoid sharding where possible in future. So, they looked for a vector database that could support multi-tenancy without requiring manual sharding.</span></p><p><span>Turbopuffer was a startup that promised this, so Cursor tried it and migrated a good part of their vector search use cases over.&#8221;</span></p></blockquote><p><strong><span>So, how did a billion-dollar startup come to bet on a tiny, unproven infra product with zero customers? </span></strong><span>There were a few factors:</span></p><p><span>First, Cursor was not </span><em><span>yet</span></em><span> a billion-dollar company in the fall of 2023, but a relatively fresh startup. The company raised $8M in seed funding in the same month. In 2024, the company was valued at $400M, and then its valuation surged to $29.3B. It was sold to SpaceX for $60B this year.</span></p><p><span>Secondly, it involved a tweet Simon posted after having had enough of building all summer, and wanting to test the waters. As he told me:</span></p><blockquote><p><span>&#8220;I was so sick of working on [turbopuffer]. I&#8217;d been working on this all summer and didn&#8217;t know if anyone cared. I only wanted to work on it if anyone cared. So, I decided to put it on Twitter.</span></p><p><span>At that point, I had a single </span><a href="https://groups.google.com/g/gce-discussion/c/eNl7L3_Y6Mg"><span>TMUX</span></a><span> instance running on an 8-core node somewhere in GCP. I was thinking: &#8220;if someone goes to prod, I&#8217;ll set it up properly on multiple nodes.</span></p><p><strong><span>But first, let&#8217;s see if anyone cares.</span></strong></p><p><span>Anyone who&#8217;s worked in the internals of databases would&#8217;ve had too much pride to ship anything like that; I was just releasing it like a SaaS project. Why can&#8217;t you work on a database like it&#8217;s SaaS?&#8221;</span></p></blockquote><p><span>So, he put out this confident-sounding tweet:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HfSI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HfSI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 424w, https://substackcdn.com/image/fetch/$s_!HfSI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 848w, https://substackcdn.com/image/fetch/$s_!HfSI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!HfSI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HfSI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png" width="1182" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1182,&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_!HfSI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 424w, https://substackcdn.com/image/fetch/$s_!HfSI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 848w, https://substackcdn.com/image/fetch/$s_!HfSI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!HfSI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb6c554-160e-4136-bb74-a114be3d0bb5_1182x1000.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>The launch tweet for turbopuffer. Source: </span><a href="https://x.com/Sirupsen/status/1709602855160869275?s=20"><span>Simon Eskildsen</span></a></em></figcaption></figure></div><p><span>Simon had the confidence to launch his product because he knew it was rock-solid and scalable:</span></p><blockquote><p><span>&#8220;I knew turbopuffer was reliable. It upheld its invariants. For example, you shut down all the VMs and no data is lost. All the writes are committed directly to blob storage.&#8221;</span></p></blockquote><p><strong><span>Cursor reached out. </span></strong><span>The company was an eight-person team at the time, fresh from seed funding and growing fast, but with a search problem that they were looking to partner with a startup on. Simon recounts:</span></p><blockquote><p><span>&#8220;Knowing Cursor&#8217;s founders now, I&#8217;m sure they must have sat at the dinner table one day and were like: &#8216;the unit economics of what we have right now, where all the vectors are in DRAM, are not working.&#8217;</span></p><p><span>They probably were asking why someone had not built a solution where you can put all the vectors from the codebase into S3 (to make it cheap), and move the part of the codebase used in memory (to make it fast). Then, everything sits in blob stores and you just hot load it all into cache. When you open the codebase, after a few seconds it&#8217;s all in RAM and the queries are as fast as everything else.</span></p><p><span>Aman (one of the cofounders) was already talking about using S3 as a key-value cache, which at the time, barely anyone was thinking of for unit economics.&#8221;</span></p></blockquote><p><strong><span>Simon knew nothing about B2B sales at that point, and was not trying to &#8220;sell&#8221; anything to Cursor. </span></strong><span>He exchanged a few emails with the Cursor team about their use case of searching many small local codebases. He wanted to help Cursor with the unit economics, while also proving that turbopuffer works. So, he hopped on a flight from Canada to San Francisco, arrived at Cursor&#8217;s office and got down to debugging their database provider:</span></p><blockquote><p><span>&#8220;When I showed up at Cursor&#8217;s office, they were having some Postgres problems. I asked, &#8216;do you guys have </span><a href="https://pganalyze.com/"><span>pganalyze</span></a><span>?&#8217; And they didn&#8217;t, so I was like, &#8216;Okay, let&#8217;s get that going. Let&#8217;s look at it. &#8220;</span></p><p><span>And the problem was the same thing as it always is with Postgres: </span><a href="https://www.postgresql.org/docs/current/runtime-config-vacuum.html"><span>autovacuum</span></a><span> hadn&#8217;t run enough. And so they had all of these going to </span><a href="https://medium.com/@Amir_M4A/how-postgresql-stores-data-heaps-blocks-and-ctids-explained-f66d052cf87d"><span>heap</span></a><span>, when they should be doing index scans, etc. So, we were talking about all of that.</span></p><p><strong><span>I was just helping them: my &#8220;database genes&#8221; just kicked in.</span></strong><span> I think this built enough trust with them to believe that if I know enough to help them with their database, maybe I also know how to build one.&#8221;</span></p></blockquote><p><span>It was around when turbopuffer&#8217;s other cofounder, </span><a href="https://justine.li/"><span>Justine Li</span></a><span>, joined that the work with Cursor kicked off. Simon describes Justine as the best engineer he ever worked with at Shopify, and together, they made more performance optimizations. Cursor migrated their local code-base search over to this brand new product.</span></p><p><strong><span>Simon promised to reduce Cursor&#8217;s bill by 95%, and delivered &#8211; thanks to napkin math! </span></strong><span>Cursor was spending around $80K/month on indexing and search; with turbopuffer in place, this dropped to $4K/month. Simon was confident about making this prediction thanks to napkin math! He did the calculations based on the fundamentals; only counting resource usage that Cursor was using, and not taking a margin for turbopuffer&#8217;s operating cost at the time.</span></p><h2><span>6. Reasons to raise venture capital</span></h2><p><span>After securing Cursor as the first customer, Simon was not convinced that turbopuffer should raise VC money. He explained his thinking:</span></p><blockquote><p><span>&#8220;</span><strong><span>I understood that if you take venture capital, no matter how many smiles there are in the room, everyone&#8217;s expecting to earn a big return </span></strong><span>on some timeline that makes sense to everyone involved. And &#8216;everyone involved&#8217; are pension funds in Canada.</span></p><p><span>But at the time, I did not know if turbopuffer could be a billion dollar company. It felt like a very niche kind of search engine. And that was completely fine with me!</span></p><p><span>So, I just looked at what we invoiced and I looked at my GCP bill. And I was making this equation that:<br><br>Customer </span><em><span>Invoices &gt;= GCP bill [the turbopuffer costs]</span></em><span><br><br>Justine and I were going to optimize the system until these numbers were roughly equal. And if we could get some other workloads over to turbopuffer, we could then start paying ourselves.</span></p><p><span>But either way, I didn&#8217;t know if I could even go and raise a bunch of money. I didn&#8217;t have any relationships. I was an outsider who grew up in Aarhus, Denmark, and moved to Canada.&#8221;</span></p></blockquote><p><span>A few months later, turbopuffer ended up raising a total of $700K, just to be able to hire two engineers until the end of the year on </span><em><span>real</span></em><span> salaries. Simon found that most VCs did not take them seriously for wanting to raise </span><em><span>too little money, </span></em><span>and assumed this signified a lack of ambition! Two years later, with less than $1M in initial funding raised, turbopuffer crossed $100M in annual run rate. So, there evidently was ambition!</span></p><p><span>Since our conversation, Simon has reflected on the topic of VC capital and built a mental model of six reasons that justify raising external funding:</span></p><p><strong><span>Reason #1: Research and development. </span></strong><span>This is what turbopuffer raised for: they needed the money to hire two more engineers until the end of the year, in order to build out more of the platform. Then, they would either get more customers and generate enough revenue to not need funding, or shut down the project if it failed to gain traction.</span></p><p><strong><span>Reason #2: Growth. </span></strong><span>When you&#8217;ve built something and want to tell the world about it, often, you have to spend money on doing that.</span></p><p><strong><span>Reason #3: Massaging founders&#8217; egos. </span></strong><span>Simon:</span></p><blockquote><p><span>&#8220;This is a very, very popular reason! You see big numbers, you get lots of press. But I think it&#8217;s a really dangerous reason to raise money.</span></p><p><span>I wish this reason was talked about more, because you are diluting all of your employees when you do it. And for some people, it can become a status game. It&#8217;s not what we are about: we&#8217;re here to build a big business together.&#8221;</span></p></blockquote><p><strong><span>Reason #4: Employee rewards. </span></strong><span>A startup is a long journey, and everyone wants to work with the best people. But there are necessarily few of these folks, so you want to reward the standout ones by raising money so that employees can sell their shares. This was why, in December 2025, turbopuffer raised a round where they let employees sell some of their equity: it meant they would not have to wait for a future financial event like an IPO.</span></p><p><strong><span>Reason #5: Strategic partnerships. </span></strong><span>It might be the case that raising from a VC whose network of connections is key to your business succeeding, or that taking funding from a strategic investor gives you access to their platform or services.</span></p><p><strong><span>Reason #6: Mergers &amp; acquisitions (M&amp;A).</span></strong><span> Purchase another company with the funding in order to expand the business.</span></p><p><span>Simon encourages founders to be honest about why they raise capital funding &#8211; and to watch out if the reason is egocentric!</span></p><h2><span>Takeaways</span></h2><p><span>Watch </span><a href="https://www.youtube.com/watch?v=h8TBLKyo7Rs"><span>the full interview here</span></a><span>.</span></p><p><strong><span>It&#8217;s inspiring to see how far it&#8217;s possible to get with &#8220;napkin math&#8221; and by understanding the bottom layers. </span></strong><span>It didn&#8217;t sit right with Simon to make decisions about vendors based on hastily written benchmarks that might measure the wrong thing. By understanding the constraints of data transfer latency and storage cost, he found a way to estimate the theoretical lower bounds of the system.</span></p><p><span>This helped lead to more informed design decisions at Shopify, and showed him there was an opportunity to build a faster, cheaper search product than the status quo.</span></p><p><strong><span>Getting &#8220;lucky&#8221; in business requires a lot of skill, and in-person greatly helps with first impressions. </span></strong><span>Turbopuffer&#8217;s first customer being Cursor sounds almost too good to be true. But the account from </span><a href="https://newsletter.pragmaticengineer.com/i/165641889/sharding-headaches"><span>Cursor cofounder Sualeh Asif</span></a><span> &#8211; and now from Simon &#8211; reveals the ingredients in more detail:</span></p><ul><li><p><span>Spotting a new business need: AI-native startups like Cursor saw their search bills explode, but needed search functionality to offer usable AI products</span></p></li><li><p><span>Offering a product with a magnitude of lower pricing: what people made suddenly pay attention to turbopuffer was the promise of not &#8220;just 20-50%&#8221; cost savings, but a seemingly radical, 90%+ reduction in costs. When you&#8217;re late to enter a market (like search), you need major differentiation, then deliver on it! This is also what Cursor&#8217;s attention.</span></p></li><li><p><span>Building trust before a sale: Simon helped the Cursor team fix their existing database before discussing using his product</span></p></li><li><p><span>In-person impressions: if Simon had not flown to San Francisco to meet the Cursor team in person, would they have taken a bet on turbopuffer?</span></p></li><li><p><span>Launching at the earliest opportunity: none of this would have happened if Simon did not announce the first version of the product when he knew it could work, but was still in a pretty unpolished state!</span></p></li></ul><p><strong><span>It&#8217;s always helpful to be aware of the dynamic of venture funding &#8211; some of which are rarely mentioned. </span></strong><span>Simon knew investors expect returns and growth on timelines which they set. Raising money is helpful in many situations, but problems arise from egotistical reasoning, and Simon believes too many founders prioritize them &#8211; knowingly or not.</span></p>]]></content:encoded></item><item><title><![CDATA[What is “loop engineering?”]]></title><description><![CDATA[There&#8217;s talk about loop engineering, but what is it exactly? I looked into it, and found triggers, cron jobs, AI slop & more. Is it a &#8220;here today, gone tomorrow&#8221; trend?]]></description><link>https://newsletter.pragmaticengineer.com/p/what-is-loop-engineering</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/what-is-loop-engineering</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 14 Jul 2026 17:01:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CaGY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d4f687c-ee1a-4bb9-89fe-148a7f8d07ca_2048x984.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>&#8220;Loop engineering&#8221; has become a trending topic in the past month, after some high-profile folks at Anthropic and OpenAI revealed that they have stopped writing prompts, and started designing loops. At Anthropic&#8217;s developer conference, Boris Cherny, creator of Claude Code, </span><a href="https://www.youtube.com/watch?v=kRgdkOw82F0"><span>said</span></a><span> (emphasis mine):</span></p><blockquote><p><span>&#8220;I don&#8217;t prompt Claude anymore. I have loops running that prompt Claude and figuring out what to do. </span><strong><span>My job is to write loops.</span></strong><span>&#8221;</span></p></blockquote><p><span>Soon after, Peter Steinberger, creator of OpenClaw, preached loop design in a post:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8Vtc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Vtc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 424w, https://substackcdn.com/image/fetch/$s_!8Vtc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 848w, https://substackcdn.com/image/fetch/$s_!8Vtc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 1272w, https://substackcdn.com/image/fetch/$s_!8Vtc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Vtc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png" width="1184" height="446" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:446,&quot;width&quot;:1184,&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_!8Vtc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 424w, https://substackcdn.com/image/fetch/$s_!8Vtc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 848w, https://substackcdn.com/image/fetch/$s_!8Vtc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 1272w, https://substackcdn.com/image/fetch/$s_!8Vtc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21939678-7d20-40e5-8b4f-90d61d78c111_1184x446.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Source: </span><a href="https://x.com/steipete/status/2063697162748260627?s=20"><span>Peter Steinberger</span></a></em></figcaption></figure></div><p><span>Elsewhere, Addy Osmani, formerly of Google, wrote </span><a href="https://addyosmani.com/blog/loop-engineering/"><span>an article</span></a><span>, &#8216;Loop Engineering&#8217;:</span></p><blockquote><p><span>&#8220;Loop engineering is replacing yourself as the person who prompts the agent. You design the system that does it instead.&#8221;</span></p></blockquote><p><span>That&#8217;s three mentions in quick succession of this new approach, which is a novel one and therefore pretty abstract to me. To find out more, I turned online to some of the folks who read these articles. In replies, you told me what &#8220;loop engineering&#8221; means to you and gave some examples of loops in your work.</span></p><p><span>Today, we cover:</span></p><ol><li><p><strong><span>Where it began: &#8220;Ralph Wiggum&#8221; loop.</span></strong><span> A year ago, software engineer Geoffrey Huntley shared how he builds &#8220;loops.&#8221; In December, the approach went viral and &#8220;Ralph loops&#8221; were born.</span></p></li><li><p><strong><span>The /goal command ships in all major harnesses.</span></strong><span> By May this year, the major AI coding harnesses added support to run a loop from a single prompt, using the /goal command.</span></p></li><li><p><strong><span>Loops which devs use: triggers and cron jobs.</span></strong><span> I asked devs how they use loops. Most use cases involve responding to events or running scheduled jobs. They are useful, but don&#8217;t feel like brand new workflows.</span></p></li><li><p><strong><span>Helpful loops for devs. </span></strong><span>Open PRs for newly-recorded app issues, have notes ready when an oncall joins an outage Slack channel, &#8220;babysitting&#8221; and fixing nightly end-to-end tests, and more.</span></p></li><li><p><strong><span>Disappointment and &#8220;tokenmaxxing&#8221;</span></strong><span>. Several devs reject looping after trying it. Agents drifting, and the &#8220;human in the loop&#8221; having better results are some reasons. Also, at companies that pay API prices for tokens, loop engineering gets expensive fast.</span></p></li><li><p><strong><span>Was looping a hack while tooling caught up?</span></strong><span> Distinguished engineer Max Kanat-Alexander believes the &#8220;loop&#8221; might have just been a temporary hack while the harnesses added the ability to do the same from a single prompt.</span></p></li><li><p><strong><span>Does &#8220;context engineering&#8221; matter more for devs? </span></strong><span>Except for engineers building AI infra, there seems little benefit in going deep into loop engineering. Instead, becoming familiar with AI context windows &#8211; also part of building loops &#8211; could be more useful.</span></p></li></ol><h2><span>1. Where it began: &#8220;Ralph Wiggum&#8221; loop</span></h2><p><span>Exactly a year ago, software engineer Geoffrey Huntley published the article &#8216;</span><a href="https://ghuntley.com/ralph/"><span>Ralph Wiggum as a software engineer</span></a><span>&#8217;. The name references the naive son of the local police chief in The Simpsons, who is extremely eager to always be helpful. In engineering, &#8220;Ralph&#8221; is intended to continuously nudge the agent in the right direction. Geoff described it:</span></p><blockquote><p><span>&#8220;Ralph is a technique. In its purest form, Ralph is a Bash loop:</span></p><p><span>while :; do cat PROMPT.md | claude-code ; done</span></p><p><span>Ralph can replace the majority of outsourcing at most companies for greenfield projects. It has defects, but these are identifiable and resolvable through various styles of prompts.</span></p><p><span>That&#8217;s the beauty of Ralph - the technique is deterministically bad in a nondeterministic world.&#8221;</span></p></blockquote><p><span>The article expands on the idea of the Ralph loop:</span></p><ul><li><p><span>Start the agent with a prompt that captures the task and defines a goal</span></p></li><li><p><span>Create a plan of work, each item with a success criteria</span></p></li><li><p><span>Start the loop:</span></p><ul><li><p><span>Take one item per loop</span></p></li><li><p><span>When the agent is done, check if the goal is achieved</span></p></li><li><p><span>If not: start the agent again, with a clear context window</span></p><ul><li><p><span>Start loops if needed: spawn subagents as and when necessary</span></p></li></ul></li></ul></li></ul><p><span>Geoff published the experiments he did with this approach, such as building a new programming language last summer, and </span><a href="https://ghuntley.com/ralph/"><span>said</span></a><span> it requires skill:</span></p><blockquote><p><span>&#8220;Engineers are still needed. There is no way this is possible without senior expertise guiding Ralph. Anyone claiming that engineers are no longer required and a tool can do 100% of the work without an engineer is peddling horses***.&#8221;</span></p></blockquote><p><strong><span>The &#8220;Ralph method&#8221; blew up late last year with the arrival of better models</span></strong><span> which were surprisingly capable of building ambitious projects. Software engineer Matt Pocock created a tutorial, &#8216;</span><a href="https://www.youtube.com/watch?v=_IK18goX4X8"><span>Ship working code while you sleep</span></a><span>&#8217; with the Ralph Wiggum technique. He said:</span></p><blockquote><p><span>&#8220;One of the dreams of coding agents is that you can wake up in the morning to working code, where your coding agent has worked through your backlog. It has spit out a whole bunch of code for you to review, and it works.&#8221;</span></p></blockquote><p><span>Before the Ralph loop, Matt did this in two steps:</span></p><ol><li><p><span>Ask the agent to create a detailed plan for the work, with tasks broken out</span></p></li><li><p><span>Then, in a sequential order, have the agent complete each subtask in a separate run</span></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lxQ_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lxQ_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 424w, https://substackcdn.com/image/fetch/$s_!lxQ_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 848w, https://substackcdn.com/image/fetch/$s_!lxQ_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 1272w, https://substackcdn.com/image/fetch/$s_!lxQ_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lxQ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png" width="1456" height="917" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:917,&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_!lxQ_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 424w, https://substackcdn.com/image/fetch/$s_!lxQ_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 848w, https://substackcdn.com/image/fetch/$s_!lxQ_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 1272w, https://substackcdn.com/image/fetch/$s_!lxQ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16676ff4-459f-4f02-888a-20e305cd3f28_1746x1100.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Pre-Ralph: The agent completes one step at a time in a single context window. Source: </span><a href="https://www.youtube.com/watch?v=_IK18goX4X8"><span>Matt Pocock</span></a></em></figcaption></figure></div><p><span>A problem with this approach is there&#8217;s no easy way to add new tasks to the &#8220;masterplan&#8221;. Software engineers know that most plans do need to be modified, often while the work is ongoing. In contrast, with Matt&#8217;s take on the Ralph method, the &#8220;masterplan&#8221; is continuously updated in a &#8220;master PRD&#8221;. Here&#8217;s the prompt he gives the agent:</span></p><ol><li><p><strong><span>Choose the next feature: </span></strong><span>Find the highest-priority feature to work on and work only on that feature</span></p></li><li><p><strong><span>Have tests pass</span></strong><span>: check that the tests pass (via pnpm test)</span></p></li><li><p><strong><span>Update the master tracker</span></strong><span>: update the PRD with the work done</span></p></li><li><p><strong><span>Log work:</span></strong><span> append your progress to the progress.txt file</span></p></li><li><p><strong><span>Commit</span></strong><span>: make a git commit of the feature</span></p></li></ol><p><span>This style of working is more of a &#8220;dynamic Kanban&#8221;:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mNUz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mNUz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 424w, https://substackcdn.com/image/fetch/$s_!mNUz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 848w, https://substackcdn.com/image/fetch/$s_!mNUz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!mNUz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mNUz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png" width="1456" height="803" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&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_!mNUz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 424w, https://substackcdn.com/image/fetch/$s_!mNUz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 848w, https://substackcdn.com/image/fetch/$s_!mNUz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!mNUz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6b5a98-88ca-46f6-935a-dae75b12bb29_1966x1084.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>&#8220;dynamic Kanban&#8221; style of working. Source: </span><a href="https://www.youtube.com/watch?v=_IK18goX4X8"><span>Matt Pocock</span></a></em></figcaption></figure></div><p><strong><span>The &#8220;Ralph method&#8221; is all about working around context window limitations. </span></strong><span>Back in mid-2025, the maximum size of a context window was around 200,000 tokens. That&#8217;s not enough for more ambitious tasks, so it&#8217;s necessary to break up agent runs into smaller ones and run them, one by one. In this context, here&#8217;s where the Ralph method works:</span></p><ul><li><p><span>Have a goal for a project, and keep running (or re-running) agents until this goal is reached</span></p></li><li><p><span>Persist work done in a &#8220;compressed&#8221; manner on the filesystem (as logs or an updated plan)</span></p></li><li><p><span>Start agents with fresh context to minimize &#8220;context rot&#8221;</span></p></li><li><p><span>Allow each agent to add or modify the &#8220;masterplan&#8221; if needed</span></p></li></ul><h2><span>2. The /goal command ships in all major harnesses</span></h2><p><span>For a few months, building a Ralph loop meant doing it yourself: setting up the loop, state tracking, deciding how the agent can add tasks and when to stop. But things changed once coding harnesses made it easy to run these loops.</span></p><h3><span>April: Codex ships /Goals</span></h3><p><span>About six months after the &#8220;Ralph technique&#8221; started gaining wider traction, Codex shipped the &#8220;Goals&#8221; feature in Codex. From </span><a href="https://developers.openai.com/cookbook/examples/codex/using_goals_in_codex"><span>the documentation</span></a><span>:</span></p><blockquote><p><span>&#8220;Goals are persistent objectives in Codex that keep a thread working toward a defined outcome across turns. A Goal gives Codex a completion condition: what should be true, how success should be checked, and what constraints must stay intact.&#8221;</span></p></blockquote><p><span>Also from the docs (emphasis mine):</span></p><blockquote><p><strong><span>&#8220;A normal prompt says: do this next thing.</span></strong></p><p><strong><span>A Goal says: keep working until this outcome is true.</span></strong><span> In a normal request, Codex works through the immediate instruction, reports a result, and waits. With a Goal, Codex has a durable target attached to the thread. After a turn finishes, it can inspect the current evidence and decide whether the objective is satisfied. If the answer is no, and the Goal remains active and within budget, Codex can continue from the latest state.&#8221;</span></p></blockquote><p><span>A visual representation:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3NfP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3NfP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 424w, https://substackcdn.com/image/fetch/$s_!3NfP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 848w, https://substackcdn.com/image/fetch/$s_!3NfP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 1272w, https://substackcdn.com/image/fetch/$s_!3NfP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3NfP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png" width="1456" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&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_!3NfP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 424w, https://substackcdn.com/image/fetch/$s_!3NfP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 848w, https://substackcdn.com/image/fetch/$s_!3NfP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 1272w, https://substackcdn.com/image/fetch/$s_!3NfP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c2e319-99df-4ac3-9ab7-130d1cc88014_1502x834.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Goals vs prompts. Source: </span><a href="https://developers.openai.com/cookbook/examples/codex/using_goals_in_codex"><span>OpenAI</span></a></em></figcaption></figure></div><p><span>Here&#8217;s an example of using a goal in Codex:</span></p><blockquote><p><span>/goal Reduce p95 checkout latency below 120 ms on the checkout benchmark while keeping the correctness suite green</span></p></blockquote><p><span>That&#8217;s a clear enough &#8220;end criteria&#8221; to just hand off to the agent, which then breaks up the task, spawns subagents, and runs until complete. So, how did OpenAI build Goals? They used files, logs, running tests, and lifecycle controls:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4E67!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4E67!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 424w, https://substackcdn.com/image/fetch/$s_!4E67!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 848w, https://substackcdn.com/image/fetch/$s_!4E67!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 1272w, https://substackcdn.com/image/fetch/$s_!4E67!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4E67!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png" width="1456" height="781" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:781,&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_!4E67!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 424w, https://substackcdn.com/image/fetch/$s_!4E67!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 848w, https://substackcdn.com/image/fetch/$s_!4E67!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 1272w, https://substackcdn.com/image/fetch/$s_!4E67!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecf81e8-9f56-45e4-9aed-a5ecd46ccfbe_1828x980.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>The architecture of the Goals feature. Source: </span><a href="https://developers.openai.com/cookbook/examples/codex/using_goals_in_codex"><span>OpenAI</span></a></em></figcaption></figure></div><p><strong><span>In this way, &#8220;Goals&#8221; feels awfully similar to a Ralph loop, except compressed into a single command! </span></strong><span>It feels like the Codex team took the idea of the Ralph loop, built infrastructure around it, took care of coordinating agents by not having them step on one another, dealt with state, running of tests, starting and stopping agents, and then added functionality such as being able to set a budget.</span></p><h3><span>May: Hermes and Claude Code follow with /goal</span></h3><p><span>Three days later (May 2), Hermes agent, a popular AI agent framework and OpenClaw rival, </span><a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/goals"><span>shipped</span></a><span> their implementation of /goal. From the docs:</span></p><blockquote><p><span>&#8220;[/goal] It&#8217;s our take on the Ralph loop, directly inspired by Codex CLI 0.128.0&#8217;s /goal by Eric Traut (OpenAI). The core idea &#8212; keep a goal alive across turns and don&#8217;t stop until it&#8217;s achieved &#8212; is theirs. The implementation here is independent and adapted to Hermes&#8217; architecture.&#8221;</span></p></blockquote><p><span>Less than two weeks later &#8211; on 12 May &#8211; Claude Code also </span><a href="https://code.claude.com/docs/en/goal"><span>shipped</span></a><span> their /goal command. It&#8217;s identical in what it does to Codex. From Claude Code:</span></p><blockquote><p><span>&#8220;The /goal command sets a completion condition and Claude keeps working toward it without you prompting each step. After each turn, a small fast model checks whether the condition holds. If not, Claude starts another turn instead of returning control to you. The goal clears automatically once the condition is met.&#8221;</span></p></blockquote><p><span>A few months before, in March, Claude Code shipped the concept of scheduling an agent with the </span><a href="https://code.claude.com/docs/en/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop"><span>/loop command</span></a><span>. It is basically what JavaScript&#8217;s setTimeout() function would be equivalent to: repeat a task after a given interval until the work is done.</span></p><p><strong><span>By May, running a Ralph loop had become as simple as giving a single command in one of the major agent harnesses. </span></strong><span>It&#8217;s as if AI labs noticed user demand to do more with agentic loops which were hard to set up, and built ways to make it simpler. For instance, in open source agent harnesses like OpenCode, there are plugins like the </span><a href="https://github.com/willytop8/OpenCode-goal-plugin"><span>/goal plugin</span></a><span>. For the minimalist coding agent, Pi, the /goal command can be added </span><a href="https://github.com/Michaelliv/pi-goal"><span>as a package.</span></a></p><h2><span>3. Loops which devs use: triggers and cron jobs</span></h2><p><span>By May, we had access to the /goal primitive. So, what use cases were Boris Cherny and Peter Steinberger referring to in terms of spending most of their time on designing loops, instead of writing prompts? I asked around for examples of &#8220;loop engineering&#8221; from fellow devs. Based on ~210 replies, mostly from X and LinkedIn, it seems that triggers and cron jobs are two very common use cases for loop engineering:</span></p><p><strong><span>Triggers / automations</span></strong><span>: an agent kicks off when an event happens. The event could be an error being logged, a new ticket created, customer support feedback received, etc.</span></p><p><span>Pre-AI, these events were typically triggered by a webhook, and kicked off things like a Slack bot posting in a channel, triggering a system, or being the starting point of a Zapier or an </span><a href="https://n8n.io/"><span>n8n</span></a><span> integration.</span></p><p><strong><span>Cron jobs: </span></strong><span>many devs see &#8220;loop engineering&#8221; as kicking off jobs that involve agents on a cadence. This is fundamentally the same as scheduled </span><a href="https://en.wikipedia.org/wiki/Cron"><span>cron jobs</span></a><span>. From director of engineering, </span><a href="https://www.linkedin.com/in/odedmesser?skipRedirect=true"><span>Oded Messer</span></a><span>:</span></p><blockquote><p><span>&#8220;The idea is that strategic workflows that are repeatable and automatable can be done so with an agent. OK. But if my strategic workflow is automatable then it either becomes tactical if the AI is capable enough or it&#8217;s just a high level old-school-automation I can set up like a cron or a trigger.</span></p><p><span>The name suggests simplicity and repetition. Sometimes it feels like AI enthusiasts forgot automation was a thing before LLMs.&#8221;</span></p></blockquote><h2><span>4. Helpful loops for devs</span></h2><p><span>Below are some workflows with AI agents that run on a regular basis as a /loop command, or when triggered:</span></p><h3><span>Development-related work</span></h3><p><strong><span>Open PRs for newly recorded app issues. </span></strong><span>Software engineer </span><a href="https://x.com/thepanta82/status/2076616844761333792?s=20"><span>Ivan Panti&#263;</span></a><span>:</span></p><blockquote><p><span>&#8220;App encounters a problem and creates a sentry issue. Then:<br>&#8594; Cron tells agent to check sentry and open PRs.<br>&#8594;If there&#8217;s no active PR, agent tackles the issue and creates one<br>&#8594; If PRs aren&#8217;t reviewed, agent pings the devs via slack</span></p><p><span>In this flow, there is only one PR open at a time.&#8221;</span></p></blockquote><p><strong><span>Fix flakey tests. </span></strong><a href="https://www.linkedin.com/in/paul-d-ambra"><span>Paul D&#8217;Ambra</span></a><span>, software engineer at PostHog:</span></p><blockquote><p><span>&#8220;/loop pull the next flakey test from the trunk API. run it to check if it flakes locally, if it does open a PR with the fix... which netted me 13 PRs to stabilise some of our tests.&#8221;</span></p></blockquote><p><strong><span>Triaging issues and outages. </span></strong><span>Software engineer </span><a href="https://x.com/NetMentorTW/status/2076594605659762887?s=20"><span>Ivan Abad:</span></a></p><blockquote><p><span>&#8220;A new alert/exception pops up in a channel. <br>&#8594; The agent investigates the issue<br>&#8594; if it is a code change, implements the change<br>&#8594; creates the PR <br>&#8594; pings the human for review. <br><br>Same applies for customer tickets or incidents. By the time you get paged and connect to the incident the agent already triaged everything and often located the root cause.&#8221;</span></p></blockquote><p><strong><span>Review design plans. </span></strong><a href="https://x.com/artemnikitin/status/2076671832158011422?s=20"><span>Artem Nikitin</span></a><span>, software engineer at Elastic:</span></p><blockquote><p><span>&#8220;What I&#8217;m finding myself doing often recently is to review design/implementation plans in a loop.</span></p><p><span>Usually, agents only find a few issues during a normal run and then find more on subsequent runs.</span></p><p><span>So I&#8217;m now asking them to run in a loop until they find 0 new major issues.&#8221;</span></p></blockquote><h3><span>Daily/nightly work</span></h3><p><strong><span>Daily product improvements. </span></strong><a href="https://x.com/itsjack/status/2076601937038922085?s=20"><span>Jack D,</span></a><span> founding engineer at Schematic:</span></p><blockquote><p><span>&#8220;We have a loop which reads the logs for the last 24 hours, user feedback and makes PR with fixes - we still review the PRs it makes though!&#8221;</span></p></blockquote><p><strong><span>Nightly end-to-end test run babysitted by an agent. </span></strong><span>Utku K, engineering manager:</span></p><blockquote><p><span>&#8220;nightly e2e runs on the frontend app. When a test fails, an agent investigates first to work out whether it&#8217;s a real regression or a false negative. If it&#8217;s a real bug, the agent attempts a fix, reruns the test, and keeps iterating until it passes or hits a retry cap and escalates... Either way it lands as a PR ready for review by morning.&#8221;</span></p></blockquote><h3><span>More complex development work</span></h3><p><strong><span>Build new telemetry integrations and verify they work</span></strong><span>. </span><a href="https://www.linkedin.com/in/lawrence2jones"><span>Lawrence Jones</span></a><span>, software engineer at Incident.io:</span></p><blockquote><p><span>&#8220;A lot of the AI runbook that we use to build new telemetry integrations uses loops such as executing the query, verifying that it executed correctly and iterating on the query plan/output format/whatever until it is happy with the outcome.&#8221;</span></p></blockquote><p><strong><span>Do a long-running migration, mostly autonomously</span></strong><span>. Startup founder </span><a href="https://x.com/GroundControl/status/2076644702112117067?s=20"><span>Rafel Mendiola</span></a><span>:</span></p><blockquote><p><span>&#8220;Recently, I converted my startup&#8217;s codebase from a regular React app to a React Native app using Expo.</span></p><p><span>There are two ways I could have done it:</span></p></blockquote><ul><li><p><span>In the traditional software engineering style, I could have created a large epic with 50-100 different tickets. I started building myself the infrastructure for that, it felt like it was way too much work.</span></p></li><li><p><span>What I did instead was create a skill that would let an agent figure out a small to medium-sized piece of work or piece of code to convert, given certain detection mechanisms and guidelines, and then do that conversion and keep track of the migration progress. Then I put that skill on a cron job. This was a lot easier to handle cognitively than managing a large migration plan. It also ran every 30 minutes, not nightly or weekly.&#8221;</span></p></li></ul><h3><span>Productivity-related workflows</span></h3><p><strong><span>Daily tasks executed. </span></strong><a href="https://x.com/Aaronontheweb/status/2076685126193271046"><span>Aaron Stannard</span></a><span>, creator of </span><a href="http://akka.net"><span>Akka.NET</span></a><span>:</span></p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/what-is-loop-engineering">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Tech jobs market in 2026, part 3: hiring managers & job seekers]]></title><description><![CDATA[The market where nobody finds each other, the hottest market for AI-related positions, tough for engineering leaders, and more. Based on details from 50+ hiring managers & job seekers]]></description><link>https://newsletter.pragmaticengineer.com/p/tech-jobs-market-in-2026-part-3-hiring</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/tech-jobs-market-in-2026-part-3-hiring</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 07 Jul 2026 17:25:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jug7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>What is the tech jobs market like for job seekers and hiring managers today? It&#8217;s a broad question for which one answer is that it&#8217;s a land of contrasts and confusion, and also some crossed wires. Experienced engineers and managers feel ghosted by employers and recruiters, who in turn have given up on inbound applications because their inboxes are full of AI slop, sometimes from bogus candidates. It&#8217;s rosier for those with </span><em><span>specific</span></em><span> skillsets, who are in strong demand &#8211; and personal networks help more than ever to land the right job.</span></p><p><span>For this final part of our series on the tech hiring market during the first half of 2026, I spoke with more than 50 hiring managers, software engineers, and engineering leaders. </span><em><span>Thank you to everyone who contributed!</span></em></p><p><span>For more on this topic, check out our analysis of what the data says about the market in </span><strong><a href="https://newsletter.pragmaticengineer.com/p/state-of-the-job-market-2026"><span>Part 1</span></a></strong><span> and </span><strong><a href="https://newsletter.pragmaticengineer.com/p/the-job-market-in-2026-part-2"><span>Part 2</span></a></strong><span> of this mini-series.</span></p><p><span>Overall, an appropriate description of the employment market as many folks experience it right now would be &#8220;weird&#8221;. This is a characteristic that&#8217;s not easy to see in the data, but is clear from talking to people and hearing their anecdotal, personal accounts of job hunting this year. I think the data in the first two articles of this series failed to capture just how unusual things are.</span><strong><span> </span></strong><span>So, in today&#8217;s issue, we attempt to shed some light on the weirdness, covering:</span></p><ol><li><p><strong><span>&#8220;Catch-22:&#8221; nobody finds each other. </span></strong><span>Hiring managers struggle to find experienced folks, who barely get any replies when applying for jobs. How&#8217;s that work?</span></p></li><li><p><strong><span>No trust. Is AI to blame? </span></strong><span>AI-enhanced resumes read as incredible, but hiring managers often face disappointment. Some places don&#8217;t bother reading inbound applications as a result.</span></p></li><li><p><strong><span>Hot market for some, but tough for most</span></strong><span>. For those in AI Engineering, ML, or </span><a href="https://newsletter.pragmaticengineer.com/p/forward-deployed-engineers"><span>FDE</span></a><span>, the market is incredible. For everyone else, it&#8217;s much less great.</span></p></li><li><p><strong><span>Higher hiring bar &amp; lower compensation &#8211; but not for everyone. </span></strong><span>Many candidates are unhappy with offers that are the lowest in years. This doesn&#8217;t apply to AI Engineering positions or at AI businesses, however.</span></p></li><li><p><strong><span>Engineering leader recruitment: also weird for senior ICs.</span></strong><span> Senior engineering leaders are struggling to find opportunities, or may turn them down in favor of fractional roles or to work on their own startup.</span></p></li><li><p><strong><span>US market trends. </span></strong><span>Folks experiencing the &#8220;best market ever&#8221; are likely in the US, where a talent shortage is a bigger complaint than it is elsewhere.</span></p></li><li><p><strong><span>Trends in the UK, EU, and rest of the world. </span></strong><span>&#8220;Ghosting&#8221; is more commonplace than in the US, &#8220;fake applicants&#8221; a bigger issue, remote roles are going extinct, and more.</span></p></li></ol><p>For more details on the hiring market, see also:</p><p><strong><a href="https://newsletter.pragmaticengineer.com/p/state-of-the-job-market-2026">Part 1: what the data says</a>:</strong></p><ul><li><p>Software engineering recruitment: trending up, mostly</p></li><li><p>Big Tech and publicly-traded companies</p></li><li><p>Who&#8217;s hiring the most software engineers?</p></li><li><p>AI engineering: explosive demand</p></li><li><p>Who&#8217;s hiring the most AI engineers?</p></li><li><p>Is AI engineering replacing software engineering hiring?</p></li></ul><p><strong><a href="https://newsletter.pragmaticengineer.com/p/the-job-market-in-2026-part-2">Part 2, what the data says, continuied:</a></strong></p><ul><li><p>Top AI labs are now more attractive than Big Tech</p></li><li><p>Harder for new grads &amp; interns to get hired</p></li><li><p>Mobile and frontend demand drops, AI &amp; FDE surges</p></li><li><p>AI engineering comp &gt; software engineering comp</p></li><li><p>Management&#8217;s &#8220;great flattening&#8221; continues</p></li><li><p>Big Tech seniority &amp; tenure keep rising</p></li><li><p>Interview preparation signups: what do they indicate?</p></li><li><p>Where engineers go after Big Tech</p></li></ul><h2><span>1. &#8220;Catch-22:&#8221; nobody finds each other</span></h2><p><span>The phrase &#8220;Catch 22&#8221; refers to a paradoxical problem, whose solution is blocked by the problem itself. The term originated in a famous World War II novel of the same name, and it also describes pretty accurately what I see in today&#8217;s tech job market. Hiring managers are saying that highly-skilled talent (typically senior+ engineers) is not available to be recruited, at the same time as experienced, proven professionals find their applications ignored by employers.</span></p><p><span>What seems paradoxical here is how both can be true. It&#8217;s as if recruiters and potential candidates aren&#8217;t hearing each other. Of course, there&#8217;s some nuance:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jug7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jug7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 424w, https://substackcdn.com/image/fetch/$s_!jug7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 848w, https://substackcdn.com/image/fetch/$s_!jug7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 1272w, https://substackcdn.com/image/fetch/$s_!jug7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jug7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png" width="1182" height="704" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:704,&quot;width&quot;:1182,&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_!jug7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 424w, https://substackcdn.com/image/fetch/$s_!jug7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 848w, https://substackcdn.com/image/fetch/$s_!jug7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 1272w, https://substackcdn.com/image/fetch/$s_!jug7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd16fca2a-ad43-4f69-9a9d-8dd72f2edda3_1182x704.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><a href="https://x.com/GergelyOrosz/status/2071105819089973716"><span>My take</span></a><span> on the hiring market</span></em></figcaption></figure></div><p><span>Mike Julian, CEO of DuckBill Group, which is </span><a href="https://www.duckbillhq.com/careers/?ashby_jid=1e7683e5-6c00-4525-8687-a056d57c3d45"><span>hiring software engineers</span></a><span>, replied to my post with this </span><a href="https://x.com/mikejulian/status/2071264541569388881?s=20"><span>observation</span></a><span>:</span></p><blockquote><p><span>&#8220;We get about 1,000 applications a day on inbound and maybe two of them are even relevant to the posting.<br><br>I mostly no longer look at inbound seriously because it&#8217;s so c***. I&#8217;d almost certainly miss a great inbound submission if it came in.</span></p><p><span>All of our recent hires have been via network and us reaching out to folk on LinkedIn. Biggest hurdle we have to outreach is thin LinkedIn profiles and little other online presence.&#8221;</span></p></blockquote><p>From the other hiring managers we talked with, more themes emerged:</p><h3><span>More inbounds than ever &amp; also more noise</span></h3><blockquote><p><span>&#8220;</span><strong><span>I&#8217;ve never seen so many inbounds and strong resumes.</span></strong><span> I&#8217;m hiring for lots of roles; for one software engineering position in Seattle, we have had 800 resumes inbound over a three-month period. I&#8217;ve never seen anything like this! These resumes are not low-quality either: they are people who have worked at MSFT, AWS, other large tech companies, and have solid skills.&#8221;</span><em><span> &#8211; Head of Engineering, Series B startup, Seattle, US</span></em></p><p><span>&#8220;It&#8217;s difficult to find good candidates among all the noise. Have had two open senior engineer positions for months, and the only good interviews or offers we&#8217;ve extended were in network.&#8221; </span><em><span>&#8211; Engineering Manager, late-stage startup, US</span></em></p><p><span>&#8220;</span><strong><span>A glut of vastly underqualified people completely drowning your hiring pipeline. </span></strong><span>This is what I&#8217;m seeing, and it&#8217;s making inbound a useless channel.&#8221;</span><em><span> &#8211; Engineering Director, Big Tech, US</span></em></p><p><span>&#8220;From what I hear from recruiters, every job posted has 1,000+ applicants, and 98% of them are considered unqualified.&#8221;</span><em><span> &#8211; fullstack engineer, Middle East</span></em></p><p><strong><span>&#8220;We are a small company and gave up on inbound hiring. </span></strong><span>We got too many AI applications. Much lower signal-to-noise compared to past experience.&#8221;</span><em><span> &#8211; Director of Engineering, Canada</span></em></p></blockquote><h3><span>Experienced engineers struggle to get interviews</span></h3><blockquote><p><strong><span>&#8220;Even when you&#8217;re good, it feels like there&#8217;s a LOT of noise to cut through to get noticed.</span></strong><span> I&#8217;m quietly looking for a new role in devtools, and fit that &#8216;product engineer&#8217; profile perfectly. I feel like the demand for great people is higher than ever, but I can&#8217;t figure out where on that bar I fall.&#8221;</span><em><span> &#8211; Tech lead, seed-stage startup, US<br></span></em><span><br>&#8220;As an experienced engineer &amp; successful-ish founder I have yet to get to a phone screening in this job market. There is clearly something amiss, just a wall of noise preventing any signal from getting through.&#8221;</span><em><span> &#8211; Software engineer + founder, 8 years experience, US</span></em></p></blockquote><p><span>A staff engineer at a late-stage startup in the US summed things up:</span></p><blockquote><p><span>&#8220;It feels like everyone who has a good job is holding onto it for dear life, and THOSE are the people we want to hire.&#8221;</span></p></blockquote><h3><span>&#8220;Tale of two cities:&#8221; in demand or not</span></h3><p><span>A director of engineering at a Big Tech in the US, identifies two distinct groups in the market:</span></p><blockquote><p><span>&#8220;</span><strong><span>If you are at the top of your game, have AI experience, and are senior enough, you can write your own ticket</span></strong><span>. If not, then the job market is tough! This job market is like the tale of these two very different cities.&#8221;</span></p></blockquote><p><span>Observations from some job seekers echo this: demand feels strong for &#8220;AI-adjacent&#8221; engineers (those building AI systems), especially in the US. Standout engineers with a strong network are still in demand, and we covered the story of one such person in </span><a href="https://newsletter.pragmaticengineer.com/p/how-to-be-a-10x-engineer-interview"><span>&#8220;How to be a 10x engineer&#8221; &#8211; interview with a standout dev</span></a><span>. For everyone else, it&#8217;s a struggle to get an interview!</span></p><h3><span>Referrals: more important than ever?</span></h3><p><span>Several experienced engineers currently on the job market say they only get interviews when they personally know someone at a company:</span></p><blockquote><p><span>&#8220;Larger companies have to have some serious AI going on to sift through resumes because they are being bombarded. It really is the case that you don&#8217;t get your resume seen unless you know people who can vouch for you.&#8221;</span><em><span> &#8211; Technical Program Manager, Big Tech, US</span></em></p><p><span>&#8220;</span><strong><span>Referrals are a lifeline. </span></strong><span>It&#8217;s impossible to get interviews for Staff or Principal Eng positions by cold applying. The only interviews I am getting from a cold-apply are Senior-level roles.&#8221; </span><em><span>&#8211; Principal Engineer, 10 YOE, US</span></em></p></blockquote><p><span>From a couple of hiring managers:</span></p><blockquote><p><span>&#8220;The only interviews or offers we&#8217;ve extended were to devs already in our network.&#8221; &#8211; </span><em><span>Software architect at a mid-sized company, US</span></em></p><p><span>&#8220;I filled an engineering manager position in record time thanks to a person in my network looking for this job. If it would not have been for my network I would probably have been looking for someone for a couple of months.&#8221;</span><em><span> &#8211; VP of Engineering, private equity-funded company, Germany</span></em></p></blockquote><h2><span>2. No trust. Is AI to blame?</span></h2><p><span>Hiring managers repeatedly tell us they no longer trust what they read in resumes, and that some candidates even turn out to be fake.</span></p><h3><span>Polished CVs, weak candidates</span></h3><p><span>A common gripe among hiring managers is that resumes are highly optimized by AI, but candidates turn out not to have the experience they claim:</span></p><blockquote><p><span>&#8220;</span><strong><span>CVs are high-quality, but the people behind them are not. </span></strong><span>Almost every resume looks impressive. However, the quality of the conversations does not match it at all.</span></p><p><span>One recent example: I interviewed a senior candidate who had spent five years at a US-based cloud consulting company, most recently as an architect. I asked which architectural principles or patterns he had used in his projects. His answer was: &#8220;Daily standup, sprint planning, and retrospective.&#8221; I clarified that I meant from a tech perspective, not process perspective. He confidently replied: &#8220;Yes, daily standup, sprint planning, and retrospective.&#8221; </span><em><span>&#8211; Engineering manager, large company, Berlin, Germany</span></em></p><p><span>&#8220;Ten years ago, we would have appreciated resumes tailored to a role that was posted, now it&#8217;s just lazily thrown together with AI.&#8221;</span><em><span> &#8211; Engineering Manager, mid-sized company, Canada</span></em></p></blockquote><p><strong><span>AI-keyword stuffing is rampant</span></strong><span>, according to one head of engineering in the UK:</span></p><blockquote><p><span>&#8220;Lots of people are rebranding themselves as senior AI Engineers and demanding much higher salaries. Their resumes now have lots of AI-related keywords mentioned, like RAG, evals, inference&#8230; but when digging deeper there is little substance. Many of them are seeking a senior level salary (&#163;90k&#8211;&#163;140k) when they are barely showcasing mid-level skills.&#8221;</span></p></blockquote><p><strong><span>Cover letters are as good as dead,</span></strong><span> several hiring managers tell us. The reason is that they&#8217;re always AI-generated, boring to read, and pointless. </span><em><span>More than 18 months ago, </span><a href="https://newsletter.pragmaticengineer.com/i/152518407/weaker-resumes-and-cover-letters"><span>we reported on</span></a><span> how cover letters were being made redundant by AI in </span><a href="https://newsletter.pragmaticengineer.com/p/how-genai-changes-tech-hiring"><span>How GenAI is reshaping tech hiring.</span></a></em></p><p><span>An engineering manager at a UK e-commerce agency summarizes what&#8217;s happening:</span></p><blockquote><p><span>&#8220;&#8217;Claude; write me a CV that matches this job spec, then auto send&#8217;. This seems like the name of the game for most applicants.&#8221;</span></p></blockquote><h3><span>Fake candidates</span></h3><p><span>Does anything encapsulate the challenges of today&#8217;s job market for recruiters more succinctly than candidates who do </span><em><span>not</span></em><span> exist, even when they appear to be sitting in an interview? A year ago, we covered an </span><a href="https://newsletter.pragmaticengineer.com/p/ai-fakers"><span>&#8220;AI faker&#8221; applicant caught by a security startup</span></a><span>, who was potentially a state agent from North Korea.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VHm_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VHm_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 424w, https://substackcdn.com/image/fetch/$s_!VHm_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 848w, https://substackcdn.com/image/fetch/$s_!VHm_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 1272w, https://substackcdn.com/image/fetch/$s_!VHm_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VHm_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png" width="1456" height="682" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3f90867-6892-4edc-965d-e330905e3021_1456x682.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:682,&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_!VHm_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 424w, https://substackcdn.com/image/fetch/$s_!VHm_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 848w, https://substackcdn.com/image/fetch/$s_!VHm_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 1272w, https://substackcdn.com/image/fetch/$s_!VHm_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f90867-6892-4edc-965d-e330905e3021_1456x682.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Catching an imposter: candidate (left) refuses to place their hand in front of their face because it would blow their AI cover. (right) The interviewer illustrates the request. </span><a href="https://newsletter.pragmaticengineer.com/p/ai-fakers"><span>More in our deepdive</span></a></em></figcaption></figure></div><p><span>Such incidents are becoming more common at US, UK and EU companies which hire for remote roles:</span></p><ul><li><p><span>&#8220;There are a lot more fake candidates applying, leveraging AI for not just resumes, but also interviews. In extreme cases, the interviews are being outsourced so that a different person shows up for the interview. It feels a bit like playing captcha with them during interviews.&#8221;</span><em><span> &#8211; Senior EM, private-equity backed company, Bay Area, US</span></em></p></li><li><p><span>&#8220;The second person we interviewed was clearly a North Korean scammer, writing questions into an LLM, reading the response, easily tripped up, and other interviews were background noise in the room.&#8221;</span><em><span> &#8211; Staff Engineer, UK</span></em></p></li><li><p><span>&#8220;Many applicants that looked a good fit turned out to be someone else in the Asia Pacific region doing interviews with an AI in the background. It&#8217;s easy to spot because of the &#8216;lag&#8217; in a naturally flowing conversation.&#8221;</span><em><span> &#8211; head of engineering, mid-sized company, Germany</span></em></p></li></ul><p><span>Cheating in remote interviews by using AI is also commonplace. A software engineer based in Finland told us:</span></p><blockquote><p><span>&#8220;A couple of times we saw an applicant who was using AI to answer the questions, and this was sooo weird. I honestly didn&#8217;t know how to react, so we decided to cut the interview short. We then shared a note with the recruiters on how to spot this.&#8221;</span></p></blockquote><h2><span>3. Hot market for some, but tough for most</span></h2><p><span>The market appears sharply bifurcated: amazing for AI and a few specialist roles, and a major struggle for everyone else.</span><strong><span> </span></strong><span>Some accounts from folks benefitting in the current conditions:</span></p><blockquote><p><strong><span>&#8220;The market is really good as an (AI) engineer with the right experience. </span></strong><span>I&#8217;m not actively looking but get 2&#8211;3 messages a day. When I was hiring for AI engineers at my last AI startup, the market for these folks was terrible. It&#8217;s very hard to find good talent, and people that were great on paper did poorly in interviews.&#8221;</span><em><span> &#8211; AI Engineer, 5 YOE, New York, US</span></em></p><p><span>&#8220;It seems like demand for senior positions is still there, but only if your profile really matches what the company needs. For example, I&#8217;ve been working on different data pipelines for a while, and finding such a position is relatively simple. However, breaking into anything else is not! Every startup wants to hire only people experienced in that particular thing they need.&#8221;</span><em><span> &#8211; Software Engineer, 13 YOE, Big Tech, UK</span></em></p></blockquote><p><span>Here&#8217;s what two job seekers who are struggling at present say:</span></p><blockquote><p><strong><span>&#8220;I sent my handcrafted resume to 30&#8211;40 positions, and heard back from zero.</span></strong><span> Eventually, I got an interview after a recruiter reached out via LinkedIn; I don&#8217;t know how I would&#8217;ve found anything, if it was not for this!&#8221;</span><em><span> &#8211; Software engineer, 5 YOE, Amsterdam, Netherlands</span></em></p><p><span>&#8220;As a developer without a specific &#8220;specialization,&#8221; I&#8217;m struggling to get any interviews. I&#8217;ve spent a few years as frontend, then another few as backend, and most recently working on DevEx. In this market, I just don&#8217;t get any callbacks for interviews, not even a first round interview.&#8221;</span><em><span> &#8211; Software engineer, 6 YOE, London, UK</span></em></p></blockquote><h3><span>AI/ML/FDE market on fire</span></h3><p><span>We see in the data that </span><a href="https://newsletter.pragmaticengineer.com/i/199358573/4-ai-engineering-explosive-demand"><span>AI engineering is seeing explosive demand</span></a><span>, and that forward deployed engineers (FDEs) are also seeing </span><a href="https://newsletter.pragmaticengineer.com/i/201325168/3-mobile-and-frontend-demand-drops-ai-and-fde-surges"><span>a massive spike in demand</span></a><span>. </span><em><span>For more detail on this, check our deepdive on </span><a href="https://newsletter.pragmaticengineer.com/p/forward-deployed-engineers"><span>what FDEs are, and why they&#8217;re hot right now.</span></a></em></p><p><span>Anecdotal evidence from job seekers suggests that being in these fields means the market is as good as it gets, right now:</span></p><blockquote><p><strong><span>&#8220;It&#8217;s the greatest job market I&#8217;ve ever seen. </span></strong><span>I&#8217;m an L5 former FDE, now SWE, who has worked on LLM apps for ~2 years. The inbound top of the funnel is bonkers, and I find myself saying &#8220;no&#8221; to places that I would have once killed to work at.&#8221;</span><em><span> &#8211; AI Engineer at an AI decacorn, San Francisco, US</span></em></p><p><span>&#8220;I have seen huge interest in FDEs and AI Engineers as an engineer who&#8217;s been interviewing.&#8221;</span><em><span> &#8211; Software Engineer, 5 YOE, New York, US</span></em></p><p><span>&#8220;It&#8217;s not hard to get interviews as an ML/AI engineer. The technical bar is about the same as late 2022. If anything, onsites seem to be of fewer rounds for the same level. Companies seem to move fast to get candidates onsite.&#8221;</span><em><span> &#8211; ML engineer, ex-Meta, Bay Area, US</span></em></p></blockquote><p><span>An engineer at Apple is surprised by the demand for their skills from AI companies:</span></p><blockquote><p><span>&#8220;Got a lot of responses from cold applications for AI roles, and ended up with two offers at AI infra companies. I ended up getting a significant pay bump beyond what Apple offers for the same level!&#8221;</span></p></blockquote><p><span>A software engineer at well-known company in the Bay Area, also finds the job market is good:</span></p><blockquote><p><span>&#8220;I got offers for Senior SWE with Stripe and Rippling, was rejected from Snowflake&#8230; Anecdotally, the job market is better compared to 2025 for regular SWE positions in the Valley.&#8221;</span></p></blockquote><h3><span>EM and Staff+ profiles are near-impossible to fill</span></h3><p><span>A repeat complaint from hiring managers in the US is how challenging it is to recruit solid engineering managers and Staff+ engineers:</span></p><blockquote><p><strong><span>&#8220;It&#8217;s extremely difficult to hire EMs and Staff+ engineers.</span></strong><span> It&#8217;s much easier to hire folks with less than 10 years of experience. This is despite us offering 90th percentile comp via Pave, and having a hybrid and good culture.&#8221;</span><em><span> &#8211; Fractional VP of Engineering, Series B, New York, US</span></em></p><p><span>&#8220;My team has been looking for a new engineering manager for three months and we barely had any good applicants. It&#8217;s a super weird dynamic right now.&#8221; </span><em><span>&#8211; Senior Infrastructure Engineer, Series D Fintech, company with offices in the US and EU</span></em></p><p><strong><span>&#8220;The most desirable candidates right now are EM or staff-level folks who can keep up with uncertainty in the business.</span></strong><span> We are having trouble hiring folks who roll with the constant change that is now very typical at startups.&#8221;</span><em><span> &#8211; CTO at a San Francisco-based startup</span></em></p></blockquote><h3><span>&#8220;Specialist&#8221; profiles are hard to recruit</span></h3><p><span>A few examples:</span></p><ul><li><p><strong><span>Distributed systems engineers: &#8220;</span></strong><span>We can&#8217;t find enough qualified distributed systems engineers, cloud infra etc. I have 20 reqs [open positions] right now.&#8221;</span><em><span> &#8211; Recruiter at a hyperscaler, US</span></em></p></li><li><p><strong><span>Product engineers: </span></strong><span>&#8220;&#8216;Product engineer&#8217; has been a hard profile to find. It is also hard to find someone with a decent design eye who can also build full stack. The hardest thing to hire for has been taste + trust&#8230; I&#8217;d rather hire someone who is &#8216;behind&#8217; on AI, but has great taste/judgment than someone with complex agent setups and prompt libraries.&#8221;</span><em><span> &#8211; Tech Lead, seed-stage startup, Los Angeles, US</span></em></p></li><li><p><strong><span>Senior engineers, in general: </span></strong><span>&#8220;As a hiring manager trying to hire seniors right now, it has felt pretty difficult. Most applicants are totally unqualified, and the qualified ones do poorly in an interview.&#8221;</span><em><span> &#8211; Engineering manager, robotics company, Canada</span></em></p></li></ul><h3><span>Silence for many</span></h3><p><span>One in five respondents detail how difficult it has been to get responses from recruiters:</span></p><blockquote><p><span>&#8220;Things are looking bleak. Now, applications are going into a void. Recruiters aren&#8217;t reaching out immediately as before. Of 10 or so applications sent out, I&#8217;ve gotten one interview scheduled that was then rescinded because it looks like the team was laid off.&#8221;</span><em><span> &#8211; Frontend engineer, 10+ YOE, Southeast US</span></em></p><p><span>&#8220;The job market has been a desert. I&#8217;ve gotten back into applying, job agencies seem to have few roles they&#8217;re looking to fill. The companies I have applied to myself, never reply.&#8221;</span><em><span> &#8211; Software Engineer, 8 YOE, Southern California</span></em></p><p><span>&#8220;Recruiters are ghosting me! Every time when I respond to recruiter reachouts, they ALL ghosted me after a few messages and have similar stories from friends.&#8221;</span><em><span> &#8211; Software Engineer, 7 YOE, ex-Meta, Switzerland</span></em></p><p><span>&#8220;So far, I have a hard time even getting past the hiring manager and I&#8217;m rejected before I can do the proper technical assessment.&#8221;</span><em><span> &#8211; Software Engineer, 7 YOE, Helsinki, Finland</span></em></p></blockquote><p><span>Even folks at Big Tech face a lack of response. Here&#8217;s a Technical Program Manager currently at Meta who used to be very in-demand:</span></p><blockquote><p><span>&#8220;I put a few feelers out when Meta announced layoffs, and it&#8217;s just radio silence. I don&#8217;t want to sound cocky, but with my resume, you at least get a chat with a recruiter, usually right away. But Google and Anthropic just ghosted me.&#8221;</span></p></blockquote><h2><span>4. Higher hiring bar &amp; lower compensation &#8211; but not for everyone</span></h2><p><span>In a &#8220;normal&#8221; market, when the hiring bar goes up, so does compensation. But we heard anecdotes about the hiring bar going up, with the compensation on offer trending down!</span></p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/tech-jobs-market-in-2026-part-3-hiring">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Slow down to speed up: so much has changed in 6 months’ time]]></title><description><![CDATA[An overview of what&#8217;s changed in engineering during the last six months, how various tech companies are changing how they work, and why slowing down could be a sensible strategy]]></description><link>https://newsletter.pragmaticengineer.com/p/slow-down-to-speed-up</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/slow-down-to-speed-up</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 23 Jun 2026 15:30:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/5wks1W-auKY" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><span>Scheduling note: there will be no edition of The Pulse on Thursday as I&#8217;m in San Francisco for the next week and a half, visiting AI labs and startups, and attending the </span><a href="https://www.ai.engineer/worldsfair/2026"><span>AI Engineer World Fair</span></a><span> from next Monday. For the podcast and Tuesday articles, it&#8217;s business as usual.</span></em></p><p><span>Three weeks ago, at </span><a href="https://craft-conf.com/"><span>Craft Conference</span></a><span>, in Budapest, Hungary, I opened the event with a keynote titled &#8216;Slow Down to Speed Up&#8217;.</span></p><p><span>As with most of my talks, it came together in stages, including with some input from full subscribers to the Pragmatic Engineer, with whom I shared my thinking in advance, in &#8216;</span><a href="https://newsletter.pragmaticengineer.com/p/ideas-slow-down-to-speed-up-when"><span>Ideas: slow down to speed up when working with AI agents</span></a><span>&#8217;. </span><em><span>Thank you for all the comments!</span></em></p><p><span>As fate would have it, just two days beforehand, social media giant Meta appositely provided a real-world case study for my talk, with its </span><a href="https://newsletter.pragmaticengineer.com/i/202307236/4-most-embarrassing-ever-outage"><span>most embarrassing outage of all time</span></a><span>: users could simply ask the Meta AI to change the email of any account, and the bot happily complied &#8211; even if the account belonged to someone else entirely &#8211; including a former US president. It was a timely example to kick off the talk with.</span><em><span> Check out the full keynote that&#8217;s available to </span><a href="https://youtu.be/5wks1W-auKY"><span>view on YouTube</span></a><span>:</span></em></p><div id="youtube2-5wks1W-auKY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;5wks1W-auKY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/5wks1W-auKY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://youtu.be/5wks1W-auKY&quot;,&quot;text&quot;:&quot;Watch the keynote video&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://youtu.be/5wks1W-auKY"><span>Watch the keynote video</span></a></p><p><span>In this article, I summarize the key parts of my Craft Conference keynote in detail, and some responses received at the event. Full subscribers also have access to the slides, </span><a href="https://newsletter.pragmaticengineer.com/i/40654455/reports-and-slides"><span>here</span></a><span>, and at the foot of this article.</span></p><p><span>We cover:</span></p><ol><li><p><strong><span>Meta: &#8220;AI psychosis&#8221; in effect? </span></strong><span>Meta has been destroying its engineering org, and an obsessive focus on AI seems to be one reason for it. For more on this question, check out this </span><a href="https://newsletter.pragmaticengineer.com/p/why-is-meta-destroying-its-engineering"><span>deep dive</span></a><span>.</span></p></li><li><p><strong><span>Everything&#8217;s changed in six months.</span></strong><span> From around November last year, things changed with a more capable generation of AI agents like Opus 4.5 and GPT-5.4.</span></p></li><li><p><strong><span>How are tech companies changing how they work?</span></strong><span> Anthropic, OpenAI, Google, Uber, startups, and traditional companies.</span></p></li><li><p><strong><span>Trends</span></strong><span>. Individual productivity is up, but team productivity&#8217;s flat, tokenmaxxing and tooling adoption, vanishing middle management, CEOs and CTOs back to coding, and more.</span></p></li><li><p><strong><span>Trends across software. </span></strong><span>Falling software quality, GitHub&#8217;s constant reliability woes, AI slop overwhelming devs who care about quality, and more.</span></p></li><li><p><strong><span>Advice for software engineers and engineering leaders. </span></strong><span>Suggestions to help future-proof a career.</span></p></li><li><p><strong><span>Feedback. </span></strong><span>&#8220;It&#8217;s happening here too!&#8221; is a common theme, and relief for some that it&#8217;s not unique to their own workplace.</span></p></li></ol><h2><span>1. Meta: &#8220;AI psychosis&#8221; in effect?</span></h2><p><span>I thought it was a made-up story when I read that Meta had enabled account takeovers via a &#8220;zero auth&#8221; policy; i.e., simply asking the Meta AI bot was sufficient to change any account&#8217;s email address. After all, shipping such a regression would fly in the face of security measures, code reviews, automated testing, and metrics. Plus, the company has dedicated Integrity teams whose mission statement is to ensure something like this never happens&#8230; And yet, this bug shipped.</span></p><p><span>It went undetected by anyone at Meta, and high-profile accounts like that of former US president, Barack Obama, were taken over as a result. Instagram&#8217;s dedicated Integrity team seems to have discovered the embarrassing issue via the news.</span></p><p><span>As mentioned, it was two days before the Craft keynote, so there was enough time to ask around at Instagram and Meta. Engineers at the company there told me this disaster was caused by AI-generated, AI-reviewed code, along with layoffs, and by forced reassignments from Integrity teams and elsewhere onto AI labeling and related duties.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zjyL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zjyL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zjyL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zjyL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zjyL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zjyL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&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_!zjyL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zjyL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zjyL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zjyL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59abcfc-a72d-4957-b4e0-9fd6bde46c98_2048x1365.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Talking Meta at Craft Conference</span></em></figcaption></figure></div><p><span>The problem at Meta seems to be that leadership is aggressively pushing AI, while withdrawing resources and headcount from areas responsible for security, quality, and reliability. Since last week&#8217;s </span><a href="https://newsletter.pragmaticengineer.com/p/why-is-meta-destroying-its-engineering"><span>deepdive</span></a><span> into what&#8217;s been happening behind the scenes was published, I&#8217;ve learned further details:</span></p><ul><li><p><span>Integrity teams at WhatsApp </span><a href="https://newsletter.pragmaticengineer.com/i/202609979/orgs-hit-hard-by-layoffs"><span>have been hit hard by layoffs</span></a><span> and enforced data-labeling reassignments</span></p></li><li><p><span>Instagram&#8217;s design team suffered a 44% cut in headcount during layoffs</span></p></li><li><p><span>The Developer Documentation and Support team had a full 95% headcount reduction during layoffs</span></p></li><li><p><span>Data labeling at the ADO group </span><a href="https://newsletter.pragmaticengineer.com/i/202609979/1-meta-follow-up"><span>goes beyond</span></a><span> &#8220;just&#8221; labeling; there are many AI training tasks to do.  But these are repetitive, unless you get really creative.</span></p></li></ul><p><span>Based on everything I heard from talking with Meta folks, AI-induced behavior was indeed at the heart of this outage. AI-generated, AI-reviewed code, and security teams being gutted, were also factors in the beyond-embarrassing incident. As reported in last week&#8217;s deepdive:</span></p><ul><li><p><span>Instagram&#8217;s Trust and Safety Team lost around 50% of its staff to data labeling and layoffs. Some of the most senior folks were drafted onto AI training tasks.</span></p></li><li><p><span>AI-generated changes with zero human input, with just an additional AI code review, have been very common in recent months across the codebase. The change that caused this outage looked like one of these</span></p></li><li><p><span>Normally, the Trust and Safety team would be on top of monitoring and alerting of security breaches, but it is currently in full disarray due to rapid, internal disorganization&#8221;.</span></p></li></ul><p><span>If major changes like data labeling assignments and staff tracking are undone, then perhaps things at Meta could return to normal. But so far, the most being done is that leadership has boosted budgets for snacks, travel, and events. Hardly the change needed to restore morale and the former culture!</span></p><p><span>The comparison to the Lumon corporation in the hit show, Severance, was duly made:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1pjG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1pjG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 424w, https://substackcdn.com/image/fetch/$s_!1pjG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 848w, https://substackcdn.com/image/fetch/$s_!1pjG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 1272w, https://substackcdn.com/image/fetch/$s_!1pjG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1pjG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png" width="1186" height="1528" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1528,&quot;width&quot;:1186,&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_!1pjG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 424w, https://substackcdn.com/image/fetch/$s_!1pjG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 848w, https://substackcdn.com/image/fetch/$s_!1pjG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 1272w, https://substackcdn.com/image/fetch/$s_!1pjG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9951c023-462a-48cb-aa5e-53e0545828d7_1186x1528.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Source: </span><a href="https://x.com/secondfret/status/2067348925858934999?s=20"><span>Josh Johnson</span></a></em></figcaption></figure></div><p><strong><span>Meta&#8217;s worst-ever outage can be interpreted as a warning</span></strong><span> about what happens when there&#8217;s so much focus on AI that the basic health of a company&#8217;s main &#8211; money-spinning &#8211; products is neglected. Instagram, WhatsApp, and Facebook generate the bulk of revenue for Meta, but the company is reallocating more engineers to training the coding model, and aggressively cutting the headcounts of vital orgs to do so &#8211; up to the point of not having oncall coverage for key services, and security teams being too stretched to do their jobs.</span></p><p><span>Am I missing some insight about why it&#8217;s more important to build a state-of-the-art, likely-closed AI model that&#8217;s good at coding, than it is to keep operating revenue-generating businesses with stable infra?</span></p><h2><span>2. Everything&#8217;s changed in six months</span></h2><p><span>Independent, experienced software engineers with zero affiliation to AI labs have been saying for a few months that how we do software engineering has been transformed.</span></p><p><span>David Heinemeier Hansson (DHH), creator of Ruby on Rails </span><a href="https://x.com/dhh/status/2007504187568074843?s=20"><span>in January</span></a><span>:</span></p><blockquote><p><span>&#8221;Just [in] summer 2025, I spoke with Lex Fridman about not letting AI write any code directly, but it turns out part of this resistance was simply based on the models not being good enough at the time! I spent more time rewriting what it wrote, than if I&#8217;d done it from scratch. That has now flipped.&#8221;</span></p></blockquote><p><span>Simon Willison, creator of Django, </span><a href="https://simonw.substack.com/p/i-think-anthropic-and-openai-have"><span>in May</span></a><span> pinpointed the start of the change to late last year:</span></p><blockquote><p><span>&#8220;</span><strong><span>The models released in November 2025 elevated agents to being genuinely useful.</span></strong><span> We&#8217;ve had six months to get used to that idea now; it&#8217;s no wonder companies are beginning to spend real money on this technology.&#8221;</span></p></blockquote><p><strong><span>Teams using agents now ship 5x as many pull requests as two years ago.</span></strong><span> Here&#8217;s data from Linear:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CCFv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CCFv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 424w, https://substackcdn.com/image/fetch/$s_!CCFv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 848w, https://substackcdn.com/image/fetch/$s_!CCFv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 1272w, https://substackcdn.com/image/fetch/$s_!CCFv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CCFv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png" width="1456" height="643" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:643,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:&quot;Screenshot 2026-06-04 at 00.07.06.png&quot;,&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="" title="Screenshot 2026-06-04 at 00.07.06.png" srcset="https://substackcdn.com/image/fetch/$s_!CCFv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 424w, https://substackcdn.com/image/fetch/$s_!CCFv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 848w, https://substackcdn.com/image/fetch/$s_!CCFv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 1272w, https://substackcdn.com/image/fetch/$s_!CCFv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee67b29-e96c-4ec4-ac45-c9a0c018feb8_1780x786.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Comparing numbers of pull requests for teams that use AI agents with Linear, vs those that don&#8217;t. Source: Linear</figcaption></figure></div><p><strong><span>Devs using AI harnesses are producing 2.5x as much code versus 18 months ago. </span></strong><span>Data from Cursor shows that their users, on average, went from adding 3,500 lines of code in January 2025 to 8,600 today:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wn0P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wn0P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 424w, https://substackcdn.com/image/fetch/$s_!Wn0P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 848w, https://substackcdn.com/image/fetch/$s_!Wn0P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 1272w, https://substackcdn.com/image/fetch/$s_!Wn0P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wn0P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77326a72-5765-4ca0-8938-25366d60e467_1462x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:&quot;Screenshot 2026-06-04 at 00.12.01.png&quot;,&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="" title="Screenshot 2026-06-04 at 00.12.01.png" srcset="https://substackcdn.com/image/fetch/$s_!Wn0P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 424w, https://substackcdn.com/image/fetch/$s_!Wn0P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 848w, https://substackcdn.com/image/fetch/$s_!Wn0P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 1272w, https://substackcdn.com/image/fetch/$s_!Wn0P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77326a72-5765-4ca0-8938-25366d60e467_1462x764.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Source: </span><a href="https://cursor.com/insights"><span>Cursor</span></a></em></figcaption></figure></div><p><strong><span>The size of pull requests is up 3x versus 18 months ago</span></strong><span>. Also from Cursor:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VaTO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VaTO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 424w, https://substackcdn.com/image/fetch/$s_!VaTO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 848w, https://substackcdn.com/image/fetch/$s_!VaTO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 1272w, https://substackcdn.com/image/fetch/$s_!VaTO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VaTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:&quot;Screenshot 2026-06-04 at 00.14.27.png&quot;,&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="" title="Screenshot 2026-06-04 at 00.14.27.png" srcset="https://substackcdn.com/image/fetch/$s_!VaTO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 424w, https://substackcdn.com/image/fetch/$s_!VaTO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 848w, https://substackcdn.com/image/fetch/$s_!VaTO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 1272w, https://substackcdn.com/image/fetch/$s_!VaTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373d75b5-dc2e-4ee7-b487-f867c235b7af_1504x820.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Line goes up: more lines per PR than ever, today. Source: </span><a href="https://cursor.com/insights"><span>Cursor</span></a></em></figcaption></figure></div><p><strong><span>More AI changes are accepted without human review. </span></strong><span>Data from Cursor shows a big jump in changes being accepted without human review from around February this year, when Opus 4.7 and GPT 5.5 launched:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g3dj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g3dj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 424w, https://substackcdn.com/image/fetch/$s_!g3dj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 848w, https://substackcdn.com/image/fetch/$s_!g3dj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!g3dj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g3dj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&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_!g3dj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 424w, https://substackcdn.com/image/fetch/$s_!g3dj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 848w, https://substackcdn.com/image/fetch/$s_!g3dj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!g3dj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef9732b-9411-445b-af5d-64f8bb026d7a_2048x1365.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Less human input than ever, as outlined at the Craft Conference. Source: </span><a href="https://cursor.com/insights"><span>Cursor</span></a></em></figcaption></figure></div><p><strong><span>We&#8217;re seeing a </span></strong><em><strong><span>lot</span></strong></em><strong><span> more code generated, and less of it than ever being reviewed by devs. </span></strong><span>In the relatively short time since AI agents became </span><em><span>really</span></em><span> good last November, there are more pull requests generated by devs, those pull requests are getting better, and code reviews are harder to keep up with. And so, reviews are less stringent and more changes are shipped to production sans human review! </span><em><span>As per my discussions with Meta engineers, these kinds of AI-generated, AI-reviewed pull requests [at Meta, they&#8217;re called diffs] are what caused the most recent, embarrassing outage at Instagram.</span></em></p><h2><span>3. How are tech companies changing how they work?</span></h2><p><span>Details from a few larger tech companies:</span></p><p><strong><span>Anthropic: all-in on AI agents. </span></strong><span>In March, Boris Cherny, creator of Claude Code, </span><a href="https://newsletter.pragmaticengineer.com/p/building-claude-code-with-boris-cherny"><span>was on the Pragmatic Engineer podcast</span></a><span> and shared some details:</span></p><ul><li><p><span>He personally runs ~5x agents parallel, and ships 20&#8211;30 PRs/day</span></p></li><li><p><span>Product requirement documents (PRDs) are dead &amp; prototypes have replaced them inside Anthropic</span></p></li><li><p><span>~100% of Claude Code was generated by Claude in March</span></p></li><li><p><span>~70-90% of code inside Anthropic was generated by Claude</span></p></li><li><p><span>Claude Cowork &#8211; another billion-dollar product in terms of revenue potential &#8211; was built in just 10 days</span></p></li></ul><p><span>Since then, Boris has </span><a href="https://x.com/rohanpaul_ai/status/2063347508831764647?s=20"><span>shared</span></a><span> that his workflow has changed to setting up loops to run agents.</span></p><p><strong><span>OpenAI: moving much faster with AI agents. </span></strong><span>OpenAI&#8217;s Codex team was </span><a href="https://www.youtube.com/watch?v=Bo6Gtq3nMXc"><span>on the main stage</span></a><span> at The Pragmatic Summit in February. Tibo Sottiaux (head of engineering, Codex, OpenAI) shared interesting details on how software development is done in the Codex team:</span></p><ul><li><p><span>There&#8217;s a &#8220;fix this&#8221; button integrated into the internal OpenAI mobile app. It makes one-shot fixes to bug reports, which devs review and can merge</span></p></li><li><p><span>AI code review for all code changes. With a tiered approach, some changes can be merged with just AI review, and more important ones need an extra human review</span></p></li><li><p><span>Most devs run several agents in parallel, often walking around with their laptop lids open, so the machine doesn&#8217;t enter sleep mode and suspend agents</span></p></li><li><p><span>Code isn&#8217;t really written by hand anymore on the Codex team, and is also less common on other teams too</span></p></li><li><p><span>&#8220;Taste&#8221; is becoming a core skill for working at the company</span></p></li><li><p><span>Codex improves itself: it runs its own test suite, runs improvement tasks overnight, and during team meetings it takes actions on topics discussed</span></p></li></ul><p><strong><span>Google: AI widespread. </span></strong><span>Gemini is not as capable at coding as Claude or Codex, as acknowledged by Google&#8217;s CEO, but it&#8217;s widely used companywide. The less capable coding model could be hurting AI adoption compared to other companies.</span></p><p><strong><span>Uber: in-house AI infra. </span></strong><span>We covered in-depth </span><a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development"><span>how Uber uses AI for development</span></a><span>, touching on internal systems like:</span></p><p><span>Uber&#8217;s MCP Gateway:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!86xc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!86xc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 424w, https://substackcdn.com/image/fetch/$s_!86xc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 848w, https://substackcdn.com/image/fetch/$s_!86xc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!86xc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!86xc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png" width="1342" height="1050" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1050,&quot;width&quot;:1342,&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_!86xc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 424w, https://substackcdn.com/image/fetch/$s_!86xc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 848w, https://substackcdn.com/image/fetch/$s_!86xc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!86xc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfdfadc9-6d82-4960-a524-68f652453116_1342x1050.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Uber&#8217;s MCP Gateway</span></em></figcaption></figure></div><p>Uber Agent Builder:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lJ3T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lJ3T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 424w, https://substackcdn.com/image/fetch/$s_!lJ3T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 848w, https://substackcdn.com/image/fetch/$s_!lJ3T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!lJ3T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lJ3T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png" width="1374" height="1400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1400,&quot;width&quot;:1374,&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_!lJ3T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 424w, https://substackcdn.com/image/fetch/$s_!lJ3T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 848w, https://substackcdn.com/image/fetch/$s_!lJ3T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!lJ3T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7b50b1-2fbe-4fbe-8175-1fd78742b9dc_1374x1400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Uber&#8217;s Agent Builder: a no-code experience to build agents</figcaption></figure></div><p>The AIFX command line interface:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tRVQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tRVQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 424w, https://substackcdn.com/image/fetch/$s_!tRVQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 848w, https://substackcdn.com/image/fetch/$s_!tRVQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 1272w, https://substackcdn.com/image/fetch/$s_!tRVQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tRVQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png" width="1456" height="835" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:835,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:932547,&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://newsletter.pragmaticengineer.com/i/203257304?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.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_!tRVQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 424w, https://substackcdn.com/image/fetch/$s_!tRVQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 848w, https://substackcdn.com/image/fetch/$s_!tRVQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 1272w, https://substackcdn.com/image/fetch/$s_!tRVQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8ad64cc-74f4-45e4-be0d-110cbfa09122_1980x1136.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Uber&#8217;s AIFX command line tool</figcaption></figure></div><p>Minion: background agents</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bCSQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bCSQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 424w, https://substackcdn.com/image/fetch/$s_!bCSQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 848w, https://substackcdn.com/image/fetch/$s_!bCSQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 1272w, https://substackcdn.com/image/fetch/$s_!bCSQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bCSQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png" width="1351" height="737" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:737,&quot;width&quot;:1351,&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_!bCSQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 424w, https://substackcdn.com/image/fetch/$s_!bCSQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 848w, https://substackcdn.com/image/fetch/$s_!bCSQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 1272w, https://substackcdn.com/image/fetch/$s_!bCSQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddffc676-68f3-42b1-8380-b6f2091580c2_1351x737.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Uber&#8217;s Minion system: web interface&#8217;s appearance</span></em></figcaption></figure></div><p>Code Inbox:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!58dy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!58dy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 424w, https://substackcdn.com/image/fetch/$s_!58dy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 848w, https://substackcdn.com/image/fetch/$s_!58dy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 1272w, https://substackcdn.com/image/fetch/$s_!58dy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!58dy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png" width="1456" height="901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:901,&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_!58dy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 424w, https://substackcdn.com/image/fetch/$s_!58dy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 848w, https://substackcdn.com/image/fetch/$s_!58dy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 1272w, https://substackcdn.com/image/fetch/$s_!58dy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90fea6f1-4615-484a-a93e-589a6ad921b7_1456x901.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Uber&#8217;s Code Inbox</span></em></figcaption></figure></div><p><span>Smart Assignments as a neat feature of Code Inbox:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mJYV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mJYV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 424w, https://substackcdn.com/image/fetch/$s_!mJYV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 848w, https://substackcdn.com/image/fetch/$s_!mJYV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 1272w, https://substackcdn.com/image/fetch/$s_!mJYV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mJYV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png" width="956" height="692" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:692,&quot;width&quot;:956,&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_!mJYV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 424w, https://substackcdn.com/image/fetch/$s_!mJYV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 848w, https://substackcdn.com/image/fetch/$s_!mJYV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 1272w, https://substackcdn.com/image/fetch/$s_!mJYV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61073e2b-f26c-4421-8d3d-60c381c1b492_956x692.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span>Smart assignment settings for Code Inbox</span></em></figcaption></figure></div><p>Risk Profiles: another smart feature inside Code Inbox:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dbo4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dbo4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 424w, https://substackcdn.com/image/fetch/$s_!dbo4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 848w, https://substackcdn.com/image/fetch/$s_!dbo4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 1272w, https://substackcdn.com/image/fetch/$s_!dbo4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dbo4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png" width="996" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:996,&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_!dbo4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 424w, https://substackcdn.com/image/fetch/$s_!dbo4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 848w, https://substackcdn.com/image/fetch/$s_!dbo4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 1272w, https://substackcdn.com/image/fetch/$s_!dbo4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F411ad35f-d8ea-470f-b480-82fc0bcce7bc_996x812.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Code Inbox estimates the riskiness of a code change, and brings attention to it</figcaption></figure></div><p>uReview, Uber&#8217;s AI code review tool:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4R6L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4R6L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 424w, https://substackcdn.com/image/fetch/$s_!4R6L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 848w, https://substackcdn.com/image/fetch/$s_!4R6L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 1272w, https://substackcdn.com/image/fetch/$s_!4R6L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4R6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png" width="1456" height="1007" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1007,&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_!4R6L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 424w, https://substackcdn.com/image/fetch/$s_!4R6L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 848w, https://substackcdn.com/image/fetch/$s_!4R6L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 1272w, https://substackcdn.com/image/fetch/$s_!4R6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb907a1b0-8a71-4baa-a9e2-0b895d82cc06_1456x1007.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI&#8217;s comments can be rated by usefulness</figcaption></figure></div><p>Autocover and Shepherd for large-scale migrations:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DvQf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DvQf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 424w, https://substackcdn.com/image/fetch/$s_!DvQf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 848w, https://substackcdn.com/image/fetch/$s_!DvQf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!DvQf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DvQf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png" width="1456" height="1352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1352,&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_!DvQf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 424w, https://substackcdn.com/image/fetch/$s_!DvQf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 848w, https://substackcdn.com/image/fetch/$s_!DvQf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!DvQf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce6bee21-20ea-476f-a2f7-6705c8cd8a12_1456x1352.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Shepherd generates a pull request using a Minion AI agent. Part 2 of the diff (pull request) generated, with code changes</figcaption></figure></div><p><strong><span>Uber is a good case for learning how much of internal developer infra needs to be rebuilt in order to work well with AI agents.</span></strong><span> Uber built all the tools above because they needed new, better ways to integrate AI agents into the developer workflow, but couldn&#8217;t find anything that worked up to requirements. I&#8217;d also point out how much time and effort Uber invested in making code review more efficient. Devs are, indeed, getting overloaded with AI code reviews and Uber&#8217;s Code Inbox tries to separate the </span><em><span>important</span></em><span> pieces of code to review from </span><em><span>unimportant</span></em><span> ones.</span></p><p><strong><span>Startups are jumping into using AI agents, although their integrations are more basic. </span></strong><span>In preparation for the keynote, I talked with several startups about their AI usage. Harnesses like Claude Code, Codex, Cursor, OpenCode and others are popular, and I also noticed most startups are heavily integrating AI agents into Slack, so devs can kick off bugfixes or small feature requests straight from the chat tool.</span></p><p><span>I observed startups being the most likely to experiment with new AI dev tools; from code review, all the way to AI incident management tools.</span></p><p><strong><span>&#8220;Traditional&#8221; companies are also heavily investing in AI dev tools. </span></strong><span>At the recent Pragmatic Summit in San Francisco, Laura Tacho </span><a href="https://newsletter.pragmaticengineer.com/i/188235220/2-data-vs-hype-how-orgs-actually-win-with-ai"><span>shared</span></a><span> interesting details:</span></p><ul><li><p><span>In February, 18,000 Cisco developers used Codex for complex migrations, code review, and refactoring. This was </span><em><span>very</span></em><span> early &#8211; Codex was just starting to gain industry-wide adoption!</span></p></li><li><p><span>JP Morgan Chase built a multi-agent framework for annotation, using multiple specialized agents to label customer interaction data, and judge agents to aggregate and rank results. These are pretty advanced use cases!</span></p></li></ul><p><span>In general, &#8220;traditional&#8221; companies do not seem to be lagging behind in using, paying for, and adopting AI agents and AI developer tools.</span></p><h2><span>4. Industry trends</span></h2><p><span>There are trends I&#8217;ve observed around the adoption of AI dev tools:</span></p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/slow-down-to-speed-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Why is Meta destroying its engineering organization?]]></title><description><![CDATA[Leadership at the social media giant has been on an AI-fueled rampage through its engineering org. We report what&#8217;s happened]]></description><link>https://newsletter.pragmaticengineer.com/p/why-is-meta-destroying-its-engineering</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/why-is-meta-destroying-its-engineering</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 16 Jun 2026 16:27:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/eabe4407-76aa-47a3-a8cb-1d955c05bf03_1972x1072.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi &#8211; this is Gergely with a free issue of the Pragmatic Engineer Newsletter. In every issue, I cover challenges at Big Tech and startups through the lens of senior engineers and engineering leaders. Subscribe to get deepdives like this in your inbox, weekly:</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.pragmaticengineer.com/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://newsletter.pragmaticengineer.com/subscribe?"><span>Subscribe now</span></a></p><p><em>Many subscribers expense this newsletter to their learning and development budget. If you have such a budget, here&#8217;s<a href="https://blog.pragmaticengineer.com/request-to-expense-the-pragmatic-engineer-newsletter/"> an email you could send to your manager</a>.</em></p><div><hr></div><p>For two decades, Meta had a unique, high-performance engineering org; right up until around April of this year. For the first 20 years of the company&#8217;s existence, it had a &#8220;move-fast-and-break-things&#8221; culture, and in the early 2020s this shifted to a &#8220;move-fast-with-stable-infra&#8221; one. Engineers I know at the company were empowered to do good work, focus on impact, and to balance business interests with solid engineering.</p><p>But in the past few weeks, all that has changed, as if the leadership has been following detailed blueprints on how to demolish a proven, successful engineering culture in the most ruthlessly efficient way possible.</p><p>For the past few weeks, I&#8217;ve been <a href="https://newsletter.pragmaticengineer.com/i/196795826/3-meta-forcefully-assigns-engineers-to-data-labelling-pre-layoff">sharing</a> how bad things are inside the social media company for engineers in one of Silicon Valley&#8217;s most prestigious workplaces. In this article, we walk through what&#8217;s happened, and ask what&#8217;s going through the minds of leadership who are reducing software engineering there from <a href="https://newsletter.pragmaticengineer.com/p/profit-centers-cost-centers">the profit center</a> that it was between 2004 until very recently, to the disdained cost center that it has become in just a few weeks.</p><p>We cover:</p><ol><li><p>Meta&#8217;s pre-AI engineering culture</p></li><li><p>Investing in AI and pressing engineers to always use it</p></li><li><p>Core engineering folks feel treated like trash</p></li><li><p>Most embarrassing-ever outage</p></li><li><p>Internal mess</p></li><li><p>Self-inflicted wounds</p></li><li><p>Is &#8220;AI psychosis&#8221; just a Meta issue?</p></li></ol><h2>1. Meta&#8217;s pre-AI engineering culture</h2><p>I&#8217;d split Meta&#8217;s engineering culture into two eras: &#8220;move fast and break things&#8221;, and then &#8220;move fast with stable infra.&#8221;</p><h3>&#8220;Move fast and break things&#8221;</h3><p>In the 2010s, Facebook&#8217;s unconventional engineering culture had grown somewhat legendary in the tech industry, as the company went against conventional best practices and succeeded massively.</p><p>In 2012, when Facebook hit the billion-users landmark, the company produced a small physical book about its culture which was placed on employees&#8217; desks. Presented with retro propaganda design, it was dubbed the &#8220;little red book&#8221;, co-opting the name of a famous volume of the thoughts of Chairman Mao, (1964).</p><p>At around 70 pages long, Facebook&#8217;s version codified its engineering culture: speed, fearlessness, taking ownership, and thinking outside of the box.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4O-q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4O-q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 424w, https://substackcdn.com/image/fetch/$s_!4O-q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 848w, https://substackcdn.com/image/fetch/$s_!4O-q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 1272w, https://substackcdn.com/image/fetch/$s_!4O-q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4O-q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png" width="1456" height="1123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1123,&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_!4O-q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 424w, https://substackcdn.com/image/fetch/$s_!4O-q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 848w, https://substackcdn.com/image/fetch/$s_!4O-q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 1272w, https://substackcdn.com/image/fetch/$s_!4O-q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe21ca23a-f069-489a-9bf0-fa882e94b9b6_1968x1518.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>From the Little Red Book. Source: <a href="https://v1.benbarry.com/project/facebooks-book">Ben Barry</a></em></figcaption></figure></div><p>Back then, mantras in Facebook&#8217;s little red book were also in print across campus, and included:</p><ul><li><p>Move Fast and Break Things</p></li><li><p>Done is Better Than Perfect</p></li><li><p>Fail Harder</p></li><li><p>What Would You Do If You Weren&#8217;t Afraid?</p></li><li><p>Every Day Feels Like a Week</p></li><li><p>The Wright Brothers Did Not Have Pilot Licenses</p></li><li><p>The Foolish Wait</p></li><li><p>Fortune Favors the Bold</p></li></ul><p>There was genuine focus on building good products. Also from the book:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4-Pa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4-Pa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 424w, https://substackcdn.com/image/fetch/$s_!4-Pa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 848w, https://substackcdn.com/image/fetch/$s_!4-Pa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 1272w, https://substackcdn.com/image/fetch/$s_!4-Pa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4-Pa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png" width="1456" height="1082" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1082,&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_!4-Pa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 424w, https://substackcdn.com/image/fetch/$s_!4-Pa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 848w, https://substackcdn.com/image/fetch/$s_!4-Pa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 1272w, https://substackcdn.com/image/fetch/$s_!4-Pa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc1bcd4-cad8-4d13-882a-b9e9bbd8ff55_2048x1522.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>More from Facebook&#8217;s Little Red Book</em></figcaption></figure></div><h3>&#8220;Move fast with stable infra&#8221; culture</h3><p>In 2022, I did what is one of the longest deepdives we&#8217;ve published on the topic of <a href="https://newsletter.pragmaticengineer.com/p/facebook">Meta&#8217;s engineering culture</a>. By then, things had evolved, and much of any former recklessness was gone, replaced by the principle of moving fast, but with stable infra. Here&#8217;s how I described Meta&#8217;s engineering culture then:</p><blockquote><p>&#8220;<strong>The culture is incredibly engineering-centric: much more than most of Big Tech. </strong>This might come from Mark Zuckerberg being an engineer himself, or because much of the innovation in the early days of Facebook came from engineers.</p><p><strong>Focus on individual impact.</strong> Impact has been the bread and butter of the focus at Facebook. This is very true since the early days, and the focus on generating impact remains.</p><p>One detail in common with most Big Tech firms is that both the engineering culture and general culture focus so much on individual impact. This results in some people focusing on short-term, measurable wins and assuming that teamwork and split wins between groups might be less rewarded.</p><p><strong>The lack of rigid processes.</strong> Facebook seems to have the least amount of processes or standardization across all of Big Tech. Don&#8217;t even try to compare it to<a href="https://newsletter.pragmaticengineer.com/p/amazon?s=w"> Amazon&#8217;s engineering culture</a> and the countless formal processes there. But even compared to companies like Google, Microsoft or Uber, Facebook&#8217;s processes are much looser. Most of this comes from the engineering-centric nature of the company and engineers disliking processes.</p><p><strong>Surprisingly little emphasis on testing, documentation or code comments.</strong> You&#8217;ll find shockingly little automated testing and documentation at Facebook, compared to the rest of Big Tech. Inline code comments are also very rare.</p><p><strong>A founder-engineer driven company. </strong>Facebook is one of the few Big Tech firms whose founder is an engineer, and still is the CEO. Netflix is the other one where founder and co-CEO Reed Hastings was also a software engineer before starting the company. Amazon was the other example of this until recently, but it&#8217;s not the case at Google or Apple. There are good examples of smaller companies like Cloudflare, but they&#8217;re all younger than Facebook.</p><p><strong>Bootcamp</strong>. A unique onboarding process, unlike what any other Big Tech firms offer. We cover this more in the<a href="https://newsletter.pragmaticengineer.com/i/55330545/bootcamp-and-onboarding"> Bootcamp &amp; onboarding section.</a>&#8221;</p></blockquote><p>Also, Facebook, as a product, has one of the <a href="https://newsletter.pragmaticengineer.com/p/shipping-to-production">most sophisticated auto rollout systems</a> in the industry. Instagram has a battle-tested infrastructure where it was almost trivial <a href="https://newsletter.pragmaticengineer.com/p/building-the-threads-app">to launch a new social network (Threads)</a> with 100 million users served in its first week.</p><p>Engineers whom I knew inside the company are capable, motivated, and product-minded, and their work was appreciated. CEO, Mark Zuckerberg, was influential: he personally coded the first version of Facebook, had stayed close to engineering, and valued software engineers very much. Engineers there felt they were working inside a profit center.</p><h2>2. Investing in AI and pressing engineers to always use it</h2><p>Meta has been the only company among the big five of Apple, Microsoft, Amazon, Google, and itself not to own a hardware platform or operating system. Apple has the iPhone, iPad and Macs, Google has Android, ChromeOS and Pixel phones, Microsoft has Windows, and Amazon has the Kindle.</p><p>Stepping back, it looks as though the Mark Zuckerberg of today has resolved not to miss a platform opportunity, after the company failed to build its own mobile OS or mobile phone during the 2010s.</p><p>This is one reason for investing so much in virtual reality (VR) with Oculus, and in augmented reality with the Meta Glasses. Facebook changed its name to Meta in 2021, back when it looked like VR &#8211; and the metaverse &#8211; could be massive. Billions was spent on ensuring Meta would be the market leader in this space. But once again, VR didn&#8217;t go mainstream; since the end of the pandemic, popular interest in the segment has died down considerably.</p><p>When it became clear that AI would become a mega-trend in 2022, Zuckerberg didn&#8217;t miss it: he assembled the internal FAIR group (Fundamental AI Research team) as well as a GenAI product organization and released a series of open-weight AI models:</p><ul><li><p><strong>Llama 1</strong>: released in Feb 2023, three months after ChatGPT, built by FAIR</p></li><li><p><strong>Llama 2</strong>: in June 2023, built by the GenAI product organization (as well as all subsequent Llama models)</p></li><li><p><strong>Llama 3</strong>: in April 2024. This model was Meta&#8217;s most competitive LLM of all, and gained momentum in adoption across the industry</p></li><li><p><strong>Llama 4</strong>: in April 2025. This model was <a href="https://newsletter.pragmaticengineer.com/i/161033486/metas-latest-llama-release-disappoints">deeply disappointing</a></p></li></ul><p><strong>In June that year, Meta acquired a 49% stake in Scale AI to reboot its AI efforts </strong>for a whopping $14.8B, and brought in Scale AI&#8217;s CEO, Alexandr Wang to take over Meta&#8217;s AI strategy. The acquisition of Chinese startup Manus AI for $2B is currently in question after China <a href="https://newsletter.pragmaticengineer.com/i/196004322/china-blocks-meta-from-buying-manus">blocked</a> the deal from being completed.</p><p>Based on the investment made into Scale AI and Wang, it&#8217;s pretty clear that Meta &#8211; and Zuckerberg &#8211; is determined to build a state-of-the-art LLM that can be competitive with the latest versions of Claude and ChatGPT. But Meta has to start pretty much from scratch, and it&#8217;s up to Alexandr Wang to deliver.</p><p>Scale AI brings in a very specific kind of expertise to Meta, as one of the best in the industry in:</p><ul><li><p><strong>Training data and labeling: </strong>Scale started, and is still best known, as a provider of high-quality labeled datasets for machine learning and AI training, including code, text, image, video, etc.</p></li><li><p><strong>RLHF and fine-tuning: </strong>A RLHF (reinforcement learning from human feedback) flow which Scale runs, where people give feedback for foundation models, as a &#8220;human in the loop&#8221; data engine that many leading AI labs use to create better LLMs.</p></li></ul><p>Wang seems to have a very broad reign to do what he has been an expert in: creating training data, doing data labeling and RLHF. This is being pulled off with the labor of Meta&#8217;s engineering workforce, and by surveilling it.</p><p><strong>Problem #1: Tracking keystrokes and mouse clicks, with no option to opt out. </strong>In late April, Meta told engineers they were being enrolled into a system that tracks every keystroke and click, to produce training data for Meta&#8217;s new AI. There&#8217;s no way to opt out.</p><p>Needless to say, this is invasive and raises privacy questions: If you log into your personal bank account, does the tool track you? What about when you&#8217;re writing a personal email, or responding to a personal call? Meta held no consultation and there are no workarounds; just a top-down decision being pushed through.</p><p>This month, Reuters <a href="https://www.reuters.com/world/meta-scales-back-ai-mouse-clicks-tool-citing-employee-concerns-2026-06-02/">reported</a> that people&#8217;s concerns there are finally being heard:</p><blockquote><p>&#8220;Meta is dialing back elements of its plan to collect employee mouse movements, keystrokes and other actions for use as AI &#8203;training data, it said in an internal memo on Tuesday, following weeks &#8203;of angry pushback from staffers.</p><p>New controls will allow employees to pause &#8288;the data collection for up to 30 minutes at a time and &#8203;request exemptions from the initiative, according to the memo, authored by Stephane Kasriel, &#8203;a vice president in Meta&#8217;s AI model-building Superintelligence Labs unit.&#8221;</p></blockquote><p>From talking with current Meta engineers, I understand the logging system has not been rolled out in the UK due to data protection regulation.</p><p><strong>Problem #2: 30-50% of engineers on core teams have been forcefully reassigned to data labeling </strong>and RLHF, upsetting folks even more.<strong> </strong>Also starting in late April, product engineering teams received a mandate from above, whereby 30-50% of engineers were to leave the team and join the ADO org (Agent Data Optimisation).</p><p><strong>&#8220;Forceful&#8221; reassignment is very relevant here because of Meta&#8217;s traditional engineering culture. </strong>Between its founding in 2004 and until last year, Meta gave engineers autonomy to choose where they work and what they work on. This was structural to how the company worked:</p><ul><li><p>Engineers were not hired for a specific team (save for at the Staff+, levels, in some cases). They were hired to the company</p></li><li><p>During a 6-week bootcamp, new hires got familiar with Meta&#8217;s engineering culture and chose a team</p></li><li><p>Team matching meant talking with multiple teams who had headcount, doing small work with them, and finding a match</p></li><li><p>Internal transfers were easy, and often initiated by engineers</p></li></ul><p>Team selection via bootcamp started to die down in around 2024, but any Meta engineer with at least two years&#8217; tenure knows that previously they chose what to work on, and of course, could pick the most impactful thing to work on. And then, out of the blue, they&#8217;re assigned to a division where the impact is not clear, the work is menial, and doing it too long will surely hurt their career prospects.</p><p><strong>&#8220;Data labeling&#8221; is more involved work, even though a bit repetitive.</strong> There are labeling tasks, where you create a website, then look at it and decide if it looks good or not, and give this feedback: this is the &#8220;typical&#8221; data labeling. But this is the less frequent type of work. But then there are more involved AI training tasks, which looks like this:</p><ul><li><p>Come up with a task that the AI should do</p></li><li><p>Then write the tests that confirm the result</p></li><li><p>Package all of this up into a Docker container, using <a href="https://github.com/harbor-framework/harbor">Harbor framework</a></p></li><li><p>Then read the code that the AI writes - often doing this based on feedback from several models, and give it feedback</p></li></ul><p>This work is not easy to do &#8212; and you can see why you need good software engineers to do it! &#8212; but it gets repetitive really quickly. Most engineers who I talked to said that they found it hard to do this work motivated day-in, day-out. Then again, I did talk with an engineer inside the org who said that by varying the technologies they use, and challenging themselves, they found this work motivating and interesting! This engineer expects there to be more software engineering work coming up, after the phase of training passes. <em>There&#8217;s a lesson here: when life gives you lemons, you can either complain about it, or you can make lemonade, like this dev has done so.</em></p><p>This training work is secretive across the AI industry, and vendors are offering $100+ per hour for devs to do this type of work. There are rumors across the industry that OpenAI and Anthropic spends more on these training environments (to make the models great at coding) than the model training run itself!</p><p><strong>Infrastructure and security teams were hit especially hard by reassignments. </strong>I talked with several engineers in infra orgs, who had 30-50% of their teams drafted into the ADO org. And in some cases, it was the best engineers who left.</p><p>One engineer told me that the whole situation feels like the movie, The Hunger Games, when tributes are randomly selected and then removed from their environment, to something completely different. Except, at Meta, many more folks are being affected, with between three and five from a 10-person team going from building products used by hundreds of millions, to giving human feedback on AI-generated GitHub repos, over and over. So, a wider impact than in the Hunger Games, but with less drastic consequences.</p><p><strong>Around 6,500 people are in the ADO org, more than at OpenAI and Anthropic. </strong>Roughly four to five thousand of these are software engineers. Meta has around 25,000 engineers, meaning that one in every 5-6 software engineers may now find themselves doing data labeling full time.</p><p>As you can imagine, people are actively open to new positions, and nobody is updating their job title on LinkedIn and elsewhere to &#8220;data labeling at Meta.&#8221;</p><p>I&#8217;ve spoken with people in this role and they don&#8217;t like doing it, and feel upset about the top-down decision making. The silver lining is that they still have a job, have retained their salary, and were not part of layoffs. They still have time to leave Meta for something that pays comparably and is not a data labeling job.</p><h2>3. Core engineering folks feel treated like trash</h2><p><strong>Problem #3: a month-long waiting game, stoking fear across the company. </strong>On 20 April, Reuters <a href="https://www.reuters.com/world/meta-targets-may-20-first-wave-layoffs-additional-cuts-later-2026-2026-04-17/">reported</a> that Meta planned to lay off 10% of staff in a month&#8217;s time, and Meta confirmed the news, meaning there was a period of four weeks when everyone knew that they could be unemployed very soon.</p><p>Forced reassignments to data labeling started to happen. As I covered <a href="https://newsletter.pragmaticengineer.com/i/196795826/3-meta-forcefully-assigns-engineers-to-data-labelling-pre-layoff">at the time:</a></p><blockquote><p>&#8220;Understandably, there are mixed feelings about this redeployment [to data labeling], with layoffs coming soon. On Wednesday, 20 May, Meta will announce layoffs. Perhaps those moved to do data labeling could actually be &#8220;safer&#8221; than colleagues on product teams. Of course, this is speculation, but it would be cruel if Meta cut devs reassigned to data labeling.&#8221;</p></blockquote><p><strong>Problem #4: Performance review is hyper-aggressive at Meta, so devs optimize all metrics. </strong>The internal performance review process, PSC (Performance Summary Cycle), is very stringent, compared to Google and Apple, I&#8217;ve learned. Managers inside Meta &#8220;fight&#8221; over the pay packets of their employees, which involves &#8220;knocking down&#8221; the packet of engineers on other teams, so their direct reports are ranked higher. It&#8217;s common to weaponize metrics in this process &#8211; be that business impact, the number of code reviews, number of lines of code written, pre-AI (see <a href="https://newsletter.pragmaticengineer.com/p/the-coding-machine-at-meta">our Coding Machine archetype podcast</a> on this.)</p><p>Quotas are handed down to managers for the splits of the workforce to be put in each &#8216;bucket&#8217;, and the internal politics gets heated as managers try to get their reports into higher buckets.</p><p>After a few years, engineers at Meta learn that the best way to not get a bad PSC rating is to have all metrics &#8211; impact, code committed, and other numbers &#8211; higher than their peers&#8217; are. <em>Learn more about <a href="https://newsletter.pragmaticengineer.com/p/performance-calibrations">the internal politics of performance calibrations.</a></em></p><p><strong>Problem #5: tokens are measured as part of perf, so devs aggressively optimize for it. </strong>When layoffs were confirmed, engineers also learned that managers shall inspect token count during perf reviews. This raised worries that those with low token counts might be marked as underperformers and dismissed.</p><p>So, what is the natural reaction to this as an engineer at Meta? They started using AI tools for the sake of generating more tokens. This happened while Meta had an internal token leaderboard, encouraging tokenmaxxing. As I wrote <a href="https://newsletter.pragmaticengineer.com/i/194426825/1-tokenmaxxing-weird-new-trend">on 16 April:</a></p><blockquote><p>&#8220;As per The Information, Meta employees <a href="http://reported">used</a> a total of 60.2 trillion AI tokens (!!) in 30 days. If this was charged at Anthropic&#8217;s API prices, it would cost $900M. Of course, Meta is likely purchasing tokens at a discount, but that could still come in at $100M+ &#8211; in large part from senseless &#8220;tokenmaxxing&#8221;.&#8221;</p></blockquote><p><strong>The biggest problem: people stop caring about real work and focus on performative work. </strong>Let&#8217;s check the four ingredients that Meta&#8217;s leadership has decided to introduce to their workplace:</p><ol><li><p>Tracking the keyboards and mouse clicks of all engineers, where legally possible</p></li><li><p>Reassign a good chunk of engineers to fulltime data labeling</p></li><li><p>Let staff know that 10% of them will be laid off</p></li><li><p>Have a culture where devs optimize for any and all metrics measured during PSC</p></li><li><p>Measure token usage as part of PSC</p></li></ol><p>Shake this mix up well, and what do you get? Two things:</p><ol><li><p><strong>Everyone overuses AI to boost their personal stats. </strong>An engineering workforce that pretends to work with as much AI, and as little human input, as possible. It&#8217;s a strange incentive where an outage caused by a failure to review code properly is not grounds for dismissal, but writing code by hand &#8211; instead of having an AI agent write it &#8211; could cost you your job</p></li><li><p><strong>Every longer-tenured engineer is seeking a new job, or at least considering it.</strong> Those who have been around at Meta longer term have seen enough. Let me describe this visually:</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rXjq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rXjq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 424w, https://substackcdn.com/image/fetch/$s_!rXjq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 848w, https://substackcdn.com/image/fetch/$s_!rXjq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 1272w, https://substackcdn.com/image/fetch/$s_!rXjq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rXjq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png" width="1456" height="983" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:983,&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_!rXjq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 424w, https://substackcdn.com/image/fetch/$s_!rXjq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 848w, https://substackcdn.com/image/fetch/$s_!rXjq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 1272w, https://substackcdn.com/image/fetch/$s_!rXjq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a19e01d-9126-456c-8369-f2663ff69cdc_1590x1074.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Why pretty much every engineer at Meta is looking for a way out, visualised</figcaption></figure></div><p>Fresh data seems to confirm that starting in May, a <em>lot</em> more engineers at Meta are looking for an &#8220;out.&#8221; Here&#8217;s how signups to leading Big Tech interview preparation service <a href="http://interviewing.io">interviewing.io</a> from Meta have changed over the last year and a half: we can see a massive jump in May vs the year before, as shared by founder and CEO <a href="https://x.com/alinelernerLLC">Aliner Lerner </a>with us:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fEQS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fEQS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 424w, https://substackcdn.com/image/fetch/$s_!fEQS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 848w, https://substackcdn.com/image/fetch/$s_!fEQS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!fEQS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fEQS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png" width="1456" height="1046" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1046,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187267,&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://newsletter.pragmaticengineer.com/i/202307236?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.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_!fEQS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 424w, https://substackcdn.com/image/fetch/$s_!fEQS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 848w, https://substackcdn.com/image/fetch/$s_!fEQS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!fEQS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad3ffe5-21c8-4052-bf15-50c7e286e550_1614x1160.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><span>Signups to interviewing.io&#8217;s interview prep service from Meta. Source: </span><a href="http://interviewing.io"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">interviewing.io</span></a><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">.</span></figcaption></figure></div><p><em>(We covered more data from interviewing.io and other interesting data sources in the  deepdive <a href="https://newsletter.pragmaticengineer.com/p/the-job-market-in-2026-part-2">State of the software engineering job market in 2026</a>)</em></p><p>To its credit, Meta has given out generous retention equity packages to several engineers considered key on the remaining teams. These packages make it harder to get matching compensation elsewhere. Still, I talked to one engineer who got an equity top-up, and said that this approach helped him decide to leave as soon as possible because he feels bitter about the lack of autonomy and having no control over things.</p><h2>4. Most embarrassing-ever outage</h2><p>Meta&#8217;s core infra and security teams have suddenly found themselves severely understaffed. Most folks are pushing AI-generated code merged with AI-only reviews, without paying much attention to quality. After all, they&#8217;re dealing with the possibility of unemployment, while firefighting to operate a team without its best engineers whose headcount has been cut in half, all with the knowledge that AI usage could affect their own job security.</p><p><strong>Two weeks ago, on 30 May, the most embarrassing outage in Meta&#8217;s history happened. </strong>Here&#8217;s software engineer Siddharth Sundharam&#8217;s <a href="https://www.0xsid.com/blog/meta-account-takeover-fiasco">summary</a> (emphasis mine):</p><blockquote><p>&#8220;Yesterday, a slew of Instagram accounts, including some high profile ones like the Obama White House account, seemingly got hacked.</p><p>Look, I&#8217;m no spring chicken. I&#8217;ve spent almost a decade and a half identifying vulnerabilities and exploits at unicorn scale, but this is hands down the most unserious, &#8220;almost too stupid to be true&#8221; of them all.</p><p>The Takeover Flow:</p><p>Step 01: Faking the Location &amp; Initiating Support. All the attacker needs to kick this off is your account username. Then, they hop on a VPN or proxy close to your city so Instagram&#8217;s security algorithms don&#8217;t suspect a thing. (You can quite easily get this from your public profile or &#8220;About&#8221; section or a hundred other ways.) Once it looks like the request is coming from the correct region, they tell the Meta support AI that the account is hacked and ask it to send the verification codes to an arbitrary email address they control.</p><p>Step 02: That&#8217;s It. Really, that&#8217;s it.</p><p><strong>The first proper zero auth password reset I&#8217;ve seen in production.</strong> There appears to be no additional check as to whether the email being given is actually something the user has used before. Once the AI sends the security code to the attacker&#8217;s email, the attacker passes it right back to complete the verification. The platform hands over a fresh password reset link, granting full ownership to the attacker.&#8221;</p></blockquote><p>This is a security breach in which Meta left its extra-secure, reinforced front door unlocked, so that anyone could come in, and there was no alarm to notify anybody when it happened! It seemed Meta only noticed when users started reporting it on social media!</p><p><strong>From talking with folks inside Meta, I&#8217;ve learned that AI was at the heart of this outage. </strong>AI-generated, AI-reviewed code, and security teams being gutted were together the cause of this beyond-embarrassing incident. I poked around, and here&#8217;s what I gathered:</p><ul><li><p>Instagram&#8217;s Trust and Safety Team lost around 50% of its staff to data labeling and layoffs. Some of the most senior folks were drafted onto AI training tasks.</p></li><li><p>AI-generated changes that saw no human input, just another AI code review, were very common during the last two months, across the codebase. The change that caused this outage looked like one of these</p></li><li><p>Normally, the Trust and Safety team would be on top of monitoring and alerting of security breaches,  but it is currently in full disarray due to rapid, internal disorganization.</p></li></ul><p><strong>Meta&#8217;s Chief Security Officer resigned the very next day. </strong>The outage was resolved on Monday, 1 June, and an investigation started as part of the SEV process. On Tuesday, Meta&#8217;s Chief Information and Security Officer (CISO), Guy Rosen, <a href="https://www.bloomberg.com/news/articles/2026-06-02/meta-s-rosen-former-head-of-election-integrity-to-depart">announced</a> his departure.</p><p>Coincidence? I suspect not: the CISO might have stepped down if they warned against the Security org being gutted but were then ignored, and so no longer trusts leadership. I also imagine the CISO didn&#8217;t have the idea to move a good half of Instagram&#8217;s security team over to data labeling.</p><p><em>As a note, the previously worst outage was all Meta services going down for seven hours <a href="https://en.wikipedia.org/wiki/2021_Facebook_outage">in 2021</a>, due to a DNS / BGP configuration issue. It was a bad outage, but Meta handled the follow up well, in my opinion. After that 2021 outage, Meta <a href="https://engineering.fb.com/2021/10/04/networking-traffic/outage/">shared a postmortem and apology</a>. It has not done so for the latest Instagram account takeover outage.</em></p><h2>5. Internal mess</h2><p>Wired <a href="https://www.wired.com/story/mark-zuckerberg-meta-employee-meeting-interrupt-ai/?_sp=2e37591b-dcf6-4632-bbf6-bc7c570a4b65.1781609124066">shares more details</a> on just how bad the situation is inside Meta, right now:</p><blockquote><p>&#8220;Someone interrupted a livestreamed, employee-only presentation at Meta earlier this week with an expletive-filled outburst about &#8220;being the company&#8217;s bitch,&#8221; according to a recording heard by WIRED. The individual then asked the people leading the call to write to a specific Meta AI executive and &#8220;tell him that he&#8217;s a piece of shit.&#8221;</p><p>The incident, which took place on a call open to thousands of employees, reflects growing frustration inside the company&#8217;s Applied AI team, which was formed in March to support the work of AI researchers at Meta Superintelligence Labs. Three current employees tell WIRED there is widespread dissatisfaction with how Meta assembled the unit of about 6,500 engineers and product managers and the drudgework they allege they have been assigned to improve AI models.</p><p>&#8220;It&#8217;s literally the gulag,&#8221; one of the employees claims. &#8220;You have zero purpose in life all of a sudden, you barely interact with anyone, you just have these tasks every week.&#8221;</p></blockquote><p>There&#8217;s more: Meta&#8217;s Chief Product Officer, Chris Cox, reportedly admitted to staff that Meta&#8217;s upper leadership (the folks above him, meaning the C-level at Meta) created the mess. Also from Wired:</p><blockquote><p>During a meeting this week open to all employees at Instagram, Meta chief product officer Chris Cox addressed the &#8220;difficult&#8221; and &#8220;brutal&#8221; environment created by the &#8220;insanity of this company&#8221; in the past few months, according to a recording heard by WIRED. Cox applauded Instagram employees for launching features and serving around 2 billion users amid what he compared to &#8220;running a marathon in the middle of a hailstorm and then, like, your teammate gets replaced and then we&#8217;re recording you.&#8221;</p><p>&#8220;It&#8217;s like what the fuck,&#8221; he said, drawing laughs, before repeating himself. &#8220;It is like what the fuck.&#8221;</p></blockquote><h2>6. Self-inflicted wounds</h2><p>So, is there an ultimate source of the &#8220;insanity of this company&#8221;, as CPO Chris Cox put it? Engineers whom I talked to point the finger at two individuals: Mark Zuckerberg and Alexandr Wang. Zuckerberg has full control over the business, and has made the decisions to reallocate a good part of engineering folks to data labeling, to roll out tracking software, and to lay off 10% of staff when Meta achieved record revenue and profits. As the CEO, the buck clearly stops with him.</p><p>But it&#8217;s hard to unsee that &#8211; outside of layoffs &#8211; everything that Meta is doing is taken from the Scale AI playbook, and that surely comes from Wang:</p><ul><li><p>Mandatory keystroke and mouse tracking to generate training data</p></li><li><p>Forced data labeling with 4,500+ engineers is to generate high-quality RLHF, surely for Meta&#8217;s under-construction coding LLM</p></li><li><p>Taking away the best engineers from the heart of the business is surely signed off by Mark Zuckerberg, believing that it is more important for Meta to train a coding AI than it is to operate its core business like Instagram, Facebook or Messenger reliably. Oh, did I mention that on Saturday (12 June) Facebook and Instagram <a href="https://www.tomsguide.com/news/live/meta-instagram-facebook-messenger-down-6-12-2026-live-updates">had another SEV0</a>, that is, a full-on outage?</p></li></ul><p>Before all this happened, Meta <a href="https://newsletter.pragmaticengineer.com/i/195258143/3-morale-at-meta-hits-all-time-low">was on track</a> to overtake Google as the world&#8217;s #1 ads business by the end of the year. But for some reason, Mark Zuckerberg decided that building a coding LLM is more important.</p><p><strong>Meta&#8217;s leadership is now trying to undo all the damage they have done. </strong>Wired reports that Meta CTO, Andrew Bosworth, <a href="https://www.wired.com/story/andrew-bosworth-meta-employees-unrest/">admitted</a> to staff that the AI reorg was atrocious and committed to better communication in the future.</p><p>To me, it looks obvious that Zuckerberg doesn&#8217;t care how engineers feel about the massive changes, and that Bosworth likely ignored the chaos, all while engineers know for a fact that the next AI model matters more than they do to the business. Bosworth also said that employees will have access to AI coaching tools.<em> Very considerate, given the situation!</em></p><p>Based on all I&#8217;ve learned, Meta&#8217;s engineering culture is dead because leadership has made it clear that engineering at the company is <a href="https://newsletter.pragmaticengineer.com/p/profit-centers-cost-centers">a cost center</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_!uzPs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uzPs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 424w, https://substackcdn.com/image/fetch/$s_!uzPs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 848w, https://substackcdn.com/image/fetch/$s_!uzPs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 1272w, https://substackcdn.com/image/fetch/$s_!uzPs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uzPs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png" width="1456" height="948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:948,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2270482,&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://newsletter.pragmaticengineer.com/i/202307236?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.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_!uzPs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 424w, https://substackcdn.com/image/fetch/$s_!uzPs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 848w, https://substackcdn.com/image/fetch/$s_!uzPs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 1272w, https://substackcdn.com/image/fetch/$s_!uzPs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220f78ee-73a9-4d1a-bfbd-371f36315d97_1678x1092.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Nice while it lasted</em></figcaption></figure></div><p>Needless to say, I hope my assessment is way off, but I&#8217;ve seen nothing yet from Mark Zuckerberg and Alexandr Wang &#8211; the two executives creating this current mess &#8211; to suggest it is.<em> There may be a short time period where, if major changes like data labeling assignments and staff tracking are undone, then things at Meta could return to normal. The longer the current conditions persist, the more tenured engineers will surely leave.</em></p><h2>7. Is &#8220;AI psychosis&#8221; just a Meta issue?</h2><p>It&#8217;s tragic to see a technical founder at Meta so focused on AI that he neglects the engineers who built the heart of his company. But is Meta a one-off exception?</p><p>Mitchell Hashimoto (creator of Ghostty, founder of HashiCorp) <a href="https://x.com/mitchellh/status/2055380239711457578?s=20">says</a> he is seeing similar behavior by other founders (emphasis mine:)</p><blockquote><p>&#8220;<strong>I strongly believe there are entire companies right now under heavy &#8220;AI psychosis&#8221; and it&#8217;s impossible to have rational conversations about it with them.</strong> I can&#8217;t name any specific people because they include personal friends I deeply respect, but I worry about how this plays out.</p><p>I lived through the great MTBF vs MTTR (mean-time-between-failure vs. mean-time-to-recovery) reckoning of infrastructure during the transition to cloud and cloud automation. All those arguments are rearing their ugly heads again but now it&#8217;s... the whole software development industry (maybe the whole world, really).</p><p>It&#8217;s frightening, because &#8216;psychosis folks&#8217; operate under an almost absolute &#8220;MTTR is all you need&#8221; mentality: &#8220;it&#8217;s fine to ship bugs because the agents will fix them so quickly and at a scale humans can&#8217;t do!&#8221; We learned in infrastructure that MTTR is great but you can&#8217;t yeet resilient systems entirely.</p><p>The main issue is I don&#8217;t even know how to bring this up to people I know personally, because bringing this topic up leads to immediate dismissals like &#8220;no no, it has full test coverage&#8221;, or &#8220;bug reports are going down&#8221; or something, which just don&#8217;t paint the whole picture.</p><p>We already learned this lesson once in infrastructure: you can automate yourself into a very resilient catastrophe machine. Systems can appear healthy by local metrics while globally becoming incomprehensible. Bug reports can go down while latent risk explodes. Test coverage can rise while semantic understanding falls. Changes happen so fast that nobody notices the underlying architecture decaying.</p><p>I worry.&#8221;</p></blockquote><p>The takeover outage at Instagram was exactly like this: the engineering team dropped the quality bar for AI-generated and AI-reviewed code, probably expecting that they could recover quickly from failures. And they did indeed recover&#8230; after the damage was done, high-profile Instagram accounts were hacked, and the system was compromised, all very publicly.</p><p>Mitchell highlights the specific concern of founders over-estimating the capabilities of AI, and consequently casting aside sensible safeguards when shipping code to production.</p><h2>Takeaways</h2><p>Most of us probably have something to learn from the disastrous events at Meta caused by hyper-focus on AI to the exclusion of people who are the lifeblood of that company.<strong> </strong>In some good news, I&#8217;m hearing that in the UK, some of the 10% layoffs have suddenly been cancelled: at the end of the mandatory consultation period, several infra and security teams are learning that no engineers on their team will be let go, as originally expected.</p><p>Meta has a booming business, and is already a beneficiary of AI via increased ads revenue. Meanwhile, my Facebook feed is filled with fake, AI-generated videos, with hundreds of comments from bots and people who seemingly don&#8217;t realize it&#8217;s AI. It all seems like just more content for Meta to show ads next to.</p><p>And yet, despite business booming, Meta&#8217;s leadership has gone on a crusade to inflict the most damage possible on its engineering org. Apparently, they&#8217;re now learning that most of it was pointless.</p><p><strong>If you&#8217;re in a leadership position and feeling the temptation to make drastic org changes for AI-related reasons, take a deep breath and see where it left Meta. </strong>Meanwhile, If you&#8217;re an engineer at a company whose leadership is over-indexing on AI, consider forwarding this article as additional context.</p><p>If you&#8217;re hiring standout engineers who are extremely hands-on with AI, then it&#8217;s never been easier to get talent from Meta, than right now. Every engineer I know at the company is an extremely early adopter of AI, and knows how to build products and AI infra. These folks have soured on the company and its leadership. Meta&#8217;s loss of talent will be the gain of other startups and the rest of Big Tech; it&#8217;s one benefit of AI that&#8217;s probably a bit unexpected &#8211; not least of all by Meta!</p><p>It seems like the old mantra of &#8220;move fast and break things&#8221; has now extended to Meta&#8217;s engineering org itself, with the company&#8217;s rush to over-invest in AI, so it will avoid missing the latest mega-trend in the tech industry.</p>]]></content:encoded></item><item><title><![CDATA[State of the software engineering job market in 2026, part 2]]></title><description><![CDATA[Deepdive into the tech jobs market with exclusive data revealing AI labs are more attractive than Big Tech, native mobile & frontend roles are declining, management&#8217;s &#8220;great flattening&#8221;, and more]]></description><link>https://newsletter.pragmaticengineer.com/p/the-job-market-in-2026-part-2</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/the-job-market-in-2026-part-2</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 09 Jun 2026 16:35:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6pbI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>What&#8217;s going on in today&#8217;s job market? We try to answer that big question in this second part of our deepdive into the tech employment market, following <strong><a href="https://newsletter.pragmaticengineer.com/p/state-of-the-job-market-2026">Part 1 on the tech jobs market in 2026</a>,</strong> published two weeks ago.</p><p>First of all, a big thank you to partner teams for sharing exclusive details for this deepdive:</p><ul><li><p><strong><a href="http://interviewing.io">Interviewing.io</a></strong>: anonymous mock interviews with engineers from top companies. Thanks to founder and CEO, Aline Lerner.</p></li><li><p><strong><a href="http://workforce.ai">Workforce.ai</a>,</strong> built by Live Data Technologies, which monitors 1M+ job changes and 300M+ employment validations monthly, across companies, roles, levels, functions, industries, and locations. Special thanks to Alex Hamilton for his input.</p></li><li><p><strong><a href="https://www.signalfire.com/">SignalFire</a></strong>: a VC firm with a standout data analysis team. Ordinarily, their data is used to give their portfolio companies a major commercial advantage, but they made an exception to share some for this article. Special thanks to Asher Bantock.</p></li><li><p><strong><a href="https://www.trueup.io/">TrueUp</a></strong>: a platform that scans every open job in Big Tech, top startups, and scaleups, typically paying in the top two tiers of the trimodal software engineering compensation model. Thanks, Amit Taylor.</p></li></ul><p>Today, we cover:</p><ol><li><p><strong>Top AI labs are now more attractive than Big Tech.</strong> Anthropic is most in demand among job candidates for interview preparation services. Along with OpenAI, it&#8217;s almost certainly the place with the most competition for jobs in tech.</p></li><li><p><strong>Harder for new grads &amp; interns to get hired. </strong>Data shows that intern intakes have fallen, even as software engineering recruitment recovers. Large tech companies take on half as many interns as before, and candidates&#8217; work and educational backgrounds matter more than ever.</p></li><li><p><strong>Mobile and frontend demand drops, AI &amp; FDE surges. </strong>Frontend engineer titles are disappearing fastest across the industry, followed by native iOS and Android ones.</p></li><li><p><strong>AI engineering comp &gt; software engineering comp.</strong> AI engineers are more in demand than software engineers, and get higher compensation offers, especially with equity. At the 80th percentile in the US, $300K+ base salaries are the norm now for senior engineers.</p></li><li><p><strong>Management&#8217;s &#8220;great flattening&#8221; continues. </strong>There are fewer engineering managers for each engineer across the industry, and fewer VP of engineering and director of engineering posts at Big Tech.</p></li><li><p><strong>Big Tech seniority &amp; tenure keep rising.</strong> Since the end of zero interest rates in 2023, it&#8217;s as if there&#8217;s fewer ways to tempt Big Tech workers to switch jobs, so they remain in situ.</p></li><li><p><strong>Interview preparation signups: what do they indicate? </strong>Companies doing mass layoffs tend to see the biggest surge in devs signing up to practice interviews. A list of the top 20 companies from where engineers are preparing to interview elsewhere.</p></li><li><p><strong>Where engineers go after Big Tech. </strong>From Amazon, they go pretty much everywhere. From Google, Apple &amp; Meta, it&#8217;s mostly to AI labs. Microsoft is where the most ex-workers become their own bosses by working for themselves next.</p></li></ol><p>As a reminder, <strong><a href="https://newsletter.pragmaticengineer.com/p/state-of-the-job-market-2026">in Part 1,</a></strong> we covered:</p><ul><li><p>Software engineering recruitment: trending up, mostly</p></li><li><p>Big Tech and publicly-traded companies</p></li><li><p>Who&#8217;s hiring the most software engineers?</p></li><li><p>AI engineering: explosive demand</p></li><li><p>Who&#8217;s hiring the most AI engineers?</p></li><li><p>Is AI engineering replacing software engineering hiring?</p></li></ul><p><strong><a href="https://newsletter.pragmaticengineer.com/p/tech-jobs-market-in-2026-part-3-hiring">See Part 3</a></strong> for stories from hiring managers and job seekers, covering:</p><ol><li><p>&#8220;Catch-22:&#8221; nobody finds each other</p></li><li><p>No trust. Is AI to blame?<strong> </strong></p></li><li><p>Hot market for some, but tough for most</p></li><li><p>Higher hiring bar &amp; lower compensation &#8211; but not for everyone</p></li><li><p>Engineering leader recruitment: also weird for senior ICs</p></li><li><p>US market trends</p></li><li><p>Trends in the UK, EU, and rest of the world</p></li></ol><p>Let&#8217;s get into the latest data:</p><h2>1. Top AI labs now more attractive than Big Tech</h2><p>In Part 1 of this mini-series, we cover the <a href="https://newsletter.pragmaticengineer.com/i/199358573/4-ai-engineering-explosive-demand">exploding</a> demand for AI engineering:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cq3z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cq3z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 424w, https://substackcdn.com/image/fetch/$s_!Cq3z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 848w, https://substackcdn.com/image/fetch/$s_!Cq3z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 1272w, https://substackcdn.com/image/fetch/$s_!Cq3z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cq3z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png" width="1456" height="869" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:869,&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_!Cq3z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 424w, https://substackcdn.com/image/fetch/$s_!Cq3z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 848w, https://substackcdn.com/image/fetch/$s_!Cq3z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 1272w, https://substackcdn.com/image/fetch/$s_!Cq3z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf7df771-58ec-466d-af9b-b7c281eb1af6_2048x1223.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Source: <a href="https://www.trueup.io/">TrueUp</a></em></figcaption></figure></div><p>AI engineering job openings have increased 60% in the past year at top companies, while software engineering openings grew by 7% in the same places. We also found that Big Tech is significantly growing AI engineering headcount:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xt6D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xt6D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 424w, https://substackcdn.com/image/fetch/$s_!xt6D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 848w, https://substackcdn.com/image/fetch/$s_!xt6D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!xt6D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xt6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png" width="1456" height="1119" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1119,&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_!xt6D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 424w, https://substackcdn.com/image/fetch/$s_!xt6D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 848w, https://substackcdn.com/image/fetch/$s_!xt6D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!xt6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb3bd7-3f9b-499c-ba4e-9a17d3e616b3_1873x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>AI engineering headcount growth at Big Tech. We look into Microsoft&#8217;s spike <a href="https://newsletter.pragmaticengineer.com/i/199358573/what-happened-in-mid-2025-at-microsoft">in Part 1.</a> Source: Workforce.ai</em></figcaption></figure></div><h3>Anthropic: most in demand</h3><p>New data suggests that the two biggest AI labs are attracting the most candidates to apply for their AI engineering roles, which is pretty predictable.</p><p><a href="http://interviewing.io">Interviewing.io</a> is a job interview preparation service which offers coaching for clients who are getting ready for interviews at specific companies. Based on the number of mentions by clients, Anthropic is the one most candidates are preparing for with paid coaching, and it&#8217;s not even close:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6pbI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6pbI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 424w, https://substackcdn.com/image/fetch/$s_!6pbI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 848w, https://substackcdn.com/image/fetch/$s_!6pbI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!6pbI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6pbI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png" width="1456" height="1032" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1032,&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_!6pbI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 424w, https://substackcdn.com/image/fetch/$s_!6pbI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 848w, https://substackcdn.com/image/fetch/$s_!6pbI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!6pbI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d04df85-7afe-471e-8b70-a8f9e83800df_2048x1452.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Most popular employers in coaching prep. Source: <a href="http://interviewing.io">interviewing.io</a></em></figcaption></figure></div><p>It&#8217;s also notable that OpenAI (16% of candidates) gets around the same share as Google (17%) and other large tech companies (17%). Combined, Anthropic and OpenAI account for 51% of all interviewing.io coaching requests. For context, interviewing.io only added coaching for frontier labs this year!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ooWY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ooWY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 424w, https://substackcdn.com/image/fetch/$s_!ooWY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 848w, https://substackcdn.com/image/fetch/$s_!ooWY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 1272w, https://substackcdn.com/image/fetch/$s_!ooWY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ooWY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png" width="1456" height="1206" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1206,&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_!ooWY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 424w, https://substackcdn.com/image/fetch/$s_!ooWY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 848w, https://substackcdn.com/image/fetch/$s_!ooWY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 1272w, https://substackcdn.com/image/fetch/$s_!ooWY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9f08f71-3c32-402e-9459-e3346146041e_1584x1312.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Weekly coaching demand for Anthropic vs OpenAI. Source: <a href="http://interviewing.io">interviewing.io</a></em></figcaption></figure></div><p>There are a few potential causes of the surge of interest in Anthropic:</p><ul><li><p><strong>OpenAI replaces Anthropic as AI supplier for the US&#8217;s novel &#8216;Department of War&#8217;. </strong>In early March, the US Government controversially declared Anthropic a &#8220;supply chain risk&#8221;, and appointed OpenAI as its<a href="https://newsletter.pragmaticengineer.com/i/190020609/anthropic-versus-department-of-war"> AI supplier</a>, after Anthropic raised concerns about the future use of AI in mass surveillance and fully autonomous weapons. This raised suspicions that OpenAI agreed to cross &#8216;red lines&#8217;.</p></li><li><p><strong>Anthropic&#8217;s market dominance continues.</strong> Claude Code is the most popular developer tool, as found by our AI tooling survey <a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026">in February</a>. It seems little has changed.</p></li><li><p><strong>Anthropic&#8217;s value exceeds OpenAI&#8217;s.</strong> In March, Anthropic <a href="https://www.cnbc.com/2026/05/28/anthropic-open-ai-startup-value.html">raised</a> a $65B funding round at a $965B valuation, making it more valuable than OpenAI for the first time.</p></li><li><p><strong>Anthropic files to go public first. </strong>Last week, Anthropic <a href="https://www.anthropic.com/news/confidential-draft-s1-sec">filed</a> to go public, beating OpenAI which <a href="https://www.reuters.com/technology/openai-files-us-ipo-after-anthropic-ai-giants-head-public-markets-2026-06-08/">has done so a week later.</a></p></li></ul><p>Anthropic also recruited the most in-demand AI researcher, Andrej Karpathy, <a href="https://newsletter.pragmaticengineer.com/i/198733941/andrej-karpathy-joins-anthropic">in May</a>. My sense is that between the two labs, Anthropic has more momentum for the time being, and has perhaps acquired a &#8216;halo effect&#8217; with its seemingly principled stance. It&#8217;s not surprising that it&#8217;s attracting more candidates.</p><h3>Where are AI labs hiring from?</h3><p>We looked into the sources of recruits to the three most in-demand AI labs: Anthropic, OpenAI, and Google DeepMind. Here&#8217;s what we found:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JX6C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JX6C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 424w, https://substackcdn.com/image/fetch/$s_!JX6C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 848w, https://substackcdn.com/image/fetch/$s_!JX6C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 1272w, https://substackcdn.com/image/fetch/$s_!JX6C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JX6C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png" width="1456" height="1296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1296,&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_!JX6C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 424w, https://substackcdn.com/image/fetch/$s_!JX6C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 848w, https://substackcdn.com/image/fetch/$s_!JX6C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 1272w, https://substackcdn.com/image/fetch/$s_!JX6C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F518f80bc-c98b-4927-8d71-a3030970abd0_2048x1823.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Where top AI labs recruit from, and where folks go next. Source: <a href="http://workforce.ai">workforce.ai</a></em></figcaption></figure></div><p><strong>Where Anthropic hires from,</strong> in order of popularity:</p><ol><li><p>Google (often Google DeepMind)</p></li><li><p>Meta</p></li><li><p>Stripe</p></li><li><p>Microsoft</p></li><li><p>Amazon (AWS)</p></li><li><p>Databricks</p></li></ol><p><strong>OpenAI</strong>:</p><ol><li><p>Google</p></li><li><p>Meta</p></li><li><p>Apple</p></li><li><p>Stripe</p></li><li><p>Statsig (after OpenAI acquired Statsig)</p></li><li><p>Microsoft</p></li><li><p>Amazon (mostly AWS)</p></li><li><p>Databricks</p></li><li><p>Airbnb</p></li><li><p>NVIDIA</p></li></ol><p><strong>Google DeepMind:</strong></p><ol><li><p>Internal transfer</p></li><li><p>Meta</p></li><li><p>Microsoft</p></li><li><p>Amazon</p></li><li><p>Windsurf</p></li></ol><p><strong>Anthropic has the highest retention rate of all AI labs. </strong>Data from SignalFire found the 2-year retention rate (percentage of employees who stay 2 years) is:</p><ul><li><p>OpenAI: 67%. This is consistent with the rest of Big Tech</p></li><li><p>Google DeepMind: 78%. Well above the rest of Big Tech</p></li><li><p>Anthropic: 80%. Standout, industry-wide!</p></li></ul><p>Consistent with SignalFire&#8217;s 2025 finding, OpenAI 2-year retention was 67% (FAANG-level) versus Anthropic (80%), and DeepMind (78%).</p><h2>2. Harder for graduates &amp; interns to get hired</h2><p>It&#8217;s well known that it&#8217;s getting harder to be hired as an early-career engineer, and new data underlines this.</p><h3>Intern intakes down since 2022</h3><p>Live Data Technologies looked at software engineer vs engineering intern hiring trends at 30-80 US-based tech companies, pinned to 2019 hiring numbers (100% being that year&#8217;s total number of hires). <em>The spread is wide because Live Data Technologies selects the top few dozen companies that meet their criteria for a &#8220;large public tech company&#8221; in their database.</em></p><p><em>The findings:</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_!AwMR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AwMR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 424w, https://substackcdn.com/image/fetch/$s_!AwMR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 848w, https://substackcdn.com/image/fetch/$s_!AwMR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 1272w, https://substackcdn.com/image/fetch/$s_!AwMR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AwMR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png" width="1456" height="1449" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1449,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:630932,&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://newsletter.pragmaticengineer.com/i/201325168?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.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_!AwMR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 424w, https://substackcdn.com/image/fetch/$s_!AwMR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 848w, https://substackcdn.com/image/fetch/$s_!AwMR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 1272w, https://substackcdn.com/image/fetch/$s_!AwMR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8c03fc-2d93-46b9-8f1d-f7ea03f39fa5_1986x1976.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Intern hiring is falling, but not software engineering recruitment. Source: Live Data Technologies</figcaption></figure></div><p>Zooming into intern hiring, here&#8217;s a visualization of it as a percentage of all appointments:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h7Y-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h7Y-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 424w, https://substackcdn.com/image/fetch/$s_!h7Y-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 848w, https://substackcdn.com/image/fetch/$s_!h7Y-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!h7Y-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h7Y-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png" width="1226" height="1202" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1202,&quot;width&quot;:1226,&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_!h7Y-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 424w, https://substackcdn.com/image/fetch/$s_!h7Y-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 848w, https://substackcdn.com/image/fetch/$s_!h7Y-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!h7Y-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F057dca33-32c5-4180-8fd2-88225a7fd96b_1226x1202.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tech companies are hiring fewer interns. Source: Live Data Technologies</figcaption></figure></div><p>Alex Hamilton, analyst at Live Data Technologies, says:</p><blockquote><p>&#8220;We&#8217;ve seen overall software engineering hiring start to come back since the 2023 tough market. However, intern intake just kept falling alongside it, which isn&#8217;t what you&#8217;d normally expect.</p><p><strong>Historically, intern programmes have tended to bounce back pretty quickly once companies start hiring again. </strong>That hasn&#8217;t happened this time, and 2024 and 2025 are the first years in the series where the two lines are moving in opposite directions.</p><p>Where you do see companies holding intern intake steady or growing it, it&#8217;s almost always a reflection of where they are as a business, be that earlier-stage or faster-growing companies, rather than any kind of broader market recovery&#8221;.</p></blockquote><h3>Graduate jobs trending down</h3><p>Anecdotally, we hear new grads continue to have a hard time finding a position. Our new recruitment data on major US tech companies confirms it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cKU_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cKU_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 424w, https://substackcdn.com/image/fetch/$s_!cKU_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 848w, https://substackcdn.com/image/fetch/$s_!cKU_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!cKU_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cKU_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png" width="1362" height="1352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1352,&quot;width&quot;:1362,&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_!cKU_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 424w, https://substackcdn.com/image/fetch/$s_!cKU_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 848w, https://substackcdn.com/image/fetch/$s_!cKU_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!cKU_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc43e6596-e176-420c-87ca-6eaf576ecc69_1362x1352.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Share of new grad recruitment at 28 large US tech companies. Source: Live Data Technologies</figcaption></figure></div><p>&#8220;New grads&#8221; in this data are software engineers who graduated less than a year before getting a job as a software engineer. In 2025, just one in 10 engineering hires at larger companies were recent grads, down from nearly three in 10 in 2023.</p><h3>Pedigree matters more for new grads</h3><p>We looked closely at the places from where new graduate software engineers are joining US-based tech companies, and found the share of successful candidates from &#8220;elite&#8221; universities is growing:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gBsQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gBsQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 424w, https://substackcdn.com/image/fetch/$s_!gBsQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 848w, https://substackcdn.com/image/fetch/$s_!gBsQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!gBsQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gBsQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png" width="1456" height="1439" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1439,&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_!gBsQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 424w, https://substackcdn.com/image/fetch/$s_!gBsQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 848w, https://substackcdn.com/image/fetch/$s_!gBsQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!gBsQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19924b4b-5d21-4c1e-8935-00df0b2a7857_1514x1496.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Source: Live Data Technologies</em></figcaption></figure></div><p>By &#8220;elite&#8221; universities, we mean one of the top 20 US colleges for computer science, such as MIT, Stanford, Carnegie Mellon, UC Berkeley, Harvard, Caltech, Georgia Tech, and Cornell.</p><p>Obviously, the influence of these places&#8217; reputations is not a new thing, it&#8217;s what makes them &#8220;elite&#8221; universities, after all. But with new grad hiring down across tech, even graduates from these universities can expect fewer opportunities than before.</p><p>Even so, the pedigree that comes from graduating from a well-known university, or doing an internship at a well-known company, becomes ever more significant as the job market tightens.</p><h2>3. Mobile and frontend demand drops, AI &amp; FDE surges</h2><p>Here&#8217;s interesting data showing the shifting prevalence of job titles on sites like LinkedIn over time:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B9zQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B9zQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 424w, https://substackcdn.com/image/fetch/$s_!B9zQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 848w, https://substackcdn.com/image/fetch/$s_!B9zQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!B9zQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B9zQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png" width="1456" height="882" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:882,&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_!B9zQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 424w, https://substackcdn.com/image/fetch/$s_!B9zQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 848w, https://substackcdn.com/image/fetch/$s_!B9zQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!B9zQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07b9646e-dece-44bd-ada0-eaa406e5d539_2048x1240.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>How engineering titles changed in the last four years. Source: <a href="https://www.signalfire.com/">SignalFire</a></em></figcaption></figure></div><p>Some takeaways:</p><ul><li><p><strong>AI engineering&#8217;s on fire.</strong> This is not surprising and is evident throughout our study.</p></li><li><p><strong>Forward Deployed Engineers (FDE) are growing rapidly</strong>. We covered the sudden demand for FDEs <a href="https://newsletter.pragmaticengineer.com/p/forward-deployed-engineers">in 2025</a>, and this year we&#8217;re seeing the FDE role heat up again.</p></li><li><p><strong>Modest increase in sales engineers: </strong>Sales engineers help close large, B2B-type, deals, and are typical at companies selling to enterprises. The rise in prevalence of this position suggests more companies are targeting enterprise-scale clients. Also, my sense is that FDEs can operate like sales engineers.</p></li><li><p><strong>There are fewer native mobile engineers. </strong>In 2022, I observed <a href="https://newsletter.pragmaticengineer.com/p/native-vs-cross-platform">a drop in demand</a> for native iOS and Android engineers. Cross-platform frameworks being more capable today may contribute to fewer places investing in native applications, and a fall in demand for this discipline overall. Is the &#8220;golden age&#8221; of native mobile development over, with its standalone native iOS, native Android, and web teams for a single product?</p></li><li><p><strong>Frontend-only engineers are disappearing. </strong>This is one of the most interesting trends in the data. I&#8217;ve observed full-stack engineers become the norm at many places, who can do both frontend and backend development. Especially with AI, there is no reason a proficient frontend engineer should not work on backend as well, so, I expect &#8220;pure&#8221; frontend engineers will be employed only in larger companies, where demand exists for things like building a design system. <em>We cover more on this topic in the deepdive, <a href="https://newsletter.pragmaticengineer.com/p/design-systems-for-software-engineers">Design systems for software engineers</a>.</em></p></li></ul><h2>4. AI engineering comp &gt; software engineering comp</h2><p>One poorly-kept secret in tech is that although software engineering compensation is very good at Big Tech and top startups, it&#8217;s superior for AI engineering jobs at the same places &#8211; and even better at leading AI labs:</p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/the-job-market-in-2026-part-2">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Ideas: slow down to speed up when working with AI agents]]></title><description><![CDATA[Devs are generating twice as much code (or more) than just 6 months ago, which is a problem for quality, reliability, and tech debt. A rational fix is available for these, but who&#8217;s acting rationally?]]></description><link>https://newsletter.pragmaticengineer.com/p/ideas-slow-down-to-speed-up-when</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/ideas-slow-down-to-speed-up-when</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 02 Jun 2026 16:42:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vg8z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb13752-d141-4958-948f-223fa5cf58fa_1024x559.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Scheduling update: this week, there will be a podcast episode on Wednesday and no The Pulse on Thursday.</em></p><p>I&#8217;m in Budapest, Hungary, this week, for Craft Conference, where I&#8217;ll be giving a keynote presentation alongside other speakers, including software engineering legend Kent Beck, who&#8217;s been <a href="https://newsletter.pragmaticengineer.com/p/tdd-ai-agents-and-coding-with-kent">on the podcast</a>, Hillel Wayne, a formal methods expert and the author of &#8216;<a href="https://leanpub.com/logic">Logic for Programmers</a>&#8217;, and Titus Winters, lead author of <a href="https://abseil.io/resources/swe-book">Software Engineering at Google</a>.</p><p>The title of my keynote is<em> &#8220;Slow down to speed up&#8221;, </em>and I&#8217;ve been thinking about this topic a lot recently. Here are some things I&#8217;ve been seeing that I feel are relevant&#8230;</p><h3>AI coding tools now used by pretty much all software engineers &#8211; that&#8217;s fast!</h3>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/ideas-slow-down-to-speed-up-when">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[State of the software engineering job market in 2026]]></title><description><![CDATA[A deepdive into today&#8217;s tech jobs market, with exclusive data on software engineering jobs, the AI engineering boom, whether AI engineering is &#8220;replacing&#8221; software engineering hiring, and more]]></description><link>https://newsletter.pragmaticengineer.com/p/state-of-the-job-market-2026</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/state-of-the-job-market-2026</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 26 May 2026 18:10:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!P4An!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last year, I <a href="https://newsletter.pragmaticengineer.com/p/state-of-the-tech-market-in-2025">described</a> the tech jobs market as &#8220;weird&#8221;, based on reports from both job seekers and hiring managers. In this deepdive, we dig into what &#8211; if anything &#8211; has changed in 2026.</p><p>A year ago, most engineers found it harder to get responses to job applications, while hiring managers found it harder to hire than before. We&#8217;ve now spent two months gathering fresh, never-before-shared data from a range of sources to find out if that paradoxical situation still exists or not.</p><p>We collected the data with software engineer Jessica Salmon &#8211; who&#8217;s joined the team as a tech industry analyst. A big thank you to partner teams who shared exclusive details for this deepdive:</p><ul><li><p><strong><a href="https://www.trueup.io/">TrueUp</a></strong>: a platform that scans every open job in Big Tech, top startups, and scaleups, typically paying in the top two tiers of the <a href="https://newsletter.pragmaticengineer.com/p/trimodal">trimodal software engineering compensation</a> model. <em>Thanks, Amit Taylor.</em></p></li><li><p><strong><a href="http://workforce.ai">Workforce.ai</a></strong>, built by Live Data Technologies, which monitors 1M+ job changes and 300M+ employment validations each month across companies, roles, levels, functions, industries, and locations. <em>Special thanks to Alex Hamilton for his input.</em></p></li></ul><p>Today, we cover:</p><ol><li><p><strong>Software engineering recruitment: trending up, mostly. </strong>More software engineering job postings in the UK and the US, and a decline in Germany and France. &#8220;Top&#8221; tech companies are hiring 20% more vs a year ago.</p></li><li><p><strong>Big Tech and publicly-traded companies. </strong>Meta went on a monster hiring spree for the last two years until layoffs, last week. Microsoft and Amazon were flat, while Google and Apple consistently hired devs. Stripe, Shopify, and Atlassian all hired more than Big Tech.</p></li><li><p><strong>Who&#8217;s hiring the most software engineers?</strong> Apple, Amazon, and IBM are the top 3 by number of positions listed, while Meta dropped off the top 20 with layoffs there. The fastest-growing companies seem to be in fintech, observability, and security.</p></li><li><p><strong>AI engineering: explosive demand. </strong>Most tech companies seem to be prioritizing AI engineering recruitment over software engineers. Observability companies appear to be hiring fastest.</p></li><li><p><strong>Who&#8217;s hiring the most AI engineers? </strong>Apple, Google, and TikTok have the most openings, and many larger tech companies have 50-100% more AI engineering job listings than a year ago.</p></li><li><p><strong>Is AI engineering replacing software engineering hiring?</strong> The data doesn&#8217;t say, but are the basics of AI engineering becoming a baseline skill for software engineering job candidates?</p></li></ol><p><strong><a href="https://newsletter.pragmaticengineer.com/p/the-job-market-in-2026-part-2">See Part 2</a></strong> for details on:</p><ul><li><p>Top AI labs are now more attractive than Big Tech</p></li><li><p>Harder for new grads &amp; interns to get hired</p></li><li><p>Mobile and frontend demand drops, AI &amp; FDE surges</p></li><li><p>AI engineering comp &gt; software engineering comp</p></li><li><p>Management&#8217;s &#8220;great flattening&#8221; continues</p></li><li><p>Big Tech seniority &amp; tenure keep rising</p></li><li><p>Interview preparation signups: what do they indicate?</p></li><li><p>Where engineers go after Big Tech</p></li></ul><p><strong><a href="https://newsletter.pragmaticengineer.com/p/tech-jobs-market-in-2026-part-3-hiring">See Part 3</a></strong> for stories from hiring managers and job seekers, covering:</p><ol><li><p>&#8220;Catch-22:&#8221; nobody finds each other</p></li><li><p>No trust. Is AI to blame?<strong> </strong></p></li><li><p>Hot market for some, but tough for most</p></li><li><p>Higher hiring bar &amp; lower compensation &#8211; but not for everyone</p></li><li><p>Engineering leader recruitment: also weird for senior ICs</p></li><li><p>US market trends</p></li><li><p>Trends in the UK, EU, and rest of the world</p></li></ol><p><em>For more on the tech jobs market of 2025, check out <a href="https://newsletter.pragmaticengineer.com/p/state-of-the-tech-market-in-2025">last year&#8217;s deepdive.</a></em></p><h2>1. Software engineering recruitment: trending up, mostly</h2><h3>Top tech companies hiring more, slowly but surely</h3><p>TrueUp tracks open positions at top-paying companies, which are usually US-based. Among this group, recruitment of software engineers has been steadily increasing since March 2023:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cNQi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cNQi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 424w, https://substackcdn.com/image/fetch/$s_!cNQi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 848w, https://substackcdn.com/image/fetch/$s_!cNQi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 1272w, https://substackcdn.com/image/fetch/$s_!cNQi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cNQi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png" width="1260" height="850" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:850,&quot;width&quot;:1260,&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_!cNQi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 424w, https://substackcdn.com/image/fetch/$s_!cNQi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 848w, https://substackcdn.com/image/fetch/$s_!cNQi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 1272w, https://substackcdn.com/image/fetch/$s_!cNQi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99284e24-69de-42a3-bc6d-487c438ce44e_1260x850.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>&#8220;Top&#8221; startups keep hiring more devs. Source: <a href="https://www.trueup.io/job-trend">TrueUp</a></em></figcaption></figure></div><h3>US growth, but less in Canada and Europe</h3><p>Let&#8217;s take a look at broader industry trends via software developer jobs listed on Indeed.com, the world&#8217;s largest job aggregator site. As a &#8220;jobs aggregator&#8221;, Indeed not only displays paid-for ads but also crawls many other career sites and lists the vacancies.</p><p>Looking at trends over the last five years, the number of software engineering jobs listed is still lower than in May 2021:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V_VW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V_VW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 424w, https://substackcdn.com/image/fetch/$s_!V_VW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 848w, https://substackcdn.com/image/fetch/$s_!V_VW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 1272w, https://substackcdn.com/image/fetch/$s_!V_VW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V_VW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png" width="1456" height="835" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:835,&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_!V_VW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 424w, https://substackcdn.com/image/fetch/$s_!V_VW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 848w, https://substackcdn.com/image/fetch/$s_!V_VW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 1272w, https://substackcdn.com/image/fetch/$s_!V_VW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21201a99-a45c-4ecc-939e-1d549b9f8b7e_1492x856.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Dev job listings in the US, 2021-2026. Source: <a href="https://fred.stlouisfed.org/series/IHLIDXUSTPSOFTDEVE">FRED / Indeed</a></em></figcaption></figure></div><p>Obviously, 2021 was the pandemic which created a commercial boom for the tech industry, so it&#8217;s not exactly an ideal comparison. Zooming into the last twelve months shows encouraging growth signs:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TAhM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TAhM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 424w, https://substackcdn.com/image/fetch/$s_!TAhM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 848w, https://substackcdn.com/image/fetch/$s_!TAhM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 1272w, https://substackcdn.com/image/fetch/$s_!TAhM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TAhM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png" width="1310" height="1410" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1410,&quot;width&quot;:1310,&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_!TAhM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 424w, https://substackcdn.com/image/fetch/$s_!TAhM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 848w, https://substackcdn.com/image/fetch/$s_!TAhM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 1272w, https://substackcdn.com/image/fetch/$s_!TAhM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc84594-dcb9-4a1c-99c7-503b78412039_1310x1410.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Dev job listings in the last five years vs the past year. Source: FRED / Indeed</em></figcaption></figure></div><p>Outside of the US, let&#8217;s check out software engineering vacancy trends, per Indeed:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qOwb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qOwb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 424w, https://substackcdn.com/image/fetch/$s_!qOwb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 848w, https://substackcdn.com/image/fetch/$s_!qOwb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 1272w, https://substackcdn.com/image/fetch/$s_!qOwb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qOwb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png" width="1456" height="1137" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1137,&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_!qOwb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 424w, https://substackcdn.com/image/fetch/$s_!qOwb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 848w, https://substackcdn.com/image/fetch/$s_!qOwb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 1272w, https://substackcdn.com/image/fetch/$s_!qOwb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a1e574a-52a3-4087-b1e5-f1a89d88ccb1_1924x1502.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">S<em>oftware engineering listings over the past 12 months by country. Source: FRED / Indeed</em></figcaption></figure></div><p>In this list, the US and the UK are the only two countries where vacancies are up; Canada is flat, while Germany and France have seen declines. To me, it suggests US-headquartered companies are hiring more devs, mostly in the US and some in the UK, whereas European-headquartered companies are more cautious about recruitment.</p><h3>The software engineering industry still grows</h3><p>Let&#8217;s ask how much the software engineer population has grown or shrunk in the last seven years. Here are some numbers from profiles, as tracked by Workforce.ai:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P4An!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P4An!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 424w, https://substackcdn.com/image/fetch/$s_!P4An!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 848w, https://substackcdn.com/image/fetch/$s_!P4An!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 1272w, https://substackcdn.com/image/fetch/$s_!P4An!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P4An!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png" width="1220" height="1058" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1058,&quot;width&quot;:1220,&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_!P4An!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 424w, https://substackcdn.com/image/fetch/$s_!P4An!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 848w, https://substackcdn.com/image/fetch/$s_!P4An!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 1272w, https://substackcdn.com/image/fetch/$s_!P4An!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29e3225d-e5fc-492f-a554-b000806a74d2_1220x1058.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Net growth and shrinkage for software engineer profiles. Source: <a href="http://workforce.ai">Workforce.ai</a></em></figcaption></figure></div><p><a href="https://fred.stlouisfed.org/series/IHLIDXUSTPSOFTDEVE"><br></a>Let&#8217;s zoom into this chart:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IeAB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IeAB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 424w, https://substackcdn.com/image/fetch/$s_!IeAB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 848w, https://substackcdn.com/image/fetch/$s_!IeAB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!IeAB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IeAB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png" width="1456" height="901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:901,&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_!IeAB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 424w, https://substackcdn.com/image/fetch/$s_!IeAB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 848w, https://substackcdn.com/image/fetch/$s_!IeAB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!IeAB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec2c2d7-49e9-48ae-9756-c592d6ba34de_1684x1042.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Recruitment shifts over time. Source: Workforce.ai </figcaption></figure></div><p>There are a few interesting details:</p><ul><li><p><strong>Hiring mostly occurs between the months of March and June, </strong>and<strong> </strong>there&#8217;s very little net growth in the second half of the year. This makes sense as tech companies set annual headcount budgets at the beginning of the year and commence hiring from then, with most hires evidently made in the following months. Hiring budgets are usually spent by mid-year.</p></li><li><p><strong>The industry seemingly shrank in 2023. </strong>That year, it was only in Q2 that more software engineers were hired than left their jobs. It was the worst period for software engineers in two decades.</p></li></ul><p><strong>&#8230;and also in 2024 and 2025 during Q3. </strong>Mass layoffs mostly happened between August and October, the charts show.</p><h2>2. Big Tech and publicly-traded companies</h2><h3>Big Tech: modest jobs growth &#8211; but not at Meta</h3><p>Looking at the two years since May 2024, of the five largest tech companies, only Meta grew headcount aggressively:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hiKF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hiKF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 424w, https://substackcdn.com/image/fetch/$s_!hiKF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 848w, https://substackcdn.com/image/fetch/$s_!hiKF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 1272w, https://substackcdn.com/image/fetch/$s_!hiKF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hiKF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png" width="1366" height="940" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:940,&quot;width&quot;:1366,&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_!hiKF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 424w, https://substackcdn.com/image/fetch/$s_!hiKF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 848w, https://substackcdn.com/image/fetch/$s_!hiKF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 1272w, https://substackcdn.com/image/fetch/$s_!hiKF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29342d8-274b-4eec-a73b-d41fcac373ab_1366x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Meta hired while Microsoft and Amazon stayed more static. Source: <a href="https://app.workforce.ai/insights">Workforce.ai</a></em></figcaption></figure></div><p>In that time, Meta increased its headcount by nearly 20%, so perhaps its recent 10% layoffs could be considered as not a total surprise. As for other tech giants, their software engineering headcount also changed in the last two years:</p><ul><li><p>Apple: +10%</p></li><li><p>Google: +5%</p></li><li><p>Microsoft: -1.1%</p></li><li><p>Amazon: -1.3%</p></li></ul><p>Visualizing this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1ePc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1ePc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 424w, https://substackcdn.com/image/fetch/$s_!1ePc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 848w, https://substackcdn.com/image/fetch/$s_!1ePc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 1272w, https://substackcdn.com/image/fetch/$s_!1ePc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1ePc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png" width="1456" height="846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:846,&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_!1ePc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 424w, https://substackcdn.com/image/fetch/$s_!1ePc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 848w, https://substackcdn.com/image/fetch/$s_!1ePc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 1272w, https://substackcdn.com/image/fetch/$s_!1ePc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c7a3700-09f4-4333-b468-13f9dcb3f887_1466x852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Mixed</em> <em>software engineering headcount growth across Big Tech. Source: <a href="https://app.workforce.ai/insights">Workforce.ai</a></em></figcaption></figure></div><p>Apple and Google seem the most &#8220;stable&#8221; places when it comes to growing the software engineering function; Apple has not had mass layoffs for decades. In contrast, Meta is the most volatile place to work; hiring devs quickly and then letting them go. Elsewhere, Amazon and Microsoft are slowly employing more software folks.</p><h3>Meta&#8217;s hire-then-fire rollercoaster</h3><p>Meta warrants a closer look, where morale is reportedly <a href="https://newsletter.pragmaticengineer.com/i/198733941/3-jobs-axe-falls-at-meta-8000-let-go">as low as it&#8217;s ever been</a> right now, due to layoffs of 10% of staff, while thousands of software engineers have been <a href="https://newsletter.pragmaticengineer.com/i/196795826/3-meta-forcefully-assigns-engineers-to-data-labelling-pre-layoff">reassigned to manual data labeling</a> from previous product development or infra work. From 2004 until 2022, Meta never did mass layoffs, but in the past three years there have been three sizeable redundancy rounds (at the end of 2022, early 2024, and last week), with the most rapid hiring growth of any tech giant sandwiched in between:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_whS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_whS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 424w, https://substackcdn.com/image/fetch/$s_!_whS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 848w, https://substackcdn.com/image/fetch/$s_!_whS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 1272w, https://substackcdn.com/image/fetch/$s_!_whS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_whS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png" width="1174" height="742" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:742,&quot;width&quot;:1174,&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_!_whS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 424w, https://substackcdn.com/image/fetch/$s_!_whS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 848w, https://substackcdn.com/image/fetch/$s_!_whS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 1272w, https://substackcdn.com/image/fetch/$s_!_whS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20adfb0f-ccbd-4d2e-9a10-810290be1f15_1174x742.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Meta laid folks off in bulk, then hired them fastest among Big Techs. Source: <a href="http://workforce.ai">Workforce.ai</a></em></figcaption></figure></div><p>Before 2022, Meta ranked with Google as one of the most stable places to work in tech. Safe to say, the company is currently the riskiest place to be in job-security terms &#8211; even if Mark Zuckerberg has said there will be no more mass layoffs this year.</p><h3>Publicly-traded tech companies: mostly flat recruitment</h3><p>A couple of years ago, larger tech companies were hiring even more than most of Big Tech. Software engineering headcount grew in the past two years at Shopify (+36%), Stripe (+29%), Atlassian (+23%), Snap (+15%) and Spotify (+6%).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b-M3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b-M3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 424w, https://substackcdn.com/image/fetch/$s_!b-M3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 848w, https://substackcdn.com/image/fetch/$s_!b-M3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 1272w, https://substackcdn.com/image/fetch/$s_!b-M3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b-M3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png" width="1072" height="842" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:842,&quot;width&quot;:1072,&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_!b-M3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 424w, https://substackcdn.com/image/fetch/$s_!b-M3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 848w, https://substackcdn.com/image/fetch/$s_!b-M3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 1272w, https://substackcdn.com/image/fetch/$s_!b-M3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7dcc8b6-32e3-44b1-a260-7160dcc5dad0_1072x842.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Source: Workforce.ai</figcaption></figure></div><p>But that&#8217;s changed recently. In the past year, headcount growth has slowed at Stripe (+15%), Atlassian (+11%), Shopify (+6%), Snap (+2%), and Spotify (+1%),</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1AxH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1AxH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 424w, https://substackcdn.com/image/fetch/$s_!1AxH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 848w, https://substackcdn.com/image/fetch/$s_!1AxH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 1272w, https://substackcdn.com/image/fetch/$s_!1AxH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1AxH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png" width="1076" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1076,&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_!1AxH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 424w, https://substackcdn.com/image/fetch/$s_!1AxH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 848w, https://substackcdn.com/image/fetch/$s_!1AxH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 1272w, https://substackcdn.com/image/fetch/$s_!1AxH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd99464-89aa-410c-b1cf-1d57a283d1a0_1076x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Source: Workforce.ai </figcaption></figure></div><p>This data does not capture Atlassian letting go of 10% of staff <a href="https://newsletter.pragmaticengineer.com/i/197715901/2-why-are-layoffs-spiking">this month</a>, and Snap laying off 16% <a href="https://newsletter.pragmaticengineer.com/i/197715901/2-why-are-layoffs-spiking">in April</a>.</p><p>Among this group, Stripe stands out as a place that keeps hiring at a higher pace than nearly all of Big Tech. Atlassian and Shopify have grown their software engineering headcount faster than Google, Microsoft, and Amazon did in the past two years.</p><h2>3. Who&#8217;s hiring the most software engineers?</h2><p>So, which companies are hiring the most? Let&#8217;s look at this via open positions and growth comparisons.</p><h3>Companies with the most open roles</h3><p>&#8220;Top&#8221; tech companies with the largest number of software engineering openings:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FFc9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FFc9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 424w, https://substackcdn.com/image/fetch/$s_!FFc9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 848w, https://substackcdn.com/image/fetch/$s_!FFc9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!FFc9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FFc9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png" width="1454" height="1300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1300,&quot;width&quot;:1454,&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_!FFc9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 424w, https://substackcdn.com/image/fetch/$s_!FFc9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 848w, https://substackcdn.com/image/fetch/$s_!FFc9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!FFc9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa07087aa-3d6f-4a75-af23-d5438a45695f_1454x1300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Businesses with the most software engineering vacancies. Source: <a href="https://www.trueup.io/job-trend">TrueUp</a></em></figcaption></figure></div><p>Compared to last year:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NLKX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NLKX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 424w, https://substackcdn.com/image/fetch/$s_!NLKX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 848w, https://substackcdn.com/image/fetch/$s_!NLKX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 1272w, https://substackcdn.com/image/fetch/$s_!NLKX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NLKX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png" width="1456" height="1195" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1195,&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_!NLKX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 424w, https://substackcdn.com/image/fetch/$s_!NLKX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 848w, https://substackcdn.com/image/fetch/$s_!NLKX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 1272w, https://substackcdn.com/image/fetch/$s_!NLKX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cc38fd-7296-4f7e-9f50-e2844742302a_1572x1290.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Companies with the most open positions, 2025 vs 2026. Source: <a href="https://www.trueup.io/job-trend">TrueUp</a></em></figcaption></figure></div><p>Observations:</p><ul><li><p><strong>The top three are unchanged</strong>: It&#8217;s still Apple, IBM, and Amazon</p></li><li><p><strong>New entrants to the top 20:</strong> Accenture (consulting), Tesla, Cadence (hardware), Hewlett Packard Enterprise (HPE), and SpaceX.</p></li><li><p><strong>Dropouts: </strong>Meta and Oracle. Last year, Oracle was #4 on the list with 1,396 open software engineering roles, but the company <a href="https://time.com/article/2026/04/30/oracle-layoffs-ai-tech-jobs">announced</a> up to 30,000 layoffs in March. Also no longer leading in jobs available are Speechify, NTT Data, Meta, and DXC Technology.</p></li><li><p><strong>Big Tech companies hiring more than last year</strong>: Apple and Google, which has +62% more engineering roles advertised than last year.</p></li><li><p><strong>Big companies hiring less vs last year</strong>: Meta, Oracle, and TikTok all have much fewer openings listed. For Meta and Oracle, there&#8217;s little surprise given recent layoffs. TikTok was in US regulatory limbo until January, when a new TikTok USDS joint venture <a href="https://newsroom.tiktok.com/announcement-from-the-new-tiktok-usds-joint-venture-llc?lang=en">was established.</a></p></li><li><p><strong>Hardware companies hiring more software talent</strong>: Micron, Qualcomm, and AMD all have considerably more software engineering openings than last year.</p></li></ul><h3>Where are the &#8220;top&#8221; software engineering jobs?</h3><p>Most of these jobs are in the US, just as most companies leading in recruitment numbers are US-headquartered. Other leading locations for jobs are India, the UK, and Canada:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IE7U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IE7U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 424w, https://substackcdn.com/image/fetch/$s_!IE7U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 848w, https://substackcdn.com/image/fetch/$s_!IE7U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 1272w, https://substackcdn.com/image/fetch/$s_!IE7U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IE7U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png" width="1084" height="984" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:984,&quot;width&quot;:1084,&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_!IE7U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 424w, https://substackcdn.com/image/fetch/$s_!IE7U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 848w, https://substackcdn.com/image/fetch/$s_!IE7U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 1272w, https://substackcdn.com/image/fetch/$s_!IE7U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ffa0870-e258-4f97-b0c5-d02cc9bad147_1084x984.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Numbers and locations of software engineering jobs listed by leading tech companies. Source: <a href="https://www.trueup.io/job-trend">TrueUp</a></em></figcaption></figure></div><h3>Fastest-growing: fintech and security</h3><p>Then there are large companies where recruitment has been among the fastest anywhere in software engineering:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!slQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!slQE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 424w, https://substackcdn.com/image/fetch/$s_!slQE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 848w, https://substackcdn.com/image/fetch/$s_!slQE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 1272w, https://substackcdn.com/image/fetch/$s_!slQE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!slQE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png" width="1248" height="906" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:906,&quot;width&quot;:1248,&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_!slQE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 424w, https://substackcdn.com/image/fetch/$s_!slQE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 848w, https://substackcdn.com/image/fetch/$s_!slQE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 1272w, https://substackcdn.com/image/fetch/$s_!slQE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2da6d85-79f9-4aa4-8194-dbdc1679058b_1248x906.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Companies which hired software engineers rapidly in the last two years</em></figcaption></figure></div><p>Software engineering headcount growth at some companies was significant over the past two years:</p><ul><li><p>Ramp (fintech): +94%</p></li><li><p>Wiz (security): +84%</p></li><li><p>Datadog (observability): +68%</p></li><li><p>Rippling (fintech): +55%</p></li><li><p>Figma (design tooling): +41%</p></li><li><p>Netflix (streaming): +37%</p></li></ul><p>Of this group, Datadog, Figma, and Netflix are publicly traded, and the largest by headcount:</p><ul><li><p><strong>Datadog</strong>: AI agents are driving demand for observability through the roof, and Datadog is the leader of the pack. There&#8217;s demand to expand their infra and offerings. AI companies are also customers: OpenAI famously &#8211; or infamously! &#8211; <a href="https://newsletter.pragmaticengineer.com/i/175118968/1-is-openai-spending-record-sums-on-datadog">spent around $170M on Datadog</a> in 2025.</p></li><li><p><strong>Figma</strong>: the design tooling company went public <a href="https://newsletter.pragmaticengineer.com/i/170985406/3-figmas-ipo-an-end-to-the-tech-ipo-winter">in 2025</a> and is heavily investing in products related to AI, such as Figma AI.</p></li><li><p><strong>Netflix</strong>: the streaming behemoth is transitioning from &#8220;just&#8221; being a video streamer to becoming a broader entertainment platform, doing live events, advertising, gaming, and more. <em>We did a podcast with Netflix CTO, Elizabeth Stone, in 2025 about <a href="https://newsletter.pragmaticengineer.com/p/netflix">Netflix&#8217;s engineering culture</a>.</em></p></li></ul><h2>4. AI engineering: explosive demand</h2><p>AI engineering demand is only going in one direction: upwards, at a fierce tick. Last September, our previous <a href="https://newsletter.pragmaticengineer.com/p/state-of-the-tech-market-in-2025">State of the Tech Job Market report</a> found that AI Engineering was the hottest segment in tech for job listings growth. Today, the trend seems to continue:</p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/state-of-the-job-market-2026">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI’s impact on software engineers in 2026: key trends, Part 2]]></title><description><![CDATA[Tradeoffs of AI tooling, why adopting AI at company-level is hard, what&#8217;s changed in two years, and more. The third and final part of a series analyzing our 2026 AI survey results]]></description><link>https://newsletter.pragmaticengineer.com/p/ai-impact-on-software-engineers-part-2</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/ai-impact-on-software-engineers-part-2</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 19 May 2026 16:43:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tEGy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F039155a2-16a1-481e-bddd-8774cb34e85d_1424x1174.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Earlier this year, we asked The Pragmatic Engineer subscribers about the AI tools you use, how you use them, and, crucially, what you think of them. We received more than 900 responses, and with this article we conclude our analysis of that data, covering:</p><ol><li><p><strong>Tradeoffs of AI tooling. </strong>Positive and negative sentiments, like how AI tools often mean less time spent on tedious, repetitive work, but that it often leads to unrealistic business expectations.</p></li><li><p><strong>Adopting AI at scale is hard. </strong>Companies are struggling to achieve adoption that feels productive at the team and org levels. Our survey finds the benefits of AI heavily depend on the engineering culture that was in place before.</p></li><li><p><strong>Impact on codebase quality. </strong>Codebase quality seems to be decreasing, but management at most places does not care. Meanwhile, maintenance duty is falling upon a shrinking number of engineers who still understand increasingly complex codebases.</p></li><li><p><strong>Less experienced engineers and AI. </strong>For these folks, AI seems to be less helpful and they rack up higher AI token bills. Maybe they need more space to learn, mentorship, and support.</p></li><li><p><strong>AI tooling &#8216;addiction&#8217;. </strong>Using AI agents &#8220;feels like a slot machine&#8221; encouraging &#8220;just one more prompt&#8221;-type behavior, while some folks think that the pricing of plans is built in a way to &#8220;lure&#8221; them to prompt more and more.</p></li><li><p><strong>Changes since 2024. </strong>Fewer devs are negative about AI, but there&#8217;s not all that much more positivity. The models have become much higher quality, and better tooling improves trust.</p></li><li><p><strong>Where are we headed? </strong>The concept of code ownership seems to be eroding, and collaboration within teams becomes less important.</p></li></ol><p>Previously in this series, we covered:</p><ul><li><p><strong><a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026">AI tooling for software engineers in 2026</a></strong>: a detailed summary of survey responses, covering the most-used AI tools, trends, AI agent usage, company size and usage, and tools engineers love.</p></li><li><p><strong><a href="https://newsletter.pragmaticengineer.com/p/the-impact-of-ai-on-software-engineers-2026">The impact of AI on software engineers in 2026: key trends. Part 1</a></strong>. Concerns about mounting AI costs, more engineers hitting usage limits, and AI tools having uneven effects upon different types of engineers</p></li></ul><p>Full subscribers can <a href="https://newsletter.pragmaticengineer.com/i/40654455/reports">access a more detailed report.</a></p><h2>1. AI tooling tradeoffs</h2><p>What can be said about the impact of AI tooling on engineers this year? Well, based on the responses that readers sent in to our survey, there are some common patterns:</p><h3>Code and output tradeoffs</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I4Ms!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I4Ms!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 424w, https://substackcdn.com/image/fetch/$s_!I4Ms!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 848w, https://substackcdn.com/image/fetch/$s_!I4Ms!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!I4Ms!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I4Ms!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png" width="1456" height="1237" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1237,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:690484,&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://newsletter.pragmaticengineer.com/i/198435184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.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_!I4Ms!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 424w, https://substackcdn.com/image/fetch/$s_!I4Ms!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 848w, https://substackcdn.com/image/fetch/$s_!I4Ms!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!I4Ms!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f0973e-3076-43f7-874a-b0a32ad1f19c_1460x1240.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Productivity tradeoffs</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eDmt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eDmt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 424w, https://substackcdn.com/image/fetch/$s_!eDmt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 848w, https://substackcdn.com/image/fetch/$s_!eDmt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!eDmt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eDmt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png" width="1456" height="1129" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1129,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:648183,&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://newsletter.pragmaticengineer.com/i/198435184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.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_!eDmt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 424w, https://substackcdn.com/image/fetch/$s_!eDmt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 848w, https://substackcdn.com/image/fetch/$s_!eDmt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!eDmt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e481765-692c-459a-8842-8b619f4f9d34_1460x1132.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Research <a href="https://www.microsoft.com/en-us/worklab/work-trend-index/agents-human-agency-and-the-opportunity-for-every-organization">published</a> two weeks ago (5 May) by Microsoft claims AI expands the pool of people who can do high-value work. Our survey found similar, while MS&#8217;s findings are based on Microsoft 365 Copilot chat usage.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-aYC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-aYC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!-aYC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!-aYC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!-aYC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-aYC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-aYC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!-aYC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!-aYC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!-aYC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699d2e7a-b015-4612-9092-89c2d6de1e70_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#8220;<em>AI used to do more high-value work&#8221; Source: <a href="https://www.microsoft.com/en-us/worklab/work-trend-index/agents-human-agency-and-the-opportunity-for-every-organization">Microsoft</a></em></figcaption></figure></div><p>Obviously, Microsoft has an interest in showing the benefits of its AI tools, but in this specific area, it&#8217;s telling that both studies agree AI does allow devs and non-devs to expand the type of work they do.</p><h3>Software engineering tradeoffs</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UmZb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UmZb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 424w, https://substackcdn.com/image/fetch/$s_!UmZb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 848w, https://substackcdn.com/image/fetch/$s_!UmZb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 1272w, https://substackcdn.com/image/fetch/$s_!UmZb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UmZb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png" width="1456" height="1252" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1252,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:591806,&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://newsletter.pragmaticengineer.com/i/198435184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.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_!UmZb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 424w, https://substackcdn.com/image/fetch/$s_!UmZb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 848w, https://substackcdn.com/image/fetch/$s_!UmZb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 1272w, https://substackcdn.com/image/fetch/$s_!UmZb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00bd67a-d708-4dee-af88-0a901fe712de_1500x1290.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>With AI tools, their &#8216;mileage may vary&#8217; among individuals. </strong>For example, some respondents told us they can spend much more time in a &#8220;flow state&#8221; thanks to AI tools, as they don&#8217;t have to wait for input from peers, can keep unblocking themselves, and have fewer interruptions.</p><p>But others say the opposite: that because they can start so many more tasks in parallel with AI tools, they keep context switching which knocks them out of a flow state!</p><p>The positives and negatives of these tools seem dependent on the environment respondents work in, individuals&#8217; personality traits, and where users are on the AI learning curve.</p><h2>2. Adopting AI at scale is hard</h2><p>One pattern in the responses is that adopting AI at company-scale remains challenging, including:</p><ul><li><p><strong>Costs</strong>: a growing concern covered in depth <a href="https://newsletter.pragmaticengineer.com/i/194201128/1-costs">in Part 1</a></p></li><li><p><strong>Usage</strong>: getting people to use AI tools continuously is not always straightforward</p></li><li><p><strong>Onboarding and education</strong>: at larger companies, there needs to be support to help devs make the most of the tools</p></li><li><p><strong>Reviewing AI-generated output:</strong> code review is a particular pain point</p></li><li><p><strong>Integrating with internal systems:</strong> AI tools are more helpful when they are seamlessly integrated with internal systems, hence why many larger companies use in-house, deeply embedded coding agents</p></li></ul><p>Adopting AI at company-level doesn&#8217;t lead to a magical fix for engineering problems, while the benefits of AI in an organizational sense seem to depend on what was in place <em>before</em>.</p><p><strong>Case in point, AI seems to amplify pre-existing engineering culture. </strong>AI doesn&#8217;t change the underlying <em>quality</em> of an organization&#8217;s engineering culture. Teams with strong engineering practices get more positive benefits out of AI than those without. Teams that see benefits from AI tools already had:</p><ul><li><p><strong>Guardrails</strong>: testing and automation around the codebase and deployments</p></li><li><p><strong>Documentation</strong>: they recorded their architectural decisions and engineering practices</p></li><li><p><strong>A quality codebase:</strong> AI agents will replicate patterns already in a codebase</p></li></ul><p>A few quotes on this from respondents to our survey:</p><blockquote><p>&#8220;AI is an amplifier, not a fixer. Good software engineering practices get multiplied. So do the bad ones. Embedding this properly in teams is exciting and important&#8221;. <em>&#8211; Staff+ engineer at a large company in Europe</em></p><p>&#8220;I feel like AI allows both faster prototyping and increased velocity on iterations to production software; it relies on existing best practices / project templates our team already have&#8221;. &#8211; <em>Solutions Architect at a small company in the US</em></p></blockquote><p><strong>A workflow that makes one dev &#8220;10x&#8221; more productive may not work for another. </strong>This is another reason why rolling out AI tools doesn&#8217;t seem to magically make everyone more productive. A senior engineer working at a large company in Canada told us:</p><blockquote><p><em>&#8220;It feels like AI workflows are very idiosyncratic in that some people derive (I hate this framing, but&#8230;) 10x more productivity benefit from them than other apparently equally clever, educated, and diligent developers. It feels like finding a workflow that clicks with your own habits and heuristics is more important than finding a global optimum for everyone&#8221;.</em></p></blockquote><p><strong>AI amplifies individuals differently, so the team impact is messy to figure out. </strong>A US-based principal engineer at a large company reflected on feeling disconnected from colleagues because of how they use AI differently:</p><blockquote><p><em>&#8220;I use AI in what I think is probably a more sophisticated way than most of my colleagues, so there can be a disconnect between my work and theirs, which is not good news because I am &#8220;The Principal&#8221; on the team&#8221;.</em></p></blockquote><p><strong>&#8220;The tool that works for you&#8221; approach can lead to tooling chaos, even at a team level. </strong>While it&#8217;s empowering to allow devs to choose the AI tools they feel are the most helpful, over time it becomes chaotic when teams can choose their own tech stacks, and when at large companies there are dozens of different technologies. A staff+ engineer at a 200-person business in the Middle East wrote in their response:</p><blockquote><p><em>&#8220;We&#8217;re still trying to figure out how to deal with tooling consistency on a team level. It&#8217;s one of our biggest struggles, but possibly more due to company structure than anything else. Everyone is using different tools with little coherence. It&#8217;s been rough.&#8221;</em></p></blockquote><p><strong>Some companies have briefly rolled back AI to deal with the negative effects first.</strong> From an engineering lead at a 10,000+ person company in Europe:</p><blockquote><p><em>&#8220;Since the AI boom, the quality of technical writing and reasoning from senior engineers in my org has significantly deteriorated. There&#8217;s an overwhelming volume of low-quality work product that is generated entirely or in part by AI, which has made it very difficult to conduct meaningful review of RFCs or code. We&#8217;ve also seen costly production incidents caused by code written and/or approved by AI, and &#8211; while my employer initially bought heavily into the hype &#8211; we have now rolled back some of our AI tools to deal with the drop in quality.&#8221;</em></p></blockquote><h2>3. Impact on codebase quality</h2><p><strong>A concrete pattern in our survey data is that codebase quality is decreasing due to AI. </strong>The contributing factors are not surprising:</p><ul><li><p>&#8220;AI slop&#8221;: more low-quality code generated, such as duplicated, verbose code, and poor abstractions</p></li><li><p>Too many code reviews, which means review quality slips</p></li><li><p>More bugs: due to faster code output and less strict reviews, more bugs sneak into codebases</p></li></ul><p>We discuss the degradation of products and codebases in a recent deepdive, <a href="https://newsletter.pragmaticengineer.com/p/are-ai-agents-actually-slowing-us">Are AI agents actually slowing us down?</a></p><p>One CTO at a European startup lists their negatives about increased AI usage:</p><ol><li><p><em>&#8220;A lot of tiny bugs and low code quality if you are not careful, verify carefully, and have good structure and guardrails</em></p></li><li><p><em>AI agents generate too much and repetitive code, making systems harder to maintain</em></p></li><li><p><em>Developers lose understanding of the codebase and become numb to bad architecture and bad developer experience&#8221;</em></p></li></ol><p><strong>According to our survey, management often seems unfazed by decreasing quality, and instead focuses on the higher output. </strong>A principal DevOps engineer at a large European company said:</p><blockquote><p><em>&#8220;In our company, we hand AI tools to inexperienced engineers who can&#8217;t distinguish good code from bad code and it&#8217;s falling on deaf ears in our leadership. They only seem to care about short to mid-term cost savings.&#8221;</em></p></blockquote><p><strong>The maintenance burden of AI-generated code is falling on the fewer engineers who understand and care. </strong>A staff engineer at a European company listed the problems that AI-generated code is causing:</p><ul><li><p><em>&#8220;Drive by&#8221; contributions are up:</em> many more occasional non-core-engineer contributors adding code but not sharing the maintenance burden</p></li><li><p><em>Contributing without adding guardrails: </em>many engineers and most of engineering leadership are not using reasonable guardrails like tests</p></li><li><p><em>AI slop from folks who have nothing to do with the codebase: </em>huge volume of slop incoming from people who don&#8217;t understand the codebase, but will commit and create PRs without fully understanding what they&#8217;re doing</p></li><li><p><em>Complexity is exploding: </em>thanks to the above</p></li></ul><p>The maintenance budget is falling upon fewer devs, while the task of refactoring bloated codebases and reducing complexity is left to those still sufficiently in touch with the codebase, thereby making the maintenance burden even worse.</p><p>But some leaders &#8220;get it.&#8221; A CEO at a 20-person company told us:</p><blockquote><p><em>&#8220;While AI has made generating code &#8216;cheaper&#8217;, the monitoring and maintenance worry me; the things that have traditionally cost the most in software. We&#8217;re increasing the rate of shipping large amounts of code with less understanding and increasing the unpredictability, so how do we work the predictability back on top?&#8221;</em></p></blockquote><p><strong>There is industry pressure on companies to adopt AI tooling and impose its usage upon engineers, </strong>driven by a mix of factors:</p><ul><li><p>Seeing actual benefits of AI and hearing that other teams and companies enjoy success with it</p></li><li><p>Fear of being left behind by competitors, or becoming less relevant</p></li><li><p>Anxiety about investor interest if a company is seen as not adopting the latest AI tools.</p></li></ul><p>This often leads to:</p><ul><li><p>Top-down mandates to use AI</p></li><li><p>Expectation of headcount reduction, with smaller teams doing the same amount or more</p></li><li><p>Management treating AI productivity gains as a <em>baseline</em> rather than a <em>bonus</em>.</p></li></ul><p>One staff engineer at a 10,000-person US company explained it like this:</p><blockquote><p><em>&#8220;AI is part of almost every work conversation. The entire company expects it to increase productivity and reduce the need to hire people. I keep trying to get better at using it and trying to make it more reliable so I can do more. I do worry about the quality of the work and atrophy of certain skills. It&#8217;s unclear to me if those skills even matter anymore.&#8221;</em></p></blockquote><p><strong>Pushing AI adoption </strong><em><strong>blindly</strong></em><strong> triggers red flags. </strong>Respondents shared what makes them worry about things going south in their workplaces:</p><ul><li><p><em>Focus on tracking AI usage, but not the quality of the output.</em> This will likely lead to product regressions and unhappy customers</p></li><li><p><em>Pushing for universal adoption.</em> Some companies target 50%, 80%, or 100% AI usage for certain tasks, seemingly blind to how some targets can worsen the quality of output, or simply create wasteful usage. <em>See the <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-tokenmaxxing-as-a-weird">trend of tokenmaxxing</a>.</em></p></li><li><p><em>A focus on velocity, but without recognition of quality work. </em>Expecting more velocity and output seems to be the baseline, and there is no recognition for work truly well done.</p></li></ul><p>The &#8220;move fast and break things&#8221; mantra famously championed by Facebook seems widespread across the industry with AI tools. A senior manager working at a large, European-headquartered company told us:</p><blockquote><p><em>&#8220;I see a trend: move fast and break things, and end up breaking things too often. We have to learn to focus on testing and resiliency a lot more, as with AI-driven development we introduce more bugs than before. But the velocity gain is bigger for now&#8221;.</em></p></blockquote><p><strong>Output over quality is leading to the death of code review at some places. </strong>As a lead engineer working at a small company summarized:</p><blockquote><p><em>&#8220;We&#8217;re at the death of code review. I used to do very deep code reviews where I&#8217;d take the time to understand the architecture and organization and provide feedback on maintainability and efficiency. I have no motivation in spending that time to review a giant PR where it&#8217;s clear that even the original author didn&#8217;t bother to do that&#8221;.</em></p></blockquote><h2>4. Less experienced engineers and AI</h2><p>The first generation of software engineers who have never developed without the help of AI are now entering the industry. Here is a response from a young engineer working at a startup as an intern:</p><blockquote><p><em>&#8220;I have never worked as a developer without AI. Writing this scares me a bit, actually, but it&#8217;s the truth!&#8221;</em></p></blockquote><p>But this will be the new reality for those joining the industry. So, what needs to happen to help a new generation of &#8220;AI-native&#8221; grad engineers grow professionally?</p><p><strong>AI is an amplifier which could amplify the lack of experience. </strong>A staff engineer in the US at a large company told us:</p><blockquote><p><em>&#8220;Agentic AI is a fascinating mirror. It can code as well as the user who drives it. If that user is a junior engineer, now you have a faster junior engineer. If the user is a staff engineer, now you have a faster staff engineer.</em></p><p><em>What agentic AI doesn&#8217;t do is magically convert a junior engineer into a staff engineer, because the user driving it still needs enough experience to know what a good solution looks like&#8221;.</em></p></blockquote><p>A junior engineer in Australia shares their experience of how frustrating working with AI tools is:</p><blockquote><p><em>&#8220;I think AI agents are great for vibe coding or prototypes where the code quality and functionality doesn&#8217;t matter that much. I think it&#8217;s also useful for senior engineers who know what they&#8217;re doing.</em></p><p><em>For junior engineers like myself, these AI tools are stressful to use. I don&#8217;t have the experience or knowledge to tell AI exactly what to do or quickly confirm its output, so I spend a lot of time on just triple checking and redoing stuff. I&#8217;m overall frustrated, but I&#8217;m trying to embrace it as we&#8217;ve been asked to by the company&#8221;.</em></p></blockquote><p><strong>Less experienced engineers seem to use more AI tokens and rack up higher bills. </strong>Several respondents observed this: director-level folks noted that junior engineers are in the top-spender category in their orgs, and it is junior devs who spend tokens on unproductive use cases.</p><p>There should be more space for junior folks to grow because they use AI more, one staff engineer respondent said:</p><blockquote><p><em>&#8220;Companies need to give some breathing room to Junior engineers and help them learn and acquire knowledge using AI tools as a booster and not as a replacement&#8221;.</em></p></blockquote><p><strong>Junior folks seem to be delegated fewer opportunities that could help them grow. </strong>This is because senior people can turn to AI for tasks, including those which they would have previously delegated to an intern or new grad. A few responses mention this:</p><blockquote><p>&#8220;AI allows me to have work done that I would usually delegate to a junior or pay a SaaS for; e.g., writing drafts, summarizing the news. &#8220; <em>DevSecOps lead at a small company, Europe</em></p><p>&#8220;I&#8217;ve begun to automate any repetitive task that we previously relied on juniors and offshore contractors for.&#8221;<em> - Engineering manager, at a large company, US</em></p><p>&#8220;I no longer have to delegate work by writing a very long document and briefing a junior engineer.&#8221; <em>- Principal engineer, large company, Europe</em></p></blockquote><p><strong>Why not consider mentoring junior devs in your organization? </strong>It&#8217;s clear that less experienced engineers are having a rocky start to their careers, so delegating stuff to them instead of to AI could be of high value for newer generations of talent.</p><h2>5. AI tooling &#8216;addiction&#8217;</h2><p>It seems that the rapid feedback loops of AI-assisted development create addictive tendencies, and there&#8217;s a noteworthy presence of &#8220;addiction lingo&#8221; in some responses to our survey:</p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/ai-impact-on-software-engineers-part-2">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Revisiting “No Silver Bullets” in the age of AI]]></title><description><![CDATA[Does the noted &#8220;No Silver Bullets&#8221; paper by the author of a classic engineering book still hold up, 40 years later? Is AI the long-sought single silver bullet &#8211; or has one been around for years?]]></description><link>https://newsletter.pragmaticengineer.com/p/revisiting-no-silver-bullets-in-the</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/revisiting-no-silver-bullets-in-the</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 12 May 2026 17:10:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fo1L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Before we start, some news: my tech compensation site focused on tech total compensation (TC) in Europe, <a href="https://blog.pragmaticengineer.com/techpays-has-been-acquired-levels-fyi/">TechPays has been acquired by Levels.fyi</a>! TechPays was a project I&#8217;ve been building on the side with engineering manager <a href="https://www.linkedin.com/in/rzsombor/">Zsombor Erd&#337;dy-Nagy</a> for a few years, and both of us are pleased that the site found a new and welcoming home. <a href="https://blog.pragmaticengineer.com/techpays-has-been-acquired-levels-fyi/">Read more.</a></em></p><p>Four decades ago, the writer of &#8216;<em>The Mythical Man-Month&#8217;</em> (1975), drew on folklore about werewolves to publish a paper about the prospects of a so-called <em>silver bullet </em>for software development that would make professionals much more productive at their craft.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fo1L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fo1L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 424w, https://substackcdn.com/image/fetch/$s_!fo1L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 848w, https://substackcdn.com/image/fetch/$s_!fo1L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 1272w, https://substackcdn.com/image/fetch/$s_!fo1L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fo1L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png" width="800" height="510" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:510,&quot;width&quot;:800,&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_!fo1L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 424w, https://substackcdn.com/image/fetch/$s_!fo1L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 848w, https://substackcdn.com/image/fetch/$s_!fo1L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 1272w, https://substackcdn.com/image/fetch/$s_!fo1L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e17bb3-f81c-4b30-930b-202e336226a6_800x510.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>The Werewolf of Eschenbach, Germany, line engraving, 1685. This image appears in the &#8220;No Silver Bullets&#8221; chapter of Mythical Man-Month (1995)</em></figcaption></figure></div><p>Frederick P. Brooks published <em>&#8220;No Silver Bullet &#8211; Essence and Accident in Software Engineering&#8221; </em>in 1986, and as the title suggests, it is pessimistic about the existence of any silver bullets. The term refers to a super weapon capable of dropping otherwise near-unstoppable werewolves and other creepy supernatural beings in European folk tales.</p><p>Since its release, this paper might have become even better-known than Mythical Man-Month (MMM). In 1995, the second edition of that book included Brooks&#8217; later essay as chapter 17, along with an additional chapter of reflections.</p><p>In this article, we look into whether the essay was correct in its disbelief in silver bullets, or whether any did indeed slay the beast of unproductivity for developers over the course of time. Also, how does AI agents generating so much code, as of today, challenge the entire premise &#8211; or not?</p><p>We cover:</p><ol><li><p><strong>&#8220;No silver bullets&#8221; &#8211; why has it held up? </strong>No single new technology or methodological breakthrough by itself introduced magnitudes-of-improvement to the areas that really matter in software engineering. Is that unusual?</p></li><li><p><strong>Is SRE a silver bullet? </strong>Google&#8217;s Search team introduced the SRE discipline, and won orders-of-magnitude superior reliability to its competitors. But why only Google Search?</p></li><li><p><strong>Was open source + GitHub a silent silver bullet? </strong>No development had a bigger impact on the wider tech industry than the open source wave since the 2010s. Has it been a silent silver bullet, an overlooked cause?</p></li><li><p><strong>Could AI be a silver bullet? </strong>At first glance, AI generates 100x-or-more code output. But productivity, reliability, and simplicity improvements are a bit unimpressive &#8211; at least for now.</p></li></ol><p>Brooks was a computer scientist who led IBM&#8217;s System/360 and OS/360 operating systems development, <em>&#8216;The Mythical Man-Month&#8217;</em> was published in 1975. Last year, we did a deepdive into this engineering classic (<a href="https://newsletter.pragmaticengineer.com/p/what-changed-in-50-years-of-computing">Part 1</a>, <a href="https://newsletter.pragmaticengineer.com/p/what-changed-in-50-years-of-computing-8d0">Part 2</a>, <a href="https://newsletter.pragmaticengineer.com/p/mythical-man-month-part-3">Part 3</a>, <a href="https://newsletter.pragmaticengineer.com/p/mythical-man-month-part-4">Part 4</a>), delving into its predictions and legacy.</p><h2>1. No silver bullets?</h2><p>The paper delves into folklore for its motif, a &#8216;silver bullet,&#8217; and uses it to pose the question of whether there would be any &#8220;silver bullets&#8221; on the horizon (in 1986) that could be similarly fatal to software engineering complexity. From the <a href="https://www.cs.unc.edu/techreports/86-020.pdf">paper</a> (emphasis mine:)</p><blockquote><p>&#8220;Of all the monsters who fill the nightmares of our folklore, none terrify more than werewolves, because they transform unexpectedly from the familiar into horrors. For these, one seeks bullets of silver that can magically lay them to rest.</p><p>The familiar software project has something of this character (at least as seen by the non-technical manager), usually innocent and straightforward, but capable of becoming a monster of missed schedules, blown budgets, and flawed products. So, we hear desperate cries for a silver bullet, something to make software costs drop as rapidly as computer hardware costs do.</p><p>But, as we look to the horizon of a decade hence, we see no silver bullet. <strong>There is no single development, in either technology or management technique, which by itself promises even one order of magnitude improvement in productivity, in reliability, in simplicity</strong>.</p><p>Skepticism is not pessimism, however. Although we see no startling breakthroughs, and indeed, believe such to be inconsistent with the nature of software, many encouraging innovations are under way. A disciplined, consistent effort to develop, propagate, and exploit them should indeed yield an order-of-magnitude improvement. There is no royal road, but there is a road.</p><p>The first step toward the management of disease was replacement of demon theories and humor theories by the germ theory. That very step, the beginning of hope, in itself dashed all hopes of magical solutions. It told workers that progress would be made stepwise, at great effort, and that a persistent, unremitting care would have to be paid to a discipline of cleanliness. So it is with software engineering today.&#8221;</p></blockquote><p>In 1995, Brooks revisited his idea that silver bullets weren&#8217;t real in the software domain. From the <em>Mythical Man-Month&#8217;s </em>anniversary edition:</p><blockquote><p>&#8220;No Silver Bullet&#8221; asserts and argues that no single software engineering development will produce an order-of-magnitude improvement in programming productivity within ten years (from the paper&#8217;s publication in 1986). We are now nine years into that decade, so it is timely to see how this prediction is holding up.</p><p>Whereas The Mythical Man-Month generated many citations but little argument, &#8220;No Silver Bullet&#8221; has occasioned rebuttal papers, letters to journal editors, and letters and essays that continue to this day.</p><p>Most of these attack the central argument that there is no magical solution, and my clear opinion that there cannot be one. Most agree with most of the arguments in &#8220;NSB,&#8221; but then go on to assert that there is indeed a silver bullet for the software beast, which the author has invented. As I reread the early responses today, I can&#8217;t help noticing that the nostrums pushed so vigorously in 1986 and 1987 have not had the dramatic effects claimed.&#8221;</p></blockquote><p>Brooks re-concluded that there had been no technological breakthroughs of the type postulated in NSB.</p><p><strong>But motivation can also have silver bullet-like effects </strong>and always has had, he found<strong> </strong>via more research into scientific evidence that motivation<em> can</em> boost productivity. In his own words:</p><blockquote><p>&#8220;Since &#8220;NSB,&#8221; Bruce Blum has drawn my attention to the 1959 work of Herzberg, Mausner, and Sayderman.</p><p>They find that motivational factors can increase productivity. On the other hand, environmental and accidental factors, no matter how positive, cannot; but these factors can decrease productivity when negative. &#8220;NSB&#8221; argues that much software progress has been the removal of such negative factors: stunningly awkward machine languages, batch processing with long turnaround times, poor tools, and severe memory constraints.&#8221;</p></blockquote><p>Today, it&#8217;s a long time since the mid-nineties; with the benefit of hindsight, were there any silver bullets flying between then and 2022, which fit the bill as slayers of unproductiveness? I suggest a few, below. <em>If you can name other silver bullets since the launch of Windows 95, please do so in the comments!</em></p><ul><li><p><strong>Version control: </strong>(late 1990s.) CVS, Subversion, and later, Git. Version control allowed engineers to collaborate much more fluently, leading to more teamwork and &#8211; in some cases &#8211; less full-on solo labor.</p></li><li><p><strong>IDEs</strong>: (early 2000s). Modern IDEs like Visual Studio, IntelliJS, and others make context-rich editing easy and fast. They also allow for faster, less error-prone refactoring and more efficient debugging.</p></li><li><p><strong>CI/CD and automated testing</strong>: (mid-2000s). CI systems started to spread during the 2000s with the likes of CruiseControl (2000s) &#8594; Jenkins and SaaS CI solutions from the 2010s (e.g., Travis CI, CircleCI, GitLab CI, GitHub Actions).</p></li><li><p><strong>Open source and package managers</strong>: (2010s). Open source has been around for decades, but GitHub&#8217;s rapid adoption made it easier to create and discover, coupled with package managers in the Node, Python, and other language ecosystems to build on top of open source solutions.</p></li><li><p><strong>StackOverflow: </strong>(2010s). The popular programming Q&amp;A site made it easier to get unstuck by finding solutions to common problems, with the capability to ask questions and get responses from the large user community within hours. By 2025, the site <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-134">was pretty much dead.</a></p></li><li><p><strong>Cloud</strong>: (early 2010s). AWS launched in 2006, then Azure and Google Cloud in 2008, and they went mainstream in the 2010s. Today, cloud is everywhere, and increasingly more infrastructure startups build on top of hyperscalers (the biggest public cloud platforms), such as Vercel / Netlify (platform-as-a-service), Supabase / Turbopuffer (databases) and others.</p></li><li><p><strong>Platform teams &amp; DevEx teams</strong>: (mid-2010s). Mid-sized and larger tech companies created dedicated platform teams to own infrastructure and internal platforms. In the 2020s, larger tech companies have created &#8216;Developer Experience&#8217; teams to build better internal dev tools and workflows. <em>We previously covered <a href="https://newsletter.pragmaticengineer.com/p/program-platform-split-uber">Uber&#8217;s program/platform split</a>, and <a href="https://newsletter.pragmaticengineer.com/p/developer-experience-at-uber">Uber&#8217;s developer experience evolution</a>.</em></p></li><li><p><strong>SRE</strong>: the Site Reliability Engineer (SRE) profession grew during the 2010s, much influenced by Google.</p></li></ul><p>These technologies increased developer efficiency and productivity, but none by itself was a productivity accelerator in isolation.</p><p>Obviously, by 2022 the craft of building software had developed greatly since &#8216;<em>No Silver Bullets&#8217; </em>came out; and was more efficient, faster, and more collaborative than ever. One highly anecdotal way to identify this is via the disappearance of cake from some tech workplaces. Back in the day, cake was distributed at work for major product milestones being hit: the shipping of a new product was often marked with awards and tasty baked treats &#8211; at least on teams building browsers, like the IE and Firefox teams.</p><p>But by the 2010s, shipping frequency had increased by so much and was an everyday, unremarkable occurrence at some places, <a href="https://limpet.net/mbrubeck/2012/10/26/mozilla-ie10-cake.html">according to</a> Matt Brubeck, a former engineer on the Firefox team:</p><blockquote><p>&#8220;Back when Firefox 2 was released (six years ago this week!), the Internet Explorer team started a friendly tradition of sending Mozilla a cake as congratulations. This continued for Firefox 3 and Firefox 4. After Firefox switched from major releases once or twice a year to incremental updates every six weeks, they sent us a cupcake for the next few updates instead. :)&#8221;<em> Mozilla engineer, Matt Brubeck</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IXA7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IXA7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 424w, https://substackcdn.com/image/fetch/$s_!IXA7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 848w, https://substackcdn.com/image/fetch/$s_!IXA7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!IXA7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IXA7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png" width="1456" height="1078" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1078,&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_!IXA7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 424w, https://substackcdn.com/image/fetch/$s_!IXA7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 848w, https://substackcdn.com/image/fetch/$s_!IXA7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!IXA7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f525e98-c75e-4e3e-a5e1-5b7db3a6e5a5_1828x1354.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fruits of success: Cake for Mozilla Firefox team in 2006 after shipping Firefox 1</figcaption></figure></div><p>Today, Firefox ships a stable version about once a month, as does Chrome. In this context, marking each release with more cake could inadvertently cause some health issues on the team &#8211; too much cake, that is! From this September, Chrome <a href="https://developer.chrome.com/blog/chrome-two-week-release">will switch</a> to shipping every two weeks.</p><p><strong>Agile and Scrum is worth a mention</strong>; not as a technology, but a methodology: Scrum encourages teams to move in smaller cycles and deliver more frequently, via sprints that typically range from a week to a month. In the early 2000s, this methodology spread quickly and brought efficiency improvements to many tech companies. However, by the early 2020s, many startups and some of Big Tech had moved on, as covered in <a href="https://newsletter.pragmaticengineer.com/p/project-management-in-tech">How Big Tech runs tech projects and the curious absence of Scrum</a>:</p><blockquote><p>&#8220;Scrum got in the way of shipping on a daily basis. The whole idea of Scrum revolves around Sprints, of committing to tasks at the beginning of the sprint, working on these during the sprint, and demoing what we did at the end.</p><p>The process felt unnatural and like it had been forced on a fast-moving web team. We soon moved to a more fluid way of working, taking the Kanban approach. We stopped caring about sprints, and dropped most rituals that come with Scrum. We just cared about knowing what we&#8217;re working on now, and what it was we&#8217;d get done next.&#8221;</p></blockquote><p>Basically, Scrum worked and still does so for teams wanting to shorten shipping cadence from months to weeks. But for teams shipping daily, it often gets in the way.</p><p><strong>One area that improved significantly has been the pace of shipping incremental software. </strong>In 1975, shipping software several times per day with elements like version control, CI/CD, feature flags and engineers being oncall, might have sounded far-fetched. Back then, software delivery was measured in months and years. In this way, we&#8217;ve perhaps made improvements overall in the regions of 10x to 100x over the years.</p><p>But that came via combinations of new tools like version control and CI/CD, new approaches &amp; methodologies, and testing &#8211; and also from shifting constraints; for example, it&#8217;s now possible to revert backend changes rapidly, and code shipped in binaries can be controlled by feature flags in many cases.</p><p>Even so, improvements were mainly in iteration speed and not necessarily in the complexity of the software shipped. With all that progress, shipping complex and high-quality software still takes comparable time, often years, as 50 years ago. A prime example is the upcoming video game, Grand Theft Auto VI, probably by now the most highly-anticipated game ever, which is set to launch in November, after at least six years &#8211; and potentially 12 &#8211; of total development time:</p><ul><li><p>Initial planning <a href="https://thegameswiki.com/gta6/wiki/development-history">started</a> in 2014 (12 years of development)</p></li><li><p>Development <a href="https://gamerant.com/gta-6-development-start-date-when/">started</a> in earnest in 2020 (circa six years of full-on development)</p></li><li><p>The studio, Rockstar, <a href="https://x.com/RockstarGames/status/1489617718009606150">confirmed</a> development was underway in February 2022 (at least 4.5 years of full development)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HM_E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HM_E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 424w, https://substackcdn.com/image/fetch/$s_!HM_E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 848w, https://substackcdn.com/image/fetch/$s_!HM_E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 1272w, https://substackcdn.com/image/fetch/$s_!HM_E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HM_E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png" width="1100" height="350" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:350,&quot;width&quot;:1100,&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_!HM_E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 424w, https://substackcdn.com/image/fetch/$s_!HM_E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 848w, https://substackcdn.com/image/fetch/$s_!HM_E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 1272w, https://substackcdn.com/image/fetch/$s_!HM_E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f94d3b7-70e6-4fac-a07d-7c4d315b5578_1100x350.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">GTA VI: more ambitious but also slower</figcaption></figure></div><p>The video game development timeline is as long as it ever was, and even longer, as developers strive to meet players&#8217; expectations on things like graphics, lighting, and physics. GTA 6 looks like being the most complex installment in the long-running series. So, perhaps there&#8217;s not been much change in software delivery timelines because when we have more capabilities to work with, the goals get more ambitious and the bar for &#8220;standout&#8221; software keeps rising.</p><h2>2. Is SRE a silver bullet?</h2><p>Brooks&#8217;s definition of a silver bullet:</p><blockquote><p>&#8220;A single development, in either technology or management technique, which by itself promises even one order of magnitude improvement in productivity, in reliability, in simplicity.&#8221;</p></blockquote><p>In simplicity and productivity terms, I struggle to name a single approach that delivered a 10x-or-more improvement by itself. But in the area of reliability, one company that has pioneered novel approaches since the 2000s is Google. Google.com is probably the single most reliable piece of internet software of all. In the last 15 years, Google Search has suffered a single outage, <a href="https://www.gadgets360.com/internet/news/google-search-maps-photos-drive-youtube-experiencing-outages-in-some-parts-of-the-world-3238156">on 8 August 2022</a>, which lasted around an hour. Otherwise, there have been no global outages (of course, there have been several <a href="https://en.wikipedia.org/wiki/Google_services_outages#December_2020_services_outage">for other Google services</a>).</p><p>In 2003, Google created the &#8216;Site Reliability Engineering&#8217; (SRE) role. SRE veteran, Dave O&#8217;Connor, <a href="https://newsletter.pragmaticengineer.com/p/reliability-engineering?">shared with us</a>:</p><blockquote><p>&#8220;The fervent belief of Google&#8217;s founders was that speed and reliability mattered more than features. This belief was coupled with the understanding that we couldn&#8217;t achieve it traditionally, which made it an existential issue. The level of investment in building out all layers of the serving stack was a case of &#8220;because we can&#8221;, but also &#8220;because we have to, as nowhere else does what we need&#8221;.</p><p>There was never a question of whether traditional &#8216;ops&#8217; would work at Google. We needed a specialized role, staffed by folks familiar with the problem space and engineering methods required to make it work.</p><p>In 2003, the SRE role was born. Ben Treynor Sloss had been tasked with building Google&#8217;s &#8220;production team&#8221; and in his own words, he built &#8220;what happens when you ask a software engineer to design an operations team.&#8221; This turned into the birth of the SRE function at Google. From the outset, SRE was staffed in varying measures by systems/operations experts and software engineers. A large part of the remit of the team was to build the tools and practices required to operate Google&#8217;s fleet.&#8221;</p></blockquote><p>Over time, the rest of the industry caught on to SRE and DevOps. From our <a href="https://newsletter.pragmaticengineer.com/p/reliability-engineering">SRE deepdive</a>:</p><blockquote><p>&#8220;Eventually, other companies caught onto the scaling issues, especially the hyperscalers. Each had their own approach, but over time, the notion grew industry-wide that making things reliable was a real-life engineering discipline, not simply &#8216;ops&#8217;.</p><p>This step saw a number of terms coined to describe this engineering, including &#8216;DevOps&#8217;. At its core, this was the notion that the disciplines and practices of reliability engineering should be ingrained into the overall engineering organization. At places other than Google, this mostly took the form of combined developer/operations roles (i.e. &#8220;you build it, you run it&#8221;), which differed from Google&#8217;s implementation, but the practices were similar.</p><p>Around this time, Google started opening up about SRE, eventually publishing the first SRE book, and follow ups. Conferences such as USENIX SRECon, Devops Days, and other movements have solidified reliability engineering as a discipline that scales well beyond Google. Indeed, the company has become a consumer of many state-of-the-art developments.&#8221;</p></blockquote><p><strong>So, at Google Search, the SRE role could be described as a genuine silver bullet for the tech giant.</strong> The company&#8217;s obsession with reliability helped it build what is probably the most reliable public-facing service of all. On the assumption that SRE plays a significant role in the approach, I would feel comfortable with calling SRE a silver bullet for Google Search.</p><p>SRE, as a concept, is commonplace across Google, but the reliability of its other services is not so impressive. For example, Google Cloud has had many outages, and Gmail also goes down every now and then. I&#8217;m sure that without SRE, reliability would be worse, but in general, Google services&#8217; availability these days is probably a magnitude higher than the availability of most online services in the 2000s.</p><p>Similarly, GitHub has an SRE role but the service is <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-github-breaks">at zero nines of availability</a>, partially explained by a 3.5x increase in load in two years. But in other ways, the zero nines is <a href="https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/">likely self-inflicted.</a></p><p><strong>This makes me wonder if the existence of silver bullets depends greatly on teams and individual contexts.</strong> SRE seems like a good case to consider:</p><ul><li><p>a &#8220;silver bullet&#8221; for Google Search</p></li><li><p>&#8230; but not for other Google services</p></li><li><p>&#8230; and definitely not for the broader industry</p></li></ul><p>Could it be that when implemented in the right place, in the right way, and with the correct investment, then SRE &#8211; and an incredible focus on reliability &#8211; will yield a 10x-or-higher increase in reliability?</p><p>My hunch is that Google Search has such standout reliability not just because of SRE, but because Search might be the only organization in Google with reliability as a founding value, embedded in the team&#8217;s culture, with unmatched investments of time and money.</p><p>Google has published <a href="https://sre.google/books/">several books</a> that explain their techniques and practices, but for other teams to get those results, they would need to invest similarly in reliability.</p><h2>3. Was open source + GitHub a silent silver bullet?</h2><p>Perhaps there&#8217;s a silver bullet which is easily missed: open source. In <a href="https://newsletter.pragmaticengineer.com/p/ai-tools-for-software-engineers-simon-willison">the first-ever Pragmatic Engineer Podcast episode</a>, I asked software engineer Simon Willison what the biggest &#8220;productivity leaps&#8221; have been during his career. He <a href="https://youtu.be/uRuLgar5XZw?si=YHz3z6En7ADv4DRu&amp;t=2141">named</a> open source:</p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/revisiting-no-silver-bullets-in-the">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Designing Data-Intensive Applications: The Cloud & Doing the Right Thing]]></title><description><![CDATA[How the cloud changes the way we build applications, and why engineers&#8217; ethical choices matter more than ever. Excerpt from the book, &#8216;Designing Data-Intensive Applications&#8217;, 2nd edition]]></description><link>https://newsletter.pragmaticengineer.com/p/designing-data-intensive-applications-book-excerpt</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/designing-data-intensive-applications-book-excerpt</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 05 May 2026 16:46:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C6W6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In 2016, <a href="https://martin.kleppmann.com/">Martin Kleppmann</a> published <em>&#8216;Designing Data-Intensive Applications&#8217;,</em> which quickly became a go-to book for those of us building backend applications and distributed systems. In it, Martin combined his experience as a startup founder with observations from his time at LinkedIn, and invested years of rigorous, fulltime research in the title.</p><p>Nine years later, he felt the time was ripe for an updated edition, with cloud computing much more widespread than in 2016. So, Martin teamed up with software engineer and investor, <a href="https://cnr.sh/">Chris Riccomini</a>, a former colleague at LinkedIn and the author of <a href="https://nostarch.com/missing-readme">The Missing README</a>, for a full refresh of the book which brings it right up to date for the present day.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C6W6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C6W6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 424w, https://substackcdn.com/image/fetch/$s_!C6W6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 848w, https://substackcdn.com/image/fetch/$s_!C6W6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 1272w, https://substackcdn.com/image/fetch/$s_!C6W6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C6W6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png" width="1310" height="940" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:940,&quot;width&quot;:1310,&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_!C6W6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 424w, https://substackcdn.com/image/fetch/$s_!C6W6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 848w, https://substackcdn.com/image/fetch/$s_!C6W6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 1272w, https://substackcdn.com/image/fetch/$s_!C6W6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e245ca-cbda-4c91-b38d-36c8074a7800_1310x940.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>My copy of the new edition</em></figcaption></figure></div><p>Martin was recently on The Pragmatic Engineer Podcast, where <a href="https://newsletter.pragmaticengineer.com/p/designing-data-intensive-applications">we discussed</a> this updated volume and many related cloud computing matters. We also looked into some topics that have become less relevant over time, like details on MapReduce.</p><p>I asked Martin if this newsletter could share an excerpt of the updated edition of the book about a timeless, important topic, and he generously agreed. So, today we cover:</p><ol><li><p>Cloud versus self-hosting tradeoffs</p></li><li><p>Doing the right thing as a software engineer</p></li></ol><p>These excerpts are only part of the book; the first edition has been on my shelf for years and is now in well-worn condition. I jumped at the chance to get the second edition, and if you&#8217;re interested in building resilient systems, I recommend it as an excellent resource.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://learning.oreilly.com/library/view/designing-data-intensive-applications/9781098119058/&quot;,&quot;text&quot;:&quot;Get the second edition of the book&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://learning.oreilly.com/library/view/designing-data-intensive-applications/9781098119058/"><span>Get the second edition of the book</span></a></p><p><em>My usual disclaimer: as with all my recommendations, I was not paid for this article, and none of the links are affiliates. See <a href="https://blog.pragmaticengineer.com/ethics-statement/">my ethics statement</a> for more.</em></p><div><hr></div><p><em>The excerpt below is from &#8220;<a href="https://learning.oreilly.com/library/view/designing-data-intensive-applications/9781098119058/">Designing Data-Intensive Applications&#8221; second edition</a>, by Martin Kleppmann and Chris Riccomini. Copyright &#169; 2026 Martin Kleppmann, Chris Riccomini. Published by O&#8217;Reilly Media, Inc. Used with permission.</em></p><h2>1. Cloud versus self-hosting tradeoffs</h2><p><em>This excerpt is from Chapter 1: &#8220;Trade-Offs in Data Systems Architecture&#8221;</em></p><p>For anything that an organization needs to do, one of the first questions is whether it should be done in-house or outsourced. That is, should you build or should you buy?</p><p>Ultimately, this is a question about business priorities. A common rule of thumb is that things that are a core competency or a competitive advantage of your organization should be done in-house, whereas things that are non-core, routine, or commonplace should be left to a vendor [<a href="https://world.hey.com/dhh/why-we-re-leaving-the-cloud-654b47e0">20</a>]. To give an extreme example, most companies do not fabricate their own CPUs, since it is cheaper to buy them from the semiconductor manufacturers.</p><p>With software, two important decisions to be made are who builds the software and who deploys it. The spectrum of possibilities is illustrated in Figure 1-2. At one extreme is bespoke software that you write and run in-house; at the other extreme are widely-used cloud services or SaaS products that are implemented and operated by an external vendor and that you access only through a web interface or API.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZkjW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZkjW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 424w, https://substackcdn.com/image/fetch/$s_!ZkjW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 848w, https://substackcdn.com/image/fetch/$s_!ZkjW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 1272w, https://substackcdn.com/image/fetch/$s_!ZkjW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZkjW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png" width="1456" height="273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:273,&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_!ZkjW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 424w, https://substackcdn.com/image/fetch/$s_!ZkjW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 848w, https://substackcdn.com/image/fetch/$s_!ZkjW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 1272w, https://substackcdn.com/image/fetch/$s_!ZkjW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75be7d6-2d6d-4564-a598-cfb501bbcc84_2048x384.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><em>Figure 1-2. The spectrum of decisions on outsourcing software and its operations</em></figcaption></figure></div><p>The middle ground is off-the-shelf software (open source or commercial) that you self-host, or deploy yourself &#8211; for example, if you download MySQL and install it on a server you control. This could be on your own hardware (often called &#8216;on-premises,&#8217; even if the server is in a rented datacenter rack and not literally on your own premises), or on a virtual machine (VM) in the cloud (<em>infrastructure as a service</em>, or IaaS). There are more points along this spectrum, such as taking open source software and running a modified version of it.</p><p>A related question is how you deploy services, either in the cloud or on premises &#8211; for example, whether you use an orchestration framework such as Kubernetes. However, choice of deployment tooling is beyond the scope of this book, since other factors have a greater influence on the architecture of data systems.</p><h3>Pros &amp; Cons of Cloud Services</h3><p>Using a cloud service, rather than running comparable software yourself, essentially outsources the operation of that software to the cloud provider. There are good arguments for and against this approach. Cloud providers claim that using their services saves time and money and allows you to move faster compared to setting up your own infrastructure.</p><p>Whether using a cloud service is actually cheaper and easier than self-hosting depends very much on your skills and the workload on your systems, however. If you already have experience of setting up and operating the systems you need, and if your load is quite predictable (i.e., the number of machines you need does not fluctuate wildly), then it&#8217;s often cheaper to buy your own machines and run the software on them yourself [<a href="https://world.hey.com/dhh/why-we-re-leaving-the-cloud-654b47e0">21</a>, <a href="https://specbranch.com/posts/one-big-server/">22</a>].</p><p>On the other hand, if you need a system that you don&#8217;t already know how to deploy and operate, adopting a cloud service is often easier and quicker than learning to manage the system. Hiring and training staff specifically to maintain and operate the system can get very expensive. You still need an operations team when you&#8217;re using the cloud, but outsourcing the basic system administration can free up your team to focus on higher-level concerns.</p><p>Outsourcing the operation of a system to a company that specializes in running it can potentially result in better service, since the provider gains operational expertise from providing the service to many customers. On the other hand, if you run the service, you can configure and tune it to perform well on your particular workload. A cloud service would likely be unwilling to make such customizations on your behalf.</p><p>Cloud services are particularly valuable if the load on your systems varies a lot over time. If you provision your machines to be able to handle peak load, but those computing resources are idle most of the time, the system becomes less cost-effective. In this situation, cloud services have the advantage that they can make it easier to scale your computing resources up or down in response to changes in demand.</p><p>For example, analytical systems often have extremely variable load. Running a large analytical query quickly requires a lot of computing resources in parallel, but once the query completes, those resources sit idle until a user makes the next query. Predefined queries (e.g., for daily reports) can be enqueued and scheduled to smooth out the load, but for interactive queries, the faster you want them to complete, the more variable the workload becomes. If your dataset is so large that querying it quickly requires significant computing resources, using the cloud can save money as you can return unused resources to the provider rather than leaving them idle. For smaller datasets, this difference is less significant.</p><p>The biggest downside of a cloud service is that you have no control over it:</p><ul><li><p>If it is lacking a feature you need, all you can do is politely ask the vendor whether they will add it; you generally cannot implement it yourself.</p></li><li><p>If the service goes down, all you can do is wait for it to recover.</p></li><li><p>If you are using the service in a way that triggers a bug or causes performance problems, diagnosing the issue will be difficult. With software that you run yourself, you can get performance metrics and debugging information from the operating system to help you understand its behavior, and you can look at the server logs. With a service hosted by a vendor, you usually do not have access to these internals.</p></li><li><p>If the service shuts down or becomes unacceptably expensive, or if the vendor changes their product in a way you don&#8217;t like, you are at their mercy; continuing to run an old version of the software is usually not an option, so you&#8217;ll be forced to migrate to an alternative service [23]. This risk is mitigated if alternative services expose a compatible API, but for many cloud services there are no standard APIs, which raises the cost of switching, making vendor lock-in a problem.</p></li><li><p>If the cloud provider is in another country and a political conflict arises between that country and your own, you risk being locked out of the service due to imposed sanctions.</p></li><li><p>The cloud provider needs to be trusted to keep the data secure, which can complicate the process of complying with privacy and security regulations.</p></li></ul><p>Despite all these risks, it has become more and more popular for organizations to build new applications on top of cloud services, or to adopt a hybrid approach in which cloud services are used for some aspects of a system. However, cloud services will not subsume all in-house data systems. Many older systems predate the cloud, and for any services that have specialist requirements that existing cloud services cannot meet, in-house systems remain necessary. For example, very latency-sensitive applications such as high-frequency trading require full control of the hardware.</p><h3>Cloud-Native System Architecture</h3><p>Besides having a different economic model (subscribing to a service instead of buying hardware and licensing software to run on it), the rise of the cloud has also had a profound effect on how data systems are implemented on a technical level. The term &#8220;cloud native&#8221; is used to describe an architecture that is designed to take advantage of cloud services.</p><p>In principle, almost any software that you can self-host could also be provided as a cloud service, and indeed, such managed services are now available for many popular data systems. However, systems that have been designed from the ground up to be cloud native have been shown to have several advantages: better performance on the same hardware, faster recovery from failures, being able to quickly scale computing resources to match the load, and supporting larger datasets [<a href="https://media.amazonwebservices.com/blog/2017/aurora-design-considerations-paper.pdf">24</a>, <a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2019/05/socrates.pdf">25</a>, <a href="https://www.usenix.org/system/files/nsdi20-paper-vuppalapati.pdf">26</a>]. Table 1-2 lists some examples of both types of systems.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GWaK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GWaK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 424w, https://substackcdn.com/image/fetch/$s_!GWaK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 848w, https://substackcdn.com/image/fetch/$s_!GWaK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 1272w, https://substackcdn.com/image/fetch/$s_!GWaK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GWaK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png" width="1268" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1268,&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_!GWaK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 424w, https://substackcdn.com/image/fetch/$s_!GWaK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 848w, https://substackcdn.com/image/fetch/$s_!GWaK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 1272w, https://substackcdn.com/image/fetch/$s_!GWaK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78c9fb84-7b57-4970-9dd3-64032ba79950_1268x378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Table 1-2. Examples of self-hosted and cloud-native database systems</em></figcaption></figure></div><h4>Layering of cloud services</h4><p>Many self-hosted data systems have simple system requirements; they run on a conventional operating system such as Linux or Windows, they store their data as files on the filesystem, and they communicate via standard network protocols such as TCP/IP. A few systems depend on special hardware such as GPUs (for ML) or remote direct memory access (RDMA) network interfaces, but on the whole, self-hosted software tends to use generic computing resources: CPUs, RAM, a filesystem, and an IP network.</p><p>In a cloud, this type of software can be run in an IaaS environment, using one or more VMs (or instances) with a certain allocation of CPUs, memory, disk, and network bandwidth. Compared to physical machines, cloud instances can be provisioned faster and come in a greater variety of sizes, but otherwise they are similar to traditional computers: you can run any software you like on them, but you are responsible for administering it yourself.</p><p>In contrast, the key idea of cloud-native services is not only to use the computing resources managed by your operating system, but also to build upon lower-level cloud services to create higher-level services. For example:</p><ul><li><p>Object storage services such as Amazon S3, Azure Blob Storage, and Cloudflare R2 store large files. They provide more limited APIs than a typical filesystem (basic file reads and writes), but they have the advantage that they hide the underlying physical machines; the service automatically distributes the data across many machines so that you don&#8217;t have to worry about running out of disk space on any one machine. Even if some machines or their disks fail entirely, no data is lost.</p></li><li><p>Many other services are, in turn, built upon object storage and other cloud services. For instance, Snowflake is a cloud-based analytical database (data warehouse) that relies on S3 for data storage [<a href="https://www.usenix.org/system/files/nsdi20-paper-vuppalapati.pdf">26</a>], and some other services, in turn, build upon Snowflake.</p></li></ul><p>As always with abstractions in computing, there is no one right answer to what you should use. As a general rule, higher-level abstractions tend to be more oriented toward particular use cases. If your needs match the situations for which a higher-level system is designed, using the existing higher-level system will probably meet your needs with much less hassle than building it yourself from lower-level systems would. On the other hand, if no high-level system meets your needs, building it yourself from lower-level components is the only option.</p><h4>Separation of storage and compute</h4><p>In traditional computing, disk storage is regarded as durable (we assume that once something is written to disk, it will not be lost). To tolerate the failure of an individual hard disk, RAID (redundant array of independent disks) is often used to maintain copies of the data on several disks attached to the same machine. RAID can be implemented either in hardware or in software by the operating system, and it is transparent to the applications accessing the filesystem.</p><p>In the cloud, compute instances (VMs) may also have local disks attached, but cloud-native systems typically treat these disks more like an ephemeral cache and less like long-term storage. This is because the local disk becomes inaccessible if the associated instance fails, or if the instance is replaced with a bigger or a smaller one (on a different physical machine) to adapt to changes in load.</p><p>As an alternative to local disks, cloud services also offer virtual disk storage that can be detached from one instance and attached to a different one (e.g., Amazon EBS, Azure managed disks, and persistent disks in Google Cloud). Such a virtual disk is not a physical disk, but rather a cloud service provided by a separate set of machines that emulates the behavior of a disk (a block device, where each block is typically 4 KiB in size). This technology makes it possible to run traditional disk-based software in the cloud, but the block device emulation introduces overheads that can be avoided in systems that are designed from the ground up for the cloud [<a href="https://media.amazonwebservices.com/blog/2017/aurora-design-considerations-paper.pdf">24</a>]. The use of virtual disks also makes the application very sensitive to network glitches, since every I/O operation on the virtual block device is a network call [<a href="https://planetscale.com/blog/the-real-fail-rate-of-ebs">27</a>].</p><p>To address this problem, cloud-native services generally avoid using virtual disks and instead build on dedicated storage services that are optimized for particular workloads. Object storage services such as S3 are designed for long-term storage of fairly large files, ranging from hundreds of kilobytes to several gigabytes in size. The individual rows or values stored in a database are typically much smaller than this; cloud databases therefore typically manage smaller values in a separate service and store larger data blocks (containing many individual values) in an object store [<a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2019/05/socrates.pdf">25</a>, <a href="https://blog.colinbreck.com/predicting-the-future-of-distributed-systems/">28</a>].</p><p>In traditional systems architecture, the same computer is responsible for both storage (disk) and computation (CPU and RAM), but in cloud-native systems, these two responsibilities have become somewhat separated, or disaggregated [<a href="https://dl.acm.org/doi/abs/10.1145/3514221.3526055">9</a>, <a href="https://www.usenix.org/system/files/nsdi20-paper-vuppalapati.pdf">26</a>, <a href="https://www.thenile.dev/blog/storage-compute-separation">29</a>, <a href="https://cloud.google.com/blog/products/databases/alloydb-for-postgresql-intelligent-scalable-storage">30</a>]: for example, S3 only stores files, and if you want to analyze that data, you will have to run the analysis code somewhere outside of S3. This implies transferring the data over the network.</p><p>Furthermore, cloud-native systems are often multitenant, which means that rather than having a separate machine for each customer, data and computation from several customers are handled on the same shared hardware by the same service [<a href="https://learning.oreilly.com/library/view/designing-data-intensive-applications/9781098119058/ch01.html#Vanlightly2023serverless">31</a>]. Multitenancy can enable better hardware utilization, easier scalability, and easier management by the cloud provider, but it also requires careful engineering to ensure that one customer&#8217;s activity does not affect the performance or security of the system for other customers [<a href="https://learning.oreilly.com/library/view/designing-data-intensive-applications/9781098119058/ch01.html#Jonas2019">32</a>].</p><h3>Operations in the Cloud Era</h3><p>Traditionally, the people managing an organization&#8217;s server-side data infrastructure were known as database administrators (DBAs), or system administrators (sysadmins). More recently, many organizations have tried to integrate the roles of software development and operations into teams with a shared responsibility for both backend services and data infrastructure; the DevOps philosophy has guided this trend. Site reliability engineers (SREs) are Google&#8217;s implementation of this idea [<a href="https://www.oreilly.com/library/view/site-reliability-engineering/9781491929117/">33</a>].</p><p>The role of operations is to ensure that services are reliably delivered to users (including configuring infrastructure and deploying applications) and to ensure a stable production environment (including monitoring and diagnosing any problems that may affect reliability). For self-hosted systems, operations traditionally involve a significant amount of work at the level of individual machines, such as capacity planning (e.g., monitoring available disk space and adding more disks before you run out of space), provisioning new machines, moving services from one machine to another, and installing operating system patches.</p><p>Many cloud services present an API that hides the individual machines implementing the service. For example, cloud storage replaces fixed-size disks with metered billing, where you can store data without planning your capacity needs in advance, and you are then charged based on the space used. Moreover, many cloud services remain highly available, even when individual machines have failed.</p><p>This shift in emphasis from individual machines to services has been accompanied by a change in the role of operations. The high-level goal of providing a reliable service remains the same, but the processes and tools have evolved.</p><p>The DevOps/SRE philosophy places greater emphasis on the following:</p><ul><li><p>Setting up automation; preferring repeatable processes over manual one-off jobs</p></li><li><p>Using ephemeral VMs and services rather than long-running servers</p></li><li><p>Enabling frequent application updates</p></li><li><p>Learning from incidents</p></li><li><p>Preserving the organization&#8217;s knowledge about the system, even as individuals come and go [<a href="https://queue.acm.org/detail.cfm?id=3434773">34</a>]</p></li></ul><p>With the rise of cloud services, a bifurcation of roles has occurred. Operations teams at infrastructure companies specialize in the details of providing a reliable service to a large number of customers, while the customers of the service spend as little time and effort as possible on infrastructure [<a href="https://www.pluralsight.com/resources/blog/cloud/the-future-of-ops-jobs">35</a>].</p><p>Customers of cloud services still require operations, but they focus on different aspects, such as choosing the most appropriate service for a given task, integrating services with each other, and migrating from one service to another. Even though metered billing removes the need for capacity planning in the traditional sense, it&#8217;s still important to know what resources you are using for which purpose so that you don&#8217;t waste money on cloud resources that are not needed. Capacity planning becomes financial planning, and performance optimization becomes cost optimization [<a href="https://medium.com/riskified-technology/over-pay-as-you-go-for-your-datastore-11a29ae49a8b">36</a>]. Additionally, cloud services do have resource limits or quotas (such as the maximum number of processes you can run concurrently), which you need to know about and plan for before you run into them [<a href="https://thenewstack.io/serverless-doesnt-mean-devopsless-or-noops/">37</a>].</p><p>Adopting a cloud service can be easier and quicker than provisioning and running your own infrastructure, although you still have to learn how to use the cloud service and perhaps work around its limitations. Integration among services becomes a particular challenge as a growing number of vendors offer an ever-broader range of cloud services targeting different use cases [<a href="https://erikbern.com/2021/11/30/storm-in-the-stratosphere-how-the-cloud-will-be-reshuffled.html">38</a>, <a href="https://benn.substack.com/p/the-data-os">39</a>]. ETL is only part of the story; operational cloud services also need to be integrated with each other. At present, we lack standards to facilitate this sort of integration, so it often involves significant manual effort.</p><p>Other operational aspects that cannot fully be outsourced to cloud services include maintaining the security of an application and the libraries it uses, managing the interactions between your own services, monitoring the load on your services, and tracking down the cause of problems such as performance degradations or outages. While the cloud is changing the role of operations, the need for operations is as great as ever.</p><h2>2. Doing the right thing as a software engineer</h2><p><em>The excerpt below is a section from Chapter 14, &#8220;Doing the Right Thing&#8221;</em></p><p>In the final chapter of this book, let&#8217;s take a step back. Throughout, we have examined a wide range of architectures for data systems, evaluated their pros and cons, and explored techniques for building reliable, scalable, and maintainable applications. However, we have left out a fundamental part of the discussion, which we should now fill in.</p><p>Every system is built for a purpose; every action we take has both intended and unintended consequences. The purpose may be as simple as making money, but the consequences may be far-reaching. We, the engineers building these systems, have a responsibility to carefully consider those consequences and to ensure that our decisions do not cause harm.</p><p>We talk about data as an abstract thing, but remember that many datasets are about people: their behavior, their interests, their identities. We must treat such data with humanity and respect. Users are humans too, and human dignity is paramount [<a href="https://schmud.de/posts/2024-08-18-data-is-a-bad-idea.html">1</a>].</p><p>Software development increasingly involves making important ethical choices. There are guidelines to help software engineers navigate these issues, such as the ACM Code of Ethics and Professional Conduct [<a href="https://www.acm.org/code-of-ethics">2</a>], but they are rarely discussed, applied, or enforced in practice. As a result, engineers and product managers sometimes take a cavalier attitude to privacy and the potential negative consequences of their products [<a href="https://www.linkedin.com/blog/engineering/archive/making-hard-choices-the-quest-for-ethics-in-machine-learning">3</a>, <a href="https://www.theguardian.com/commentisfree/2015/dec/06/algorithm-writers-should-have-code-of-conduct">4</a>].</p><p>A technology is not good or bad in itself &#8211; what matters is how it is used and how it affects people. This is true of a software system such as a search engine in much the same way as it is for a weapon like a gun. The ethical responsibility is ours to bear; it is not sufficient for software engineers to focus exclusively on the technology and ignore its consequences.</p><p>In contrast to much of computing, however, the concepts at the heart of ethics are not fixed or determinate in their precise meaning; they require interpretation, which may be subjective [<a href="https://cacm.acm.org/opinion/ethical-ai-is-not-about-ai/">5</a>]. What makes something &#8220;good&#8221; or &#8220;bad&#8221; is not well defined, and serious discourse on the subject among computing professionals is lacking [<a href="https://www.benzevgreen.com/wp-content/uploads/2019/11/19-ai4sg.pdf">6</a>]. Reasoning about ethics is difficult, but also too important to ignore. What does this entail? &#8220;Ethics&#8221; are not a checklist with which to comply; it&#8217;s a participatory and iterative process of reflection, in dialogue with people involved and accountability for the results [<a href="https://cacm.acm.org/opinion/ethics-as-a-participatory-and-iterative-process/">7</a>].</p><h3>Predictive Analytics</h3><p>Predictive analytics is a major part of why people are excited about big data and AI. It&#8217;s also an area that is fraught with ethical dilemmas. Using data analysis to predict the weather, or the spread of diseases, is one thing [<a href="https://cacm.acm.org/news/what-happens-when-big-data-blunders/">8</a>]; it is another matter to predict whether a convict is likely to reoffend, whether an applicant for a loan is likely to default, or whether an insurance customer is likely to make expensive claims [<a href="https://www.cl.cam.ac.uk/research/security/seminars/archive/video/2023-03-07-t196231.html">9</a>]. The latter have a direct effect on people&#8217;s lives.</p><p>Naturally, payment networks want to prevent fraudulent transactions, banks want to avoid bad loans, airlines want to avoid hijackings, and companies want to avoid hiring ineffective or untrustworthy people. From their point of view, the cost of a missed business opportunity is low, but the cost of a bad loan or a problematic employee is much higher, so it is expected for organizations to be cautious. If in doubt, they are better off saying &#8220;no&#8221;.</p><p>However, as algorithmic decision making becomes more widespread, someone who has (accurately or falsely) been labeled as risky by an algorithm may suffer a large number of &#8220;no&#8221; decisions. Systematically being excluded from jobs, air travel, insurance coverage, property rental, financial services, and other key aspects of society is such a large constraint on an individual&#8217;s freedom that it has been called &#8220;algorithmic prison&#8221; [<a href="https://www.theatlantic.com/technology/archive/2014/02/welcome-to-algorithmic-prison/283985/">10</a>]. In countries that respect human rights, the criminal justice system presumes innocence until proven guilty; on the other hand, automated systems can systematically and arbitrarily exclude a person from participating in society without any proof of guilt and little chance of appeal.</p><h4>Bias &amp; discrimination</h4><p>Decisions made by an algorithm are not necessarily any better or any worse than those made by a human. Everyone is likely to have biases, even if they actively try to counteract them, and discriminatory practices can become culturally institutionalized. There is hope that basing decisions on data, rather than subjective and instinctive human assessments, could be more fair and give a better chance to people who are often overlooked or disadvantaged in the traditional system [<a href="https://www.theatlantic.com/magazine/archive/2013/12/theyre-watching-you-at-work/354681/">11</a>].</p><p>When we develop predictive analytics and AI systems, we are not merely automating a human&#8217;s decision by using software to specify the rules for when to say &#8220;yes&#8221; or &#8220;no&#8221;; we are leaving the rules themselves to be inferred from data. However, the patterns learned by these systems are opaque: even if the data indicates a correlation, we may not know why. If the input to an algorithm carries a systematic bias, the system will most likely learn and amplify that bias in its output [<a href="https://www.theguardian.com/technology/2016/aug/03/algorithm-racist-human-employers-work">12</a>].</p><p>In many countries, anti-discrimination laws prohibit treating people differently depending on protected traits such as ethnicity, age, gender, sexuality, disability, or beliefs. Other features of a person&#8217;s data may be analyzed, but what happens if they are correlated with protected traits? For example, in racially segregated neighborhoods, a person&#8217;s postal code or even their IP address is a strong predictor of race. Put like this, it seems ridiculous to believe that an algorithm could somehow take biased data as input and produce fair and impartial output from it [<a href="https://www.scientificamerican.com/article/how-a-machine-learns-prejudice/">13</a>, <a href="https://www.ftc.gov/system/files/ftc_gov/pdf/EEOC-CRT-FTC-CFPB-AI-Joint-Statement%28final%29.pdf">14</a>]. Yet this belief often seems to be implied by proponents of data-driven decision making; an attitude that has been satirized as &#8220;machine learning is like money laundering for bias&#8221; [<a href="https://idlewords.com/talks/sase_panel.htm">15</a>].</p><p>Predictive analytics systems merely extrapolate from the past; if the past is discriminatory, they codify and amplify that discrimination [<a href="https://www.zdnet.com/article/artificial-intelligence-in-healthcare-is-racist/">16</a>]. If we want the future to be better than the past, moral imagination is required, and that&#8217;s something only humans can provide [<a href="https://www.amazon.com/Weapons-Math-Destruction-Increases-Inequality/dp/0553418815">17</a>]. Data and models should be our tools, not our masters.</p><h4>Responsibility and Accountability</h4><p>Automated decision-making raises the question of responsibility and accountability [<a href="https://www.amazon.com/Weapons-Math-Destruction-Increases-Inequality/dp/0553418815">17</a>]. If a human makes a mistake, they can be held accountable, and the person affected by the decision can appeal. Algorithms make mistakes too, but who is accountable when they go wrong? [<a href="https://www.nytimes.com/2016/08/01/opinion/make-algorithms-accountable.html">18</a>] When a self-driving car causes an accident, who is responsible? If an automated credit scoring algorithm systematically discriminates against people of a particular race or religion, is there any recourse? If a decision by your ML system comes under judicial review, can you explain to the judge how the algorithm made its decision? People should not be able to evade responsibility by blaming an algorithm.</p><p>Credit rating agencies are a classic example of collecting data to make decisions about people. A bad credit score makes life difficult, but at least a credit score is normally based on relevant facts about a person&#8217;s actual borrowing history, and any errors in the record can be corrected (although the agencies normally do not make this easy). Scoring algorithms based on machine learning, however, typically use a much wider range of inputs and are much more opaque, making it harder to understand how a particular decision has come about and whether someone is being treated in an unfair or discriminatory way [<a href="https://arxiv.org/abs/1606.08813">19</a>].</p><p>A credit score summarizes &#8220;how did you behave in the past?&#8221; whereas predictive analytics usually work on the basis of &#8220;who is similar to you, and how did people like you behave in the past?&#8221; Drawing parallels to others&#8217; behavior implies stereotyping people; for example, based on where they live (a close proxy for race and socioeconomic class). What about people put in the wrong bucket? Furthermore, if a decision is incorrect because of erroneous data, recourse is almost impossible [<a href="https://www.amazon.com/Weapons-Math-Destruction-Increases-Inequality/dp/0553418815">17</a>].</p><p>Much data is statistical in nature, which means that even if the probability distribution on the whole is correct, individual cases may well be wrong. For example, if the average life expectancy in your country is 80 years, that doesn&#8217;t mean you&#8217;re expected to drop dead on your 80th birthday. From the average and the probability distribution, you can&#8217;t say much about the age to which someone will live. Similarly, the output of a prediction system is probabilistic and may well be wrong in individual cases.</p><p>A blind belief in the supremacy of data for making decisions is not only delusional, but also positively dangerous. As data-driven decision making becomes more widespread, we will need to figure out how to avoid reinforcing existing biases, how to make algorithms accountable and transparent, and how to fix them when they inevitably make mistakes.</p><p>We will also need to figure out how to realize the positive potential of data and prevent it from being used to harm people. For example, analytics can reveal financial and social characteristics about personal lives. On the one hand, this power could be used to focus aid and support to help those who need it most. On the other hand, it is sometimes used by predatory businesses seeking to identify vulnerable people and sell them risky products such as high-cost loans or worthless college degrees [<a href="https://www.amazon.com/Weapons-Math-Destruction-Increases-Inequality/dp/0553418815">17</a>, <a href="https://www.commerce.senate.gov/wp-content/uploads/media/doc/12.18.13%20Senate%20Commerce%20Committee%20Report%20on%20Data%20Broker%20Industry.pdf">20</a>].</p><h4>Feedback loops</h4><p>Even with predictive applications with less immediately far-reaching effects on people, such as recommendation systems, there are difficult issues that we must confront. When services become good at predicting the content users want to see, they may end up showing them only opinions they already agree with, leading to echo chambers in which stereotypes, misinformation, and polarization can breed. We already know the impact that social media echo chambers can have on election campaigns.</p><p>When predictive analytics affect people&#8217;s lives, particularly pernicious problems arise because of self-reinforcing feedback loops. For example, consider the case of employers using credit scores to evaluate potential hires. You may be a good worker with a good credit score, but suddenly find yourself in financial difficulties due to a misfortune beyond your control. As you miss payments on your bills, your credit score suffers, and you will be less likely to find work. Joblessness pushes you toward poverty, which further worsens your score, making it even harder to find employment [<a href="https://www.amazon.com/Weapons-Math-Destruction-Increases-Inequality/dp/0553418815">17</a>]. It&#8217;s a downward spiral due to poisonous assumptions, hidden behind a camouflage of mathematical rigor and data.</p><p>As another example of a feedback loop, economists found that when gas stations in Germany introduced algorithmic prices, competition was reduced and prices for consumers went up because the algorithms learned to collude [<a href="https://economics.yale.edu/sites/default/files/clark_acex_jan_2021.pdf">21</a>].</p><p>We can&#8217;t always predict when such feedback loops may happen. However, many consequences can be predicted by thinking about an entire system (not just the computerized parts, but also the people interacting with it), in an approach known as &#8220;systems thinking&#8221; [<a href="https://www.amazon.nl/Thinking-Systems-Primer-Diana-Wright/dp/1844077268">22</a>]. We can try to understand how a data analysis system responds to different behaviors, structures, or characteristics. Does the system reinforce and amplify existing differences between people (e.g., making the rich richer or the poor poorer), or does it try to combat injustice? Even with the best intentions, we must beware of the possibility of unintended consequences.</p><h3>Surveillance</h3><p><em>The excerpt below is from another section in Chapter 14, &#8220;Doing the Right Thing&#8221;</em></p><p>As a thought experiment, try replacing the word &#8220;data&#8221; with &#8220;surveillance&#8221;, and observe whether common phrases still sound so good [<a href="https://x.com/hashbreaker/status/598076230437568512">23</a>]. How about this: &#8220;In our surveillance-driven organization we collect real-time surveillance streams and store them in our surveillance warehouse. Our surveillance scientists use advanced analytics and surveillance processing in order to derive new insights.&#8221;</p><p>This thought experiment is unusually polemical for this book, &#8220;<em>Designing <strong>Surveillance</strong>-Intensive Applications</em>&#8221;, but strong words are needed to emphasize this point. In our attempts to make software &#8220;eat the world&#8221; [<a href="https://a16z.com/why-software-is-eating-the-world/">24</a>], we have built the greatest mass surveillance infrastructure ever seen. We are rapidly approaching a world in which every inhabited space contains at least one internet-connected microphone, in the form of smartphones, smart TVs, voice-controlled assistant devices, baby monitors, and even children&#8217;s toys that use cloud-based speech recognition. Many of these devices have terrible security track records [<a href="https://arstechnica.com/information-technology/2016/01/how-to-search-the-internet-of-things-for-photos-of-sleeping-babies/">25</a>].</p><p>What is new compared to the past is that digitization has made it easy to collect large amounts of data about people. Surveillance of our location and movements, our social relationships and communications, our purchases and payments, and our health data has become almost unavoidable. A surveillance organization may end up knowing more about a person than that person knows about themselves; for example, identifying illnesses or economic problems before that individual is aware of them.</p><p>Even the most totalitarian, repressive regimes of the past could only dream of putting a microphone in every room and forcing every person to constantly carry a device capable of tracking their location and movements. Yet the benefits that we get from digital technology are so great that we now voluntarily accept this state of total surveillance. The difference is just that the data is being collected by corporations to provide us with services, rather than government agencies seeking control [<a href="https://www.schneier.com/books/data-and-goliath">26</a>].</p><p>Not all data collection necessarily qualifies as surveillance, but examining it as such can help us understand our relationship with the data collector. Why are we seemingly happy to accept surveillance by corporations? Perhaps you feel you have nothing to hide; in other words, you are totally in line with existing power structures, you are not a marginalized minority, and you needn&#8217;t fear persecution [<a href="https://grugq.tumblr.com/post/142799983558/nothing-to-hide">27</a>]. Not everyone is so fortunate. Or perhaps it&#8217;s because the purpose seems benign; it&#8217;s not overt coercion and conformance, merely better recommendations and more personalized marketing. However, combined with the discussion of predictive analytics from the last section, that distinction seems less clear.</p><p>We are already seeing behavioral data about driving, tracked by vehicles without drivers&#8217; consent, affecting their insurance premiums [<a href="https://www.ftc.gov/news-events/news/press-releases/2025/01/ftc-takes-action-against-general-motors-sharing-drivers-precise-location-driving-behavior-data">28</a>], and health insurance coverage that depends on people wearing a fitness tracking device. When surveillance is used to make decisions that hold sway over important aspects of life, such as insurance coverage or employment, it starts to appear less benign. Data analysis can also reveal surprisingly intrusive things; for example, the movement sensor in a smartwatch or fitness tracker can be used to work out what you are typing (e.g., passwords) with fairly good accuracy [<a href="https://arxiv.org/abs/1512.05616">29</a>]. Sensor accuracy and algorithms for analysis are only going to get better.</p><h2>Takeaways</h2><p>Thanks to Martin for writing this book, and to himself and Chris for doing a revamp for the second edition. The volume is now even more relevant to how we build systems in 2026 and beyond. You can purchase a hard copy from <a href="https://learning.oreilly.com/library/view/designing-data-intensive-applications/9781098119058/">the publisher&#8217;s website</a> or <a href="https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1098119061">Amazon</a>.</p><p>The first edition has a timeless quality because it focused on the fundamentals of large systems, and the new second edition follows the same approach, as laid out in its preface:</p><blockquote><p>&#8220;Although the landscape of technologies for processing and storing data is diverse and fast-changing, the underlying principles endure. If you understand those principles, you&#8217;re in a position to see where each tool fits in, how to make good use of it, and how to avoid its pitfalls. This book focuses on those principles.&#8221;</p></blockquote><p>Since the first edition appeared nine years ago, some things have changed in the tech industry:</p><ul><li><p><strong>Much greater focus on the cloud. </strong>Building large systems on top of cloud infrastructure is more common. This brings lower complexity as cloud primitives hide a lot of implementation complexity, but it also means accepting more risk because when the cloud is down, so is your system.</p></li><li><p><strong>Systems which AI tools build upon are more relevant. </strong>Vector databases, <a href="https://www.geeksforgeeks.org/python/pandas-create-test-and-train-samples-from-dataframe/">DataFrames</a> (for training datasets), and the processing of large amounts of training data with batch processing systems are relevant to anyone building production AI systems.</p></li><li><p><strong>Local-first software. </strong>Martin focuses on this area in his work, and with AI, we could see more demand for running models locally. Operating systems like Ubuntu are also <a href="https://newsletter.pragmaticengineer.com/i/195753987/4-betting-on-local-first-and-plans-for-agentic-workflows">focusing on this</a>.</p></li><li><p><strong>Formal methods. </strong>The advent of AI-generated code means this topic is getting more attention industry-wide, and the second edition covers it.</p></li><li><p><strong>Regulation and legal context. </strong>Regulations like the EU&#8217;s General Data Protection Regulation (GDPR) are something software engineers increasingly need to know about, and the book now covers it.</p></li></ul><p>If I had to summarize the evolution of the book in its second edition, it would be more focus on cloud and AI, and more on local-first software, testing, and how regulations affect engineers. Interestingly, this mirrors how the tech industry has developed over time, too.</p><p>I very much appreciate that the book closes with the final chapter focused on &#8220;doing the right thing&#8221; as a software engineer. Software systems have wide-ranging societal impact, and engineers working on these systems have a great say in what gets built, and how it gets built. As engineers, we owe it the very least to ourselves to consider the broader impact of our decisions &#8212; and doing so might also force us to make important ethical choices. There&#8217;s less discussion of the ethics angle on software engineering: and I&#8217;m glad that Martin and Chris did not shy away from going deeper into this topic.</p><p>If you&#8217;d like to get more background on the book &#8211; and on the hard parts of building large-scale systems &#8211; check out <a href="https://newsletter.pragmaticengineer.com/p/designing-data-intensive-applications">our podcast episode with Martin Kleppmann.</a></p>]]></content:encoded></item><item><title><![CDATA[How will AI change operating systems? Part 1: Ubuntu and Linux]]></title><description><![CDATA[A deepdive with the Canonical team into how AI is changing Ubuntu, why they&#8217;re betting on local-first LLMs, and a look into other Linux distributions]]></description><link>https://newsletter.pragmaticengineer.com/p/ubuntu-and-ai</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/ubuntu-and-ai</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 28 Apr 2026 14:25:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4X83!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI is affecting how many of us software engineers build; we&#8217;re prompting more code and producing much more of it. The tools are also adapting, with command-line interfaces gradually becoming more popular than IDEs. But what about operating systems? To find out, I reached out to the leading Linux distribution &#8211; the team at Ubuntu &#8211; and the Windows team, about how AI is changing their operating systems.</p><p>Today&#8217;s article focuses on Linux and Ubuntu, and we&#8217;ll cover Windows in a follow-up issue.<em> Obviously, I reached out to Apple but heard nothing back, unsurprisingly. If you&#8217;re reading this and happen to work at Apple, it&#8217;d be great to learn more!</em></p><p><a href="https://jnsgr.uk/">Jon Seager</a> is VP of Engineering at Canonical &#8211; the company behind Ubuntu &#8211; and has provided new details about what the team there has built for AI support, and some new ideas that they&#8217;re brewing up. Today, we cover:</p><ol><li><p><strong>Hardware enablement: support for GPUs, NPUs and DPUs. </strong>When you turn on a machine with AI accelerators, Ubuntu aims for the hardware to perform at its full potential. This means having proper driver support for PCs and cloud data centers&#8217; computing units.</p></li><li><p><strong>Hardware partnerships. </strong>Working closely with NVIDIA, AMD, and Intel means Ubuntu can support those vendors&#8217; new hardware from release day.</p></li><li><p><strong>CPU architecture variants</strong>. New versions in a CPU family add to, or change, features. An operating system needs to support a new version of the CPU architecture variant in order to fully utilize it. Ubuntu does this for the x86&#8209;64 family, making it a <em>lot</em> more performant on newer CPUs &#8211; while still supporting older CPUs.</p></li><li><p><strong>Local-first bet &amp; plans for agentic workflows</strong>. There&#8217;s a big focus on running local models and using &#8220;inference snaps&#8221; which help choose the right model with the right quantization. There is the intention to support agentic workflows at the OS level, one day, which is currently at the early exploration stage.</p></li><li><p><strong>Developer ecosystem</strong>. There&#8217;s a plan to add more support for AI dev tools, a focus on sandboxing at the OS level, a push to support ARM64 laptops more, and we touch on the popularity of Windows Subsystem for Linux (WSL).</p></li><li><p><strong>Engineering culture. </strong>A skeptical attitude to AI at Canonical has given way to one where experimentation is encouraged and devs<strong> </strong>lean into AI tools, but there are no targets for token usage or amounts of AI-generated code.</p></li><li><p><strong>What other Linux distributions are doing. </strong>Arch Linux takes the &#8220;DIY your AI setup&#8221; approach, Omarchy makes it easy to install AI tools, while Red Hat Enterprise Linux ships with AI integrated into the command-line and support for AI accelerators &amp; popular AI tools.</p></li></ol><p><em>The bottom of this article could be cut off in some email clients. <a href="https://newsletter.pragmaticengineer.com/p/ubuntu-and-ai">Read the full article uninterrupted, online.</a></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.pragmaticengineer.com/p/ubuntu-and-ai&quot;,&quot;text&quot;:&quot;Read the full article online&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.pragmaticengineer.com/p/ubuntu-and-ai"><span>Read the full article online</span></a></p><h2>1. Hardware enablement: support for GPUs, NPUs &amp; DPUs</h2><p>Jon mentioned he detects a &#8220;Dotcom Boom&#8221;-era vibe in the industry, like around when &#8220;web 1.0&#8221; was created, and indeed, lots of startups today aim to be the Google-style success story of this &#8220;AI era&#8221;. At Canonical, the team asked: what does that mean for Ubuntu as an operating system?</p><p>For instance, should Ubuntu join the competition and try to position itself closer to AI, or keep focusing on what they&#8217;ve done for decades: build an operating system? Jon said:</p><blockquote><p>&#8220;We need to make sure to remain a relatable and accessible system. I don&#8217;t think we should blur the line between application features and the OS itself. So, the most powerful thing we can do is hardware enablement.&#8221;</p></blockquote><p>Hardware enablement means that if a computer (typically, a laptop) has AI-related hardware, Ubuntu should allow it to make full use of it. This involves adding support for GPUs, NPUs, DPUs and other types of accelerator cards. Let&#8217;s briefly go through each.</p><h3>GPUs</h3><p>As is likely widely known by readers, &#8216;GPU&#8217; stands for Graphics Processing Unit. Originally built for graphics rendering, its #1 use case is no longer in video games but for AI training and inference. GPUs come in two forms:</p><ul><li><p>Integrated GPUs: located on the same <a href="https://en.wikipedia.org/wiki/Die_(integrated_circuit)">die</a> (integrated circuit) as the CPU, like GPUs on Apple&#8217;s M-series processors</p></li><li><p>Discrete GPUs: separate chips on their own board; often for gaming, or in standalone GPU rigs for AI and ML workloads</p></li></ul><p>NVIDIA leads the market in discrete GPUs for rigs with its <a href="https://www.nvidia.com/en-us/data-center/technologies/blackwell-architecture/">Blackwell family</a>, and in standalone GPU cards with the <a href="https://www.nvidia.com/en-us/geforce/rtx/">NVIDIA RTX</a> series. Other vendors like AMD offer GPUs for data centers (like the <a href="https://www.amd.com/en/products/accelerators/instinct/mi300.html">Instinct MI300 Series</a>) and for PCs with the <a href="https://www.amd.com/en/products/graphics/desktops/radeon.html">AMD Radeon</a> series.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!unR1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!unR1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 424w, https://substackcdn.com/image/fetch/$s_!unR1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 848w, https://substackcdn.com/image/fetch/$s_!unR1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 1272w, https://substackcdn.com/image/fetch/$s_!unR1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!unR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png" width="1440" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1440,&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_!unR1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 424w, https://substackcdn.com/image/fetch/$s_!unR1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 848w, https://substackcdn.com/image/fetch/$s_!unR1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 1272w, https://substackcdn.com/image/fetch/$s_!unR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7757d200-11b3-4ad0-ac48-3cebcdcf78aa_1440x970.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Hands full: NVIDIA CEO Jensen Huang with the Blackwell GPU (left) and GB200 superchip. Source: <a href="https://fortune.com/2024/03/19/nvidia-new-blackwell-chip-ai-carbon-footprint-problem/">Forbes</a></em></figcaption></figure></div><h3>NPUs</h3><p>Neural Processing Units (NPUs) are also called &#8220;AI accelerators.&#8221; This is a dedicated block on the System-on-a-chip (SoC), on modern processors especially designed for running <a href="https://newsletter.pragmaticengineer.com/p/what-is-inference-engineering">AI inference</a> efficiently on&#8209;device. Since 2022, many modern processors have had a dedicated NPU block, including all Apple&#8217;s M-series chips (from M1 and up), Intel&#8217;s Core Ultra and Core Ultra &#8220;Series 2&#8221;, AMD&#8217;s Ryzen AI 300 series, and also Qualcomm&#8217;s Snapdragon X Elite and Snapdragon X Plus.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4X83!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4X83!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 424w, https://substackcdn.com/image/fetch/$s_!4X83!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 848w, https://substackcdn.com/image/fetch/$s_!4X83!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 1272w, https://substackcdn.com/image/fetch/$s_!4X83!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4X83!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png" width="1075" height="612" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:612,&quot;width&quot;:1075,&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_!4X83!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 424w, https://substackcdn.com/image/fetch/$s_!4X83!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 848w, https://substackcdn.com/image/fetch/$s_!4X83!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 1272w, https://substackcdn.com/image/fetch/$s_!4X83!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa93367d9-f13e-4630-952d-68caf3c34f4e_1075x612.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>AMD&#8217;s Ryzen AI Pro Series 3000 processors have dedicated NPUs, like most modern laptop processors</em></figcaption></figure></div><p>A number shared for each NPU is TOPS. TOPS means Tera (trillions) of Operations Per Second, and the said operation is a &#8220;multiply-accumulate&#8221; (MAC) one, which <a href="https://www.qualcomm.com/news/onq/2024/04/a-guide-to-ai-tops-and-npu-performance-metrics">Qualcomm describes as:</a></p><blockquote><p>&#8220;A multiply-accumulate (MAC) operation executes the mathematical formulas at the core of AI workloads. A matrix multiply consists of a series of two fundamental operations: multiplication and addition to an accumulator. A MAC unit can, for example, run one of each per clock cycle, meaning it executes two operations per clock cycle. A given NPU has a set number of MAC units that can operate at varying levels of precision, depending on the NPU&#8217;s architecture.&#8221;</p></blockquote><p>How TOPS is calculated: TOPS = 2 &#215; MAC unit count &#215; Frequency / 1 trillion.</p><p>&#8220;Frequency&#8221; refers to the clock speed (cycles per second) at which an NPU and its MAC units (as well as a CPU or GPU) operate, which directly influences overall performance. Processors at higher frequencies allow for more operations, but higher frequencies also mean more energy consumed, heat generated, and battery life decreased. The TOPS number that&#8217;s quoted for processors is generally the peak operating frequency.</p><p>NPUs are often ideal for low-power, local inference, and for running smaller, local models. They can be useful for things like Local speech&#8209;to&#8209;text (dictation, captions, meeting transcription), video background blur/replacement or auto&#8209;framing, small local language summarization, etc. NPUs are more typical of laptop and PC processors, although some phone processors ship with them like the iPhone (A-series chips) and Google&#8217;s Tensor processor in Pixel phones. Basically, NPUs promise to bring efficiently-running local models on laptops one step closer.</p><h3>DPUs</h3><p>Data Processing Units (DPUs) are typically found in data centers, moving massive amounts of data fast. NVIDIA&#8217;s explanation:</p><blockquote><p>&#8220;The CPU is for general-purpose computing, the GPU is for accelerated computing, and the DPU, which moves data around the data center, does data processing.</p><p>A DPU is a new class of programmable processor that combines three key elements. A DPU is a system on a chip, or SoC, that combines:</p><ul><li><p>An industry-standard, high-performance, software-programmable, multi-core CPU, typically based on the widely used Arm architecture, tightly coupled to the other SoC components.</p></li><li><p>A high-performance network interface capable of parsing, processing and efficiently transferring data at line rate, or the speed of the rest of the network, to GPUs and CPUs.</p></li><li><p>A rich set of flexible and programmable acceleration engines that offload and improve applications&#8217; performance for AI and machine learning, zero-trust security, telecommunications, and storage, among others.&#8221;</p></li></ul></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DX7g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DX7g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 424w, https://substackcdn.com/image/fetch/$s_!DX7g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 848w, https://substackcdn.com/image/fetch/$s_!DX7g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!DX7g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DX7g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png" width="1456" height="990" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:990,&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_!DX7g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 424w, https://substackcdn.com/image/fetch/$s_!DX7g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 848w, https://substackcdn.com/image/fetch/$s_!DX7g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!DX7g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36c2607-8ed3-4da3-8fa9-c93d6dbf890d_1500x1020.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>NVIDIA BlueField-3 DPU</em></figcaption></figure></div><p>Several major chipmakers manufacture DPUs, of which NVIDIA&#8217;s BlueField family is the most widespread. Others include AMD Pensando DPUs (Elba, Giglio), and Intel IPU / DPU cards (E2100, E2200 series).</p><p>DPUs are most commonly deployed inside Hyperscale cloud providers (AWS, Azure, GCP, OCI), or in AI and high-performance computing (HPC) data centers, or larger private clouds. DPUs make sense when GPU traffic is huge, or when the network telemetry overhead is so great that it could overwhelm the CPUs processing the data transfer.</p><h2>2. Hardware partnerships</h2><p>It&#8217;s easiest to add support to hardware by working with leading chip manufacturers, so Ubuntu has relationships with hardware vendors for that reason. As a result, the OS sometimes offers day-one support for cutting-edge AI supercomputers.</p><h3>Partnership with NVIDIA</h3><p>In September 2025, Canonical announced it would package and distribute the full NVIDIA CUDA toolkit directly within Ubuntu&#8217;s repositories. This deal collapsed into a single standard <a href="https://linuxize.com/post/how-to-use-apt-command/">apt</a> install, something that had previously been a multi-step manual installation process of downloading from NVIDIA&#8217;s site, importing GPG keys, pinning a separate APT repo &#8211; and praying nothing broke.</p><p>Packaging and distributing the CUDA toolkit makes developing with CUDA easier. From Jon:</p><blockquote><p>&#8220;One of the trickiest things for developers who have to use this tech is the dance of matching the right version of Python, with the right version of CUDA, with the right driver. Projects end up with different versions of CUDA, and then machines end up breaking because the driver configuration gets inadvertently broken along the way.</p><p>The number one thing we can do as an operating system is to make this setup as easy as possible.&#8221;</p></blockquote><p>Ubuntu&#8217;s strategy of working directly with chipmakers seems to be working. NVIDIA recently discontinued its custom NVIDIA DGX OS &#8212; a modified Ubuntu it maintained for years &#8212; and now ships plain Ubuntu. Jon:</p><blockquote><p>&#8220;Previously, NVIDIA shipped NVIDIA DGX OS for which NVIDIA had an agreement with Canonical where they could take Ubuntu, modify it with the kernel modules and software they needed, do some product-specific optimization, and ship that as NVIDIA DGX OS.</p><p>This more recent development sees NVIDIA just shipping Ubuntu as it comes.</p><p>When NVIDIA released the DGX Spark, a $4,000 AI workstation with an ARM64 chipset, it shipped running vanilla Ubuntu as the only supported operating system.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4om0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4om0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 424w, https://substackcdn.com/image/fetch/$s_!4om0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 848w, https://substackcdn.com/image/fetch/$s_!4om0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 1272w, https://substackcdn.com/image/fetch/$s_!4om0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4om0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png" width="1456" height="923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:923,&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_!4om0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 424w, https://substackcdn.com/image/fetch/$s_!4om0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 848w, https://substackcdn.com/image/fetch/$s_!4om0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 1272w, https://substackcdn.com/image/fetch/$s_!4om0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87eb9b54-c572-4157-8593-a5e8798bd0cc_2048x1298.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>NVIDIA DGX Spark AI supercomputer: one of several NVIDIA DGX servers powered by NVIDIA&#8217;s DGX OS</em></figcaption></figure></div><p>At CES 2026 in January, Canonical <a href="https://canonical.com/blog/nvidia-vera-rubin-ubuntu-support">announced</a> Ubuntu support for the NVIDIA Vera Rubin NVL72 rack-scale architecture, with day-one platform readiness in Ubuntu, version <a href="https://documentation.ubuntu.com/release-notes/26.04/">26.04 LTS</a> (Long-Term Support: at least 15 years for enterprise customers).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ORn3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ORn3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!ORn3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!ORn3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!ORn3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ORn3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ORn3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!ORn3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!ORn3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!ORn3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d5121a-c63e-48eb-8d00-83acb326d458_1200x675.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>The NVIDIA Vera Rubin NVL72 rack</em></figcaption></figure></div><h3>AMD and Intel</h3><p>It&#8217;s clear Ubuntu and NVIDIA enjoy a strong partnership, but Canonical aims to remain neutral, Jon says:</p><blockquote><p>&#8220;We have an amazing partnership with NVIDIA, but we do the same with Intel, the same with AMD, the same with Qualcomm, and the same with MediaTek because in reality there is hardware being released every day, and if we don&#8217;t maintain those partnerships, the ecosystem becomes even more fragmented than it already naturally is.&#8221;</p></blockquote><p>Last December, Ubuntu announced native support for AMD ROCm, and also ships with Intel&#8217;s OpenVINO toolkit. Ubuntu 26.04 LTS will be the first major distribution to natively package all three GPU compute stacks &#8212; NVIDIA, AMD, and Intel &#8212; with long-term enterprise support. Under Ubuntu Pro, ROCm LTS releases receive up to 15 years of security maintenance.</p><p><em>Security maintenance means that if vulnerabilities or critical incompatibilities are discovered in an LTS version, Canonical will patch them even if the upstream vendor no longer supports those versions and no longer backports security patches.</em></p><p>AMD Instinct accelerators are gaining traction in HPCs and sovereign AI deployments, as enterprises look for alternatives to CUDA-locked hardware. AMD&#8217;s SVP and Chief Software Officer, Andrej Zdravkovic, said the partnership would make it &#8220;easier for developers and enterprises to deploy AMD solutions on supported systems.&#8221;</p><p><strong>Chip vendors want to collaborate because it means less work for them to add operating system-level support.</strong> Jon:</p><blockquote><p>&#8220;It&#8217;s a win-win on both ends. Silicon companies are in the business of building the best chips they can, and partnering with Canonical means they have to concentrate on fewer things which are not their core focus. My hope is that partnering with Canonical helps them to focus on what they&#8217;re best at, while enabling us to help with what we&#8217;re best at: integrating, shipping and maintaining a Linux distribution.&#8221;</p></blockquote><h2>3. Architecture variants</h2><p>Modern x86 processors support multiple instruction set generations: x86_64 v1, v2, v3, v4, and v5. ARM has a similar hierarchy. Each generation adds capabilities, such as AVX-512 instructions that accelerate machine learning workloads.</p><p>Let&#8217;s take the x86_64 instruction set. The instruction set is versioned. These are the versions:</p><ul><li><p>For x86_64: v1, v2, v3, v4, v5&#8230;</p></li><li><p>For ARM: ARM v8.2, v8.3, v9&#8230;</p></li></ul><p><strong>Until recently, Ubuntu ran slower on newer CPUs in order to keep supporting older ones. </strong>So, when installing Ubuntu compiled for AMD64, the OS supported architecture variants for AMD64 v1.</p><p>Supporting v1 has the advantage that the oldest of AMD64 processors can run this Ubuntu version. But if Ubuntu decided to support v2 instructions, then v1 processors could not run the OS! The OS did not use the new instructions; for example, a modern processor with hardware accelerators like AVX-512, didn&#8217;t use them.</p><p><strong>Canonical has reworked its build infrastructure to produce binaries with </strong><em><strong>specific</strong></em><strong> architecture variant support.</strong> So, in the case of running an x86_64 v3 compatible processor, you can download an Ubuntu OS variant that&#8217;s compiled specifically for x86_64 v3.</p><p>One tradeoff the Ubuntu team had to make was building binaries several times, which takes up more processing time and storage at their end. Then again, the Ubuntu team doing this once means that users don&#8217;t need to do recompilation, which made it an easy tradeoff, Jon told me.</p><p>Now, Ubuntu supports x86_64 v3 as an architecture variant and plans to do more. Jon says:</p><blockquote><p>&#8220;Today, we&#8217;ve released x86_64 v3 as a variant, but the capability in our build and delivery pipelines unlocks the ability to add variants for the next RISC-V RVA versions, for ARMv9, ARMv10, ARMv11 and so on.</p><p>We will start now onboarding variants to make sure that when you go and buy your latest Snapdragon laptop, your operating system and all of the parts of it are using the silicon to its fullest.&#8221;</p></blockquote><p><strong>Adding support for architecture variants was a significant undertaking. </strong>Jon explains:</p><blockquote><p>&#8220;This work was especially complex because combined with having the hardware physically available in the build farm, Canonical also needed to make the build scheduler aware, and thread the capability through the build systems of Debian packages, Snaps, OCI images, virtual machine images, etc. As it stands, the capability exists for Debian packages, and support for further package types will land shortly.</p><p>In addition to the build infrastructure, work needed to be done on downstream package managers (apt, snap, &#8230;) and schedulers to ensure they pull the right version of packages, and consideration needs to be given to what happens if a VM containing x86_64 v3 code ends up trying to boot on v1 hardware, and so on.&#8221;</p></blockquote><h2>4. Betting on local-first &amp; plans for agentic workflows</h2><p>If you&#8217;ve tried to run an LLM locally on your machine, you&#8217;ll know it comes with friction. Jon:</p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/ubuntu-and-ai">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Learnings from conducting ~1,000 interviews at Amazon]]></title><description><![CDATA[Steve Huynh, formerly Principal Engineer at Amazon, shares observations from 10+ years of interviewing software engineers, and an excerpt from his new book, Technical Behavioral Interview]]></description><link>https://newsletter.pragmaticengineer.com/p/learnings-from-conducting-1000-interviews</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/learnings-from-conducting-1000-interviews</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 21 Apr 2026 12:49:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_3W5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Steve Huynh, formerly Principal Engineer at Amazon, shares observations from Bar Raiser, and an excerpt from his new book, Technical Behavioral Interview</em></p><p>Tech interviews have two parts: the technical interview &#8211; with a focus on things like coding, software architecture, problem solving &#8211; and the behavioral part &#8211; with a focus on past experience, and the situations that show you&#8217;d be a good fit at the company you&#8217;re interviewing with, along with things like attitude, motivation, culture fit. Technical interviews are going through a big change, thanks to AI tools: some companies are bringing in new, AI-assisted types of interviews, while others are trying to make &#8220;pre-AI&#8221; type interviews work.</p><p>What doesn&#8217;t seem to be changing is the second type of interviews: the behavioral ones. I&#8217;ve found the topic of behavioral interviews from a software engineer&#8217;s perspective somewhat under-discussed &#8211; even though this interview carries huge weight in securing an offer and what level you come in at. No matter how strong your technical skills are, especially at mid-sized and larger companies, you are unlikely to get an offer if you are deemed to not be a fit for what the company is looking for.</p><p>Steve Huynh was an engineer at Amazon for 17 years &#8211; I previously did a podcast episode with him on the reality of being a principal engineer at Amazon. During this time, Steve conducted nearly 1,000 interviews, of which around 600 were Bar Raiser ones. <em>Bar Raiser interviews are unique to Amazon: it&#8217;s an interview conducted by someone outside of the hiring team, with the goal of ensuring that the new hire raises the company&#8217;s talent bar.</em></p><p>After leaving the e-commerce giant, Steve spent 2 years researching and writing the book <a href="https://www.amazon.com/dp/1548441708">Technical Behavioral Interview: An Insider&#8217;s Guide</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_!_3W5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_3W5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_3W5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_3W5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_3W5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_3W5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&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_!_3W5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_3W5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_3W5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_3W5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc215ccd0-2cd3-4ab3-93a5-9ba11a7ba196_2048x1536.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>My copy of <a href="https://www.amazon.com/dp/1548441708">Technical Behavioral Interview: an Insider&#8217;s Guide</a></em></figcaption></figure></div><p>Today, we cover two topics on interviews and behavioral interviews:</p><p><strong>1. Learnings from conducting ~1,000 behavioral interviews at Amazon</strong>. Steve reflects of major observations from his 17 years at Amazon, covering:</p><ul><li><p>You&#8217;re over-prepared for one interview and unprepared for the other</p></li><li><p>How you deliver the story matters as much as the story itself</p></li><li><p>The interview is an audition for what it&#8217;s like to work with you</p></li></ul><p><strong>2. What companies are looking for during behavioral interviews</strong>. An excerpt from Steve&#8217;s new book, Technical Behavioral Interview, covering ~75% of a full chapter of the book (out of the 14 total chapters.) We get into:</p><ul><li><p>Understanding fit: role and company</p></li><li><p>The four dimensions that determine your level</p></li><li><p>What each level looks like</p></li><li><p>Reading and calibrating your own level</p></li><li><p>Researching what companies really value</p></li></ul><p><em>Longtime readers might remember Steve from my podcast with him a year back: <a href="https://newsletter.pragmaticengineer.com/p/what-is-a-principal-engineer-at-amazon">What is a Principal Engineer at Amazon? With Steve Huynh</a></em></p><p><em>My usual disclaimer: as with all my recommendations, I was not paid for this article, and none of the links are affiliates. See <a href="https://blog.pragmaticengineer.com/ethics-statement/">my ethics statement</a> for more.</em></p><p>With this, it&#8217;s over to Steve:</p><div><hr></div><h2>1. Learnings from conducting ~1,000 behavioral interviews at Amazon</h2><p>A Bar Raiser is a specially trained interviewer whose job is to ensure that every hire raises the average talent level at Amazon. I had veto power over any candidate. I sat on nearly a thousand interview loops across every level from intern to Principal Engineer.</p><p>After 50 or so interviews as a Bar Raiser, the patterns became impossible to miss. And this was the biggest one:</p><p>The candidates who didn&#8217;t get offers seldom failed because they lacked technical skill. <strong>They failed because of how they presented themselves.</strong></p><p>For sure, technical preparation is crucial, and I&#8217;m not telling you to skip it. But most candidates have massive blind spots when it comes to non-technical matters, which is a big problem. Why? Because that blind spot is where most hiring decisions are made.</p><p>The Bar Raiser who trained me put it this way:</p><p>Technical skills are the ante. They get you into the game. But they&#8217;re not what wins you the hand.</p><p>I didn&#8217;t fully appreciate what that meant until I&#8217;d seen candidates who were technically very strong get rejected because of everything else.</p><p>Think about it. By the time you&#8217;re sitting in a final round of interviews, you&#8217;ve already passed at least one technical screen or take-home assignment. The company already knows you could probably do the job. They already know you want to work with them.</p><p>But that&#8217;s not what the final round is for.</p><p><strong>The final round is when the team figures out whether they want to work with you.</strong> Being technically proficient is part of it, but it&#8217;s not all of it. Can you explain your thinking clearly when you&#8217;re stumped? How do you handle it when things go wrong? Can they picture you in a design review or in a tough conversation with a partner team?</p><p>Fit.</p><p>Fit is what decides most hiring outcomes, yet it&#8217;s the thing most candidates spend the least time preparing for. After nearly a thousand interviews, I can tell you exactly where the gap is and how you can close it.</p><h3>Learning #1: You&#8217;re over-prepared for one interview and unprepared for the other</h3><p>The average candidate preparing for a tech interview probably spends 95% of their time on technical preparation and 5% on everything else. Some spend literally zero on everything else.</p><p>I get why. Technical preparation feels concrete. You can grind coding problems and measure your progress. You can study system design patterns and feel yourself getting sharper. There&#8217;s a clear input/output relationship. Do more problems, get better at problems.</p><p>For most technical interviews, even if you haven&#8217;t seen the exact problem before, you can still do a decent job. It&#8217;s simply not possible to prepare for every problem, so it&#8217;s expected that you can reason through an unfamiliar coding question and pick up on hints the interviewer gives you. You can work through a system design problem by applying fundamentals you already know. It&#8217;s expected that you will encounter new questions during an interview, so it isn&#8217;t fatal if you&#8217;re a competent engineer who can think on your feet.</p><p>However, the non-technical rounds are the opposite. You cannot wing them and expect to do well. When an interviewer says, &#8220;Tell me about a time something went wrong on a project and how you handled it&#8221; and you haven&#8217;t thought about that question before, there is no hint they can give you. There&#8217;s no reasoning your way through it in real time. You either have a prepared story ready to go, or you&#8217;re going to mumble your way through a word salad while the interviewer watches.</p><p>I&#8217;ve seen this play out hundreds of times. A candidate would crush the coding round, then I would ask them about a difficult decision they made, and they would fall apart. They would pick a half-remembered example, start rambling, backtrack to add context they forgot, in the process losing track of the question. Then, five minutes later, they would land on something like, &#8220;So, yeah, it worked out in the end.&#8221;</p><p>These candidates were often strong coders, but that didn&#8217;t matter. At the debriefs, the feedback was always some version of &#8220;I couldn&#8217;t get a concrete answer about their experience. Every story was vague and unconvincing.&#8221; We couldn&#8217;t extend an offer when a candidate couldn&#8217;t articulate how they worked.</p><p>The technical bar was met, but the hiring decision was made in the behavioral round.</p><p>Here&#8217;s what&#8217;s frustrating about this. Non-technical preparation takes a fraction of the time for technical.</p><p>If you&#8217;re going to spend 80 to 100 hours preparing for an interview cycle, spending a single weekend on your stories might be the highest-leverage investment you make.</p><p>Ten hours of story prep can completely change the outcome of your behavioral rounds. Meanwhile, your 80th hour of LeetCode will give you almost nothing you didn&#8217;t already have at 60.</p><p>The returns on technical prep diminish rapidly. The returns on story prep are exponential because almost nobody does it at all.</p><p><strong>What to do:</strong> How are you currently splitting your interview prep time? If it&#8217;s 99% technical and 1% everything else, you&#8217;re over-indexed on the part with diminishing returns and under-indexed on the part where hiring decisions get made. You don&#8217;t need to cut your technical prep dramatically. Just reallocate. If you&#8217;re planning to spend 80 hours preparing, take 10 of those hours and move them to non-technical preparation. That reallocation will do more for your odds than 10 more hours working on practice problems.</p><h3>Learning #2: How you deliver the story matters as much as the story itself</h3><p>You can have the most impressive accomplishment of your career ready for your interview and completely waste it with bad delivery. The most common version of this is what I call the &#8220;ramble and stumble.&#8221;</p><p>The candidate starts talking, and you genuinely can&#8217;t tell if they&#8217;re figuring out the story as they go or if they&#8217;ve simply never said these words out loud before. Or they might give you five minutes of context and then still backtrack to add details they forgot. By the time they reach the outcome, you&#8217;ve lost track of how you got there.</p><p>Here&#8217;s something that&#8217;s always struck me as odd. If you had a big presentation at work, you&#8217;d spend hours preparing for it, right?. You&#8217;d think about the structure, the flow, the key points. You&#8217;d rehearse it. You might even do a couple of dry runs with a colleague. Nobody wants to walk into a presentation and wing it.</p><p>But in a job interview, where the stakes are arguably higher than any single presentation you&#8217;ll ever give? People wing those constantly. They walk in having never practiced their stories out loud. They might have thought about them, but they&#8217;ve never spoken the words, heard how they sound, or timed how long they take. Then they&#8217;re surprised when the words come out as a mess.</p><p>Think about any other high-stakes skill. You wouldn&#8217;t expect to be good at golf without practicing at the driving range. You wouldn&#8217;t expect to give a great keynote the first time you stepped on stage. Nobody calls a musician fake for rehearsing before a concert.</p><p>But for some reason, many people feel that preparing interview stories is inauthentic. As if it&#8217;s cheating somehow. As if the &#8220;real&#8221; version of you is the one that stumbles through an unrehearsed answer under pressure.</p><p>It&#8217;s not. The real you communicates clearly what you&#8217;ve done and what you&#8217;re capable of.</p><p><strong>What to do: </strong>Good delivery doesn&#8217;t require a lot of charisma or natural presentation skills, but it does require practice. Start with the two questions that come up in virtually every interview: &#8220;Tell me about yourself&#8221; and &#8220;Why do you want to work here?&#8221; Write down your answers. Then record yourself delivering them. Watch the recording and take notes. Where did you ramble? Where did you fill space with filler words? Did you look nervous? Then do it again. And again. Keep going until you watch the recording back and think &#8220;That sounds like someone I&#8217;d like to work with.&#8221;</p><p>Once those two are solid, pick stories from your career and do the same thing. This process will be uncomfortable at first. Most people hate watching themselves on camera. Do it anyway. Thirty minutes of this will up-level your interview performance much more than 20 hours of coding exercises could ever do.</p><h3>Learning #3: The interview is an audition for what it&#8217;s like to work with you</h3><p>Most candidates think the interview is an exam. If you get the right answers, then you&#8217;ll pass the test and get the job. That&#8217;s simply not how it works. Yes, you are being evaluated, and what you say matters. But there is no answer key. The interviewer doesn&#8217;t have a rubric with the &#8220;correct&#8221; responses to which they compare your answers. They&#8217;re forming an impression of you as a person, and that impression is far more nuanced than &#8220;right&#8221; or &#8220;wrong.&#8221;</p><p>By the time you&#8217;re sitting across from the interviewer, you&#8217;ve already jumped through some technical hoops. The company already has evidence from your resume that you can code or design systems at the level they need. That bar has been cleared. The final round goes deeper on the technical side, but it&#8217;s also trying to answer a completely different question: Would we want this person on the team? Would we trust their judgment in a crisis? Would they make our team&#8217;s software better or worse?</p><p>As a Bar Raiser, my specific job was to determine whether a candidate would raise the bar, meaning that they would be better than at least 50% of the people already at the company in that role.</p><p>The thing most people don&#8217;t realize is that the type of coding we asked about in interviews wasn&#8217;t what we did on the job. Nobody was writing algorithms on a whiteboard during their workday. The questions we asked tested problem-solving ability in an artificial environment.</p><p>But the behavioral questions, the soft questions, those tested situations we dealt with every single day. Navigating disagreements, handling projects that were going sideways, influencing without authority, making tradeoffs with incomplete information. These weren&#8217;t hypothetical scenarios pulled out of a textbook. They were just another Tuesday.</p><p>So when I asked a candidate to tell me about a time they had to push back on a stakeholder, I wasn&#8217;t waiting to hear the right answer; I was picturing them in our next planning and prioritization meeting. When they described how they handled a conflict on their team, I was asking myself whether I&#8217;d want to be in that room with them. Every answer was a preview of what it would be like to work alongside that person day to day.</p><p>The candidates who treated it like a test tried to figure out what I wanted to hear and then gave me that answer. That&#8217;s exactly the wrong approach. They gave polished, rehearsed answers with no rough edges and perfect endings where everything worked out and every decision was the right one. I&#8217;d walk out thinking &#8220;I have no idea what it would actually be like to work with this person.&#8221; And when that uncertainty showed up across multiple interviews in the debrief, it almost always turned into a &#8220;No.&#8221;</p><p><strong>What to do: </strong>For each story you&#8217;re preparing, stop thinking about what the interviewer wants to hear. Instead, think about what you&#8217;d want to hear from someone interviewing to join your team. You&#8217;d want to hear how they actually think. You&#8217;d want the real version of what happened, including the parts that were hard and the calls that were close. You&#8217;d want to walk away feeling like you understood what it would be like to work with them on a tough problem. Give your interviewer that same thing. Be honest and let them see how you think. That&#8217;s worth more than any polished answer.</p><h3>What ~1,000 interviews taught me</h3><p>After all those interviews, the lesson I keep coming back to is simple.</p><p><strong>The people who get hired are the ones who can walk into a room and tell a clear story. </strong>This story is about their work and their capabilities, and makes the interviewer think, &#8220;I want to work with that person.&#8221;</p><p>Being able to tell this story is a skill. And like any skill, it gets better with practice. Most people never practice it because they don&#8217;t think of it as something you can prepare for, but you can. And a little preparation here goes further than almost anything else you can do for your career.</p><h2 style="text-align: justify;">2. What companies are looking for during behavioral interviews</h2><p><em>The below are excerpts from Chapter 2 from <a href="https://www.amazon.com/dp/1548441708">Technical Behavioral Interview: An Insider&#8217;s Guide</a>. Some sections have been cut out and lightly edited for this article. Copyright &#169; 2026 Steve Huynh. Used with permission.</em></p><div><hr></div><p style="text-align: justify;">Technical skills alone don&#8217;t determine your offer. Otherwise, those who can solve the coding and system design problems would get the same result. Instead, companies use behavioral interviews to answer two critical questions: <em>Do you fit with both the role and the company?</em> And if you do fit<em>, at what level will you be most effective?</em></p><p style="text-align: justify;"></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H27U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H27U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 424w, https://substackcdn.com/image/fetch/$s_!H27U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 848w, https://substackcdn.com/image/fetch/$s_!H27U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 1272w, https://substackcdn.com/image/fetch/$s_!H27U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H27U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png" width="1398" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1398,&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_!H27U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 424w, https://substackcdn.com/image/fetch/$s_!H27U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 848w, https://substackcdn.com/image/fetch/$s_!H27U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 1272w, https://substackcdn.com/image/fetch/$s_!H27U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b79d6bb-4d5d-44eb-96eb-16014fdee589_1398x918.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Get both right, and you will receive an offer at the appropriate level. Get the fit wrong, and you&#8217;ll be rejected regardless of your skills. Get the level wrong, and you&#8217;ll be either down-leveled or rejected for being underqualified.</p><p style="text-align: justify;">This chapter explains how companies make their assessments of fit and level by analyzing the signals in your stories. Once you understand these dimensions, you&#8217;ll pick better stories and signal the right level.</p><h2 style="text-align: justify;">Understanding Fit: Role and Company</h2><p style="text-align: justify;">The primary consideration for any tech role is whether you have the technical skills to do the job. Companies will assess this mostly through the technical parts of the interview, for example, coding challenges, system design, or whatever technical evaluation matches your role. If you can&#8217;t demonstrate the core technical capability, nothing else matters.</p><p style="text-align: justify;">But technical skills alone don&#8217;t predict success. Companies learned this the hard way by hiring smart people who couldn&#8217;t work effectively in their environment. That&#8217;s why behavioral interviews focus on two additional types of fit:</p><p style="text-align: justify;"><strong>Role Fit:</strong> Can you handle the specific challenges and working conditions of this position? A backend role at a fast-growing startup requires different capabilities than a backend role at an established enterprise. The technical skills might be similar, but the role demands will be different.</p><p style="text-align: justify;"><strong>Company Fit:</strong> Will you thrive in the environment in which this organization operates? This goes beyond surface-level culture. They are assessing whether your working style, decision-making approach, and values match with how the company gets things done.</p><h2 style="text-align: justify;">How Companies Detect Fit Through Signals</h2><p style="text-align: justify;">Companies can&#8217;t directly ask the question, &#8220;Would you fit here?&#8221; What candidate would torpedo their chance of success by answering with a &#8220;No&#8221;? Instead, companies look for signals in your stories that indicate alignment or misalignment.</p><p style="text-align: justify;"><strong>Role Fit Signals</strong> emerge from how you describe handling situations similar to what the role requires:</p><ul><li><p style="text-align: justify;">If the role requires working with ambiguous requirements, do your stories show comfort with uncertainty?</p></li><li><p style="text-align: justify;">If the position involves cross-team coordination, do you show an ability to cope with organizational complexity?</p></li><li><p style="text-align: justify;">If the job needs rapid iteration, do your examples show shipping quickly and adjusting based on feedback?</p></li></ul><p style="text-align: justify;"><strong>Company Fit Signals</strong> come from the choices you made and how you describe them:</p><ul><li><p style="text-align: justify;">A company that values &#8220;bias for action&#8221; looks for stories that show you moving quickly despite incomplete information.</p></li><li><p style="text-align: justify;">An organization that prizes &#8220;customer obsession&#8221; wants to hear examples of you going deep to understand user needs.</p></li><li><p style="text-align: justify;">A place that emphasizes &#8220;radical transparency&#8221; seeks stories that show you sharing information openly, even when you&#8217;re uncomfortable.</p></li></ul><p style="text-align: justify;">The same story can send different signals to different companies. You spending three weeks perfecting a solution might demonstrate attention to quality at one company but analysis paralysis at another. Moving fast and fixing issues later demonstrates good judgment at a growth startup but recklessness at an established healthcare company.</p><h3 style="text-align: justify;">Common &#8220;Mis-Fits&#8221;</h3><p style="text-align: justify;">Even a talented candidate will get rejected sometimes if they are not a good fit. The same behaviors that are positive at one company can signal poor fit at another.</p><p style="text-align: justify;"><strong>Independence vs. Collaboration</strong>: This covers both how you work and how you make decisions. Some companies need people who pick up a problem, run with it, and come back with a solution. Others expect you to bring the team along at every step. These often go together: companies that want you to work solo also tend to want you to make calls on your own, and companies that want collaborative work also want group buy-in on decisions.</p><p style="text-align: justify;">If every story you tell involves going off and building something alone, consensus-driven companies will worry you&#8217;ll steamroll people or make choices that won&#8217;t stick. Flip it around: if every story involves checking with the group before you act, companies that prize individual ownership will wonder whether you can make a decision without a meeting.</p><p style="text-align: justify;"><strong>Speed vs. Thoroughness</strong>: Startups often need rapid experimentation, where you ship MVPs and iterate based on feedback, while companies in healthcare or finance require careful validation before any release. This tension also shows up in how teams think about code quality: some organizations will happily spend extra weeks on clean architecture, while others want a working solution on deadline even if the code needs cleanup later. Whereas stories about methodical testing might bore a startup, your &#8220;ship it and fix it&#8221; examples could terrify a medical device company.</p><p style="text-align: justify;"><strong>Excellence vs. Pragmatism</strong>: Some organizations value technical excellence and clean architecture above all else. Others need pragmatic solutions that ship on deadline even if imperfect. Focusing on perfect code fails at deadline-driven companies, just as accepting technical debt everywhere fails at companies maintaining critical infrastructure.</p><p style="text-align: justify;"><strong>Innovation vs. Stability</strong>: Some roles require creating new solutions and challenging existing approaches, while others need you to maintain and optimize proven systems. If you say that you&#8217;re constantly reinventing established processes, teams that value stability will not consider you a good fit. Conversely, stories that show you only follow existing patterns will disappoint teams that are looking for creative problem-solving</p><p style="text-align: justify;"><strong>Direct vs. Diplomatic</strong>: Some cultures prize radical candor and want you to say exactly what you think. Others value maintaining harmony and face-saving communication. If you are too blunt, you will not fit in well at a relationship-focused company. If you are not direct enough, you will not like working at a company that values &#8220;disagree and commit.&#8221;</p><p style="text-align: justify;"><strong>Data vs. Intuition</strong>: Some companies require data to justify every decision (&#8221;data-driven&#8221; cultures), while others trust experienced judgment and move on gut feel. Showing that you make decisions based on instinct does not impress analytical companies, and telling a company that values experienced judgment that you conduct three A/B tests to choose a button color will get you struck off their list.</p><p style="text-align: justify;"><strong>Specialist vs. Generalist</strong>: Large companies often want deep experts who master one domain, while smaller companies need people who are comfortable wearing multiple hats. Know which sort of company you are walking into.</p><p style="text-align: justify;">Once you understand fit, you can pick stories that match the company and the role.</p><h2 style="text-align: justify;">The Four Dimensions That Determine Your Level</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZC_j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZC_j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 424w, https://substackcdn.com/image/fetch/$s_!ZC_j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 848w, https://substackcdn.com/image/fetch/$s_!ZC_j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 1272w, https://substackcdn.com/image/fetch/$s_!ZC_j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZC_j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png" width="1398" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1398,&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_!ZC_j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 424w, https://substackcdn.com/image/fetch/$s_!ZC_j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 848w, https://substackcdn.com/image/fetch/$s_!ZC_j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 1272w, https://substackcdn.com/image/fetch/$s_!ZC_j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d2f9f7-4e20-440e-bfc8-b158f2668801_1398x918.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Companies assess your level through four dimensions that appear in every story you tell. Each dimension reveals different aspects of your capability. Together, they show the company where you operate most effectively.</p><h3>Scope (Dimension #1)</h3><p>Scope provides a measure of the number of people on your team and, extending outward as you advance, whose work was affected by your actions. The greater the number affected, the higher your level for this dimension.</p><p style="text-align: justify;"><strong>Entry Level:</strong> Your work affects your own productivity and starts to help other team members. For example, you might improve how you handle assigned tasks or fix issues that were slowing down a few teammates.</p><p style="text-align: justify;"><strong>Mid Level:</strong> Your work affects aspects of the team and shapes how it operates. You might redesign a process that changes a significant part of how your team works or solve problems that affect most of the team&#8217;s effectiveness.</p><p style="text-align: justify;"><strong>Senior Level:</strong> Your work directly impacts your entire team and is beginning to influence at least one other team. Perhaps you create solutions that change how your whole team operates and affect workflows in adjacent teams, or you solve problems that require coordination with other groups. You may also start collaborating more closely with product or design partners on your immediate team&#8217;s work.</p><p style="text-align: justify;"><strong>Staff Level:</strong> Your work directly impacts at least two teams and is beginning to have an influence on the broader division or organization. Examples of this include developing technical strategies that change how multiple teams make decisions and solving problems that require buy-in across several parts of engineering. Your influence extends beyond engineering into product, design, and program management as you shape solutions that affect how cross-functional partners work.</p><p style="text-align: justify;"><strong>Principal Level:</strong> Your work affects many teams or changes how large parts of the organization operate. Perhaps you have created technical strategies that have influenced how dozens of teams make decisions. Or you have solved problems that cut across a large engineering organization. At this level, your influence regularly extends into business strategy, shaping decisions alongside product, design, program, and business leadership.</p><h3 style="text-align: justify;">Contribution (Dimension #2)</h3><p>Contribution captures what you did, not what happened around you. It is important to be precise about the line between &#8220;I&#8221; and &#8220;we.&#8221; Companies will expect to see evidence of increasing leadership and ownership as you advance in your career.</p><p><strong>Entry Level:</strong> You execute assigned work and are beginning to take ownership of small pieces. Examples: implementing solutions designed by others; fixing bugs in existing systems; taking full responsibility for well-defined features within larger projects.</p><p style="text-align: justify;"><strong>Mid Level:</strong> You own complete solutions from problem to implementation while also guiding others. Perhaps you have identified issues, designed the approaches, implemented them, and you have verified that they work, and you have helped your teammates understand the reasons for your decisions.</p><p style="text-align: justify;"><strong>Senior Level:</strong> You lead initiatives requiring coordination. You&#8217;re expected to make progress even when the requirements are unclear or the path forward is uncertain. Examples of this include driving technical decisions for your team; mentoring others through complex problems; architecting solutions to be implemented by others; and ensuring quality work outcomes for many people.</p><p style="text-align: justify;"><strong>Staff Level:</strong> You lead cross-team initiatives and establish technical direction, often in situations where the right approach isn&#8217;t obvious and stakeholders have competing priorities. This could look like defining technical approaches that are adopted by multiple teams, creating systems that enable other teams to solve problems on their own, or driving agreement on complex technical decisions across several teams.</p><p style="text-align: justify;"><strong>Principal Level:</strong> You create organizational capabilities and establish new ways of working. At this level, you&#8217;re frequently operating in highly ambiguous environments where you must define the problem before you can solve it. You might define technical standards that guide dozens of teams, build systems that enable others to solve entire classes of problems, or transform how the organization approaches its hardest challenges.</p><h3 style="text-align: justify;">Impact (Dimension #3)</h3><p>Impact shows what changed for the better as a result of your work. Companies want to see that your work produced results worth the investment. Strong stories put numbers on the impact and connect technical wins to business or user outcomes.</p><p style="text-align: justify;"><strong>Entry Level:</strong> You improve your personal productivity and are starting to help the team work better. Examples include reducing the time you spend on repetitive tasks, fixing issues that were slowing down teammates, or improving the quality of code in the areas you touch. Even simple measures matter at this level: time saved or bugs prevented.</p><p style="text-align: justify;"><strong>Mid Level:</strong> You improve team effectiveness in specific areas and influence team-wide practices. Perhaps you reduced deployment times for specific workflows, eliminated categories of bugs in your domain, or you created tools that have made the team more productive in particular areas. You can quantify these improvements and connect them to broader outcomes like feature velocity or reliability.</p><p style="text-align: justify;"><strong>Senior Level:</strong> You transform how your entire team works and are starting to have an impact beyond your team. For example, you might have introduced new workflows that changed your team&#8217;s capabilities. Or perhaps you eliminated major sources of operational problems, or the improvements that you have created have been adopted by adjacent teams. Your impact extends beyond just engineering metrics to product outcomes, user experience, or operational costs.</p><p style="text-align: justify;"><strong>Staff Level</strong>: You improve how multiple teams operate and drive organizational improvements. These sorts of impact come from achievements such as establishing practices that several teams adopt, solving infrastructure problems that were impeding multiple teams, or creating new capabilities that open up new types of work across teams. Your measurable impact can be tied to business metrics like revenue, customer retention, or time-to-market.</p><p style="text-align: justify;"><strong>Principal Level</strong>: You create organizational capabilities and drive strategic changes. Impact at this level could come from establishing technical foundations that dozens of teams use to build upon, solving problems that were blocking major business initiatives, or creating leverage that compounds benefits across the company. Your impact is measured in business outcomes and strategic capability, not just technical improvements.</p><h3 style="text-align: justify;">Difficulty (Dimension #4)</h3><p>Difficulty reflects the complexity of problems you&#8217;ve tackled, the constraints you have faced, and the trade-offs you have managed. Under this category, solving easy problems with big impacts is less impressive than hard problems solved well.</p><p style="text-align: justify;"><strong>Entry Level:</strong> You work on straightforward problems within established patterns. For example, you might face challenges learning new technologies or debugging unfamiliar code, but the path forward becomes clearer once you understand the problem or ask for help.</p><p style="text-align: justify;"><strong>Mid Level:</strong> You work through challenges and obstacles in your work. The problems you tackle have more moving parts and less obvious solutions. These could be competing requirements or having to work through technical complexity you haven&#8217;t seen before. Or perhaps you have had to manage dependencies within your team that affected your timeline or figure out solutions when the approach wasn&#8217;t immediately obvious.</p><p style="text-align: justify;"><strong>Senior Level:</strong> You manage constraints and make technical decisions with team-level architectural implications. The problems you solve involve multiple interacting systems and competing concerns. You might have to balance needs across multiple stakeholders with different priorities. Maybe you make architectural decisions that affect how your whole team works, or you have to work around technical limitations that require creative solutions, or solve problems that require you to address both technical and business factors.</p><p style="text-align: justify;"><strong>Staff Level: </strong>You manage competing trade-offs across multiple teams while handling problems with significant technical and organizational complexity. Examples of difficulty at staff level include:</p><ul><li><p style="text-align: justify;">Balancing different technical approaches when teams have genuinely conflicting needs.</p></li><li><p style="text-align: justify;">Creating solutions that affect how several teams work together.</p></li><li><p style="text-align: justify;">Making architectural decisions that have to work across diverse contexts.</p></li><li><p style="text-align: justify;">Getting teams to agree when the technically optimal solution differs for each team.</p></li></ul><p style="text-align: justify;"><strong>Principal Level:</strong> You handle fundamental trade-offs between competing organizational needs or solve problems where no clear solution exists. The complexity at this level often involves novel problems that lack established patterns or precedents. You might balance technical excellence against delivery speed at organizational scale; work within organizational constraints while maintaining technical integrity; create approaches for entire classes of problems the company hasn&#8217;t solved before; or make decisions that affect company strategy and require executive buy-in.</p><h3 style="text-align: justify;">What Each Level Looks Like</h3><p style="text-align: justify;">Here&#8217;s how the same types of accomplishments look across each level. These aren&#8217;t templates. They&#8217;re meant to help you develop a sense for the difference between a mid-level story and a senior one. Compare adjacent levels and notice what actually changes as you move up and down.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KY-A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KY-A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 424w, https://substackcdn.com/image/fetch/$s_!KY-A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 848w, https://substackcdn.com/image/fetch/$s_!KY-A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 1272w, https://substackcdn.com/image/fetch/$s_!KY-A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KY-A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png" width="1398" height="897" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:897,&quot;width&quot;:1398,&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_!KY-A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 424w, https://substackcdn.com/image/fetch/$s_!KY-A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 848w, https://substackcdn.com/image/fetch/$s_!KY-A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 1272w, https://substackcdn.com/image/fetch/$s_!KY-A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2b115d-cc3e-4f34-8143-a62b7b1b3eb1_1398x897.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2 style="text-align: justify;">Researching What Companies Really Value</h2><p style="text-align: justify;">You&#8217;ll never have perfect information about what a specific company values, but a little focused research will often reveal surprising insights that most other candidates will miss. The difference between having even partial intelligence and going in blind can be whether or not you emphasize the right things in your stories.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jzl-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jzl-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 424w, https://substackcdn.com/image/fetch/$s_!jzl-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 848w, https://substackcdn.com/image/fetch/$s_!jzl-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 1272w, https://substackcdn.com/image/fetch/$s_!jzl-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jzl-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png" width="1398" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7366e636-8732-48d6-bccc-7e508c635992_1398x918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1398,&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_!jzl-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 424w, https://substackcdn.com/image/fetch/$s_!jzl-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 848w, https://substackcdn.com/image/fetch/$s_!jzl-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 1272w, https://substackcdn.com/image/fetch/$s_!jzl-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7366e636-8732-48d6-bccc-7e508c635992_1398x918.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3 style="text-align: justify;">Start With Your Recruiter</h3><p style="text-align: justify;">Most candidates treat recruiters as gatekeepers to avoid, but if you do this, you will waste your best source of insider information. Recruiters want you to succeed, because their performance is based on the number of accepted offers received by the candidates they put forward. They have prep materials, they know the interviewers&#8217; focus areas, and they understand what they are looking for.</p><p style="text-align: justify;">Ask your recruiter directly: &#8220;What should I know about this company&#8217;s current challenges?&#8221; Or &#8220;What competencies matter most for this role?&#8221; Or &#8220;Can you share any interview prep materials?&#8221; Many recruiters have documents about interview format, team priorities, or even the specific behavioral competencies they evaluate. The questions that are used as examples in the prep materials have a high likelihood of being asked in the interviews.</p><h3 style="text-align: justify;">Mine Publicly Available Information</h3><p style="text-align: justify;">When companies repeat certain words when describing job opportunities, they&#8217;re telling you what matters. For example, a job posting that mentions &#8220;fast-paced&#8221; several times signals something different than one emphasizing compliance. Those words are there for a reason.</p><p style="text-align: justify;"><strong>Where to dig:</strong></p><ul><li><p style="text-align: justify;"><strong>Engineering blogs:</strong> How do they describe their wins? What problems do they celebrate solving?</p></li><li><p style="text-align: justify;"><strong>Tech talks and conferences:</strong> What topics do their engineers present? Speed of delivery? Scale? Innovation?</p></li><li><p style="text-align: justify;"><strong>Open source contributions:</strong> What they choose to open source reveals their priorities. If they open source developer tools, this suggests they value community. If they are happy to make internal tools public, this shows transparency.</p></li><li><p style="text-align: justify;"><strong>Technical documentation:</strong> The existence of public API docs or technical guides (and the quality thereof) shows how they support both users and their own teams.</p></li><li><p style="text-align: justify;"><strong>Status pages and postmortems:</strong> Companies that publish detailed postmortems demonstrate that they value learning from failure. A company that shares their incident response processes likely has a strong operational culture.</p></li></ul><p style="text-align: justify;">Even companies without engineering blogs will leave traces. Product release patterns tell you about their development pace. Technology choices show their priorities: newer frameworks suggest a focus on innovation, whereas relying on proven technologies indicates they prefer stability.</p><h3 style="text-align: justify;">Look for Patterns in Discussions</h3><p style="text-align: justify;">Glassdoor, Blind, and Reddit contain gold buried amongst rubble. Ignore the rubble (e.g., individual rants). Instead, look for patterns across multiple posts. If five different people mention &#8220;lots of process&#8221; or &#8220;no work-life balance&#8221; or &#8220;amazing learning culture,&#8221; that&#8217;s a pattern you will want to know about.</p><p style="text-align: justify;">Pay attention to what people complain about and what they praise. Complaints about &#8220;too many meetings&#8221; may suggest the company has a collaborative, consensus-driven culture, or, alternatively, that productivity within the company is inhibited by an excessive number of meetings. Praise for &#8220;autonomy&#8221; indicates they trust their people to make decisions without checking in. Both types of comments reveal what behaviors the companies will reward.</p><h3 style="text-align: justify;">Talk to Current Employees</h3><p style="text-align: justify;">If you know someone at the company, ask them directly what behaviors get rewarded and, conversely, what behaviors will cause people to struggle. Skip surface-level queries about culture, and ask specific questions:</p><ul><li><p style="text-align: justify;">&#8220;When someone gets promoted here, what do they do to earn it?&#8221;</p></li><li><p style="text-align: justify;">&#8220;What behaviors get negative feedback?&#8221;</p></li><li><p style="text-align: justify;">&#8220;How does the team make decisions when there&#8217;s disagreement?&#8221;</p></li><li><p style="text-align: justify;">&#8220;What surprised you most about working here?&#8221;</p></li></ul><p style="text-align: justify;">Current employees will tell you truths the company website never would. Perhaps they&#8217;ll tell you that at their company, &#8220;customer obsession&#8221; really means checking usage data before writing code, or that &#8220;ownership&#8221; means being available to resolve production issues at two o&#8217;clock in the morning.</p><h3 style="text-align: justify;">What You&#8217;re Really Looking For</h3><p style="text-align: justify;">All this research serves one purpose: understanding what stories will resonate at your interview. Think of it as finding the real intersection between your experience and what they care about.</p><p style="text-align: justify;">If research reveals they prize speed over perfection, then emphasize stories that tell how you shipped quickly and iterated. If they value technical depth, highlight examples of diving deep to understand root causes. If they care about collaboration, make sure your story focuses on cross-team work rather than solo accomplishments.</p><p style="text-align: justify;">The research will also help you decide whether this company is the right place for you. If everything you learn suggests they value the kinds of behaviors you don&#8217;t naturally demonstrate or don&#8217;t want to develop, then perhaps you don&#8217;t need to pursue that particular role.</p><h3 style="text-align: justify;">Putting It All Together</h3><p style="text-align: justify;">Companies aren&#8217;t just evaluating whether you can do the job. They&#8217;re also assessing whether you&#8217;ll thrive in their specific environment and at what level you&#8217;ll be most effective. These two dimensions determine not just whether you will get an offer, but also whether that offer will position you for success.</p><p style="text-align: justify;">Understanding fit helps you know which of your experiences will connect most with what the company values. This small company needs someone who ships fast and figures things out alone. That enterprise needs someone who navigates processes and builds consensus. Neither is inherently better than the other. They&#8217;re simply different environments that reward different approaches.</p><p style="text-align: justify;">Understanding levels helps you position your stories appropriately. The same project can demonstrate entry-level execution, mid-level ownership, or senior-level leadership depending on your actual contribution and how you frame it. Get this wrong and you will either get rejected for overreaching or down-leveled for not properly communicating your capabilities.</p><p style="text-align: justify;">The payoff is immediate. You&#8217;ll pick better stories, focus on the right details, and make it easier for interviewers to see what you can do. You&#8217;ll make better decisions about which roles actually match who you are and what you want to do. The goal isn&#8217;t to get <em>any</em> offer. The goal is to get the <em>right</em> offer at the <em>right</em> level at the <em>right</em> company to ensure your success.</p><h2 style="text-align: justify;">Takeaways</h2><p><em>Gergely, again. </em>Thanks to Steve for both sharing his learnings, as an interviewer, and for sharing nearly a full chapter from his whole book. The book goes a lot deeper than the above sample chapter. A few of the ones I found helpful:</p><ul><li><p>High-signal storytelling (Chapter 3): a framework for explaining your work in a way that &#8220;sticks&#8221; with the interviewer</p></li><li><p>9 competencies with many examples and stories throughout the book: ones like &#8220;delivery&#8221; (Chapter 6), &#8220;earning trust and dealing with conflict&#8221; (Chapter 8) and &#8220;Strategic leadership and thinking big (Chapter 13)&#8221;</p></li><li><p>Examples of what interviewers typically see as key signals, yellow flags and red flags</p></li></ul><p>If you would like to have a fresh resource to prepare for behavioural interviews at tech companies, the full book offers far more explanations, tactics and exercises to do so:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.amazon.com/dp/1548441708&quot;,&quot;text&quot;:&quot;Get the full book on Amazon&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.amazon.com/dp/1548441708"><span>Get the full book on Amazon</span></a></p><p><em>Steve also writes a newsletter titled <a href="https://alifeengineered.substack.com/about">A Life Engineered</a>: you can sign up to it <a href="https://alifeengineered.substack.com/about">here</a>.</em></p><p><strong>It&#8217;s helpful to understand how and why companies hire, and what they look for. </strong>To us engineers, hiring processes often look illogical from the outside. We&#8217;ll ask things like:</p><ul><li><p>&#8220;Why does the interview process not resemble day-to-day work?&#8221;</p></li><li><p>&#8220;I already have open source code I wrote: why does the company need to do a coding interview to confirm what is clear: that I need to code?&#8221;</p></li><li><p>&#8220;Why did I get a rejection, even though I did well on all of the interviews?&#8221;</p></li></ul><p>It feels to me that there are similarities between hiring and dating: both parties show up with goals and expectations in their head, which are often not communicated. Sometimes there&#8217;s a match; sometimes there is not. This phase of a relationship is often about &#8220;selling:&#8221; as a candidate on the job market, it&#8217;s about selling yourself, and convincing the company that you would be a fit for what they are looking for.</p><p><strong>Doing your research on the company is underrated, and not all that many candidates do so, in my observation. </strong>When I was a hiring manager at Uber, roughly half of the people who got on the call with me did not do <em>any</em> research about the company, and perhaps 1 out of 10 candidates did any research on the team they interviewed for &#8211; when we had public blog posts about our work, on the company blog! So those showing up prepared helped them stand out in the &#8220;motivation&#8221; dimension, from the get go.</p><p><strong>It all starts with being able to pass the &#8220;technical&#8221; interviews &#8211; but it&#8217;s a mistake to sleep on the &#8220;behavioural parts.&#8221; </strong>To state the obvious: candidates who do not do well on the technical interview rounds will not get offers. But I&#8217;ve personally had to say to several candidates who did great on the technical side of things, but turned out to be misaligned with what we were looking for, as confirmed on the behavioral rounds.</p><p>And I do believe you can uplevel in doing better on these behavioral rounds: starting with researching what the company&#8217;s culture is like, practicing how to present yourself better, and putting yourself in the shoes of the interviewers, understanding what they are looking for.</p><p>I know plenty of software engineers who refuse to do any preparation for interviews, staying &#8220;if the company doesn&#8217;t want me as I am, they don&#8217;t deserve me anyway.&#8221; This is a valid strategy, and can work for highly  in-demand professionals, the same way as showing up to a first date in sweatpants and slippers can still work out for highly attractive and desirable people. For the rest of us not as incredibly in-demand for a position we&#8217;re applying for: it&#8217;s probably worth putting in additional effort, in hopes for better outcomes during interviews.</p>]]></content:encoded></item><item><title><![CDATA[The impact of AI on software engineers in 2026: key trends. Part 1]]></title><description><![CDATA[Our AI tooling survey finds concerns about mounting AI costs, more engineers hitting usage limits, and AI tools having uneven effects upon different types of engineers]]></description><link>https://newsletter.pragmaticengineer.com/p/the-impact-of-ai-on-software-engineers-2026</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/the-impact-of-ai-on-software-engineers-2026</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 14 Apr 2026 16:01:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ekej!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently, we <a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026">ran a survey</a> asking readers of The Pragmatic Engineer how you use AI tools, which tools you use, what does and doesn&#8217;t work, and what it&#8217;s like working with AI, in general.</p><p>For today&#8217;s issue, we&#8217;ve dug into your 900+ responses to look for trends in AI tool usage among software engineers and engineering leaders. This article surfaces insights that are less about specific tools, and more about the effect these tools have on tech professionals. We cover:</p><ol><li><p><strong>Costs. </strong>Unsurprisingly, companies pay for most tool usage, and those responsible for budgets are increasingly nervous that AI-related costs are headed only one way: up.</p></li><li><p><strong>Usage limits. </strong>Around 30% of respondents say they have hit limits. Switching tools, upgrading plans, or moving over to API pricing are common responses.</p></li><li><p><strong>Impact on &#8220;Builders.&#8221; </strong>Folks who make larger code changes and do &#8220;quality-of-life&#8221; work are builders, and they&#8217;re also dealing with more AI slop. Some also grapple with a loss of professional identity.</p></li><li><p><strong>AI tools speed up &#8220;Shippers.&#8221; </strong>Engineers who focus more on getting things done are the most positive about AI tools. But they also add tech debt faster and might build the wrong things.</p></li><li><p><strong>&#8220;Coasters:&#8221; learning faster while generating AI slop. </strong>Less adept engineers can uplevel faster with AI, but they generate a lot of &#8220;AI slop&#8221; while doing so, which frustrates builders.</p></li><li><p><strong>Changing software engineer &amp; engineering manager (EM) roles.</strong> Engineers have to orchestrate and context switch more often, while engineering managers can be more hands on. It&#8217;s interesting to see the engineer and manager roles becoming more similar.</p></li><li><p><strong>Other impacts on the craft. </strong>We&#8217;re going from &#8220;how&#8221; to build to &#8220;what&#8221; to build, solo devs are seeing improved results, workloads are increasing with AI tools, and more.</p></li></ol><p>See also two other articles in this mini-series:</p><ul><li><p><strong><a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026">AI tooling for software engineers in 2026</a></strong>: a detailed summary of survey responses, covering the most-used AI tools, trends, AI agent usage, company size and usage, and tools engineers love.</p></li><li><p><strong><a href="https://newsletter.pragmaticengineer.com/p/ai-impact-on-software-engineers-part-2">The impact of AI on software engineers in 2026: key trends. Part  2</a></strong>. Tradeoffs of AI tooling, why adopting AI at company-level is hard, what&#8217;s changed in two years, and more. </p></li></ul><p><em>Full subscribers also have access to a more detailed, <a href="https://newsletter.pragmaticengineer.com/i/40654455/reports">65-page report on our findings.</a></em></p><h2>1. Costs</h2><p>Concern about the cost of AI tools is a trend throughout the survey, with around 15% of respondents mentioning it in some way.</p><p><strong>Tech companies foot the bill for the majority of spending on AI tools</strong>. More respondents say their employers pay for AI coding tools than those who say they pay themselves, and predictably, employers fund more expensive packages than what individuals buy personally.</p><p>Companies commonly pay for &#8220;max&#8221; plans with the likes of Claude Code, Cursor, and Codex (around $100-200/month per engineer), although some companies&#8217; budgets only stretch to $20/month per engineer &#8211; around the price point of GitHub Copilot, and the cheapest Claude or ChatGPT subscriptions.</p><p>The most-mentioned AI tool spending patterns:</p><ul><li><p><strong>When companies pay: </strong>~$200/month plans. Many have enterprise subscriptions, sometimes with subsidies and vendor lock-in. Some companies allow usage-based coverage on top of monthly plans.</p></li><li><p><strong>When personally paying for tools: </strong>~$20/month or free tiers. This can stack up across different tools. Around 5% of respondents have separate work and personal subscriptions, and free tier usage is widespread for personal use.</p></li></ul><p>For now, companies seem to be in the experimentation phase with AI tools, and several respondents say that they believe their companies have unsustainable AI-tooling budgets. This is likely because businesses are figuring out the best way of leveraging the tools, and the message to engineers at such places is to not worry about price and usage while that unfolds. A CTO at a small, US-based company shares:</p><blockquote><p><em>&#8220;</em>Right now, we&#8217;re not sweating the costs because we&#8217;re trying to evolve best practices for the tools, but that has resulted in some devs really blowing through budget, so we may start instituting caps on spending.&#8221;</p></blockquote><h3>Breaking the budget</h3><p>At small and mid-sized companies, leadership teams seem more comfortable about going over budget, than engineers running out of budget. There are more accounts from C-level folks and founders about racking up large bills than there are from engineers. A CPTO (Chief Product and Technology Officer) at a mid-sized company:</p><blockquote><p>&#8220;I ran up several monthly bills of $600 with Cursor. We have the dev team subscribed to ~$100/month plans. We&#8217;re now in the process of moving the rest of the team to Claude Code, as we can get more resources for around $100/month in cost.&#8221;</p></blockquote><p><strong>Top spenders can be allocated higher budgets.</strong> A number of tech businesses have separate, larger budgets for their heaviest AI users. A senior C++ engineer working in the video game industry says:</p><blockquote><p>&#8220;I&#8217;ve become my team&#8217;s AI champion. In theory, my limits are higher than normal, but I keep myself limited to what others can use, so I can show them useful things they can do.&#8221;</p></blockquote><p><strong>UK and EU companies worry more about budgets than US-based ones. </strong>Most responses which mention finance teams pushing back against spending even $30-50/month per engineer on AI tools are based in the UK and EU. One amusing example is a 10-person, seed-stage startup where the CEO questioned why they were paying as much as &#163;25/month per engineer for one of the cheapest AI tools around.</p><p>In general, it feels like European companies want to see clear value-add in order to justify an increase in tooling spend, whereas US companies are more comfortable with investing first and measuring impact later. At present, the impact of these tools is hard to quantify.</p><p><strong>A niche approach is that of AI teams educating devs to use cheaper models. </strong>Some European companies go as far as offering education to new joiners on using cheaper models. From an AI Enablement Lead at a 1,000+ person, digital transformation company:</p><blockquote><p>&#8220;Within our organisation, we&#8217;ve had incidents where our Claude users have overshot their limits. We&#8217;re now attempting to educate devs in knowing the difference between different models (knowing when to use Claude Sonnet versus Claude Opus).&#8221;</p></blockquote><h3>Cost trajectory worries</h3><p>The cost trajectory of AI tools is generally considered unsustainable in our survey.<strong> </strong>Devs using the tools heavily tend to hit usage limits, and their employers then have to pay more. At places with API-based pricing, usage is increasing. Those in leadership positions who are responsible for budgets are generally concerned about the direction of costs.</p><p><strong>Subsidies are keeping things at bay &#8211; for now. </strong>A common enough pattern in our survey is of heavily-subsidized enterprise plans that come with vendor lock-in. Several responses raise concerns about what will happen when the subsidies run dry. Experienced engineering leaders recall that cloud providers also played the same game of subsidizing for a few years, then raising prices when a customer was fully &#8220;locked in.&#8221;</p><p><strong>The AI hype cycle is dampening awkward conversations about budgets at some places. </strong>A principal engineer at a Fintech tells us:</p><blockquote><p>&#8220;The AI hype has created a special, generous budget for AI tools, and there&#8217;s no effective budget &#8211; yet!&#8221;</p></blockquote><p><strong>But some finance teams are getting grumpy. </strong>A CTO at a sports-tech company says:</p><blockquote><p>&#8220;It&#8217;s hard to keep our CFO supportive about investing in these tools because the productivity benefits have proven difficult to conclusively prove. The point that resonated the most was the loss of value when people hit daily limits: having to stop work immediately! Surprisingly, our CFO is still pushing back, despite having experience of getting a lot of value through their own AI usage with their spreadsheets.&#8221;</p></blockquote><p><strong>Most survey respondents think the price of AI tools will have to rise</strong>. If that happens, it would cause problems at several companies &#8211; particularly those in Europe:</p><blockquote><p>&#8220;I cannot see how the spend on AI tools is fiscally sustainable in its current form; Max 100 with Claude Code is $100 a month. A single small task powered by Kimi K2.5 using OpenCode is $5, mostly in input cost. If we assume that the third party inference providers are doing so at a sustainable price, the much more expensive Opus model cannot be sustainable, never mind profitable at these plan costs.&#8221; &#8212;<em> Founder at a seed-stage company, Europe.</em></p><p>&#8220;From the economic perspective, at some point, these companies will need more funding or profit, I&#8217;m curious how much it costs them to have a proper agent, and still become profitable. It feels slow when you run out of credits when working on repetitive tasks.&#8221; &#8212; <em>Principal Software Engineer at a seed-stage company, Europe</em></p></blockquote><h2>2. Usage limits</h2><p>Another major trend in our survey results is the topic of usage limits:</p><ul><li><p><strong>Hitting limits: ~30%</strong> of respondents. Running out of tokens or hitting reset limits is frustrating and disruptive, especially when you&#8217;re working on a task or are in a flow state. The majority of respondents who complain about hitting limits are on cheaper plans (typically $20/month.) But this issue is also mentioned about higher subscription levels.</p></li><li><p><strong>Under the limit: ~20%</strong> of respondents. Avoiding usage caps generally correlates with being on more expensive plans with higher limits, or in roles with enough non-coding work for it not to matter, or when devs do enough work &#8220;manually&#8221; for AI usage to not be an issue.</p></li></ul><h3>Why users of AI tools hit limits</h3><p>Common reasons cited in the survey:</p><p><strong>Being a new AI user or a power user. </strong>These are two distinct groups, but an engineering manager at a mid-sized company in Canada says that each one similarly blows through token limits for different reasons:</p><blockquote><p>&#8220;We&#8217;re mindful of trying to manage costs by setting AI spend limits across the org. We have two subsets of users at odds with each other:</p><ol><li><p>Individuals who are still learning and blow through their credits at an inordinate rate, forcing us to keep limits low.</p></li><li><p>Power users who hit the limit through regular use and apply pressure to raise the limit.</p></li></ol><p>It&#8217;s a tough balance.&#8221;</p></blockquote><p><strong>Using Opus for all work. </strong>A few engineers mention being careful about how they use Opus because it previously ate up their token budgets. Here&#8217;s a software engineer at a mid-sized company in Europe:</p><blockquote><p>&#8220;I made the mistake of using Opus in the past and burning through budgets quickly. Now, my routine is to start in &#8216;plan&#8217; mode with Opus. I then paste the acceptance criteria and description of the issue and let the plan mode figure it out. I then switch to Composer or Sonnet and have the agent take over from there.&#8221;</p></blockquote><p><strong>Mistakes that eat up tokens are easy to make. </strong>These include starting on work or a problem from the wrong end, using AI directly for a task rather than opting for a simple script, trying some new tool or technique that ends up consuming tokens (OpenClaw and Ralph Loops are cited), and others.</p><h3>What happens when the limit is hit?</h3><p>Hitting the limit with an AI tool is inconvenient and happens to many developers, who take a variety of next steps:</p><p><strong>Switch the model or tool. </strong>Around a quarter of respondents who hit limits mentioned switching. From a software engineer at working at Atlassian:</p><blockquote><p>&#8220;In my company, for Cursor and Windsurf we have monthly limits. Our internal coding tool (called codelassian) also has daily prompt and hourly token limits. When I hit a limit in one tool, I switch to the other.&#8221;</p></blockquote><p><strong>Upgrade to a pricier plan. </strong>When it&#8217;s an option, this is a no-brainer at most places, especially as the alternative would be devs twiddling their thumbs waiting for the limit to be reset. A senior engineering manager at a mid-sized company says:</p><blockquote><p>&#8220;In my team, we are regularly hitting session limits with Claude. We upgraded some teammates to the Max 20x plan &#8211; and on this plan we have not been hitting limits, so far.&#8221;</p></blockquote><p><strong>Adopt API-based pricing. </strong>This is the easiest way to keep working without abandoning a task you&#8217;re knees-deep in. A senior engineer at a large company says:</p><blockquote><p>&#8220;The company provides both the Claude and Copilot corporate offerings. When the limits are reached, I tend to use API keys that my teammates give me.&#8221;</p></blockquote><h2>3. Impact on &#8220;builders&#8221;</h2><p>We identified three different types of professional in the survey:</p><ul><li><p><strong>Builders</strong>: those who care about quality, good architecture, following good coding practices, and who talk about the craft of software engineering, etc.</p></li><li><p><strong>Shippers</strong>: those who primarily focus on outcomes for a product, features, testing, and experimenting with users. A fair number of leaders, managers, and engineers who were more hands-off with coding before AI tools are in this category, as are product engineers.</p></li><li><p><strong>Coasters</strong>: engineers who are not considered particularly good or great engineers, but they get the work done. They often do this without much taste or concern for quality, and seem to be mostly coasting along and doing what they&#8217;re told.</p></li></ul><p>The overall consensus in our survey results is that AI will amplify and multiply tendencies and patterns that existed before, and the impact of the tools varies accordingly among users. Let&#8217;s start with the impact we&#8217;ve observed upon builders in the responses:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ekej!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ekej!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 424w, https://substackcdn.com/image/fetch/$s_!Ekej!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 848w, https://substackcdn.com/image/fetch/$s_!Ekej!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 1272w, https://substackcdn.com/image/fetch/$s_!Ekej!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ekej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png" width="1324" height="758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:758,&quot;width&quot;:1324,&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_!Ekej!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 424w, https://substackcdn.com/image/fetch/$s_!Ekej!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 848w, https://substackcdn.com/image/fetch/$s_!Ekej!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 1272w, https://substackcdn.com/image/fetch/$s_!Ekej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174b9ab2-ef0b-4a40-ba4a-0de330620ff0_1324x758.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>The good and bad of AI tools, as shared by respondents in the Builder archetype</em></figcaption></figure></div><p>Builders say they get value from AI tools in the following areas:</p><p><strong>Larger code changes. </strong>Builders generally find AI helpful for work like:</p><ul><li><p>Refactoring</p></li><li><p>Migrations</p></li><li><p>Improving test coverage</p></li><li><p>Carrying out large codebase changes</p></li></ul><p>All these are changes that are laborious, but not very challenging technically. They also require experience in knowing what you want to do and how to do it.</p><p><strong>Accomplishing &#8220;quality of life&#8221; tasks. </strong>Builders mention that with AI tools, they get to fix and improve things like nagging bugs that otherwise wouldn&#8217;t be &#8220;worth it&#8221; in time invested, but the barrier to entry is lower with AI.</p><p>A good example of this is in last week&#8217;s podcast <a href="https://newsletter.pragmaticengineer.com/p/dhhs-new-way-of-writing-code">with David Heinemeier Hansson (DHH)</a>, the creator of Ruby on Rails, in which he revealed how one of their engineers optimized P1 &#8211; the fastest 1% of web requests:</p><blockquote><p>&#8220;One of our most agent accelerated people asked: &#8220;What about P1? What about the floor? Can we fix the floor?&#8221; He found that the floor [of request speed] was 4 milliseconds.</p><p>Well, 4 milliseconds can add up if you have a bunch of fast requests. So, he just said: &#8220;We&#8217;re going to optimize P1. The fastest 1% of requests, we&#8217;re going to make them even faster.&#8221; He took it from 4 milliseconds to less than half a millisecond. He did this P1 project over a couple of days, like a side project.</p><p>He had an intuition that there was something here. He let agents run with it. The work ended up being 12 pull requests, and about 2,500 lines of code changed.</p><p>This is exactly why the explosion of the pie suddenly lets us look at problems we would never have contemplated looking at before.&#8221;</p></blockquote><p><strong>Typing is no longer a bottleneck. </strong>Some builders report falling even more in love with coding with the help of AI and agents, since physically typing out code is no longer a bottleneck for them. They enjoy being able to prompt. From one &#8220;builder&#8221;:</p><blockquote><p>&#8220;For someone who loves to build &#8211; but also values code quality, performance, reliability, and security &#8211; I ship a lot more quality code faster, if for no other reason than because the AI can read and write 100x faster than me. I get to stay at the conceptual level of shipping a product, and I can dive into debugging with the agent as needed. But if the agent has a good handle on the situation I can give it as much of the tedious parts as I wish.&#8221;<em> &#8211; Staff Engineer, at a large tech company, US</em></p></blockquote><p>The negative sides of AI tools, as experienced by builders:</p><ul><li><p><strong>More AI slop. </strong>Builders seem to be the most overwhelmed and derailed by reviewing a lot more AI-generated code. They can get frustrated with low-quality code shipped by colleagues which could be categorized as &#8220;AI slop.&#8221;</p></li><li><p><strong>More debugging. </strong>AI-generated code introduces bugs and issues, and builders tend to spend the most time debugging and fixing those issues.</p></li><li><p><strong>Identity loss. </strong>Some builder-types report a sense of identity loss and even some grief. Much of this relates to no longer doing hands-on coding because they cannot justify it, since AI agents generate pretty decent code faster than someone can type it.</p></li></ul><h2>4. AI tools speed up &#8220;Shippers&#8221;</h2><p>The &#8220;shipper&#8221; archetype thrives when they get things to production quickly. This group is by far the most enthusiastic about AI tools in survey responses. They are also the ones who praise &#8211; or hype up &#8211; the tools because of their personal experiences of shipping much faster with them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yBgU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yBgU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 424w, https://substackcdn.com/image/fetch/$s_!yBgU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 848w, https://substackcdn.com/image/fetch/$s_!yBgU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 1272w, https://substackcdn.com/image/fetch/$s_!yBgU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yBgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png" width="1278" height="742" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66546d37-a053-4179-8750-3e7784309ac8_1278x742.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:742,&quot;width&quot;:1278,&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_!yBgU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 424w, https://substackcdn.com/image/fetch/$s_!yBgU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 848w, https://substackcdn.com/image/fetch/$s_!yBgU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 1272w, https://substackcdn.com/image/fetch/$s_!yBgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66546d37-a053-4179-8750-3e7784309ac8_1278x742.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Good and bad things about AI tools for shippers</em></figcaption></figure></div><p>The biggest upsides mentioned by shippers:</p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/the-impact-of-ai-on-software-engineers-2026">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Cycles of disruption in the tech industry: with software pioneers Kent Beck & Martin Fowler]]></title><description><![CDATA[Parallels between technology shifts in the past decades and what we&#8217;re seeing with AI. Also: ways to avoid burnout when working with AI agents, TDD back in style, and more.]]></description><link>https://newsletter.pragmaticengineer.com/p/cycles-of-disruption-in-the-tech</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/cycles-of-disruption-in-the-tech</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 07 Apr 2026 16:27:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6D40!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The recent <a href="https://www.pragmaticsummit.com/">Pragmatic Summit</a> saw two legends of software development share a stage in what was one of the most popular sessions at our debut live event in San Francisco. In front of a packed audience, Martin Fowler and Kent Beck tackled a range of highly-relevant topics, with me hosting proceedings.</p><p>Martin and Kent go back decades, and Martin jokes that his career is &#8220;mostly about writing down Kent Beck&#8217;s ideas.&#8221; They first collaborated in the 1990s, and each has published influential books &#8211; &#8216;<em>Extreme Programming Explained&#8217; </em>and <em>&#8216;Test-Driven Development&#8217; </em>by Kent, and <em>&#8216;Refactoring&#8217; </em>and<em> &#8216;Patterns of Enterprise Application Architecture&#8217; </em>by Martin.</p><p>At the Pragmatic Summit, they each shared a wealth of hard-earned learnings and decades-worth of perspective, along with a healthy dose of skepticism. Needless to say, the conversation did not disappoint, and this article summarizes what we discussed in their own words. You can also <a href="https://youtu.be/CZs8J1ZD0CE">check out the full recording</a>.</p><p>We cover:</p><ol><li><p><strong>Technology shifts similar to AI. </strong>The arrival of the microprocessor, introduction of object-oriented languages, the Internet, and agile software development principles were all major changes &#8211; but one big difference was that it took time for these technologies to be adopted. Not so with AI.</p></li><li><p><strong>Agile and AI similarities. </strong>With Agile, company incentives were often misaligned, &#8220;snake oil&#8221; vendors were everywhere, and a &#8220;mid pack&#8221; of developers who resisted the change saw their career prospects hit. These trends look likely to repeat with AI.</p></li><li><p><strong>What&#8217;s happening inside companies</strong>. There&#8217;s some confusion &#8211; and even panic &#8211; at large companies, while AI tools don&#8217;t work nearly as well on large and complex codebases as on greenfield projects. Also, a &#8220;re-soloing&#8221; of software development is inbound.</p></li><li><p><strong>Avoiding burnout with AI agents</strong>. Set and maintain boundaries, and pay attention. Martin suggests to catch when you start producing &#8220;negative value&#8221;: that&#8217;s when to take a break.</p></li><li><p><strong>Unhealthy performance metrics.</strong> Companies are starting to measure things like frequency of pull requests &#8211; when they should be looking to quantify outcomes and results.</p></li><li><p><strong>Lower quality on purpose? </strong>It seems every business is optimizing for speed with AI, but quality can get dropped. Also: building features is more obvious with AI, than investing in &#8220;futures.&#8221;</p></li><li><p><strong>Test-Driven Development (TDD): tests no longer optional? </strong>Kent pioneered TDD, and today it&#8217;s more relevant than ever for working with AI.</p></li><li><p><strong>Thriving in an AI-native industry.</strong> Focus on working with agents to express your craft, try to get more enjoyment in <em>understanding</em> your domain, and take on more ambitious work.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6D40!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6D40!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 424w, https://substackcdn.com/image/fetch/$s_!6D40!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 848w, https://substackcdn.com/image/fetch/$s_!6D40!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!6D40!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6D40!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png" width="1456" height="1326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1326,&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_!6D40!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 424w, https://substackcdn.com/image/fetch/$s_!6D40!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 848w, https://substackcdn.com/image/fetch/$s_!6D40!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!6D40!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe801e0ca-cd70-4ed7-9d94-9ca1e44509a1_1594x1452.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Martin Fowler (center), Kent Beck (right), and me at The Pragmatic Summit</em></figcaption></figure></div><p><em>Before we start, a programming note: this week, there will be no The Pulse on Thursday &#8212; I&#8217;ll be attending <a href="https://www.ai.engineer/europe">AI Engineer Europe</a> in London on Thursday and Friday, including doing a fireside chat, and hosting one with Linear CTO Tuomas Artman.</em></p><h2>1. Technology shifts similar to AI</h2><p><strong>Do you recall a tech change as similarly promising and unpredictable as AI?</strong></p><p><strong>Martin: </strong>&#8220;Nothing has hit with the magnitude of AI. This is a whole size different from anything we&#8217;ve faced before. On a smaller scale, we were very much involved in the growth of object oriented languages, which scared a lot of people. It didn&#8217;t scare us so much because we were part of it.</p><p>Looking back, the internet had a huge impact on us all, and of course, Agile software development, too. Agile had a very big impact on a lot of organizations: you could tell by how hard they resisted it. We had to persuade people of the importance of these technological changes; yes, even the internet! It may sound surprising but there were people who didn&#8217;t think it was important.</p><p>The thing about AI is that today there is no argument about how important it is.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NR_1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NR_1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!NR_1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!NR_1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!NR_1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NR_1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&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_!NR_1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!NR_1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!NR_1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!NR_1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819fa7b4-c3f3-4ab7-9a89-263e19893663_1600x1067.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Martin Fowler (left) speaks at the Summit</em></figcaption></figure></div><p><strong>Kent: </strong>&#8220;The other analogy I have is the introduction of the microprocessor. Before that, computers were big boxes; you couldn&#8217;t move them around. If you wanted another computer, you&#8217;d mortgage your house for it. Having a computer was a <em>big</em> deal.</p><p>I was a kid in Silicon Valley with my dad as a programmer when the Intel 4004 hit the market [in 1971]. We went: &#8220;Wait a minute, that <em>chip</em> is a computer? Oh my goodness!&#8221; The possibilities of computing suddenly expanded thanks to it. If you could figure out how to write software on this chip and figure out how to design hardware around this thing, you could suddenly do things you hadn&#8217;t even imagined.</p><p>And so I think part of AI is this expansion of imagination. I&#8217;m writing projects that are ridiculously ambitious: I&#8217;m working on a persistent <a href="https://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a>. I&#8217;m writing library-quality code for Rust.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kug2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kug2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 424w, https://substackcdn.com/image/fetch/$s_!Kug2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 848w, https://substackcdn.com/image/fetch/$s_!Kug2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 1272w, https://substackcdn.com/image/fetch/$s_!Kug2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kug2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png" width="1390" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1390,&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_!Kug2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 424w, https://substackcdn.com/image/fetch/$s_!Kug2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 848w, https://substackcdn.com/image/fetch/$s_!Kug2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 1272w, https://substackcdn.com/image/fetch/$s_!Kug2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F334ad5f3-31fe-4454-b222-7b256dfde10d_1390x808.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Kent predicts AI will expand software engineering like the Intel 4004 did. Source: <a href="https://www.intel.com/content/www/us/en/history/virtual-vault/articles/the-intel-4004.html">Intel</a></em></figcaption></figure></div><h3>Balancing skepticism and curiosity</h3><p><strong>What was the feeling in the industry during those revolutions, and the differences between professionals who thrived back then and those who didn&#8217;t?</strong></p><p><strong>Martin:</strong> &#8220;There was a mix of people chasing the hype and those saying, &#8220;this new thing is nothing special.&#8221; I think you&#8217;ve always got to have that balance of skepticism and curiosity, and to be selective about it. I mean, I have been completely skeptical about some big changes: Blockchain was one I was extremely skeptical about.</p><p>My skepticism is well-rooted because I&#8217;ve seen so much &#8220;snake oil&#8221; over the years. In fact, my skepticism has to be absolute and total, which means I have to be skeptical about my skepticism! To be that skeptical also requires curiosity: you&#8217;ve got to be curious enough to say &#8220;how do I probe in order to detect signs of something useful?&#8221;</p><p>You also need to be aware that your early interactions may not actually be a <em>true</em> signal. When I started playing around with AI, it was with GitHub Copilot a year and a half ago. I was pretty unimpressed; it would give you something wonderful, but most of the time it gave you such garbage that you would just delete it right away. If that had been my only impression of AI, I would&#8217;ve immediately flipped the &#8220;<a href="https://en.wikipedia.org/wiki/Bozo_bit">bozo bit</a>&#8221; on it, like I did with blockchain.&#8221;</p><p><strong>Kent:</strong> &#8220;Here&#8217;s the thing, the capabilities of AI can change week to week. I&#8217;ll try something with Gemini one week and it fails miserably. Then Claude Code works pretty well, and then it doesn&#8217;t. And then I try Gemini for the same thing and it works, when it hadn&#8217;t worked last week!</p><p>People want an answer, but the answer&#8217;s always changing. In this environment, you can&#8217;t possibly have <em>the </em>answer. That&#8217;s the bad news, but the good news is that nobody else has the answer either. So, you&#8217;re just as smart as everybody else because we&#8217;re all equally ignorant.&#8221;</p><h2>2. Agile and AI similarities</h2><p><strong>In 2001, the &#8216;Agile Manifesto&#8217; came out, of which you were both co-authors. I think many companies are expecting the same thing with AI as Agile promised: better, faster, cheaper software. But how did Agile adoption really play out?</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_!o3em!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o3em!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!o3em!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!o3em!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!o3em!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o3em!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&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_!o3em!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!o3em!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!o3em!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!o3em!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe4d78ab-2662-4ef7-b18f-a25317de5dd5_1600x1067.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Full house: The conversation with Martin (left) and Kent (right) drew a large audience</em></figcaption></figure></div><p><strong>Kent:</strong> &#8220;It turns out people don&#8217;t want faster, cheaper, better! Inside some companies, the incentives are misaligned with actually achieving that. And so as geeks trying to achieve these improvements and saying: &#8220;it&#8217;s 40% better, 12% cheaper and less fattening,&#8221; people will punish you if that doesn&#8217;t align with <em>their</em> incentives inside organizations.</p><p>In the ideal organization, everybody would care about the same things, but that&#8217;s just not the way it works! So, if AI is coming along to promise the same things, we&#8217;re going to see the same reaction as before.&#8221;</p><p><strong>Martin:</strong> &#8220;An obvious difference is the sheer magnitude and speed there is with AI. Also, I think there will be a big difference between people who use it well and people who use it badly. The trick is figuring out how to use it well and putting the effort in to learn. There will be a big distinction between those two groups.</p><p>But I suspect there will still be some similarities with Agile. The core notions behind Agile and extreme programming are solid and good, but a huge snake-oil industry appeared around it &#8211; the &#8220;Agile industrial complex&#8221;, as I refer to it. This is also happening with AI right now, and it&#8217;s often hard to see the difference between snake oil and the real stuff.&#8221;</p><h3>AI as an amplifier</h3><p><strong>Kent:</strong> &#8220;AI is an amplifier. If you&#8217;re young and learning quickly, AI can amplify your learning. I personally think this is the golden age of the junior programmer. I get people coming to me all the time saying things like &#8220;my son started his second year in CS and wants to go into something more commercial like art history.&#8221; And I&#8217;d say, &#8220;this is like if you&#8217;re a carpenter and they just introduced the circular saw and you think, &#8216;oh, well, carpentry is over. Anybody can build a house now.&#8217; Well, no! Now, you have more powerful tools. You have less of the crummy work to do.</p><p>I think that young people are going to learn faster, and experienced folks who are working effectively are going to work quicker and more effectively.&#8221;</p><h3>Developers stuck in the middle</h3><p><strong>Kent: </strong>My concern is that there&#8217;s a &#8220;middle&#8221; of people who got into programming as a way to make money. If we look back at the Dotcom crash, there was a &#8220;mid pack&#8221; of such people who ended up going into real estate, more or less. But today, I don&#8217;t know where that &#8220;middle&#8221; will go, and it&#8217;s also much bigger now than 25 years ago.&#8221;</p><p><strong>Martin:</strong> &#8220;But that middle has also been &#8220;flushed out&#8221; to some degree by retrenchment in the software industry at the <a href="https://newsletter.pragmaticengineer.com/p/zirp">end of the zero interest rate period</a>. So, that&#8217;s an interesting difference because we&#8217;ve had these things occurring at once: the AI boom, and the economic headwinds of the past 2-3 years.</p><p>This is an interesting mix that wasn&#8217;t present in the &#8216;90s with the Dotcom Boom. Back then, it was pretty much <em>all</em> a solid boom.&#8221;</p><h3>Return of &#8220;let&#8217;s get rid of programmers!&#8221;</h3><p><strong>Kent: </strong>&#8220;Another interesting confluence of factors is the periodic, &#8220;we can get rid of all the programmers, woo-hoo&#8221; trend, which started with Cobol in the 1970s. With Cobol, business analysts were supposedly going to be able to write the programs, and the logic was that we wouldn&#8217;t need programmers anymore. That comes back repeatedly.</p><p>Agile, however, was definitely <em>not</em> a &#8220;let&#8217;s get rid of programmers&#8221; trend. With Agile, we wanted programmers to be more <em>effective</em> in their jobs. And since we started it, and were programmers, we were able to push that agenda pretty effectively.</p><p>However, today the &#8220;get rid of programmers&#8221; trend is repeating. As programmers, it behooves us to think about why they keep wanting to get rid of us. Some of that&#8217;s about us as programmers, and some of it not. Still, we should think about why people periodically want to axe us. In the end, this trend amps up the fear factor that everybody&#8217;s experiencing.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fZXk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fZXk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!fZXk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!fZXk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!fZXk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fZXk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&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_!fZXk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 424w, https://substackcdn.com/image/fetch/$s_!fZXk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 848w, https://substackcdn.com/image/fetch/$s_!fZXk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!fZXk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c75e55a-42f8-42be-bac8-5af9c6d7ab19_1600x1067.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>In the middle of the discussion</em></figcaption></figure></div><h3>&#8220;Re-soloing&#8221; of programming</h3><p><strong>Kent:</strong> &#8220;A big trend is the &#8220;re-soloing&#8221; [reduced in-person collaboration] of programming.</p><p>A big part of extreme programming (XP) was creating a safe social environment for basically antisocial people.<em> </em>On an XP team, people are talking to each other for hours a day, and are happy to do so because it&#8217;s set up to be a positive experience.</p><p>Now, I see programmers saying, &#8220;I&#8217;ve got six agents, so really I&#8217;m managing a team.&#8221; No, you&#8217;re not: you&#8217;re using six tools at once, which is fine, but it&#8217;s very different from having a conversation with somebody who sees things slightly differently, or has a different energy level from you on the day.</p><p>We used to have programmers in individual offices with doors, and you&#8217;d shut the door and slide the pizza underneath. That was easy to manage, but then along came this messy, social, complicated, chaotic process of software development, which just happened to produce really good results.</p><p>But now, instead of 50 people on my team, I can have five and they don&#8217;t have to talk to each other, and each can have 10 agents. Is that the same? No, it&#8217;s not.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NdVf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NdVf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 424w, https://substackcdn.com/image/fetch/$s_!NdVf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 848w, https://substackcdn.com/image/fetch/$s_!NdVf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!NdVf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NdVf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png" width="1456" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&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_!NdVf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 424w, https://substackcdn.com/image/fetch/$s_!NdVf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 848w, https://substackcdn.com/image/fetch/$s_!NdVf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!NdVf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97d1f960-88db-4779-bee7-6511138902c0_1600x1062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Swag: As well as the usual merch at the Summit, there were books by speakers, including Martin and Kent</em></figcaption></figure></div><h3>More effective two-pizza teams &amp; the future of pairing</h3><p><strong>Martin: </strong>&#8220;Are we seeing two-pizza teams [of 5-10 people] becoming one-pizza teams because agents don&#8217;t eat pizza, or do we see two-pizza teams staying and becoming much more effective and capable? My bet is on more effective two-pizza teams.</p><p>We&#8217;re beginning to see some interesting feedback in terms of pair programming. With pair programming, is it one human and the genie (AI) programming, or is it two humans and one genie? If it&#8217;s two of us, perhaps we can control the genie a bit better, and we also have interaction.</p><p>I&#8217;ll be very interested in reports of people trying to control genies in pairs, possibly even beyond pairs. There&#8217;s also the whole &#8216;mob programming&#8217; thing, and how that will go with genies. I don&#8217;t necessarily think that one person and many genies is the right answer.&#8221;</p><p><strong>Kent</strong>: &#8220;My experience of pairing with two humans, plus one or more genies, has been very positive. And the fact the AI is slow is really nice. Every time models come out and are faster, I&#8217;m like, &#8220;Oh, there&#8217;s less time to talk.&#8221; When the AI goes away for three minutes, we can talk about our philosophy of naming, or how we express conditionals, or about what we should be doing next. But if it pops back in 15 seconds, you don&#8217;t have time for that conversation.&#8221;</p><h2>4. Avoiding burnout with AI agents</h2><p><strong>Do you find yourself getting close to burnout, especially when spinning up multiple threads? Do you have strategies for managing the mental impact?</strong></p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/cycles-of-disruption-in-the-tech">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What is inference engineering? Deepdive]]></title><description><![CDATA[Many engineers use inference daily, but inference engineering is a bit obscure &#8211; and an area rich with interesting challenges. Philip Kiely, author of the new book, &#8220;Inference Engineering,&#8221; explains]]></description><link>https://newsletter.pragmaticengineer.com/p/what-is-inference-engineering</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/what-is-inference-engineering</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 31 Mar 2026 17:01:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FctC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Two years ago, we learned about <a href="https://blog.pragmaticengineer.com/how-does-chatgpt-work/">how LLMs work</a> at a high level from <a href="https://blog.pragmaticengineer.com/how-does-chatgpt-work/">the ChatGPT team</a>, and today, almost all software engineers use large language models (LLMs) in our day-to-day work. The most visible part of using an LLM is <strong>inference</strong>; when an existing model takes an input (prompt) and generates an output, one token at a time. So, with AI models and AI agents everywhere across the tech industry in 2026, that means so is inference.</p><p><strong>And now, inference engineering is becoming more widespread, too, as open LLM models grow more capable. </strong>This is because with closed models, inference engineering is done only by the AI engineers who build the model, whose number might add up to a few thousand globally. In contrast, with the open models which tech companies are adopting, it&#8217;s possible to tweak them to perform better at inference. For example, Cursor built its new Composer 2.0 model <a href="https://newsletter.pragmaticengineer.com/i/192229275/backlash-after-cursor-hides-that-composer-2-is-based-on-open-source-model">on top of</a> the open Kimi 2.5 model, and successfully used plenty of inference engineering approaches to make it even faster.</p><p>So, based on this industry-wide prevalence and the related need for superior technical performance, it&#8217;s worth understanding a bit about what inference engineering actually is, and some interesting approaches worth knowing about, as a software engineer.</p><p>For some answers, I turned to <a href="https://x.com/philipkiely">Philip Kiely</a>, a software engineer who has been working for four years at the inference startup, Baseten. With his hard-earned experience, Philip has written an excellent, in-depth book about precisely this topic, <em>&#8220;Inference Engineering.&#8221;</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_!FctC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FctC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FctC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FctC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FctC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FctC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&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_!FctC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FctC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FctC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FctC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39fe534-3703-4096-acc3-fcc01d4d5d00_1600x1200.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>My personal copy of Inference Engineering</em></figcaption></figure></div><p>In today&#8217;s issue, we cover:</p><ol><li><p><strong>Setting the stage: why is inference so important? </strong>More capable, widespread, open models are driving demand for inference engineering.</p></li><li><p><strong>What is inference? </strong>As the phase that comes after training a model, the inference layer introduces new engineering challenges like batching, caching, and quantization.</p></li><li><p><strong>When is inference engineering needed?</strong> Investing in this area is typically worth it when your product and usage scales up, and there are product requirements which a current, off-the-shelf solution lacks.</p></li><li><p><strong>What hardware does inference use? </strong>Datacenter GPUs are the most common, while on-premises, air-gapped GPUs are also employed.</p></li><li><p><strong>What software does inference use? </strong>Commonly-used software includes NVIDIA&#8217;s CUDA and Dynamo, as well as hardware-agnostic projects like PyTorch, vLLM, and others, which are growing in popularity.</p></li><li><p><strong>What infrastructure does inference need? </strong>Autoscaling is a baseline requirement. Kubernetes is a popular choice for autoscaling inside a cluster, while multi-cloud inference might be necessary for high-scale use cases.</p></li><li><p><strong>Five approaches to make inference faster. </strong>Quantization (reducing the numerical precision of a model&#8217;s weights), speculative decoding (taking advantage of spare compute to generate &#8220;draft tokens&#8221;), caching, parallelism (tensor parallelism and expert parallelism) and disaggregation (separating the prefill and decode phases to run on separate workers, not the same GPU).</p></li></ol><p>This deepdive uses a few abbreviations and concepts that are everyday lingo for inference engineers, but maybe are not for those less versed in the domain:</p><ul><li><p><strong>CUDA: </strong>Compute Unified Device Architecture. NVIDIA&#8217;s proprietary API to program NVIDIA GPUs for high-performance computing, including LLM-related use cases.</p></li><li><p><strong>TTFT</strong>: time to first token. Think of this as the &#8220;time to process the prompt.&#8221; This metric determines the perceived responsiveness of models and GenAI systems.</p></li><li><p><strong>TPS</strong>: tokens per second. Akin to a model&#8217;s &#8220;typing speed.&#8221;</p></li><li><p><strong>ITL</strong>: intertoken latency. The time between generating one token and the next.</p></li><li><p><strong>KV cache</strong>: key-value cache. The cached results of the attention algorithm, reused between requests to speed up inference. <em>We cover more on KV cache in the <a href="https://newsletter.pragmaticengineer.com/i/141865286/challenge-1-kv-cache-and-gpu-ram">Scaling ChatGPT deepdive</a>.</em></p></li><li><p><strong>Prefill / decode: </strong>the two phases of inference. Prefill is when the model takes the full input and processes tokens, outputting the KV cache. Decode is the phase in which the model generates one token at a time.</p></li><li><p><strong>MoE</strong>: Mixture of Experts. An architecture that enables models to be pretrained with far less compute. <a href="https://huggingface.co/blog/moe#what-is-a-mixture-of-experts-moe">More details on this approach.</a></p></li></ul><p>Below is an introduction to inference adapted from Philip&#8217;s book, &#8220;<em>Inference Engineering,&#8221; which </em>is <a href="https://baseten.com/inference-engineering">free to download as an e-book</a>. Physical copies are currently sold out, but Philip is printing more as fast as possible.</p><p><em>My usual disclaimer: as with all my recommendations, I was not paid to mention this book, and no links in this article are affiliates. See my <a href="https://blog.pragmaticengineer.com/ethics-statement/">ethics statement</a> for more.</em></p><p><em>With that, it&#8217;s over to Philip:</em></p><h2>1. Setting the stage: why is inference so important?</h2><p>Inference is the most valuable category in the AI industry, but inference engineering, on the other hand, is still in its infancy. In their work, inference engineers work across the stack from CUDA to Kubernetes in pursuit of faster, less expensive, and more reliable serving of generative AI models in production.</p><p>When ChatGPT launched in late 2022, there were perhaps a few hundred inference engineers in the world, and they didn&#8217;t call themselves that. These specialists mostly worked at frontier labs like OpenAI, Midjourney, and Anthropic, or at big tech companies like Google and NVIDIA.</p><p>Back then, it looked like this might be the way of the AI industry: that training generative AI models would be so hard and expensive that only a handful of companies would develop closed models and thereby require inference engineering for production serving. In that alternate future, the rest of the world would be mere consumers of AI via APIs, renting intelligence a token at a time.</p><p>Three years later, it turns out that training generative AI models is indeed both hard and expensive &#8211; but it&#8217;s not so hard and expensive to be limited to a handful of players. Instead, a proliferation of open models &#8211; more than two million and counting on <a href="https://huggingface.co/">Hugging Face</a> (the &#8220;GitHub for AI&#8221;) &#8211; means that today every engineer can now deploy their own intelligence to power AI products.</p><p>Research labs around the world, from OpenAI and NVIDIA Nemotron in America, to Mistral AI and Black Forest Labs in Europe, to Alibaba Qwen, DeepSeek AI, Z AI, and Moonshot AI in China, regularly release open models of all modalities.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hir-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hir-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 424w, https://substackcdn.com/image/fetch/$s_!Hir-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 848w, https://substackcdn.com/image/fetch/$s_!Hir-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 1272w, https://substackcdn.com/image/fetch/$s_!Hir-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hir-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png" width="1456" height="1188" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1188,&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_!Hir-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 424w, https://substackcdn.com/image/fetch/$s_!Hir-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 848w, https://substackcdn.com/image/fetch/$s_!Hir-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 1272w, https://substackcdn.com/image/fetch/$s_!Hir-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fb80caa-61e3-4346-bafc-3ffda6aa18bf_1600x1305.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Well over two million open models on Hugging Face, 25 times more than five years ago</figcaption></figure></div><p>Despite closed models getting smarter and cheaper, the movement into open models is accelerating, which differ by the availability of their weights:</p><ul><li><p><strong>Closed model: </strong>A proprietary model whose weights are unavailable to the public, like GPT-5 and Claude Sonnet.</p></li><li><p><strong>Open model: </strong>A model whose weights are publicly available, like Llama or DeepSeek, and which is usually released under the MIT license, or a similar permissive license (some models restrict commercial use, so always double-check license terms).</p></li></ul><p>Before December 2024, there was a meaningful gap in intelligence between closed and open models, but when DeepSeek V3 and R1 were released, that gap disappeared. <em>Note from Gergely: we previously covered <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-122-deepseek-rocks-the">how DeepSeek&#8217;s release rocked the AI industry.</a></em></p><p>Today, new closed models are matched by open models within months if not weeks, and occasionally, open models like Kimi K2 Thinking even exceed closed models&#8217; capabilities for brief periods.</p><p>Despite the fact that open models are constantly chasing closed models on benchmarks, they nonetheless change the equation for AI product builders. And as both types improve, closed and open models cross capability thresholds.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TyQk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TyQk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 424w, https://substackcdn.com/image/fetch/$s_!TyQk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 848w, https://substackcdn.com/image/fetch/$s_!TyQk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!TyQk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TyQk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png" width="1456" height="997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:997,&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_!TyQk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 424w, https://substackcdn.com/image/fetch/$s_!TyQk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 848w, https://substackcdn.com/image/fetch/$s_!TyQk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!TyQk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0874a12e-2bf7-4ab8-80ce-19ba8db78283_1600x1096.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Open and closed models improve rapidly, making new products possible</em></figcaption></figure></div><p>In 2022, it was impossible to build the kinds of AI-native products that define the industry today. But over time, closed models got smarter and new categories like customer service voice agents and AI-powered IDEs became possible. The early models were slow, expensive, and unreliable, but the capabilities were there and AI engineers began building companies around them.</p><p><strong>As open models crossed the same capability thresholds, these folks began using them to replace closed models.</strong> Many also began fine-tuning open models to cross capability thresholds faster, and even exceed closed model quality in their specific product and domain.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k0BW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k0BW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 424w, https://substackcdn.com/image/fetch/$s_!k0BW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 848w, https://substackcdn.com/image/fetch/$s_!k0BW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!k0BW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k0BW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png" width="1456" height="997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:997,&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_!k0BW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 424w, https://substackcdn.com/image/fetch/$s_!k0BW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 848w, https://substackcdn.com/image/fetch/$s_!k0BW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!k0BW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ec68f-41aa-401d-8f4f-8afb231ab590_1600x1096.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Customizing open models retains control over latency, reliability, and economics</em></figcaption></figure></div><p>Switching to open models means the opportunity to use inference engineering to make the models powering AI products better in new ways:</p><ul><li><p><strong>Latency:</strong> Closed model APIs are built for throughput, but open models can be optimized for real-time applications.</p></li><li><p><strong>Availability: </strong>While APIs for GPT and Claude are stuck at two nines of uptime, it&#8217;s possible to achieve four nines or better with dedicated deployments of open models.</p></li><li><p><strong>Cost:</strong> Open models are often at least 80 percent less expensive at scale.</p></li></ul><p>So, whereas three years ago it looked like inference engineering was a niche field, the fact is that today, every company aiming to build truly differentiated and competitive AI products needs an inference strategy.</p><p>AI-native startups like Cursor, Clay, Gamma, and Mercor are redefining hypergrowth by building products that rely on open and in-house models. Leading digital native companies like Notion and Superhuman succeed by deeply integrating AI capabilities into their category-defining products.</p><p>Elsewhere, a new generation of blended research and engineering teams &#8211; World Labs, Writer, Mirage, and dozens more &#8211; are building businesses by training and productizing their own foundation models.</p><p>Adoption is even strong in enterprise and regulated industries, which historically were slow to adopt new technologies. Companies like OpenEvidence, Abridge, and Ambience are making generative AI ubiquitous in healthcare, while at the world&#8217;s largest companies, AI initiatives are moving past the pilot stage into massive user adoption. Market-wide demand for inference means that everyone from developers to executives has the opportunity to learn inference engineering and use it to advance their career and business.</p><p>I&#8217;ve been incredibly fortunate to have a front-row seat in the fastest-moving market in history over the last four years at Baseten, where we power mission-critical inference for the best AI products, including every company listed in the previous paragraphs.</p><p><strong>The good news is that you are early. </strong>There are still relatively few professionals working on inference, and newcomers can become experts quickly. Also, the potential and impact of inference is becoming ever clearer, but the domain is still in its infancy. That means there are enormous opportunities to solve novel, interesting, and deeply technical problems at all levels of the stack.</p><h2>2. What is inference?</h2><p>Inference is the second phase of a generative AI model&#8217;s lifecycle:</p><ul><li><p><strong>Training:</strong> The process of learning model weights from data.</p></li><li><p><strong>Inference:</strong> Serving generative AI models in production.</p></li></ul><p>During the past decade&#8217;s machine learning (ML) boom, hundreds of thousands of data scientists and ML engineers became familiar with the full lifecycle of training and inference for ML models.</p><p>Inference for classic ML models is relatively straightforward. In the early days of Baseten, we ran inference for models built with tools like XGBoost on lightweight CPUs with a simple software stack.</p><p>In contrast, inference for generative AI models is complex. You can&#8217;t simply take model weights, get some GPUs, and expect inference to be fast and reliable enough for large-scale production use. Doing inference well requires three layers:</p><ul><li><p><strong>Runtime:</strong> Optimizing the performance of a single model on a single GPU-backed instance.</p></li><li><p><strong>Infrastructure:</strong> Scaling across clusters, regions, and clouds without creating silos, while maintaining excellent uptime.</p></li><li><p><strong>Tooling:</strong> Providing engineers working on inference with the right level of abstraction to balance control with productivity.</p></li></ul><p>These three layers must work together to create a system that can handle mission-critical inference at scale.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Aqry!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aqry!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 424w, https://substackcdn.com/image/fetch/$s_!Aqry!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 848w, https://substackcdn.com/image/fetch/$s_!Aqry!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!Aqry!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aqry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png" width="1456" height="1461" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1461,&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_!Aqry!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 424w, https://substackcdn.com/image/fetch/$s_!Aqry!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 848w, https://substackcdn.com/image/fetch/$s_!Aqry!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!Aqry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba5fc58-2204-4293-820e-c6b60467e165_1595x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A complete inference stack includes runtime and infrastructure optimizations</figcaption></figure></div><p>The runtime layer is responsible for ensuring an individual model running on a GPU (or across several GPUs in a single instance) runs as performantly and efficiently as possible. This layer depends on a sophisticated software stack, from CUDA, to PyTorch, to inference engines like vLLM, SGLang, and TensorRT-LLM. Low-level optimization is important, with kernels like FlashAttention delivering significant performance gains.</p><p>The runtime layer relies on a number of model performance techniques that apply new research to the challenges of inference on generative AI models:</p><ul><li><p><strong>Batching:</strong> Run incoming requests in parallel, weaving them together on a token-by-token basis to increase throughput.</p></li><li><p><strong>Caching:</strong> Reuse the KV cache &#8211; the cached results of the attention algorithm &#8211; between requests that share prefixes.</p></li><li><p><strong>Quantization:</strong> Lower the precision of select pieces of the model to access more compute and reduce memory burden.</p></li><li><p><strong>Speculation:</strong> Generate and validate draft tokens to produce more than one token per forward pass during decode.</p></li><li><p><strong>Parallelism:</strong> Efficiently leverage more than one GPU to accelerate large models without introducing new bottlenecks.</p></li><li><p><strong>Disaggregation:</strong> Separate the two phases of LLM inference, prefill and decode, onto independently scaling workers.</p></li></ul><p>These model performance techniques are used for all modalities and not just LLMs, such as vision language models, embedding models, automatic speech recognition, speech synthesis, image generation, and video generation, which extend the capabilities of AI systems and require their own inference optimizations. But these runtime optimizations are not enough: no matter how performant a single instance of a model server is, it will eventually receive more traffic than it can handle. This is not a CUDA problem or a PyTorch problem, it&#8217;s a systems problem that needs to be solved at the infrastructure layer.</p><p>The nature of infrastructure problems changes at each level of scale. At first, the problems are around autoscaling: knowing when to add and remove replicas, and figuring out how to do so quickly.</p><p><strong>Past a certain scale &#8211; generally a few hundred GPUs &#8211; infrastructure problems are defined by capacity.</strong> To get access to enough GPUs, inference engineers begin spreading workloads across multiple regions and cloud providers. This quickly leads to silos, where models in one cluster may be starved for resources while other clusters have unused capacity. The final level of scale in infrastructure is a global system that treats all available resources as a single unified pool of compute.</p><p>Thoughtful multi-cloud infrastructure also improves reliability, protecting against downtime in any individual region or cloud provider. And for global applications, running inference near to end users improves end-to-end latency.</p><p>Once these runtime and infrastructure capabilities are built, they need to be presented at the appropriate level of abstraction. Inference providers like Baseten and internal teams building inference need to consider what tooling and developer experience to provide as the critical third layer in a complete inference platform.</p><p>Of course, developer experience is subjective. For inference, one extreme is the black box: give a platform model weights, and get back an API. At the other extreme is providing only basic constructs for compute, network, disk, and so forth.</p><p>The right developer experience is somewhere in the middle, where inference engineers have enough control to run mission-critical inference confidently, and enough abstraction to work productively.</p><p>This article &#8211; which is an excerpt of <em>Inference Engineering</em> &#8211; presents an overview of the technologies and techniques that power inference across all three layers of runtime, infrastructure, and tooling.</p><h2>3. When is inference engineering needed?</h2><p>Inference engineering adds speed and scale to AI products by optimizing production serving of generative models. Optimization means identifying the best solution from a range of options.</p><p>Before optimizing model performance and building robust infrastructure, you need to know what &#8220;best&#8221; means for your product; many performance improvements come from making tradeoffs in latency, throughput, and quality. In practice, optimization is often about finding the right balance, rather than maximizing a single factor.</p><p>For example, NFL players are big, fast, and strong. But they&#8217;re not as big as sumo wrestlers, fast as Olympic sprinters, or strong as champion powerlifters. Their bodies and skills are optimized to fulfill the specific demands of their position over the course of a full season.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BjhW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BjhW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 424w, https://substackcdn.com/image/fetch/$s_!BjhW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 848w, https://substackcdn.com/image/fetch/$s_!BjhW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 1272w, https://substackcdn.com/image/fetch/$s_!BjhW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BjhW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png" width="1456" height="733" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:733,&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_!BjhW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 424w, https://substackcdn.com/image/fetch/$s_!BjhW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 848w, https://substackcdn.com/image/fetch/$s_!BjhW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 1272w, https://substackcdn.com/image/fetch/$s_!BjhW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cd0e2b2-8865-4806-9c03-58289d752f05_1600x805.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Like elite athletes, inference services must be specialized for the demands of their workloads</em></figcaption></figure></div><p>Similarly, your inference system must be optimized to fulfill the specific demands of your model, product, and traffic. The more constraints you can introduce, the better the outcomes that can be achieved.</p><p>You should know:</p><ul><li><p><strong>Model requirements: </strong>Which model(s) do you need to run inference on?</p></li><li><p><strong>Application interface: </strong>How will inputs be delivered to the model, and how is the output expected to be formatted?</p></li><li><p><strong>Latency budget: </strong>How fast does your product need to respond to a user action, end-to-end?</p></li><li><p><strong>Unit economics: </strong>How much sense does it make to spend on a per-request, per-user, or per-month basis?</p></li><li><p><strong>Usage patterns: </strong>How many concurrent users are you serving, and is there any pattern to their usage (e.g., more activity during business hours)?</p></li></ul><p>Early in building an AI product, the answers to these questions may not be clear. At this point, it&#8217;s often better to use off-the-shelf APIs whenever possible, rather than investing in dedicated inference. But as a product scales, the requirements become clear and inference engineering becomes a worthwhile pursuit.</p><h2>4. What hardware does inference use?</h2><p>Inference engineering relies on accelerators: powerful hardware designed to load terabytes of data and perform trillions of operations per second.</p><p>The most common type of accelerator for inference is the GPU, and the market leader in GPUs for inference is NVIDIA. My book focuses on inference engineering for NVIDIA GPUs in the datacenter, and also covers other vendors of datacenter accelerators and local inference.</p><p>Across vendors, there are three types of GPUs on the market:</p><ul><li><p><strong>Datacenter GPUs: </strong>Racked servers with interconnected high-performance GPUs. Example: NVIDIA B200.</p></li><li><p><strong>Workstation GPUs: </strong>Individual desktop GPUs for professional workflows. Example: NVIDIA RTX Pro 6000.</p></li><li><p><strong>Personal computing GPUs: </strong>Individual desktop GPUs for everyday use. Example: NVIDIA GeForce RTX 5090.</p></li></ul><p>Inference at scale uses datacenter GPUs mounted on racks: refrigerator-sized chassis with standardized power, networking, and cooling.</p><p>Datacenter GPUs like the <a href="https://www.nvidia.com/en-us/data-center/dgx-b200/">NVIDIA B200</a> offer the highest individual performance, and more importantly, include high-bandwidth GPU-to-GPU interconnects, are installed in highly standardized configurations, and are available by the millions in datacenters worldwide.</p><p>I doubt there is a B200 GPU running under your desk, but if there is, please send me a picture! Instead, inference on datacenter GPUs runs in one of three modes:</p><ul><li><p><strong>Cloud: </strong>GPUs are rented in someone else&#8217;s datacenter, usually hyperscalers like AWS and GCP, or neoclouds like CoreWeave and Nebius.</p></li><li><p><strong>On-premises: </strong>GPUs are purchased and installed in a datacenter that you control directly.</p></li><li><p><strong>Air-gapped: </strong>GPUs are installed on-prem and you need to physically access the GPUs to run inference.</p></li></ul><p>Most inference engineers use cloud GPUs. Large enterprises and governments run on-prem and air-gapped deployments, but cloud-based GPUs offer the flexibility and access that fast-growing AI products need to scale.</p><p>Even with constraints, navigating the hardware landscape is complex. From variations between cloud providers, to NVIDIA&#8217;s personal naming conventions, there are many nuances in selecting the right accelerator.</p><h2>5. What software does inference use?</h2><p>NVIDIA&#8217;s market dominance in the inference space is in no small part due to the robust, mature software ecosystem around its hardware. Hardware iteration cycles are slow. Best-in-class hardware companies like Apple and NVIDIA release new architectures and generations at most annually, with two-year release cycles being more common. But software iteration is fast. Often, to run a newly released open model on day zero, you need to install a nightly build or other pre-release version of each software dependency just to get support for the new model.</p><p>Software&#8217;s fast iteration cycle and lower barrier to entry dramatically expands the landscape of inference engineering. There are countless companies building software at various levels of the inference stack, in contrast to hardware, which centers on NVIDIA and a few competitors.</p><p>For inference engineers, these are some of the key software players:</p><ul><li><p><strong>NVIDIA:</strong> Invests heavily in its own sometimes-proprietary software ecosystem, from CUDA up to Dynamo.</p></li><li><p><strong>Hugging Face:</strong> Maintains a model registry for all open models plus <a href="https://huggingface.co/docs/transformers/en/index">transformers</a> (models built on the <a href="https://en.wikipedia.org/wiki/Transformer_(deep_learning)">transformer architecture</a>), and <a href="https://huggingface.co/docs/diffusers/index">diffusers</a> (models built on the <a href="https://en.wikipedia.org/wiki/Diffusion_model">diffusion-based</a> generative ones).</p></li><li><p><strong>The Linux Foundation:</strong> Maintains hardware-agnostic projects like PyTorch and vLLM.</p></li><li><p><strong>LMSYS Org:</strong> Develops essential tools for inference and evaluation, most notably SGLang.</p></li></ul><p>There are thousands more companies, universities, and research institutions making essential open-source contributions to inference. Over time, technologies have been built at increasing levels of abstraction:</p><ul><li><p><strong>CUDA: </strong>Direct communication to the GPU for explicit control over computations and memory.</p></li><li><p><strong>Deep learning frameworks: </strong>Abstractions over CUDA for training, exporting, and running neural networks in Python.</p></li><li><p><strong>Inference engines: </strong>Highly configurable PyTorch-backed inference for common architectures.</p></li><li><p><strong>NVIDIA Dynamo: </strong>Sits on top of inference engines to power large-scale deployments.</p></li></ul><p>Most inference engineering today happens at the higher levels of abstraction, configuring and deploying inference engines and orchestrating inference across multiple GPUs. No matter which level of the stack you work at, it&#8217;s essential to have a strong mental model for the adjacent levels of abstraction to guide your work.</p><h2>6. What infrastructure does inference need?</h2><p>When you scale production traffic, your assumptions are rigorously tested. Everything from input and output sequence lengths, to traffic patterns, to what topic a user decides to chat about; they all impact your observed performance in production. And maintaining secure, robust infrastructure is an entirely different skillset from optimizing model inference on the GPU.</p><p>No matter how fast and efficiently a single instance can serve a model, the service will be overwhelmed if traffic gets high enough. It&#8217;s an infrastructure problem, not with PyTorch or CUDA, and it requires a different mindset and different technologies.</p><p>Scaling in production introduces new complexities about where and how to get GPUs, balance traffic across them, and prevent downtime. The goal of autoscaling is to ensure you always have enough resources to serve all incoming requests, while maintaining latency SLAs and without wasting money on idle GPUs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k4ge!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k4ge!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 424w, https://substackcdn.com/image/fetch/$s_!k4ge!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 848w, https://substackcdn.com/image/fetch/$s_!k4ge!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 1272w, https://substackcdn.com/image/fetch/$s_!k4ge!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k4ge!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png" width="1456" height="854" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:854,&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_!k4ge!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 424w, https://substackcdn.com/image/fetch/$s_!k4ge!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 848w, https://substackcdn.com/image/fetch/$s_!k4ge!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 1272w, https://substackcdn.com/image/fetch/$s_!k4ge!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d466c2-fc03-4920-80ba-909b6d08a471_1600x939.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Without autoscaling, inference systems waste resources during traffic lulls and miss SLAs during traffic spikes</em></figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5hww!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5hww!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 424w, https://substackcdn.com/image/fetch/$s_!5hww!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 848w, https://substackcdn.com/image/fetch/$s_!5hww!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 1272w, https://substackcdn.com/image/fetch/$s_!5hww!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5hww!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png" width="1456" height="854" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:854,&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_!5hww!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 424w, https://substackcdn.com/image/fetch/$s_!5hww!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 848w, https://substackcdn.com/image/fetch/$s_!5hww!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 1272w, https://substackcdn.com/image/fetch/$s_!5hww!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5223ec4d-8b1e-4eb4-86f2-364e026cf470_1600x939.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>A strong autoscaling system for inference matches resources to demand</em></figcaption></figure></div><p>Autoscaling systems use Kubernetes, an open-source container orchestration system, along with a cluster-level system for provisioning and deallocating compute. Kubernetes can run one or more replicas of a model container, each on its own instance. An instance includes the GPUs and other hardware resources that the container requires.</p><p>Unless your traffic is unusually consistent, there probably isn&#8217;t a specific number of replicas that perfectly matches your needs.</p><p>Autoscaling is the practice of dynamically adjusting the number of replicas allocated to a given model within a cluster. There are two ways to make autoscaling decisions:</p><ul><li><p><strong>Utilization:</strong> Scale up or down based on GPU utilization signals like memory usage or compute usage.</p></li><li><p><strong>Traffic:</strong> Scale up and down based on the number of requests being processed in the system.</p></li></ul><p>Utilization and traffic don&#8217;t always match. For example, in LLM prefill, a few requests with hundreds of thousands of uncached input tokens could cause much higher utilization than many small requests with high cache hit rates.</p><p>Traffic-based scaling decisions can be made proactively, while utilization is a lagging indicator. Use both in combination to keep system resources matched with demand.</p><p>When designing a traffic-based autoscaling system, you want to configure five factors:</p><ul><li><p><strong>Min replicas:</strong> What is the minimum number of replicas that stay running, regardless of traffic?</p></li><li><p><strong>Max replicas:</strong> What is the maximum number of replicas you can allocate when traffic is high?</p></li><li><p><strong>Autoscaling window:</strong> How long is the sliding timeframe used to measure traffic and make autoscaling decisions?</p></li><li><p><strong>Scale down delay:</strong> For how long after a scale-down is suggested do you wait, in case there&#8217;s another traffic spike?</p></li><li><p><strong>Concurrency target:</strong> How many requests can each replica handle at once?</p></li></ul><p>The exact configuration determines how well the autoscaling system achieves its goals of maintaining latency SLAs without wasting resources. For example, increasing the scale-down delay prevents premature scaledowns for spikey traffic, but could result in unnecessary spend after traffic has properly cooled down.</p><p>Autoscaling within a single cluster works up to a certain point, but high-volume deployments serving a global user base need thousands of GPUs distributed around the world.</p><p>It&#8217;s straightforward to build multi-cloud inference as a collection of siloed compute across different cloud providers. But in these setups, there&#8217;s no way to use inter-cloud compute fluidly, and moving workloads across clouds is a tedious, error-prone process.</p><p>True multi-cloud inference requires building a multi-region, multi-provider bin packing tool, which treats distinct pools of compute as fungible with each other. Like Kubernetes within a single cluster, multi-cloud capacity management must take a global view, enabling global scheduling.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hHbk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hHbk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 424w, https://substackcdn.com/image/fetch/$s_!hHbk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 848w, https://substackcdn.com/image/fetch/$s_!hHbk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 1272w, https://substackcdn.com/image/fetch/$s_!hHbk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hHbk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png" width="1456" height="916" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:916,&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_!hHbk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 424w, https://substackcdn.com/image/fetch/$s_!hHbk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 848w, https://substackcdn.com/image/fetch/$s_!hHbk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 1272w, https://substackcdn.com/image/fetch/$s_!hHbk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40620524-e497-4f72-9f40-c84605d4461f_1600x1007.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>A multi-cloud approach extends the idea of control and workload planes to a multi-cluster, multi-region system</em></figcaption></figure></div><p>Running true multi-cloud inference unlocks:</p><ul><li><p><strong>Capacity:</strong> Pool capacity from multiple providers for greater, more flexible GPU access.</p></li><li><p><strong>Redundancy: </strong>Split inference across providers for resiliency against outages.</p></li><li><p><strong>Latency:</strong> Run inference close to end users to reduce network latency overhead.</p></li><li><p><strong>Compliance: </strong>Run inference in compliance with data sovereignty and other regulatory requirements.</p></li></ul><p>Scaling from one cluster in one cloud to many clusters in many clouds requires a new coordination layer. A multi-cloud architecture contains:</p><ul><li><p><strong>Control plane:</strong> Handles model deployment and global scaling decisions, receives real-time event streams.</p></li><li><p><strong>Workload planes:</strong> Handles direct inference traffic and in-cluster scaling decisions, reports utilization and demand.</p></li></ul><p>This separation of responsibilities ensures that individual workload planes can serve traffic independently. If something happens to the control plane or any given workload plane, other workloads should be unaffected.</p><h2>7. Five approaches to make inference faster</h2><p>One of the coolest things about working in inference engineering is that, unlike many industries where new academic research takes years or decades to be adopted, techniques from new papers are live in production within months or even weeks.</p><p>But there is a gap to bridge between research and production, and some of the most visible inference engineering work of all comes from doing so.</p><p>Real-world traffic defies constraints. But with volume, you can adapt systems over time to match the changing nature of usage. Tuning the parameters of inference engines, speculation algorithms, and model servers isn&#8217;t a one-time task. Instead, either through iterative deployments or dynamic runtime adjustments, you can continuously improve the performance of an inference system.</p><p>Finding the right combination of techniques and configurations takes patient experimentation. I remember an internal hackathon during which one of Baseten&#8217;s inference engineers worked on an autocomplete model for code, and ended up trying 77 different configurations via a handwritten script before finding a non-obvious solution that doubled TPS (tokens per second) for a customer&#8217;s model.</p><p>Sometimes, techniques are symbiotic or incompatible, which makes inference optimization even more complex. For example, quantizing the KV cache alleviates a bottleneck in disaggregation, but increasing batch sizing reduces the compute available for speculation. An inference engineer&#8217;s challenge is always to create a balanced set of optimizations that delivers more than the sum of its parts.</p><p>Let&#8217;s look into the key categories of applied research for inference acceleration: quantization, speculation, caching, parallelism, and disaggregation.</p><h3>Approach #1: Quantization</h3><p>Quantization means reducing the numerical precision of a model&#8217;s weights. It improves latency (both TTFT [time to first token] and TPS, increases system throughput, and opens up headroom for other optimizations like disaggregation, speculation, and prefix caching to be even more effective. But when it goes wrong, quantization can materially reduce a model&#8217;s output quality.</p><p>Models are trained with weights, activations, and other components represented in a certain native number format. Usually, this is <a href="https://en.wikipedia.org/wiki/Bfloat16_floating-point_format">BF16</a> or <a href="https://en.wikipedia.org/wiki/Half-precision_floating-point_format">FP16</a>, although 8-bit and 4-bit native precisions are becoming more popular for training.</p><p>Post-training quantization works by changing those model weights and other values from their native number format, to a lower-precision format. Cutting precision in half improves performance in both phases of inference:</p><ul><li><p><strong>Prefill: </strong>Compute-bound prefill now runs on lower-precision Tensor Cores with twice the FLOPS.</p></li><li><p><strong>Decode: </strong>Memory-bound decode now loads half as much data per value, effectively doubling memory bandwidth.</p></li></ul><p>Working with quantized data introduces overheads, so it&#8217;s not linearly twice as fast to go from 16 to 8 bits. In practice, quantization down a single level of precision generally offers 30%-50% better performance for LLMs. The catch with quantization is that it runs the risk of reducing a model&#8217;s output quality, and has the potential to introduce precision errors throughout the calculations that power inference.</p><p>Precision errors compound over time. Consider what happens when you square and cube different precisions of Pi:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VrYE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VrYE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 424w, https://substackcdn.com/image/fetch/$s_!VrYE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 848w, https://substackcdn.com/image/fetch/$s_!VrYE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 1272w, https://substackcdn.com/image/fetch/$s_!VrYE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VrYE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png" width="902" height="308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8988ece-35ae-4377-9551-ca6adc714317_902x308.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:308,&quot;width&quot;:902,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32978,&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://newsletter.pragmaticengineer.com/i/192753237?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.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_!VrYE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 424w, https://substackcdn.com/image/fetch/$s_!VrYE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 848w, https://substackcdn.com/image/fetch/$s_!VrYE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 1272w, https://substackcdn.com/image/fetch/$s_!VrYE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8988ece-35ae-4377-9551-ca6adc714317_902x308.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most of the work in quantization is in preventing precision errors and minimizing their impact on the final model output.</p><p>Sixteen-bit, 8-bit, and 4-bit precisions are the primary formats for inference. Number formats contain:</p><ul><li><p><strong>Precision:</strong> The number of bits used to express a single value in the format. For example, FP16 uses 16 bits.</p></li><li><p><strong>Type:</strong> Whether these bits are interpreted to represent an integer (non decimal) or a floating-point number (decimal).</p></li><li><p><strong>Scale factor:</strong> A multiplier used to map values from a low-precision format back to the higher-precision format.</p></li></ul><p>Combined, these attributes determine the two factors behind how well a number format represents the values used in inference:</p><ul><li><p><strong>Dynamic range:</strong> The difference between the lowest and highest value that can be represented in the format.</p></li><li><p><strong>Granularity:</strong> The number of parameters or other values that are quantized along a single scale factor.</p></li></ul><p>Dynamic range is essential to low-precision inference without quality loss. Sixteen bits can represent 65,536 distinct values, while 8 bits can only represent 256 different values. The dynamic range is the distribution of these values &#8211; the difference between the smallest and largest available value.</p><p>Dynamic range explains why floating-point formats are better than integer formats for inference. Floating-point formats have three properties:</p><ul><li><p><strong>Sign: </strong>A single bit that represents whether a number is positive or negative.</p></li><li><p><strong>Exponent: </strong>A set of bits that, taken together, represent an exponent factor.</p></li><li><p><strong>Mantissa: </strong>A set of bits that together represent the base value multiplied by two to the exponent.</p></li></ul><p>An FP8 number in an E4M3 data format means it has a 4-bit exponent and a 3-bit mantissa, with the remaining bit for the sign. Integer formats only have sign and value bits.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mHG6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mHG6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 424w, https://substackcdn.com/image/fetch/$s_!mHG6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 848w, https://substackcdn.com/image/fetch/$s_!mHG6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 1272w, https://substackcdn.com/image/fetch/$s_!mHG6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mHG6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png" width="1456" height="849" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:849,&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_!mHG6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 424w, https://substackcdn.com/image/fetch/$s_!mHG6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 848w, https://substackcdn.com/image/fetch/$s_!mHG6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 1272w, https://substackcdn.com/image/fetch/$s_!mHG6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689475aa-baa7-44f7-9ad9-8cb5d3dda6b6_1600x933.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Floating-point number formats have exponent and mantissa bits, along with the sign bit</em></figcaption></figure></div><p>The exponent in floating-point numbers gives it a higher dynamic range, meaning it can better express very large and very small numbers. This is important because outlier values are significant in inference, and floating-point number formats better represent outliers after quantization.</p><p>Within floating-point formats, there are multiple options at each precision, like FP4, MXFP4, and NVFP4. These formats differ in granularity, or in the number of values quantized by a single scale factor.</p><p>Quantization can be applied at three levels:</p><ul><li><p><strong>Tensor level: </strong>Calculate a single scale factor for the entire QKV tensor.</p></li><li><p><strong>Channel level: </strong>Calculate a different scale factor for each feature vector within the tensor.</p></li><li><p><strong>Block level: </strong>Within each feature vector, divide the vector into blocks of N values and calculate a scale factor for each block.</p></li></ul><p>More granular quantization has a lower chance of smoothing over outliers, which preserves quality. However, more granularity also introduces extra overhead for storing and applying scale factors.</p><p>The components of a model have varying sensitivities to quantization. Reducing the precision of more sensitive components runs a higher risk of quality degradation. From the least to most sensitive components:</p><ol><li><p><strong>Weights: </strong>the linear layers are least sensitive to quantization.</p></li><li><p><strong>Activations: </strong>The intermediate output of activation functions are only somewhat sensitive to quantization. They are rarely quantized as they are such a tiny fraction of the model&#8217;s weights.</p></li><li><p><strong>KV cache: </strong>The cached values from the attention calculation are moderately sensitive to quantization.</p></li><li><p><strong>Attention: </strong>The attention layers of a model are highly sensitive to quantization, especially equations like softmax.</p></li></ol><p>Within each component, you can get more selective about quantization.</p><p>Even in linear layers and activations &#8211; generally the least sensitive to quantization due to their size &#8211; early and late layers, like the input and output layers of the neural network, may be left in their original precision as these layers are more sensitive.</p><p>While quantizing weights and activations helps performance, KV cache quantization gives an additional boost to techniques like prefix caching and disaggregation. The KV cache is a valuable resource and quantizing it allows inference engines to store more of it in memory and read it more quickly.</p><p>However, the KV cache for each token is used by each subsequent token. This means precision errors introduced by quantization can compound from token to token. Compounding errors are exactly why attention layers are the riskiest to quantize: not only is attention very sensitive to dynamic range, but each attention calculation relies on the results of each previous attention calculation. Therefore, over a sequence of thousands of tokens, errors accumulate quickly.</p><p>All but the most aggressive quantization schemes run functions like softmax in their original precision.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C71B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C71B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 424w, https://substackcdn.com/image/fetch/$s_!C71B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 848w, https://substackcdn.com/image/fetch/$s_!C71B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!C71B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C71B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png" width="1453" height="1600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1600,&quot;width&quot;:1453,&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_!C71B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 424w, https://substackcdn.com/image/fetch/$s_!C71B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 848w, https://substackcdn.com/image/fetch/$s_!C71B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!C71B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf0898f-e872-4167-8d6b-9e019982e65a_1453x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Quantization risk is low for weights and activations, moderate for KV cache, and high for attention</em></figcaption></figure></div><p>A moderate approach to low-precision inference uses a format like FP8 with high dynamic range &#8211; if possible, a microscaling format like MXFP8 &#8211; to carefully quantize select linear layers, activations, and often KV cache values. Even with these high dynamic range formats, components of the attention layer are rarely quantized.</p><h3>Approach #2: Speculative decoding</h3><p>The decode phase of LLM inference is an autoregressive process in which tokens are generated one at a time. The bottleneck on decode is memory bandwidth, with compute sitting idle at low-to-moderate batch sizes as weights are read from memory.</p><p>Speculative decoding takes advantage of that spare compute to try and generate multiple tokens per forward pass through the target model. If an inference engine could generate two, three, or even more tokens for each round-trip of weights through memory, it would generate far more tokens per second. Note, speculative decoding only improves TPS / ITL (inter-token latency), not TTFT (time to first token.)</p><p>There are multiple algorithms for speculative decoding and they share a common mechanism:</p><ol><li><p>The speculator generates one or more <strong>draft tokens</strong>.</p></li><li><p>The <strong>target model</strong> &#8211; or the underlying model that you&#8217;re trying to accelerate &#8211; performs <strong>validation</strong> on these tokens to check if they match what the model would generate.</p></li><li><p>The target model accepts any valid draft tokens and generates an additional token itself, completing the forward pass.</p></li></ol><p>This generates N+1 tokens per forward pass, or iteration through the decode loop, where N is the number of accepted draft tokens.</p><p>Generating draft tokens is not free, it takes both compute and memory. However, it is much faster for a target model to validate a draft token than to generate an original token. If you imagine a sudoku puzzle, solving it is hard, but checking if the solution is correct is very easy. For the target model, generating a token is like solving a sudoku, while validating a draft token is like checking a finished sudoku.</p><p>The performance uplift from any speculative decoding strategy depends on three factors:</p><ol><li><p><strong>Draft token cost: </strong>Time taken to generate a draft token.</p></li><li><p><strong>Draft sequence length: </strong>The number of draft tokens generated per forward pass.</p></li><li><p><strong>Token acceptance rate:</strong> The percentage of draft tokens accepted by the target model.</p></li></ol><p>Token acceptance rate is high early in the draft sequence, but draft tokens get less reliable deeper in the sequence.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yXtg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yXtg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 424w, https://substackcdn.com/image/fetch/$s_!yXtg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 848w, https://substackcdn.com/image/fetch/$s_!yXtg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!yXtg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yXtg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png" width="1182" height="1600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1600,&quot;width&quot;:1182,&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_!yXtg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 424w, https://substackcdn.com/image/fetch/$s_!yXtg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 848w, https://substackcdn.com/image/fetch/$s_!yXtg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!yXtg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aa828ac-64d7-41cb-9cf3-37a308efabfb_1182x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Speculative decoding from draft token generation and validation to prefix acceptance with subsequent token generation</figcaption></figure></div><p><strong>Aim for short, high-percentage sequences</strong> because while generating and validating tokens is inexpensive relative to generating tokens in the original model, it still comes with meaningful overhead. Additionally, once a single draft token is rejected as wrong, all subsequent tokens in the sequence are also rejected.</p><p>Working with speculation is interesting because so many factors affect token acceptance rate. The big one is the temperature parameter &#8211; higher temperatures yield token distributions that are harder to predict, reducing the effectiveness of speculative decoding. But even factors as simple as subject matter can make a difference on acceptance rate if the draft model or additional decoder head used for speculation is better versed in, say, math than history.</p><p>Another limitation on speculative decoding is that it&#8217;s most useful at low batch sizes where there are spare compute cycles. At higher batch sizes, speculative decoding must be dynamically disabled as compute is too saturated to afford verification.</p><p>Each speculation algorithm navigates these tradeoffs differently, and careful implementation of the right algorithm for the situation can lead to major improvements in TPS.</p><h3>Approach #3: Caching</h3><p>During prefill, the inference engine builds a KV cache (a store of keys and values for each token) on the input sequence. It then updates the KV cache for each token during decode. As inference is autoregressive, the value for each new token depends on the value of every previous token in the sequence.</p><p>Every inference engine uses KV caching by default on a request-by-request basis. Without KV caching, LLM inference would be unbearably slow since each previous value in the entire sequence would need to be recalculated for each subsequent token.</p><p>However, engineers can get more utility from the KV cache by reusing it between requests rather than solely within each inference sequence.</p><p>Consider the following two prompts, each with four tokens on most tokenizers:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1jj0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1jj0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 424w, https://substackcdn.com/image/fetch/$s_!1jj0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 848w, https://substackcdn.com/image/fetch/$s_!1jj0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 1272w, https://substackcdn.com/image/fetch/$s_!1jj0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1jj0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&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_!1jj0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 424w, https://substackcdn.com/image/fetch/$s_!1jj0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 848w, https://substackcdn.com/image/fetch/$s_!1jj0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 1272w, https://substackcdn.com/image/fetch/$s_!1jj0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa294de82-8f97-475a-baa2-fb0e9bb83329_1600x970.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>A pair of four-token sequences with two-token matching prefixes</em></figcaption></figure></div><p>By default, the inference engine has to run prefill on all four tokens of each prompt. But the first tokens of each prompt &#8211; &#8220;Weather in&#8221; &#8211; form a shared prefix between the pair.</p><p>With prefix caching, you can reuse the KV cache from the first request to improve TTFT on the second request by skipping prefill on the first two tokens and reading in the existing KV cache instead.</p><p>When you see pay-per-token APIs charge less for &#8220;cache hit&#8221; input tokens than &#8220;cache miss&#8221; tokens, this is why: reusing cached tokens takes very little compute power and time. As an inference engineer, you can apply the same principle to reduce latency, improve throughput and therefore save money on your own deployments.</p><p>Saving two tokens won&#8217;t make a big impact on TTFT, but prefix caching can skip prefill on thousands of tokens in certain domains:</p><ul><li><p><strong>Complex system prompts: </strong>Agents, customer-facing chatbots, RAG scaffolds, and tool calls often feature long, complex system prompts on every call.</p></li><li><p><strong>Code completion: </strong>Code completion, code generation, and other coding functions require passing the same thousands of lines of code as shared context.</p></li><li><p><strong>Documents and retrieval: </strong>Document summarization, question answering, and retrieval all add repeated context ahead of user prompts.</p></li><li><p><strong>Multi-turn conversations: </strong>Ordinary conversations repeat back every message in a chat template, increasing the savings from prefix caching with every turn.</p></li></ul><p>Prefix caching works from the start of the input sequence until the first non-repeated token. The fourth token in the weather example, a question mark, is shared between the two input sequences. However, the prefix ends at the first non-repeated token, so the fourth token isn&#8217;t read from cache.</p><p>Since prefixes end at the first unique token, your context engineering determines TTFT savings. Consider a different approach to the same prompt:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ehf3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ehf3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 424w, https://substackcdn.com/image/fetch/$s_!ehf3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 848w, https://substackcdn.com/image/fetch/$s_!ehf3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 1272w, https://substackcdn.com/image/fetch/$s_!ehf3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ehf3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png" width="1456" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&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_!ehf3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 424w, https://substackcdn.com/image/fetch/$s_!ehf3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 848w, https://substackcdn.com/image/fetch/$s_!ehf3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 1272w, https://substackcdn.com/image/fetch/$s_!ehf3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb65f49c0-53a8-49cf-bade-4144a02a728b_1600x871.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>A pair of four-token sequences with no prefix match. The first tokens are different, so it doesn&#8217;t matter that the next three are the same</em></figcaption></figure></div><p>Here, there is no savings from prefix caching, as the very first token differs between the two sequences, even though every subsequent token is the same. To take advantage of prefix caching, ensure that novel tokens are as late in your prompt as possible.</p><h3>Approach #4: Parallelism</h3><p>Tensor Parallelism (TP) should be your default strategy for multi-GPU model inference. It supports dense models like Llama 405B, and the MoE (mixture of experts) models that currently dominate the open model landscape.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hyIE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hyIE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 424w, https://substackcdn.com/image/fetch/$s_!hyIE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 848w, https://substackcdn.com/image/fetch/$s_!hyIE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 1272w, https://substackcdn.com/image/fetch/$s_!hyIE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hyIE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png" width="1456" height="578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:578,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hyIE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 424w, https://substackcdn.com/image/fetch/$s_!hyIE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 848w, https://substackcdn.com/image/fetch/$s_!hyIE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 1272w, https://substackcdn.com/image/fetch/$s_!hyIE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3fca43a-177d-483f-aaaa-09a77d7ded48_1600x635.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Tensor Parallelism splits weights across GPUs, effectively sharing VRAM resources to run large models fast</em></figcaption></figure></div><p>TP works by splitting apart each layer of the model (as opposed to Pipeline Parallelism, which keeps layers intact) and distributing the layer fragments across the allocated GPUs. For each layer, the expense of reading from weights&#8217; memory and executing matrix multiplication is shared across the GPUs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!upQ4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!upQ4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 424w, https://substackcdn.com/image/fetch/$s_!upQ4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 848w, https://substackcdn.com/image/fetch/$s_!upQ4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 1272w, https://substackcdn.com/image/fetch/$s_!upQ4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!upQ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png" width="1456" height="578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:578,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!upQ4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 424w, https://substackcdn.com/image/fetch/$s_!upQ4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 848w, https://substackcdn.com/image/fetch/$s_!upQ4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 1272w, https://substackcdn.com/image/fetch/$s_!upQ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ba6857f-6b2f-43a1-8bb7-d6bd5956cfba_1600x635.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>For an MoE models, each expert runs across multiple GPUs with Tensor Parallelism</em></figcaption></figure></div><p>However, the results of each layer need to be communicated in an all-reduce fashion (across all eight GPUs) into a single output before the next layer can be computed. In nodes with high-bandwidth intra-node NVLink and NVSwitch, this communication overhead is minimized.</p><p>Increasing Tensor Parallelism improves TPS on a per-user basis, assuming the model is large enough and the sequences are long enough that the communication overhead doesn&#8217;t outweigh the faster forward pass &#8211; which is the case for most frontier models.</p><p>Expert Parallelism (EP) neatly divides experts across GPUs, so that in a model with 128 experts served in EP8 across eight GPUs, each GPU hosts 16 full experts.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ky6k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ky6k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 424w, https://substackcdn.com/image/fetch/$s_!ky6k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 848w, https://substackcdn.com/image/fetch/$s_!ky6k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 1272w, https://substackcdn.com/image/fetch/$s_!ky6k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ky6k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png" width="1456" height="578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:578,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ky6k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 424w, https://substackcdn.com/image/fetch/$s_!ky6k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 848w, https://substackcdn.com/image/fetch/$s_!ky6k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 1272w, https://substackcdn.com/image/fetch/$s_!ky6k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f4985f5-2ca5-46d3-82e1-dcd6b5d79e11_1600x635.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>EP runs each expert within a single GPU, with each GPU hosting multiple experts</em></figcaption></figure></div><p>EP improves total system throughput, making inference more scalable and less expensive. With individual experts processing tokens separately, each token takes just as long, but the system as a whole can handle more simultaneous tokens.</p><p>Many deployments use a mix of TP and EP to achieve both benefits.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lp5z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lp5z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 424w, https://substackcdn.com/image/fetch/$s_!Lp5z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 848w, https://substackcdn.com/image/fetch/$s_!Lp5z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 1272w, https://substackcdn.com/image/fetch/$s_!Lp5z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lp5z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png" width="1456" height="782" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:782,&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_!Lp5z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 424w, https://substackcdn.com/image/fetch/$s_!Lp5z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 848w, https://substackcdn.com/image/fetch/$s_!Lp5z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 1272w, https://substackcdn.com/image/fetch/$s_!Lp5z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29868580-3456-4211-bad8-74d93a75ac3e_1600x859.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>This deployment uses TP for attention and EP for the sparse MoE layer</em></figcaption></figure></div><p>EP requires less inter-GPU communication than Tensor Parallelism. The Expert Router, which determines which experts each token activates, is replicated onto each GPU as it is a relatively small component of the model. Inter-GPU communication is necessary for passing tokens from expert to expert, but unlike TP, it is not required to collect the results of each layer.</p><p>Thanks to this lower communication overhead, EP scales well to multi-node deployments and systems with limited interconnect bandwidth.</p><h3>Approach #5: Disaggregation</h3><p>Disaggregation combines three important ideas in inference engineering:</p><ol><li><p>Prefill is a compute-bound process that determines the time to first token (TTFT), while decode is a memory-bound process that determines TPS.</p></li><li><p>Specialization improves performance in everything from kernel selection to inference engine parameter tuning.</p></li><li><p>You can effectively parallelize model serving over multiple GPUs, or even multiple nodes, if you can avoid bottlenecks from lower-bandwidth interconnects.</p></li></ol><p>When prefill and decode run on the same node under heavy traffic, they have a higher chance of interfering with one another. Ideally, prefill uses more compute resources, while decode uses more memory, and the two can co-exist efficiently. However, with larger batches and more compute-intensive optimizations, prefill and decode start competing for resources.</p><p>Disaggregation, or disaggregated serving, is the idea of separating prefill and decode into separate engines on separate GPUs or nodes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lh6b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lh6b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 424w, https://substackcdn.com/image/fetch/$s_!lh6b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 848w, https://substackcdn.com/image/fetch/$s_!lh6b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!lh6b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lh6b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png" width="1456" height="923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:923,&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_!lh6b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 424w, https://substackcdn.com/image/fetch/$s_!lh6b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 848w, https://substackcdn.com/image/fetch/$s_!lh6b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!lh6b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90917382-7d84-4ddf-806f-a514cd61d581_1600x1014.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Disaggregation assigns prefill workers to generate the first token and decode workers to generate subsequent tokens</figcaption></figure></div><p>Disaggregation turns LLM inference into a three-step process:</p><ol><li><p>The prefill engine takes the input sequence and generates a KV cache while computing the first token.</p></li><li><p>The prefill engine sends the KV cache over the hardware interconnect to the decode engine.</p></li><li><p>The decode engine computes all subsequent tokens.</p></li></ol><p>In conditional disaggregation, the request is first sent to the decode engine, which checks if the input sequence is already cached, or is short enough to handle locally:</p><ol><li><p>If so, the decode engine handles prefill locally, skipping disaggregation.</p></li><li><p>If not, the decode engine transfers the request to the prefill engine for disaggregated serving.</p></li></ol><p>Conditional disaggregation is better for real-world traffic.</p><p>Another benefit of disaggregation is that with separate prefill and decode engines, you can optimize each engine individually and the system as a whole. For example, the compute-bound prefill engine requires a lower TP than the memory-bound decode engine.</p><h2>Takeaways</h2><p><em>This is Gergely again. </em>Thanks to <a href="https://x.com/philipkiely">Philip</a> for this deepdive into inference engineering, which is around 10% of the contents of his new book, <em>&#8221;Inference Engineering.&#8221;</em> If you&#8217;d like to go deeper into this topic, you can download the full book for free:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://baseten.com/inference-engineering&quot;,&quot;text&quot;:&quot;Get the full e-book, for free&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://baseten.com/inference-engineering"><span>Get the full e-book, for free</span></a></p><p>This title will also be available in physical, printed form: sign up to the <a href="https://www.baseten.co/inference-engineering/paper-waitlist/">waitlist</a> to be notified when it&#8217;s available.</p><p><strong>It&#8217;s encouraging that inference engineering is no longer a &#8220;monopoly&#8221; belonging to a few leading AI labs. </strong>Top AI model makers like OpenAI and Anthropic control all aspects of their AI models &#8211; from training to inference &#8211; so there&#8217;s no inference engineering to be done with them.</p><p>However, thanks to increasingly capable open models, engineering teams have the opportunity to tweak how they use models, and this is where the theory and practice of inference engineering becomes invaluable.</p><p><strong>Even so, the discipline of inference engineering still seems to only make sense for a subset of tech companies. </strong>To justify investment in inference engineering, you need to be spending big money on inference from vendors. This is the point at which it can make sense to invest time and money to see if you can set up your own inference stack on top of open models, and swap out some existing usage.</p><p><strong>I wonder if inference engineering is the AI version of the &#8220;build vs buy&#8221; dilemma. </strong>For software-as-a-service (SaaS), the question for every company is whether to build it in-house, or buy from a vendor. For example, should you build a project management software (it&#8217;s possible!), or just buy an existing one? And what about feature flagging, not to mention observability?</p><p>Experienced engineers all understand the pros and cons of building it yourself (time and maintenance, which is a constant drag.) Tuning and operating your own LLM stack is a much newer field, and inference engineering is at the heart of building better inference stacks than what comes &#8220;out of the box&#8221; with open models.</p><p><strong>Picking up the basics of inference engineering feels like a valuable skill &#8211; and it&#8217;s also new and interesting. </strong>If you become well-versed in inference engineering, you could create optionality for your own team and company in LLM usage<strong>. </strong>Running your own inference stack on top of an open model gives control of what you&#8217;re running and of pricing. Inference engineering helps create options for achieving better performance from an open model by using the approaches covered in the extract above from Philip&#8217;s book.</p>]]></content:encoded></item><item><title><![CDATA[“How to be a 10x engineer” – interview with a standout dev]]></title><description><![CDATA[An interview with an engineer with no public GitHub contributions, setting clear boundaries &#8211; and yet not having needed to apply for positions when searching for a job, because referrals found them]]></description><link>https://newsletter.pragmaticengineer.com/p/how-to-be-a-10x-engineer-interview</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/how-to-be-a-10x-engineer-interview</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 24 Mar 2026 18:26:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wORh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It was at Uber that I met one of the single best engineers I&#8217;ve had the fortune to work with; let&#8217;s call them &#8220;Sam&#8221; for this article. As engineers, we briefly worked together, and when I became a manager, Sam&#8217;s name regularly came up during <a href="https://newsletter.pragmaticengineer.com/p/performance-calibrations">performance calibrations</a> as being among the company&#8217;s top 10% engineers. One year, he was in the &#8220;top, top&#8221; bucket reserved for the 3% best engineers.</p><p>After I left Uber, we stayed in touch, and a few months ago I heard he was exploring the next opportunity,<strong> </strong>and found out from him that<strong> Sam&#8217;s job search looked nothing like most people&#8217;s:</strong> he didn&#8217;t apply for a single role. Instead, there were reachouts from former colleagues desperate to hire them.</p><p>When we talked for this article, Sam had three warm leads which wanted to interview him ASAP. One startup was not even hiring, but the founder was ready to create a new position just for him.</p><p>I posted a message on LinkedIn about Sam:</p><blockquote><p>&#8220;I hate the term &#8220;10x engineer&#8221; but this engineer is a role model for what a standout engineer is - in fact, some of my writing of standout engineers reference my interactions with folks like them (e.g. my article on the product-minded engineer, this one: https://lnkd.in/et7nWBgW)</p><p>And still, from the outside, this engineer is nearly completely invisible.</p><p>No social media footprint. The LinkedIn profile lists his companies worked at, and nothing else: no technologies, no projects, nothing. Their GitHub is empty for the last 5 years, and has perhaps a dozen commits throughout the last 10 years.&#8221;</p></blockquote><p>This is Sam&#8217;s GitHub contributions for the last several years: absolutely nothing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wORh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wORh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 424w, https://substackcdn.com/image/fetch/$s_!wORh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 848w, https://substackcdn.com/image/fetch/$s_!wORh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!wORh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wORh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png" width="1456" height="1183" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1183,&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_!wORh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 424w, https://substackcdn.com/image/fetch/$s_!wORh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 848w, https://substackcdn.com/image/fetch/$s_!wORh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!wORh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83f9d2f-711f-4edd-bc8a-303b8de422e5_1600x1300.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Zero public contributions: Behind the profile, one of the best software engineers I&#8217;ve worked with</figcaption></figure></div><p>One of the most upvoted comments on my post was by cloud technologist <a href="https://www.linkedin.com/feed/update/urn:li:activity:7381615884282462209?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7381615884282462209%2C7381647792106270721%29&amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287381647792106270721%2Curn%3Ali%3Aactivity%3A7381615884282462209%29">Olivier Frolovs</a>, who requested an article on Sam for others to learn how he operates. Now, Sam has generously agreed to an interview and has asked to remain anonymous, hence the <em>nom de plume </em>(pseudonym)<em>.</em></p><p>He doesn&#8217;t seek public attention and has a strong professional reputation. During our chat, he offered pointers for engineers looking to excel, and also as proof that an empty GitHub profile and zero social media presence don&#8217;t mean you can&#8217;t be a truly standout developer.</p><p>I also interviewed one of his former managers from Uber for that perspective. Today, we cover:</p><ol><li><p><strong>Getting things done.</strong> High-level task breakdowns, combined with communicating delays as tradeoffs to stakeholders.</p></li><li><p><strong>Setting boundaries.</strong> Saying &#8220;no,&#8221; prioritizing family or work &#8211; and being clear about it, and treating prioritization as a daily practice.</p></li><li><p><strong>Office politics.</strong> Participate selectively and cautiously, build relationships with influential colleagues, pre-sell ideas, direct communication.</p></li><li><p><strong>Negotiation and conflict. </strong>Approach engineers before their managers, build bottom-up consensus, and start with relationship-building.</p></li><li><p><strong>Promotions, keeping up-to-date, and finding the next job. </strong>A personal take on The Big Tech promotion processes, keeping up with the industry, and relying on referrals more.</p></li><li><p><strong>Becoming a manager. </strong>Ownership and independence separate &#8220;good&#8221; engineers from &#8220;great&#8221; ones.</p></li><li><p><strong>Feedback from Sam&#8217;s ex-manager. </strong>A former manager reveals what made Sam stand out to them &#8211; and shares some potential growth opportunities.</p></li></ol><h2>Background</h2><p>In this article, my questions are in <em>italic</em> and Sam&#8217;s voice is in normal text.</p><p><em>Sam, how did you get into tech?</em></p><p>I was always intrigued by computers, software, and &#8211; as it came around &#8211; the internet. My dad had a black-and-white screen laptop for work with Windows 3.1 and some games. We got our first personal computer with Windows 95 and I remember it vividly.</p><p>I started developing websites for my primary school and the company my mom worked at when I was 12. I got paid a small sum, so that was my first-ever paid programming project! Around then, I taught myself Visual Basic 6 and started building 2D and 3D mini-games. I found the website <a href="http://directx4vb.vbgamer.com/">DirectXVB</a> (which is still live today), emailed the website&#8217;s owner with issues I ran into, and they helped me with pointers. Later, I taught myself PHP and built more dynamic websites.</p><p>From the age of 14, I stopped all coding &#8211; I just got tired of it! &#8211; and focused on my studies, and getting into college. I chose a non-computer science major for university, but picked up coding on the side, and I rediscovered that spark, so, in the first year of my Master&#8217;s, I decided to switch and do a Computer Science Bachelor&#8217;s. It was during college that I started to build apps and websites, and it&#8217;s when I got truly hooked on software development.</p><h3>From agency, to large company, then Uber</h3><p>I joined an agency as their first hire, building apps for local companies. It was a small team, we learned with trial-and-error, and getting done at 2-3 o&#8217;clock in the morning was common enough. I stayed 18 months and learned a lot about ownership, the importance of an eye for detail, and collaborating with others.</p><p><strong>My favorite part of the job was the few times I worked directly with a designer</strong>: our agency employed freelance designers who were not involved in most of the projects because the company was trying to save money by having them work less, and not be involved in planning and rollouts. But during the implementation phase, I&#8217;d find myself talking with the designer and bouncing implementation and design ideas around.</p><p>I then joined a small startup where we built our own product. A highlight was having two designers on the team fulltime, whom I could work with and learn from. Engineering also felt like a level up: everyone cared about software quality and UX details.</p><p>Our startup got acquired by a larger company and most of us moved to the Bay Area. We stayed together as a team and were told we would maintain a &#8220;startup culture.&#8221; The founders tried their best to stay true to their word, but they couldn&#8217;t shield us from the reality of working in a corporation.</p><p><strong>I learned a lot about corporate processes, and it was more interesting than I&#8217;d expected. </strong>As I was getting closer to the senior engineer level, I had to understand how internal politics worked, how to &#8220;massage&#8221; peer teams to help support our proposals, and how to talk with engineering leaders like senior managers and directors. Our company was also hugely focused on the annual company event: it was eye-opening for me to see just how much effort went into preparation. It consisted of several rehearsals and dedicated engineering work to showcase our stuff in a way that was near-flawless on the day.</p><p>After a few years, I felt ready for a change and joined Uber. I took a &#8220;title cut,&#8221; something akin to the &#8220;<a href="https://newsletter.pragmaticengineer.com/p/the-seniority-rollercoaster">seniority rollercoaster.</a>&#8221; At Uber, I worked in a new area and got promoted several times. After Uber, I worked at another Big Tech, and now &#8211; very recently &#8211; I&#8217;ve begun at a startup.</p><h2>1. Getting things done</h2><p><em>Feedback at Uber about you during performance calibrations was that you&#8217;re excellent at getting things done. What&#8217;s your process?</em></p><p>When I started out as a junior dev, I pulled long hours so I could deliver on time &#8211; regardless of how much effort it took. I don&#8217;t know what it was, but I always felt that failing to deliver on time was <em>never</em> an option.</p><p>I still vividly remember one project where I worked incredibly hard but still failed to deliver with the quality I expected from myself. As embarrassing as it is, I was so exhausted that I almost started crying on the spot. One of my coworkers comforted me and told me:</p><blockquote><p>&#8220;Man, you&#8217;re crying about the wrong thing. No one died, no one got hurt, and no one will even care that we&#8217;re a few days late, save for the project manager. But even he&#8217;s used to everything being late. Go home, have some sleep, come back tomorrow and take it easy.&#8221;</p></blockquote><p>They were right, of course. Still, I&#8217;m pretty sure this inner pressure to be unsatisfied with &#8220;good enough&#8221; explains a lot about how I work.</p><p><strong>Having a high-level breakdown of the work, and communicating to stakeholders has been my &#8220;secret&#8221;, later in my career</strong>. After a few years as a dev, my estimation skills got better and I had to pull fewer late nights. I also found a hack that greatly helped was doing a high-level breakdown as early as possible, in <em>all</em> cases. As soon as I understand what the work is, I break it all down, ideally on a whiteboard or paper.</p><h3>Importance of communication</h3><p><em>You were also seen as a strong communicator, whether it was with engineers, engineering managers, or product managers. How do you get your point across?</em></p><p>Communicating delays as &#8220;tradeoffs&#8221; works extremely well. As soon as I start a project which I&#8217;m the lead on, I establish communication channels with key stakeholders: product managers, my engineering leadership, and business stakeholders, via email or Slack, I keep them in the loop at least weekly, and about anything that could be a roadblock.</p><p><strong>In my experience, delays are not an issue as long as they are communicated upfront with an explanation and potential alternatives.</strong> When we hit a roadblock that slows down our work, I would never communicate that we&#8217;re &#8220;behind&#8221;. I would offer alternatives like:</p><ul><li><p>We can still ship on time, but we&#8217;d need to cut X and Y features for this release</p></li><li><p>If we are not comfortable cutting X and Y features, then we will need to push out the target date by 2 weeks. If we are comfortable, we can push it out by 1 week</p></li></ul><p>The trick, I&#8217;ve found, is to make it clear to stakeholders that we have a <em>choice</em>: choose more features to ship, or choose a lower-priority feature to drop.</p><p>I learned most of my hacks from people who are good at getting things done, and they have a few attributes:</p><ul><li><p><strong>Task breakdown:</strong> early in my career, there was a senior engineer who was methodical about breaking down tasks and making estimates, even for seemingly trivial projects &#8211; and it worked!</p></li><li><p><strong>Communication tools: </strong>I observed the few <em>really</em> organized product managers, engineering managers, and tech lead, and made their communication styles into a &#8220;package&#8221; that worked for me; things like email updates, facilitating kickoff meetings, launch announcements (including how to communicate a failed/sunset project as a successful launch), and more.</p></li></ul><p>Being good at communication means you have a solid foundation, and then develop a feel for how to best utilize the tools you have. There&#8217;s no &#8220;one-size-fits-all&#8221; approach: people react better or worse to different things. Try to get to know folks around you and put yourself in their shoes.</p><h3>Doing great work</h3><p><em>What does &#8220;standout&#8221; work look like to you?</em></p><p><strong>I think about the quality of my work similarly to the quality of work I do at home. </strong>I have moved houses and renovated them several times and I greatly care about the quality of that work. And I&#8217;ve seen plenty of contractors come to my place, perform their work, and then leave without actually caring about the quality. They just want to &#8220;get s*** done&#8221; and be out of there. I never understood how someone can keep doing their job without feeling a lot of love for it!</p><p><strong>I need to get energy from everything I do, not just in my job. </strong>Whether it&#8217;s playing games with my kids, helping my wife with her website, or building a new website feature for the company I work for: I approach it all with the same attitude.</p><p>Equally, if I no longer get energy from the work I do, then I basically stop enjoying it and this can be a nudge to start to look for something else. If it continues for a long time, this urge can become more persistent, and that&#8217;s the point when I have switched companies or teams. I can go on for some time without getting energy from my work, but it drains me. I try to catch myself before it gets too bad, and I&#8217;ve managed to do so, up to now. This is why I quit my last job without having anything lined up: I stopped getting energy from it for many months and talked with my management chain about it, but they were unable and unwilling to change anything. I needed a change, so it was me who made it.</p><h3>Stepping outside of domain expertise</h3><p><em>You frequently went outside of your domain, working with engineering teams on other platforms and contributing to codebases you&#8217;re not expert in. You seemed to have a great relationship with most engineers, in contrast to some devs. How did you do this?</em></p><p>I am pretty curious and prefer to talk directly with engineers.<strong> </strong>So, when I&#8217;d work on a project with engineers on a different stack, I would ask them to explain their high-level architecture approaches, and roll up my sleeves to make small code changes in a stack I was unfamiliar with.</p><p>Once you understand the high-level structure of a different codebase, and you also know how to make a few small changes, suddenly, it&#8217;s so much easier to figure things out on your own!</p><p><strong>An approach that consistently worked for me is approaching problems from the customer&#8217;s perspective, and being genuinely curious.</strong> For example, I might ping an engineer working on a different system and ask:</p><blockquote><p>&#8220;I noticed a customer has this problem, and to fix it, we probably need to touch the system you own. I don&#8217;t know much about this system: can you explain how it works, and what we could perhaps do to solve this issue that causes frustration for the customer?&#8221;</p></blockquote><p>By making it clear that my goal is to solve a customer problem, I&#8217;m not coming across as just digging around for nothing. And by making it clear that I&#8217;d like to learn from them, it avoids being seen as someone trying to confirm what they are doing, which could come across as arrogant &#8211; especially when the other engineer is the expert on their own system. I&#8217;ve found fellow engineers are happy to explain their understanding and decisions.</p><h2>2. Setting boundaries</h2><p><em>At Uber, I recall you were very good at setting boundaries and saying &#8220;no.&#8221; How do you do that?</em></p><p><strong>Honestly, I find it tough to say no &#8211; but I learned that it&#8217;s worse when I don&#8217;t. </strong>I found that saying &#8216;yes&#8217; to everything usually results in an unmanageable, unbalanced pile of work. Prioritizing is key: I always remind myself to focus on what matters most. For me, the &#8220;most important&#8221; thing for any given topic could be:</p><ul><li><p>A shipping deadline that needs to be hit and is non-negotiable</p></li><li><p>Family needs</p></li><li><p>An urgent task that needs to be done on the same day</p></li></ul><p><strong>Family is very important to me. </strong>When I worked at Uber, I had a reasonably long commute to the office. I blocked out my calendar so I could leave on time in order to be home for dinner with my family. This did not mean I stopped work immediately; I would sometimes work during my commute and, when necessary, I logged back on to continue working after my kids were in bed.</p><p>When we had important deadline agreements at work, I made an agreement with my partner that I stayed longer in the office because I knew it was important to put in extra effort and deliver standout work then.</p><p>It goes back to prioritizing and focusing on the most important thing. Looking back, I&#8217;d say most of the time, the most important thing for me was family, and that work overrode this every now and then.</p><p>My approach to prioritizing keeps changing, though. Demands at home keep changing and expectations at work also change; after Uber, other jobs increasingly focused on async and remote work. This meant more flexibility to accommodate family time &#8211; but work could spill over into evening hours if I did not finish everything.</p><p><strong>If I can give one piece of advice, it&#8217;s to understand what is important for </strong><em><strong>you</strong></em><strong>. </strong>Know your number one, number two, number three priorities: and arrange your workday so you do your top priorities. Don&#8217;t compromise on the most important one!</p><h2>3. Office politics</h2><p><em>At work, how plugged in were you to office politics?</em></p><p><strong>I was aware of politics and tried to build relationships with &#8220;influential&#8221; people. </strong>I try to stay away from &#8220;cocky&#8221; types, and to find what I want to achieve through different folks.</p><p>The importance of politics is something I really started to understand when working at Uber. Initially, I was ignorant, but the more experience I got in Big Tech, the more it became obvious. It took a while before I was able to participate in it. I never liked it; I tend to be direct and transparent, but that does not work in every situation.</p><p><em>Did you take part in it to get stuff done?</em></p><p>Yes, sometimes by being direct and transparent, and communicating the right amount of information, you can get a lot done. Occasionally, it required me to &#8220;massage&#8221; an idea on multiple people before going to the person who called the shots.</p><p><em>What is your view of engineers who are seen as&#8220;political&#8221;?</em></p><p>It&#8217;s part of the game and sometimes it&#8217;s useful to have a good relationship with those people, as you can use that for your own benefit, as well. I personally would never invest much time in understanding and practising politics, as I prefer to focus on building and product.</p><h2>4. Negotiation &amp; conflict</h2><h3>Negotiating with teams</h3><p><em>You were perceived as being good with other teams, and at removing roadblocks for your own. How did you approach this?</em></p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/how-to-be-a-10x-engineer-interview">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Are AI agents actually slowing us down?]]></title><description><![CDATA[As more software engineers use AI agents daily, there&#8217;s also more sloppy software, outages, quality issues, and even a slowdown in shipping velocity. What&#8217;s happening, and how do we solve it?]]></description><link>https://newsletter.pragmaticengineer.com/p/are-ai-agents-actually-slowing-us</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/are-ai-agents-actually-slowing-us</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 17 Mar 2026 16:59:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/35d38ae8-5fc7-4307-84d4-de2706908538_1674x1258.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When it comes to AI agents and AI tooling, most of the discussion focuses on their potential boosts for efficiency, faster iteration, and the pushing out of more code, faster.</p><p>Last week, we took an inside look into <a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development">how Uber is adopting AI</a>, internally. The rideshare giant has built close to a dozen internal systems to deal with code generated by AI agents. However, when quantifying the impact of AI, the focus was on how much output has increased, and how devs who use more AI also generate more pull requests; these are the &#8220;power user&#8221; devs who generate 52% more PRs than devs who use AI less. There was no mention of product quality &#8211; at all!</p><p>And there are signs that product quality is dropping overall. Today, we dig into this under-discussed topic, covering:</p><ol><li><p><strong>Anthropic: degraded flagship website.</strong> An annoying UX issue irritated paying Claude customers &#8211; and no one at Anthropic noticed. The company moves very fast, generates 80%+ of production code with Claude, but quality and user experience seem to be taking a backseat.</p></li><li><p><strong>Amazon: AI-agent reliance triggers SEVs. </strong>Amazon&#8217;s retail org has a leap in outages caused by its own AI agents. Now, senior sign off is needed for junior engineers&#8217; AI-assisted changes.</p></li><li><p><strong>Big Tech: &#8220;use AI or you&#8217;re unproductive.&#8221;</strong> Companies like Meta and Uber are tracking AI token usage in performance reviews, putting pressure on engineers to use it heavily &#8212; irrespective of the tools&#8217; quality impact.</p></li><li><p><strong>OpenCode: more time spent cleaning up.</strong> Dax Raad, OpenCode&#8217;s creator, warns that AI agents are lowering the bar for what ships, discouraging refactoring, and don&#8217;t speed teams up.</p></li><li><p><strong>5. Startups: founders see LLMs slowing down long-term velocity. </strong>Sentry&#8217;s CTO and others observe that while AI removes the barrier to getting started, it also produces bloated, hard-to-maintain code that slows long-term development.</p></li><li><p><strong>Research: AI agents underperform claims.</strong> Some studies show AI coding tools produce short-lived velocity gains followed by significant tech debt increases.</p></li><li><p><strong>How do we solve it?</strong> Engineers with strong architectural sense become more critical than ever, proposed solutions include formal validation methods, and perhaps reviving some old school QA ideas.</p></li></ol><h2>1. Anthropic: degraded flagship website</h2><p>This article&#8217;s genesis was last week, when I&#8217;d finally had enough of a persistent UX bug on Claude&#8217;s flagship website: the prompt I typed in regularly got lost. Below is a video of me typing &#8220;How can I&#8230;&#8221; &#8211; and &#8220;losing&#8221; the first two words when the page loaded:</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;5b3077ba-7213-44f8-a963-91fc8b9e47f5&quot;,&quot;duration&quot;:null}"></div><p>It&#8217;s pretty straightforward:</p><ol><li><p>The page starts to render and the textbox is displayed</p></li><li><p>The user starts to type their prompt, but the page has not finished loading subscription data</p></li><li><p>The subscription information loads around a second later</p></li><li><p>The textbox is reset and the typing is lost</p></li></ol><p>This is a pretty basic bug you might expect in a prototype, except that this is the landing page of Claude.ai, and it&#8217;s a bug that impacts every paying customer &#8211; easily millions &#8211; every day. Even worse, the bug happens <em>every time</em> you visit the site.</p><p><strong>Somehow, nobody at Anthropic tested the site to catch a plainly obvious bug</strong> which impacted 100% of paying customers. At the same time, no company uses AI coding tools more than Anthropic: around 80% of the company&#8217;s code is now generated by Claude Code, so we can assume a good part of the website is also created that way.</p><p>My complaint about Anthropic&#8217;s website being broken <a href="https://x.com/GergelyOrosz/status/2031986107903054179">went a bit viral</a> and got the attention of the developer team:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Hl1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Hl1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 424w, https://substackcdn.com/image/fetch/$s_!4Hl1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 848w, https://substackcdn.com/image/fetch/$s_!4Hl1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 1272w, https://substackcdn.com/image/fetch/$s_!4Hl1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Hl1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png" width="1190" height="356" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:1190,&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_!4Hl1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 424w, https://substackcdn.com/image/fetch/$s_!4Hl1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 848w, https://substackcdn.com/image/fetch/$s_!4Hl1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 1272w, https://substackcdn.com/image/fetch/$s_!4Hl1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19905f01-a3c2-485f-bd1b-53769c587e53_1190x356.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Product manager Robert Bye confirms the bug will be fixed. Source: <a href="https://x.com/RobertJBye/status/2032109640134066319?s=20">Robert Bye</a></em></figcaption></figure></div><p>To their credit, three days later the bug was gone. There&#8217;s no longer a &#8220;double load&#8221; of the textbox: it takes a bit longer to load but only does so once.</p><p>Still, it makes me wonder how much longer this issue would&#8217;ve continued had nobody complained. Also, how many more bugs are present on the Claude website that nobody highlighted on social media? How many more features could be shipped in a state that is subpar for production-grade software with millions of paying customers?</p><p><strong>Anthropic seems to be prioritizing moving </strong><em><strong>very</strong></em><strong> fast over doing so with high quality. </strong>There is no denying that the company is moving at incredible speed and running laps around competitors. A good example is how they built Claude Cowork in just 10 days. Claude Cowork handled work with Microsoft Word and Excel documents surprisingly well, to the point that it set off a &#8220;code red&#8221; inside Microsoft&#8217;s Office division, I understand.</p><p>Microsoft responded as fast as possible, but it still took 2-3 months to launch their (cloned) response, called Copilot Cowork earlier this month, with full access still to follow soon.</p><p><strong>In the case of Anthropic, moving fast with okay quality seems to make good business sense: </strong>they build a better product than what already exists, so no matter if it&#8217;s a bit rough around the edges; they can fix quality issues post-launch and still be months ahead of the competition.</p><h2>2. Amazon: reliance on AI agents causes SEVs</h2><p>Anthropic can afford to move fast while it&#8217;s growing at an extremely high rate and expanding its market share rapidly. At the same time, established players like Amazon have extreme focus on reliability: AWS has become the top cloud provider not least by being extremely reliable (as well as aggressive on pricing).</p><p>Well, reliability at the online retailer seems to be getting worse, too, and the company&#8217;s AI agent, Kiro, could be causing SEVs (Amazon&#8217;s phrase for &#8220;outage&#8221;), <a href="https://www.ft.com/content/7cab4ec7-4712-4137-b602-119a44f771de">according</a> to The Financial Times (emphasis mine):</p><blockquote><p>Amazon&#8217;s ecommerce business has summoned a large group of engineers to a meeting on Tuesday for a &#8220;deep dive&#8221; into a spate of outages, including incidents tied to the use of AI coding tools.</p><p><strong>The online retail giant said there had been a &#8220;trend of incidents&#8221; in recent months, characterised by a &#8220;high blast radius&#8221; and &#8220;Gen-AI assisted changes&#8221; among other factors,</strong> according to a briefing note for the meeting seen by the FT.</p><p>Under &#8220;contributing factors&#8221; the note included &#8220;novel GenAI usage for which best practices and safeguards are not yet fully established&#8221;.</p><p>&#8220;Folks, as you likely know, the availability of the site and related infrastructure has not been good recently,&#8221; Dave Treadwell, a senior vice-president at the group, told employees in an email, also seen by the FT. (...)</p><p>He asked staff to attend the meeting, which is normally optional.</p><p>Junior and mid-level engineers require more senior engineers to sign off any AI-assisted changes, Treadwell added in the briefing note.&#8221;</p></blockquote><p>This meeting was the regular <em>&#8220;This Week in Stores Tech&#8221;</em> operational one, but what was new was the note telling staff to attend this &#8220;optional&#8221; meeting, and the mandate for senior engineers to sign off code changes from juniors. The outages may have been caused by less experienced engineers over-trusting GenAI&#8217;s output. Also, there were incidents caused by AI changes, said the FT:</p><blockquote><p>&#8220;Separately, the company&#8217;s cloud computing arm &#8212; Amazon Web Services &#8212; has suffered at least two incidents linked to the use of AI coding assistants, which the company has been actively rolling out to its staff.</p><p>AWS suffered a 13-hour interruption to a cost calculator used by customers in mid-December after engineers allowed the group&#8217;s Kiro AI coding tool to make certain changes, and the AI tool opted to &#8220;delete and recreate the environment&#8221;, the <a href="https://www.ft.com/content/00c282de-ed14-4acd-a948-bc8d6bdb339d">FT previously reported</a>.&#8221;</p></blockquote><p>Again, a tool causing an outage is not its own fault: it&#8217;s on the engineer who lets the tool run wild. If I delete two lines of code, then push it to production, and the server crashes, the fault is not with the text editor or the Git client, but with me who made the change. Similarly, if you prompt an AI agent to do something, and the AI agent goes off and does its stuff which causes an outage, then responsibility lies with the engineer who didn&#8217;t set up guardrails for the agent.</p><p><strong>However, there is the issue that AI agents can wreak havoc in ways devs don&#8217;t quite understand or expect, until learning the hard way. </strong>This was what took down a lesser-used AWS service, according to the report:</p><blockquote><p>&#8220;Amazon Web Services experienced a 13-hour interruption to one system used by its customers in mid-December [2025] after engineers allowed its Kiro AI coding tool to make certain changes, according to four people familiar with the matter.</p><p>The people said the agentic tool, which can take autonomous actions on behalf of users, determined that the best course of action was to &#8220;delete and recreate the environment&#8221;.</p></blockquote><p>It sounds like an engineer gave overly broad permissions to the coding agent which then used its scope to delete a service. As mentioned, the engineer is responsible, but there is also a learning curve with these AI agents to consider: it&#8217;s not like this type of outage happened in the past. Plus, companies like Amazon are heavily incentivizing using AI agents for as much work as possible, which naturally leads to overuse.</p><h2>3. Big Tech: &#8220;use AI or you&#8217;re unproductive&#8221;</h2><p>Something happens at places that measure devs&#8217; AI usage: pressure builds for all devs to use more AI or else be seen unproductive and at risk of poor performance reviews, potentially leading to a PIP or worse.</p><p><strong>Meta is taking token usage into account during perf reviews.</strong> A current engineering manager at the social media giant told me that the token usage of each engineer is now a data point &#8212; one of many! &#8212; for performance calibrations. By itself, it is not a positive or negative signal, but someone perceived as having low impact <em>and</em> with low token usage is now seen as a blatant low performer. For high performers with outstanding impact, very high token usage is seen as a <em>good</em> thing as it conveys to the manager group that they&#8217;re personally invested in AI and are improving their workflow &#8211; as proved by results.</p><p><em>We previously covered <a href="https://newsletter.pragmaticengineer.com/p/performance-calibrations">how performance calibrations work at places like Meta.</a></em></p><p><strong>Big Tech CEOs are starting to see AI &#8220;power user devs&#8221; as superior to their coworkers.</strong> Uber is a good example: the Dev Platform team started to analyze the output of engineers by whether or not they&#8217;re in the &#8220;power user&#8221; category, meaning they use AI agents at least 20 days per month. They found more PR output by engineers who are power users. So far, that&#8217;s useful data, but it&#8217;s just one piece of information, and doesn&#8217;t reveal the quality of the PRs, the impact of the engineer, or any other business outcome.</p><p>By the time this data reaches CEO level, it has turned into something else. Here&#8217;s Uber CEO, Dara Khosrowshahi, interpreting the same data points on the Diary of a CEO podcast (emphasis mine:)</p><blockquote><p>&#8220;While 90% of our engineers are using AI tools of some sort, there&#8217;s about 30% of them that are using them at a completely accelerated pace. <strong>And it [using AI tools heavily] really is changing their productivity in a way that I&#8217;ve never ever seen before.</strong>&#8221;</p></blockquote><p>There&#8217;s a step from observing more PRs per engineer, to judging power users as being more productive for that reason. Dara continues:</p><blockquote><p>&#8220;I can imagine maybe 5 years from now, as the engineers get more and more productive, that I may not decide to add engineering headcount because at that point <strong>instead of adding an engineer, I should add agents and buy some more GPUs from Nvidia.</strong> That may be the investment in the future.&#8221;</p></blockquote><p>Unsaid in the above is that by that time, only engineers &#8220;using AI at a completely accelerated pace&#8221; would be employed. Would it also mean that engineers not on the bandwagon are on the way out? I appreciate Dara speaking his mind and shedding light on the thought process of a Big Tech CEO.</p><p><strong>Inside large tech companies, it&#8217;s becoming a career risk to not use AI at an accelerated pace, regardless of output quality. </strong>These large companies are the ones likely to be mulling layoffs, like Meta <a href="https://www.reuters.com/business/world-at-work/meta-planning-sweeping-layoffs-ai-costs-mount-2026-03-14/">reportedly preparing</a> to cut up to 20% of staff. And when it comes to identifying redundancies, it&#8217;s a fair assumption that things like &#8220;AI usage&#8221; and &#8220;pull requests per engineer&#8221; will be taken into account, especially as one theme of such layoffs will almost certainly be that the employer wants to focus more on AI.</p><p>So, it&#8217;s common sense (and self-preservation) to use more AI, if only not to be seen as unproductive. Their perceived output will rise and engineering leadership will share more reports about productivity being up, and interpreting more code generated and more pull requests as the proof.</p><h2>4. OpenCode: &#8220;more time spent cleaning up&#8221;</h2><p>Dax Raad is founder and CEO of <a href="https://opencode.ai/">OpenCode</a>, an open source AI coding agent, into which you can plug in models like Claude, ChatGPT, Gemini, and others. It&#8217;s an increasingly popular alternative to the likes of Claude Code and Codex. In our <a href="https://newsletter.pragmaticengineer.com/i/189777574/2-most-used-ai-tools">recent AI tooling survey</a>, it came up as a tool used nearly as much as Google&#8217;s Gemini CLI and Antigravity. A small team works on this increasingly influential tool, and is seeing problems with AI overuse. Dax wrote <a href="https://x.com/thdxr/status/2031377117007454421?s=20">this note</a> to the OpenCode team (emphasis mine):</p>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/are-ai-agents-actually-slowing-us">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How Uber uses AI for development: inside look]]></title><description><![CDATA[How Uber built Minion, Shepherd, uReview, and other internal agentic AI tools. Also, new challenges in rolling out AI tools, like more platform investment and growing concern about token costs]]></description><link>https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development</link><guid isPermaLink="false">https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 10 Mar 2026 19:23:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uBE4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Before we start: all The Pragmatic Summit videos are now <a href="https://www.pragmaticsummit.com/">available to view</a>. Paid newsletter subscribers also have access <a href="https://newsletter.pragmaticengineer.com/p/the-pragmatic-summit-recordings">to each session with the Q&amp;A session, as well</a>.</em></p><p>Update on 11 March: the Uber team shared updated numbers as of March 2026:</p><ul><li><p><strong>84% of devs at Uber are agentic coding users</strong> (either using CLI-based agents or making more agentic requests than tab-completion in their IDE)</p></li><li><p><strong>65-72% of code is AI-generated </strong>inside IDE-based tools. <em>This number is, naturally, 100% for AI command line tools like Claude Code.</em></p></li><li><p><strong>Claude Code usage nearly doubled in 3 months</strong> &#8212; from 32% in Dec to 63% in Feb, while IDE-based tools (Cursor, IntelliJ) have plateaued.</p></li></ul><p>The article is updated with these new and correct numbers.</p><div><hr></div><p>I spent four years working at Uber until 2020 and experienced firsthand the company&#8217;s standout engineering culture. Uber is a company that did the speed run of going from a small startup, through hypergrowth, to being a large company facing major risk during the pandemic, when the rideshare business briefly collapsed. Today, it&#8217;s maturing as a publicly traded, profitable company, and employs almost 3,000 people in the tech function.</p><p>At the recent Pragmatic Summit in San Francisco, one of the most interesting behind-the-scenes sessions came from the ridesharing company&#8217;s principal engineer, <a href="https://www.linkedin.com/in/tyvsmith/">Ty Smith</a>, and director of engineering <a href="https://www.linkedin.com/in/anshuman-chadha-8ab58717/">Anshu Chada</a>, who <a href="https://youtu.be/i1tZN41VKcE">pulled back the curtain</a> on what Uber has been doing with AI tools, internally. They were candid about the amount of work it took to build up Uber&#8217;s internal &#8220;AI stack,&#8221; why all that work was necessary, and also discussed the drawbacks as well as benefits of this rapidly spreading technology. <em>You can watch their <a href="https://youtu.be/i1tZN41VKcE">presentation at The Pragmatic Summit here</a>.</em></p><p>In today&#8217;s issue, we cover:</p><ol><li><p><strong>Agentic layers &amp; systems. </strong>Four layers spanning an internal AI platform, context sources, industry tools, and specialized agents for testing and code review.</p></li><li><p><strong>Internal tooling: MCP Gateway, Uber Agent Builder, and the AIFX CLI</strong>. Uber built several internal tools to make it easier for devs to use AI tools, and to make internal AI agents more effective.</p></li><li><p><strong>How AI changes developer workflows</strong>. A move away from single-threaded coding in an IDE, to orchestrating multiple parallel agents. Engineers naturally gravitate toward kicking off new agents, which starts to create resource and cost challenges.</p></li><li><p><strong>Minion: running background agents at scale. </strong>Uber built Minion, an internal background agent platform with monorepo access and optimized defaults. It&#8217;s a clever abstraction layer that works well in practice.</p></li><li><p><strong>New internal dev tools.</strong> More AI-generated code means more code reviews and more noise, so Uber built Code Inbox for smart PR routing, uReview for high-signal AI code review comments, Autocover for generating 5,000+ unit tests per month, and Shepherd for managing large-scale migrations end to end.</p></li><li><p><strong>Challenges</strong>. AI adoption is slower than expected, even at a forward-thinking company like Uber. Top-down mandates are less efficient than engineers sharing their wins with peers.</p></li><li><p><strong>Impact in numbers.</strong> 92% of Uber devs use agents monthly, 65-72% of code is AI-generated inside IDEs, and 11% of pull requests opened by agents. At the same time, AI-related costs are up 6x since 2024, and token cost optimization is a growing priority.</p></li></ol><p>Longtime readers might recall we&#8217;ve covered Uber&#8217;s engineering culture over time:</p><ul><li><p><a href="https://newsletter.pragmaticengineer.com/p/uber-eng-productivity">Developer Experience at Uber</a> &#8211; with Uber&#8217;s founding engineer on Developer Platform, Gautam Korlam (2025)</p></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/how-uber-built-its-observability-platform">How Uber built its observability platform</a> (2023)</p></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/uber-move-to-cloud">Inside Uber&#8217;s move to the Cloud</a> (2023)</p></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/uber-eng-productivity">How Uber is measuring engineering productivity</a> (2022)</p></li><li><p><a href="https://newsletter.pragmaticengineer.com/p/program-platform-split-uber">The Program and Platform split at Uber</a> (2021)</p></li></ul><p>Let&#8217;s get into it:</p><div><hr></div><p>AI is not new at Uber, but rolling it out companywide is. The company has used machine learning and AI technologies in many systems, including its Marketplace platform, which are responsible for routing and matching drivers with riders, forecasting demand, etc. What is relatively new at nearly all tech companies is the process of integrating AI across engineering and beyond.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uBE4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uBE4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 424w, https://substackcdn.com/image/fetch/$s_!uBE4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 848w, https://substackcdn.com/image/fetch/$s_!uBE4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!uBE4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uBE4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&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_!uBE4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 424w, https://substackcdn.com/image/fetch/$s_!uBE4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 848w, https://substackcdn.com/image/fetch/$s_!uBE4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!uBE4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596ad0d5-6c2e-41ad-8aa8-570641097308_2048x1366.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Anshu Chada at The Pragmatic Summit</figcaption></figure></div><p>The official strategy at the ridesharing giant is to become a &#8220;GenAI-powered&#8221; company:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5oGV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5oGV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 424w, https://substackcdn.com/image/fetch/$s_!5oGV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 848w, https://substackcdn.com/image/fetch/$s_!5oGV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 1272w, https://substackcdn.com/image/fetch/$s_!5oGV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5oGV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&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_!5oGV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 424w, https://substackcdn.com/image/fetch/$s_!5oGV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 848w, https://substackcdn.com/image/fetch/$s_!5oGV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 1272w, https://substackcdn.com/image/fetch/$s_!5oGV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d0dfcd-ec1a-4df5-a1f8-ed6807e00f8a_1600x887.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Uber&#8217;s company strategy now explicitly includes AI</figcaption></figure></div><p>I appreciate Uber sharing this approach openly because while most companies say that they want to be &#8220;AI-powered&#8221; &#8211; however cliche that claim might be &#8211; not all provide as much transparency.</p><p><strong>It&#8217;s worthwhile engineers internalizing how leadership views AI</strong>. These folks, in general, see a tool that can bring efficiency everywhere.<strong> </strong>My take is that in some ways, AI is seen similarly to the cloud, which has been perceived as a means to reduce costs and improve the flexibility and elasticity of hardware resources. Today, AI is seen as the way to increase efficiency and lower costs, such as customer support, software development, the finance function &#8211; or any function.</p><p>Uber is focusing not on automating everything possible in engineering. Instead, it wants to:</p><ol><li><p>Eliminate toil: helping AI do &#8220;boring&#8221; work like upgrades, migrations, trivial bug fixes, etc.</p></li><li><p>Free up engineers to focus more on creative work.</p></li></ol><p>As Anshu Chada, Engineering Director on Uber&#8217;s Dev Platform, puts it:</p><blockquote><p>&#8220;What we found is when we push some of the boring stuff to AI &#8211; upgrades, migrations, bug fixes &#8211; not only does it result in much higher satisfaction from our engineers, but they&#8217;re able to push our product and create features for end users in ways that we didn&#8217;t even think were possible.&#8221;</p></blockquote><h2>1. Agentic layers &amp; systems</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hiin!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hiin!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 424w, https://substackcdn.com/image/fetch/$s_!hiin!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 848w, https://substackcdn.com/image/fetch/$s_!hiin!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!hiin!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hiin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab25b639-5aac-479c-b130-851e6240d207_2048x1366.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&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_!hiin!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 424w, https://substackcdn.com/image/fetch/$s_!hiin!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 848w, https://substackcdn.com/image/fetch/$s_!hiin!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!hiin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab25b639-5aac-479c-b130-851e6240d207_2048x1366.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ty Smith at The Pragmatic Summit</figcaption></figure></div><p>Uber&#8217;s &#8220;agentic system&#8221; for software engineering is actually made up of several systems:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m3Bk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m3Bk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 424w, https://substackcdn.com/image/fetch/$s_!m3Bk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 848w, https://substackcdn.com/image/fetch/$s_!m3Bk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 1272w, https://substackcdn.com/image/fetch/$s_!m3Bk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m3Bk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png" width="1456" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&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_!m3Bk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 424w, https://substackcdn.com/image/fetch/$s_!m3Bk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 848w, https://substackcdn.com/image/fetch/$s_!m3Bk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 1272w, https://substackcdn.com/image/fetch/$s_!m3Bk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1368c8cd-fc82-4512-91ec-452948b6294a_1600x889.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Uber&#8217;s agentic systems, split across four layers</em></figcaption></figure></div><p>Categories of systems:</p><ul><li><p><strong>Internal AI platform. </strong>Built on top of <a href="https://www.uber.com/en-NL/blog/michelangelo-machine-learning-platform/">Michelangelo</a>, Uber&#8217;s ML/AI platform. This layer provides things like a model gateway to proxy to frontier models or internally hosted models.</p></li><li><p><strong>Internal Uber context: </strong>accessing Uber&#8217;s source code, engineering documentation, Slack information, JIRA tickets, etc. These all serve as &#8220;memory&#8221; for agents to use.</p></li><li><p><strong>Industry agents:</strong> Uber&#8217;s approach is to enable the &#8220;latest &amp; greatest&#8221; AI agents for engineers, so they support several tools like Claude Code, GitHub Copilot, Codex, and other clients.</p></li><li><p><strong>Specialized agents: </strong>Uber&#8217;s background agent platform, the test generation platform, code review agents, and more.</p></li><li><p><strong>Engineering enablement: </strong>measuring the efficiency of agents, controlling costs, and educating engineers about which tools to use.</p></li></ul><h2>2. Internal tooling: MCP Gateway, Uber Agent Builder, and the AIFX CLI</h2><p>MCP &#8211; the Model Context Protocol &#8211; has quickly become the standard way to connect agents and data sources with one another. A frequent analogy is that MCP is like the &#8220;USB-C interface for AI agents.&#8221; <em>We published a <a href="https://newsletter.pragmaticengineer.com/p/mcp">deepdive on the MCP protocol</a> and covered <a href="https://newsletter.pragmaticengineer.com/p/mcp-deepdive">real-world MCP server use cases</a>.</em></p><p>Uber put together a &#8220;tiger team&#8221; (a temporary unit that gets things done fast) to design the MCP strategy and build the central MCP gateway, which looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kRuX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kRuX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 424w, https://substackcdn.com/image/fetch/$s_!kRuX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 848w, https://substackcdn.com/image/fetch/$s_!kRuX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!kRuX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kRuX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png" width="1342" height="1050" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1050,&quot;width&quot;:1342,&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_!kRuX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 424w, https://substackcdn.com/image/fetch/$s_!kRuX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 848w, https://substackcdn.com/image/fetch/$s_!kRuX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!kRuX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccdf1000-5c80-46fa-ac8f-9b7ffe6e71c6_1342x1050.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Uber&#8217;s MCP gateway</figcaption></figure></div><p>This MCP gateway allows:</p><ul><li><p><strong>Proxy internal endpoints to MCPs</strong>: any internal Thrift, Protobuffer, or HTTP endpoint can be exposed as an MCP server with a simple configuration change. <em>Uber uses the <a href="https://en.wikipedia.org/wiki/Apache_Thrift">Apache Thrift</a> protocol and <a href="https://protobuf.dev/">Protobuffer</a> protocols extensively for backend service communications</em></p></li><li><p><strong>First-party MCPs:</strong> these are exposed as a single, consistent interface</p></li><li><p><strong>Third-party MCPs:</strong> external MCP servers are also exposed via the gateway, which handles all authentication and authorization tasks.</p></li><li><p><strong>Platform concerns:</strong> the gateway takes care of authorization, telemetry, and logging in one central place. Plus, it conveniently offers a unified interface to interact with any MCP.</p></li></ul><p>The MCP gateway also provides:</p><ul><li><p><strong>A registry:</strong> to look up MCP servers, and for devs to be able to register their own.</p></li><li><p><strong>A sandbox:</strong> for devs to experiment with MCP servers without long-winded setups.</p></li></ul><h3>Uber Agent Builder</h3><p>Uber&#8217;s Agent Builder product is a no-code solution to build agents that can access Uber&#8217;s internal data sources (both MCP servers and Uber data sets), and hand off work to other agents:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rvWa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rvWa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 424w, https://substackcdn.com/image/fetch/$s_!rvWa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 848w, https://substackcdn.com/image/fetch/$s_!rvWa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!rvWa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rvWa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png" width="1374" height="1400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1400,&quot;width&quot;:1374,&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_!rvWa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 424w, https://substackcdn.com/image/fetch/$s_!rvWa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 848w, https://substackcdn.com/image/fetch/$s_!rvWa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!rvWa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c56a10-d2a9-4a4d-ab42-6963199af187_1374x1400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Uber&#8217;s Agent Builder: a no-code experience to build agents</em></figcaption></figure></div><p>The platform includes a tool called Agent Studio, where multi-agent workflows can be visualized, debugged, traced, versioned, and evaluated. This is how it looks:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IfQh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IfQh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IfQh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IfQh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IfQh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IfQh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg" width="1456" height="941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:941,&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_!IfQh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IfQh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IfQh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IfQh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa141c4-411e-4b23-965a-cb4389588bb2_2048x1324.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Uber&#8217;s Agent Studio: a no-code UI to create workflows using AI agents</figcaption></figure></div><p>The agents built in Agent Builder become discoverable through a registry:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7vu4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7vu4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 424w, https://substackcdn.com/image/fetch/$s_!7vu4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 848w, https://substackcdn.com/image/fetch/$s_!7vu4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 1272w, https://substackcdn.com/image/fetch/$s_!7vu4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7vu4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png" width="1456" height="919" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:919,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:&quot;Screenshot 2025-09-22 at 9.42.44&#8239;PM.png&quot;,&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="" title="Screenshot 2025-09-22 at 9.42.44&#8239;PM.png" srcset="https://substackcdn.com/image/fetch/$s_!7vu4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 424w, https://substackcdn.com/image/fetch/$s_!7vu4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 848w, https://substackcdn.com/image/fetch/$s_!7vu4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 1272w, https://substackcdn.com/image/fetch/$s_!7vu4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcad1a604-6dd9-47a4-bb40-34013138a9b0_1600x1010.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Uber&#8217;s Agent Builder registry, where existing agents can be discovered, used, and copied</figcaption></figure></div><h3>Accessing agents via the AIFX CLI</h3><p>Uber&#8217;s Developer Experience platform team had a few issues with deploying AI agent tooling at scale:</p><ul><li><p>How does the company update all clients when a new version comes out? For example, if a new version of Cursor is released, how can they ensure all devs use the latest one?</p></li><li><p>How can the clients be configured with helpful defaults? Uber&#8217;s Dev Platform team might have found better defaults for tools, like more helpful models. How are these rolled out to all devs?</p></li><li><p>How can devs easily discover MCP servers and configure them for agents?</p></li><li><p>How can agents connect to Uber&#8217;s background task infrastructure?</p></li></ul><p>The Dev Experience team built the AIFX CLI, which is the AI tooling command line used by all engineers there. Here&#8217;s what it looks like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!doa7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!doa7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 424w, https://substackcdn.com/image/fetch/$s_!doa7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 848w, https://substackcdn.com/image/fetch/$s_!doa7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 1272w, https://substackcdn.com/image/fetch/$s_!doa7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!doa7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png" width="1046" height="672" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:672,&quot;width&quot;:1046,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:&quot;Screenshot 2026-02-09 at 11.30.59&#8239;AM.png&quot;,&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="" title="Screenshot 2026-02-09 at 11.30.59&#8239;AM.png" srcset="https://substackcdn.com/image/fetch/$s_!doa7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 424w, https://substackcdn.com/image/fetch/$s_!doa7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 848w, https://substackcdn.com/image/fetch/$s_!doa7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 1272w, https://substackcdn.com/image/fetch/$s_!doa7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F701562a8-46ee-4615-b37b-394b4b9231d6_1046x672.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Uber&#8217;s AIFX command line tool</figcaption></figure></div><p>This tool supports:</p><ul><li><p>Provisioning AI agents (client tools like Claude Code, Codex, Cursor, and others)</p></li><li><p>Finding and using MCP servers</p></li><li><p>Running background agent tasks</p></li><li><p>Updating AI agents and clients to the latest versions</p></li></ul><h2>3. How AI changes developer workflows</h2><p>The traditional way of building software:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U_r3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U_r3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 424w, https://substackcdn.com/image/fetch/$s_!U_r3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 848w, https://substackcdn.com/image/fetch/$s_!U_r3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 1272w, https://substackcdn.com/image/fetch/$s_!U_r3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U_r3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png" width="1456" height="642" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:642,&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_!U_r3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 424w, https://substackcdn.com/image/fetch/$s_!U_r3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 848w, https://substackcdn.com/image/fetch/$s_!U_r3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 1272w, https://substackcdn.com/image/fetch/$s_!U_r3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4ca227-68fc-4866-b272-ef47d824fa03_1986x876.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Pre-AI software development workflow. Most time is spent inside an IDE</em></figcaption></figure></div><p>Devs spent some time planning, most time writing code (code authorship), and then some time in code review.</p><p>The first AI agent-based workflows were single-threaded: devs worked with a single agent in the command line or inside their IDE:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZGpD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZGpD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 424w, https://substackcdn.com/image/fetch/$s_!ZGpD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 848w, https://substackcdn.com/image/fetch/$s_!ZGpD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 1272w, https://substackcdn.com/image/fetch/$s_!ZGpD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZGpD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png" width="1456" height="647" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:647,&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_!ZGpD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 424w, https://substackcdn.com/image/fetch/$s_!ZGpD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 848w, https://substackcdn.com/image/fetch/$s_!ZGpD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 1272w, https://substackcdn.com/image/fetch/$s_!ZGpD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24000091-eda4-4b36-b26d-edddbf33b93c_1970x876.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Early agentic workflows: working with an agent and approving plans, giving commands and corrections</em></figcaption></figure></div><p>At Uber, the latest workflows which many software engineers follow are pretty different, involving parallel agents, each kicked off with their own tasks:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BvlU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BvlU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 424w, https://substackcdn.com/image/fetch/$s_!BvlU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 848w, https://substackcdn.com/image/fetch/$s_!BvlU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 1272w, https://substackcdn.com/image/fetch/$s_!BvlU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BvlU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png" width="1456" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&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_!BvlU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 424w, https://substackcdn.com/image/fetch/$s_!BvlU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 848w, https://substackcdn.com/image/fetch/$s_!BvlU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 1272w, https://substackcdn.com/image/fetch/$s_!BvlU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F898accd3-5c2d-4a6b-94bd-11843968d5ce_1996x766.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Latest AI agent-based workflows look pretty different</figcaption></figure></div><p>As Ty explained, running multiple agents comes naturally to most devs:</p><blockquote><p>&#8220;[Once you start using agents]  as an engineer, you&#8217;re giving a prompt and waiting for something. While it&#8217;s running and you&#8217;re waiting you&#8217;re thinking: &#8216;What am I going to do? Have a coffee or browse Reddit? Might as well kick off another background agent.&#8217;</p><p>And so, engineers get into this mode of running several agents at once, right? Both us [at Uber] and a lot of the industry is trying to push towards this.&#8221;</p></blockquote><h2>4. Minion: running background agents at scale</h2>
      <p>
          <a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>