<?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[Packt Deep Engineering: Newsletter Issues]]></title><description><![CDATA[Deep Engineering weekly newsletter issues for developers and software architects featuring expert-led insights, deep dives into modern systems, and clear thinking on real-world software design.]]></description><link>https://deepengineering.net/s/newsletter-issues</link><image><url>https://substackcdn.com/image/fetch/$s_!H5BJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png</url><title>Packt Deep Engineering: Newsletter Issues</title><link>https://deepengineering.net/s/newsletter-issues</link></image><generator>Substack</generator><lastBuildDate>Sun, 28 Jun 2026 17:19:45 GMT</lastBuildDate><atom:link href="https://deepengineering.net/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Packt]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[deepengineering@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[deepengineering@substack.com]]></itunes:email><itunes:name><![CDATA[Packt]]></itunes:name></itunes:owner><itunes:author><![CDATA[Packt]]></itunes:author><googleplay:owner><![CDATA[deepengineering@substack.com]]></googleplay:owner><googleplay:email><![CDATA[deepengineering@substack.com]]></googleplay:email><googleplay:author><![CDATA[Packt]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Deep Engineering #52: Sam Keen on the Context Tax You Pay in Every Claude Code Session]]></title><description><![CDATA[Why every AI coding session starts from zero, and how to fix it with a system instead of a better prompt]]></description><link>https://deepengineering.net/p/issue52-context-tax-claude-code-sam-keen</link><guid isPermaLink="false">https://deepengineering.net/p/issue52-context-tax-claude-code-sam-keen</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 18 Jun 2026 16:38:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/869b39fe-96eb-403e-8485-74c8ce089864_2760x1240.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng">Claude Code for Software Engineering</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5k27!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 424w, https://substackcdn.com/image/fetch/$s_!5k27!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 848w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png" width="900" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng&quot;,&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_!5k27!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 424w, https://substackcdn.com/image/fetch/$s_!5k27!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 848w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Join this interactive workshop to learn how to turn Claude Code from a session-by-session assistant into a repeatable engineering system, using structured context, reusable skills, scoped rules, hooks, and guardrails that work across real codebases and team workflows.</p><p>&#128467;&#65039; Friday, June 20 &#183; 10:30 AM EDT onwards</p><p style="text-align: center;"><span>Use code </span><strong>DEEPENG50</strong><span> for 50% off.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p><span>&#9997;&#65039; </span><strong><span>From the editor&#8217;s desk,</span></strong></p><p><span>Welcome to the 52nd issue of Deep Engineering!</span></p><p>A <a href="https://github.com/VILA-Lab/Dive-into-Claude-Code">recent study</a> pulled apart the architecture of Claude Code and found that only 1.6 percent of the codebase is actual AI decision logic, while the remaining 98.4 percent is the deterministic infrastructure that surrounds the model, including the permission gates, the context management, the tool routing, and the recovery logic that keep the whole thing usable. The agent loop at the center of it turns out to be a simple while loop, which means the genuine engineering effort sits in the systems built around the model rather than in the model itself.</p><p><span>This analysis lines up almost exactly with what most engineers working with AI tools are discovering through daily practice, which is that the thing slowing them down is rarely the intelligence of the model and is far more often the fact that none of the context they carefully supply in one session survives into the next. Supplying that missing context has quietly become the engineer&#8217;s job, and it gets paid at the start of every single session without anyone ever counting it.</span></p><p>This week <a href="https://www.linkedin.com/in/samkeen">Sam Keen</a>, an agentic engineering researcher, and former engineer at AWS and Nike, and the author of <a href="https://www.packtpub.com/en-in/product/clean-architecture-with-python-9781836642886">Clean Architecture with Python</a>, shares a practical way to stop paying that cost for good. His piece walks through how to convert the context you re-explain on repeat into a system that compounds across sessions, using the mechanisms Claude Code already gives you, and how to recognize the moment that system starts quietly working against you rather than for you.</p><p><span>Let&#8217;s get started.</span></p><div><hr></div><p><strong><span>Featured Newsletter: </span><a href="https://engineeringatscale.substack.com/">Engineering At Scale</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://engineeringatscale.substack.com/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c8fw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 424w, https://substackcdn.com/image/fetch/$s_!c8fw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 848w, https://substackcdn.com/image/fetch/$s_!c8fw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!c8fw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c8fw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg" width="292" height="291.16332378223495" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:696,&quot;width&quot;:698,&quot;resizeWidth&quot;:292,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://engineeringatscale.substack.com/&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!c8fw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 424w, https://substackcdn.com/image/fetch/$s_!c8fw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 848w, https://substackcdn.com/image/fetch/$s_!c8fw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!c8fw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7dac87-ecd9-4c27-a811-8cc917c7ca63_698x696.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A weekly column that makes databases, system design, and architecture easy to follow, with clear explanations, practical insights, and career advice for engineers building at scale.</p><p><strong><span>&#8594; </span><a href="https://engineeringatscale.substack.com/">Subscribe to Engineering At Scale</a></strong></p><div><hr></div><h1><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">The Hidden Cost of Starting From Scratch</span></h1><p><em>Submitted by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Sam Keen&quot;,&quot;id&quot;:11641009,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbfbf069-838f-4d75-b1d6-b7edb01eca2c_1254x1254.png&quot;,&quot;uuid&quot;:&quot;275b7dcb-d4c4-4254-b875-4633e6ae1d7d&quot;}" data-component-name="MentionToDOM"></span></em></p><p>When you open a fresh Claude Code session, the assistant knows nothing about your project. It does not know where your tests live, it does not know the patterns this codebase uses, and it does not remember the conventions you walked it through the day before. So you explain all of it again, and then you do the same thing again tomorrow. </p><p>That re-teaching is a tax, and it is the easiest one to overlook because it never shows up on any gauge, which means you pay it at the start of every session without ever once counting what it costs you.</p><h2><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">The bottleneck isn&#8217;t the model</span></h2><p>The real limiting factor in AI-assisted development right now is not how clever the model is, because the models are already more than capable enough for the work most teams are asking of them. The limiting factor is that none of that intelligence carries from one session into the next, and the job of supplying the missing context every single time has quietly been handed to you without anyone naming it as work.</p><p>Picture a senior engineer who forgets everything about your codebase overnight, every single night, and shows up the next morning brilliant and fast and genuinely helpful but starting again from absolute zero. You would not describe that person as a force multiplier, you would describe the arrangement as exhausting, and yet that is the default relationship most people have with their coding assistant. They end up blaming the model for the drag when the actual problem is that nothing they explained yesterday is still present today.</p><h2>Write the context down once</h2><p>The fix is to stop starting from scratch, which means writing the recurring context down once in a place the harness reads automatically so that it is present in every session without you having to lift a finger. Claude Code gives you several mechanisms for doing exactly this, and three of them are foundational. The most useful way to think about the three is by the specific kind of cost each one removes from your day.</p><p><strong>Agent files</strong>, written as CLAUDE.md, are your project&#8217;s standing memory, the place where the conventions and the layout and the way things get done here all live. You write them once and they load into every session, so you stop re-explaining the project from the beginning each time. The part most people underuse is that these files load hierarchically, which means a personal file can ride along on every session on your machine, a broader file can cover all of your coding work, and a project-specific file can sit on top of both, each one layering onto the last. The thing to remember is to keep them lean, somewhere around a couple hundred lines each rather than letting them sprawl.</p><p><strong>Skills</strong> capture the procedures you would otherwise walk through by hand every time, the multi-step moves where you first do one thing and then check another before continuing. A procedure you would normally re-explain becomes a procedure you simply invoke, and because a skill is not limited to instructions alone, it can bundle the scripts the agent runs, which means the repeatable move can carry real executable code rather than prose describing what the code should do.</p><p><strong>Hooks</strong> handle the corrections you would otherwise find yourself repeating, the lint nit and the formatting rule and the check you keep having to ask for. They fire at fixed points in the harness lifecycle, before or after a tool runs for instance, and because they sit outside the model&#8217;s control they run every single time regardless of whether the model would have remembered to do them. You give the note once and then you never have to give it again.</p><p>The pattern underneath all three mechanisms is the same one, because each of them converts a recurring cost into a single one-time write. That is what compounding actually means in this context, and it is the direct opposite of starting from scratch, since the investment you make is small and the payback lands in every session that follows it.</p><h2>Your setup can rot, here is how to catch it</h2><p>There is an honest catch worth naming here, and it is the place where the /context command earns its keep, because a compounding system can quietly rot over time. You install a skill pack and then forget it is even there. A CLAUDE.md that started out tight slowly fills up with things that mattered once and no longer do. The investment turns into freight without you noticing, and freight is really just the from-scratch tax wearing a slightly nicer costume.</p><p>The /context command is how you tell the difference, and it does one genuinely useful thing, which is that it makes the invisible visible. One command gives you a colored grid and a per-category breakdown of exactly what you are carrying before the conversation has even started. You do not need to master it, you only need to glance at it often enough to notice when something is wrong.</p><p>The last time I ran it, the single biggest chunk of my standing context was not the project memory I had carefully written, it was 14.4k tokens of skill packs I had installed on a whim and then never used even once. I had assumed my context was quietly working in my favor, and a five-second look told me otherwise. Culling them took about a minute, using /skills to deactivate the ones I never reach for and /plugin to drop a whole pack that had arrived bundled with something else.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H9OX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H9OX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 424w, https://substackcdn.com/image/fetch/$s_!H9OX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 848w, https://substackcdn.com/image/fetch/$s_!H9OX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 1272w, https://substackcdn.com/image/fetch/$s_!H9OX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H9OX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png" width="1302" height="492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77111332-5499-46cb-a963-24521563f285_1302x492.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:1302,&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_!H9OX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 424w, https://substackcdn.com/image/fetch/$s_!H9OX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 848w, https://substackcdn.com/image/fetch/$s_!H9OX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 1272w, https://substackcdn.com/image/fetch/$s_!H9OX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77111332-5499-46cb-a963-24521563f285_1302x492.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">My </span></em><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">/context</span><em><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);"> readout: skills were the largest slice of standing overhead, bigger than the project memory I&#8217;d actually written.</span></em></figcaption></figure></div><p>That same readout flagged a second problem with a different fix, because the CLAUDE.md in my working directory had grown to 3,500 tokens without my noticing. I sat down with Claude and compacted it, cutting the irrelevant and the quietly duplicated, and it came back at 1,200 tokens, which is the same project memory carried at roughly a third of the weight.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cuto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cuto!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 424w, https://substackcdn.com/image/fetch/$s_!Cuto!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 848w, https://substackcdn.com/image/fetch/$s_!Cuto!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 1272w, https://substackcdn.com/image/fetch/$s_!Cuto!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cuto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png" width="1234" height="194" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:194,&quot;width&quot;:1234,&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_!Cuto!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 424w, https://substackcdn.com/image/fetch/$s_!Cuto!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 848w, https://substackcdn.com/image/fetch/$s_!Cuto!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 1272w, https://substackcdn.com/image/fetch/$s_!Cuto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefe0673e-3b88-4e1c-b25b-fc2f2c54c1b8_1234x194.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Clarity helps the agent for exactly the same reason it helps a human reader, because a bloated and half-contradictory CLAUDE.md does not only cost you tokens, it actively muddies the very instructions you are leaning on to get good work out of the model. A lean file is easier for the model to follow in the same way that a tight brief is easier for a colleague to follow.</p><p>The specific number you land on does not really matter, but the habit does, so skim /context the way you would skim a credit-card statement, not obsessively but often enough to catch the recurring charge you forgot you ever signed up for.</p><h2><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">Do the upfront work once</span></h2><p>Starting from scratch feels free because the cost is smeared so thin across every session you will ever run, but it is not actually free, and it is in fact one of the largest and quietest line items in the way you work.</p><p>So put in the upfront work of writing a lean memory file, building a few skills you genuinely use, and setting a couple of hooks that hold the line for you. Then keep curating it, because models change and your projects change, and a glance at /context now and then is what tells you which parts of your setup are still earning their place. The goal was never a clever prompt. The goal is a setup that already knows your project before you say a single word to it.</p><div class="callout-block" data-callout="true"><p><strong>Ad:</strong> Join Packt&#8217;s live workshop <strong><a href="https://www.eventbrite.co.uk/e/claude-code-beyond-prompts-tickets-1988571262176?aff=aiagentsimplified">Claude Code Beyond Prompts</a></strong> by <strong>Sam Keen</strong> on <strong>June 20</strong> and learn how to turn CLAUDE.md, skills, and hooks into a compounding coding system.</p><p>Use code <strong>CLAUDE60</strong> for 60% off. Limited to the first 10 sign-ups.</p></div><h2><span>&#128736;&#65039; </span><strong><span>Tool of the Week</span></strong></h2><p><strong><a href="https://github.com/yamadashy/repomix"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">Repomix</span></a></strong><span> &#8212; an open source tool that packs an entire repository into a single, AI-friendly file ready to feed to a coding agent, with token counting built in.</span></p><p><strong><span>Highlights</span></strong></p><ul><li><p><span>Packs a whole repository into a single structured file optimized for LLM consumption, removing the manual copy-paste that eats the start of every session.</span></p></li><li><p><span>Counts tokens per file and for the whole pack, so you see what context costs before you spend it rather than after.</span></p></li><li><p><span>Ships an official skill for Claude Code, Cursor, Codex, and Copilot, letting agents run Repomix directly inside the workflow.</span></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/yamadashy/repomix&quot;,&quot;text&quot;:&quot;Learn more about Repomix&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/yamadashy/repomix"><span>Learn more about Repomix</span></a></p><div><hr></div><h2>&#128206; <strong>Tech Briefs</strong></h2><ul><li><p><strong><a href="https://www.anthropic.com/news/fable-mythos-access">Anthropic suspends Fable 5 and Mythos 5 worldwide</a></strong> - A US export control directive citing national security forced Anthropic to disable both frontier models for all customers, days after launch, with all other models unaffected.</p></li><li><p><strong><a href="https://github.com/openai/codex/releases">OpenAI Codex 0.140.0 ships</a></strong> - Codex adds Claude Code imports, unified mentions, and encrypted Amazon Bedrock API-key authentication.</p></li><li><p><strong><a href="https://github.com/github/copilot-cli/releases">GitHub Copilot CLI 1.0.63 released</a></strong> - A new <code>deferTools</code> option reduces MCP context bloat when tool search is enabled.</p></li><li><p><strong><a href="https://venturebeat.com/technology/xiaomis-new-open-source-agentic-ai-coding-harness-mimo-code-beats-claude-code-at-ultra-long-200-step-tasks">Xiaomi open-sources MiMo Code</a></strong> - Xiaomi&#8217;s terminal coding agent targets long tasks and offers free limited-time MiMo Auto access.</p></li><li><p><strong><a href="https://help.openai.com/en/articles/6825453-chatgpt-release-notes">ChatGPT adds memory summary controls</a></strong> - Users can delete memories, turn memory off, and directly correct their memory summary.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Keep building,</p><p>Saqib Jan</p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em><span>If your company wants to reach senior developers, software engineers, and technical decision-makers, </span><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">speak to us about partnering</a><span> with Deep Engineering.</span></em></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #51: Francesco Ciulla on Rust, Go, and Service-Level Engineering Decisions]]></title><description><![CDATA[On Rust versus Go, latency-sensitive services, memory overhead, deployment workflows, and the backend constraints that shape language choices]]></description><link>https://deepengineering.net/p/issue51-rust-vs-go-service-level-backend-decisions</link><guid isPermaLink="false">https://deepengineering.net/p/issue51-rust-vs-go-service-level-backend-decisions</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 11 Jun 2026 13:30:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cdd4048e-b9ef-459f-8c4a-0825dd1211c6_1024x339.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="https://www.eventbrite.co.uk/e/build-production-ready-ai-applications-with-rust-claude-and-codex-tickets-1987053747248?aff=deepeng">Build Production-Ready AI Applications with Rust, Claude and Codex</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/build-production-ready-ai-applications-with-rust-claude-and-codex-tickets-1987053747248?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hTwW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hTwW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hTwW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hTwW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hTwW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/build-production-ready-ai-applications-with-rust-claude-and-codex-tickets-1987053747248?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!hTwW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hTwW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hTwW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hTwW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F905c15b8-b174-4a4b-808a-965540151675_800x400.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Learn how to use Claude and Codex as development partners for building reliable Rust applications faster. This hands-on workshop with <strong>Francesco Ciulla</strong> shows how to scaffold, refactor, debug, test, and productionize AI-assisted Rust code with confidence.</p><p style="text-align: center;"> Use code <strong>DEEPENG50</strong> for 50% off.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/build-production-ready-ai-applications-with-rust-claude-and-codex-tickets-1987053747248?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/build-production-ready-ai-applications-with-rust-claude-and-codex-tickets-1987053747248?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>51st</strong> issue of Deep Engineering!</p><p>The Rust team <a href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/">released version 1.96.0 on May 28</a>, shipping new Copy-compatible range types, stabilized assert macros, and Cargo security fixes. It is the kind of release that tells you something important about where the language is. Now on a steady six-week release cadence, Rust&#8217;s toolchain keeps getting more integrated, and each release moves the language further from its reputation as a difficult, specialist tool and closer to something engineering teams can simply rely on.</p><p>That maturity is part of what is changing the production calculus for engineering teams this year. <a href="https://it.linkedin.com/in/francesco-ciulla-roma/en">Francesco Ciulla</a>, author of <a href="https://www.packtpub.com/en-in/product/the-rust-programming-handbook-9781836208860">The Rust Programming Handbook</a> and head of developer relations at Zerops, has used both Rust and Go in production. His view on the Rust versus Go debate is neither dismissive of Go nor evangelistic about Rust.</p><p>Ciulla discussed how Rust and Go solve different backend problems, where Go still wins, where Rust&#8217;s flat latency and binary size arguments become genuinely decisive, and why his thinking on committing to Rust for a production backend has changed.</p><blockquote><p>Today&#8217;s expert insights are based on the broader conversation about Rust adoption we had with Ciulla. You can read our <a href="https://deepengineering.substack.com/p/issue-45-francesco-ciulla-building-production-systems-rust-without-rewrite">previous issue</a> or watch the full <a href="https://deepengineering.substack.com/p/try-rust-with-your-own-hands-and-eyes-francesco-ciulla">Q&amp;A here</a>.</p></blockquote><p>Let&#8217;s get started.</p><div><hr></div><p style="text-align: center;"><strong>Featured Newsletter: <a href="https://javatipsandtricks.substack.com/">Java Tips and Tricks </a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://javatipsandtricks.substack.com/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ow34!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 424w, https://substackcdn.com/image/fetch/$s_!ow34!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 848w, https://substackcdn.com/image/fetch/$s_!ow34!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 1272w, https://substackcdn.com/image/fetch/$s_!ow34!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ow34!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png" width="307" height="341.48802946593" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:604,&quot;width&quot;:543,&quot;resizeWidth&quot;:307,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://javatipsandtricks.substack.com/&quot;,&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_!ow34!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 424w, https://substackcdn.com/image/fetch/$s_!ow34!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 848w, https://substackcdn.com/image/fetch/$s_!ow34!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 1272w, https://substackcdn.com/image/fetch/$s_!ow34!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854fda9-0d61-4a3c-823c-dc8db51efe93_543x604.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Subscribe to Java Tips and Tricks on Substack for practical Java insights, modern Java features, software design discussions, and updates from the Java ecosystem.</p><p><strong>&#8594; <a href="https://javatipsandtricks.substack.com/">Subscribe to Java Tips and Tricks</a></strong></p><div><hr></div><p>Expert Insights</p><h2>Rust and Go Are Better Compared Service by Service</h2><p><em>by <a href="https://in.linkedin.com/in/s-jan">Saqib Jan</a> with <a href="https://it.linkedin.com/in/francesco-ciulla-roma/en">Francesco Ciulla</a></em></p><p>Most engineering teams debating Rust versus Go for their next backend service are usually trying to answer the question too early, assuming the decision starts with the language rather than the service. </p><p><a href="https://it.linkedin.com/in/francesco-ciulla-roma/en">Francesco Ciulla</a>, author of <a href="https://www.packtpub.com/en-in/product/the-rust-programming-handbook-9781836208860">The Rust Programming Handbook</a> and head of developer relations at <a href="https://zerops.io/">Zerops</a>, thinks that framing misses the point. The useful question is not whether Rust is better than Go, or whether Go is more practical than Rust. It is whether the specific service being built has constraints that make one language&#8217;s trade-offs more valuable than the other&#8217;s.</p><p>The distinction Ciulla draws is practical. Go still earns its place in cloud infrastructure, CLI tooling, hiring, and teams that need a service working quickly without introducing a new adoption burden. Rust, in his view, becomes much harder to ignore when a service is constrained by memory use, latency predictability, high-concurrency performance, or the need to remove whole classes of runtime failure from the system. That is why the Rust versus Go debate becomes less useful the longer it stays at the language level. The decision only starts to make sense when it moves down to the service level.</p><h3>Most teams are asking the wrong question</h3><p>Most engineers who have followed the Rust versus Go conversation online will have encountered it as a tribal argument, with advocates on both sides treating the choice as a matter of identity rather than engineering judgment. Ciulla rejects that framing, and part of what makes his view useful is that he is not arguing from a Rust-only position. He currently works with Go at Zerops, where the company&#8217;s CLI is written in Go, and he has run Rust services in production on his own projects.</p><p>&#8220;I would never say that Go is a bad programming language,&#8221; Ciulla says. &#8220;You can feel how powerful Rust is because we are talking about completely different scenarios and still Rust has something to say. But that does not make Go bad.&#8221;</p><p>The more useful framing, he argues, is to stop treating Rust versus Go as a general-purpose language comparison and start treating it as a service-level engineering decision. The question is not whether an organization should adopt Rust instead of Go. The question is whether a specific service in the system has properties where Rust&#8217;s trade-offs are worth paying for, or whether Go&#8217;s simplicity, ecosystem, and hiring advantages matter more.</p><p>That reframe changes the conversation because it moves the decision away from preference and toward evidence. Once the team is looking at the service rather than the language, the relevant questions become much more concrete. Is memory use a real constraint? Is tail latency a business problem? Does the service sit on a critical path? Does the team have anyone who can review Rust code well enough to put it into production safely? Without those questions, the debate quickly becomes ideology dressed up as architecture.</p><h3>Go wins on hiring, tooling, and the Docker ecosystem</h3><p>Ciulla is careful not to turn the comparison into an anti-Go argument. Go is a natural fit for CLI tools, cloud infrastructure tooling, and the Docker and Kubernetes ecosystem. Docker is written in Go and Kubernetes is built on Go. For teams building tools that live inside that ecosystem, Go is the default for reasons that have little to do with language preference and everything to do with integration, community, and the availability of patterns the team can learn from.</p><p>The hiring argument also runs in Go&#8217;s favor, and Ciulla thinks engineering leaders should be honest about it. &#8220;In terms of finding Go engineers, probably at the moment it is easier,&#8221; he notes, &#8220;because there are probably more of them.&#8221; For a company that needs to move quickly and cannot afford a long search for specialized Rust talent, that matters. Staffing is not separate from engineering judgment. It is one of the constraints that determines whether a technical choice can survive contact with production.</p><p>Go also has lower adoption friction in general-purpose backend contexts where the performance ceiling is not the binding constraint. If a team is building a service that needs to be working by the end of the week, deployed reliably, and understood by the next engineer who touches it, Go&#8217;s simplicity and the breadth of its ecosystem are real advantages. Ciulla makes the same point more generally when talking about technology choices under deadline pressure. &#8220;When you need something simple, and you&#8217;re familiar already with Java or JavaScript, why don&#8217;t you use it?&#8221; The same principle applies to Go for teams already operating in that ecosystem.</p><p>That matters because Rust adoption is not free. It requires a different mental model, a compiler that forces decisions earlier, and at least one person on the team who knows the language well enough to validate what is being shipped. For a service that does not need Rust&#8217;s performance profile, those costs may not be worth paying.</p><div class="callout-block" data-callout="true"><p>Join <strong>Francesco Ciulla</strong> to learn how to build production-ready AI applications with Rust, Claude and Codex. <em><a href="https://www.eventbrite.co.uk/e/build-production-ready-ai-applications-with-rust-claude-and-codex-tickets-1987053747248?aff=deepeng">Register here</a></em></p></div><h3>Rust wins on performance and it is not a close contest</h3><p>Where Ciulla becomes more direct is performance. On raw performance, he does not see much ambiguity. &#8220;Check the benchmarks yourself and send me the link where Go beats Rust,&#8221; he says. &#8220;Sometimes they are at the same level. In terms of pure performance, there is no story.&#8221;</p><p>That bluntness is useful, but the more important argument in his interview is not about benchmark wins. It is about latency predictability. Languages that rely on garbage collection, including Go, Java, and Node.js, can introduce pauses when the collector runs. An HTTP request that arrives during one of those pauses may experience higher latency than one that does not, even though the service logic is identical.</p><p>&#8220;By not having a garbage collector on the backend side, you basically have flat latency,&#8221; Ciulla explains. &#8220;You don&#8217;t rely on luck, or on the user not being the unlucky one. It&#8217;s a problem that is removed.&#8221;</p><p>For most web applications running at moderate scale, that distinction may not matter enough to justify a language change. Ciulla&#8217;s point is not that every API should be rewritten in Rust. His argument is that services with strict latency requirements, high concurrency, or service-level objectives tied to consistent tail latency should be evaluated differently from ordinary backend services. In those cases, the lack of a garbage collector is not an aesthetic language feature. It changes the runtime behavior the team has to reason about.</p><p>The resource efficiency argument is equally concrete. Ciulla describes running a Rust web server in production and observing roughly four megabytes of RAM in development and five megabytes in production. On a one-gigabyte droplet, that means many small Rust services can sit idle at once without creating the same memory pressure a heavier runtime might introduce. That is not a benchmark designed to win an online argument. It is an operational fact that changes what an infrastructure team has to provision, monitor, and pay for.</p><p>That is where Rust&#8217;s case becomes strongest. Not when the team wants a language that is fashionable, and not when someone wants to win the Rust versus Go debate, but when a specific service is expensive, latency-sensitive, memory-constrained, or sitting on a path where runtime predictability matters.</p><h3>Deployment changes the operational argument</h3><p>One of the more practical points Ciulla makes is that Rust changes the shape of the deployment artifact. When you run cargo build on a Rust project, you get an architecture-specific executable binary. A Windows machine produces a Windows executable. A Mac produces a Mac executable. A Linux machine produces a Linux executable. You can also cross-compile by changing the target architecture through the compiler, which lets a team produce a Linux binary from another environment when the workflow requires it.</p><p>Ciulla&#8217;s preferred production workflow is to build the Rust binary directly inside the Docker image build process. &#8220;My flow is that I prefer to build the Rust binary directly when I build the Docker image,&#8221; he explains, &#8220;so I have something which is just deployable everywhere, a Linux executable running in a Docker container.&#8221;</p><p>The appeal is straightforward. The team gets a lightweight binary compiled for the right architecture, packaged inside a portable container. &#8220;The dream for operations is having an executable inside a Docker container,&#8221; he says. &#8220;You get something which is lightweight and can run everywhere Docker is installed.&#8221;</p><p>That matters for teams already containerizing services, which is most teams building at meaningful production scale. A Rust binary inside a container keeps the deployment artifact small while preserving the operational consistency teams expect from Docker. The container still matters because real systems rarely deploy one service by hand. They orchestrate many services, restart them, replace them, and scale them across environments. As Ciulla puts it, &#8220;We are not in the 90s anymore.&#8221;</p><p>The argument is not that Rust removes the need for containers. It is that Rust and containers fit together cleanly. Rust gives the team a compact executable artifact. Docker gives the team a repeatable deployment boundary. Together, they reduce some of the runtime and packaging overhead that teams accept as normal in other ecosystems.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Rust is ready for more production backends</h3><p>The most interesting part of Ciulla&#8217;s position is that it has changed. Two years ago, he would not have committed to building a paid SaaS product with a Rust backend. A year ago, he was still hedging. In 2026, he removes the qualification entirely. &#8220;If I had a paid product, I would use Rust,&#8221; he says. &#8220;Let&#8217;s remove the probably.&#8221;</p><p>That shift is not based on general enthusiasm for the language. Ciulla describes himself as skeptical by default, and his advice throughout the interview is to try technologies directly rather than rely on what advocates or critics say online. His confidence comes from the maturity he now sees in the Rust backend ecosystem, especially around Axum, which he says he would now use in production if he were building a SaaS or paid product.</p><p>The surrounding toolchain also strengthens the case. Cargo handles dependency management, building, testing, and documentation in a single integrated workflow. There is no equivalent of the npm versus yarn versus pnpm decision that JavaScript teams often navigate before they even get to the application itself. Running tests is cargo test. The integration is not a small ergonomic convenience. For teams that have spent years carrying build-system complexity, dependency churn, and fragmented tooling across projects, a coherent toolchain reduces the amount of process overhead attached to the language.</p><p>Ciulla sees that as part of why Rust&#8217;s reputation can lag behind its current reality. The language still has a learning curve, especially around ownership, lifetimes, and the borrow checker, but the ecosystem around the language has become more integrated rather than more fragmented. For experienced developers willing to learn Rust on its own terms, that changes the adoption equation.</p><h3>Start the decision with the service</h3><p>Ciulla&#8217;s adoption advice was consistent across our interview. Do not rewrite everything in Rust. Do not introduce it because the internet says it is the future. Do not make the language the strategy. Start with one service.</p><p>The right starting point, in his view, is a critical service with a real performance, latency, or memory problem. It might be a login service. It might be an API under heavy load. It might be a component that slows the rest of the system down. The point is to choose the service where Rust&#8217;s advantages are tied to an actual constraint rather than a general preference.</p><p>That is also where organizational readiness becomes unavoidable. If a team has no one who understands Rust well enough to review AI-generated code or validate a production deployment, the language can become a liability. &#8220;Who decides if the AI-generated Rust service is okay to put in production?&#8221; Ciulla asks. &#8220;You need the validation of an expert.&#8221;</p><p>That expert does not make Rust special. It makes Rust normal. Every new technology needs someone inside the organization who can tell the difference between code that compiles and code that should be shipped. Without that person, the team is not adopting a better tool. It is creating a new category of production risk.</p><p>For teams that do have the right service and the right internal expertise, Ciulla thinks the timing has changed. Rust is no longer only a systems language that backend teams admire from a distance. It is becoming a practical choice for the services where its properties matter most. The mistake is treating that as a universal recommendation. The opportunity is knowing exactly where it applies.</p><p>The Rust versus Go decision, then, is not really a Rust versus Go decision at all. It is a question about constraints. If the service needs simplicity, staffing depth, cloud tooling familiarity, and quick delivery, Go may be the better engineering choice. If the service needs predictable latency, low memory overhead, strong runtime control, and a deployment artifact that maps cleanly to containers, Rust deserves serious consideration. The senior engineering move is not to pick a side. It is to know which job each language is being asked to do.</p><div class="pullquote"><p><strong><a href="https://www.packtpub.com/en-in/product/the-rust-programming-handbook-9781836208860">Go deeper with Francesco Ciulla&#8217;s book</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.packtpub.com/en-in/product/the-rust-programming-handbook-9781836208860" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DDAG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 424w, https://substackcdn.com/image/fetch/$s_!DDAG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 848w, https://substackcdn.com/image/fetch/$s_!DDAG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 1272w, https://substackcdn.com/image/fetch/$s_!DDAG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DDAG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775" width="338" height="416.92857142857144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:338,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Rust Programming Handbook&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.packtpub.com/en-in/product/the-rust-programming-handbook-9781836208860&quot;,&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="The Rust Programming Handbook" title="The Rust Programming Handbook" srcset="https://substackcdn.com/image/fetch/$s_!DDAG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 424w, https://substackcdn.com/image/fetch/$s_!DDAG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 848w, https://substackcdn.com/image/fetch/$s_!DDAG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 1272w, https://substackcdn.com/image/fetch/$s_!DDAG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe9c404-fa21-4711-886a-4f5269f7201e_2250x2775 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.packtpub.com/en-in/product/the-rust-programming-handbook-9781836208860">The Rust Programming Handbook: An End-to-End Guide to Mastering Rust Fundamentals</a>,</strong> a practical guide to Rust&#8217;s ownership model, memory safety guarantees, concurrency patterns, trait system, and real-world use in systems and web programming.</p><p><strong><a href="https://www.packtpub.com/en-in/product/the-rust-programming-handbook-9781836208860">Explore the book here</a></strong></p></div><h3>In case you missed </h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;288199d3-4b2b-4952-b759-26a682e891e8&quot;,&quot;caption&quot;:&quot;View the latest HubSpot Developer Platform updates in Spring Spotlight&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Deep Engineering #45: Francesco Ciulla on Building Production Systems in Rust Without the Expensive Rewrite &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:11407185,&quot;name&quot;:&quot;Francesco Ciulla&quot;,&quot;bio&quot;:&quot;Developer Advocate at @dailydotdev\n&#183; Docker Captain &#128051;\n&#183; Public Speaker\n&#183; Building a 1 Million Community 22%&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8c30606-10ba-4c87-a89b-af2f9dc27a01_400x400.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://francescociulla.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://francescociulla.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Francesco's Newsletter&quot;,&quot;primaryPublicationId&quot;:1410908}],&quot;post_date&quot;:&quot;2026-04-30T16:32:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e29b888-c64d-4029-96f3-08e45522d077_656x375.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/issue-45-francesco-ciulla-building-production-systems-rust-without-rewrite&quot;,&quot;section_name&quot;:&quot;Newsletter Issues&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:195995087,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;10888e2c-73cc-4040-85d1-da5241e78d9f&quot;,&quot;caption&quot;:&quot;Francesco joined Deep Engineering Live to talk about Rust adoption strategy, organizational challenges, concurrency, deployment workflows, and where the language is headed in 2026.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Try Rust With Your Own Hands and Eyes with Francesco Ciulla&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:11407185,&quot;name&quot;:&quot;Francesco Ciulla&quot;,&quot;bio&quot;:&quot;Developer Advocate at @dailydotdev\n&#183; Docker Captain &#128051;\n&#183; Public Speaker\n&#183; Building a 1 Million Community 22%&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8c30606-10ba-4c87-a89b-af2f9dc27a01_400x400.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://francescociulla.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://francescociulla.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Francesco's Newsletter&quot;,&quot;primaryPublicationId&quot;:1410908}],&quot;post_date&quot;:&quot;2026-06-11T10:33:12.044Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7c13c92-97ba-4fd9-949b-7a3eed180812_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/try-rust-with-your-own-hands-and-eyes-francesco-ciulla&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:201573753,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128736;&#65039; Tool of the Week</h2><p><strong><a href="https://github.com/nextest-rs/nextest">cargo-nextest</a></strong> &#8212; a next-generation test runner for Rust that replaces cargo test with faster, more reliable test execution for production Rust projects.</p><p><strong>Highlights</strong></p><ul><li><p>Runs each test in its own process, surfacing hidden state sharing and enabling better parallelism than cargo test&#8217;s single-process model.</p></li><li><p>Retries flaky tests automatically, reducing noise in CI pipelines without manual intervention.</p></li><li><p>Outputs machine-readable JUnit XML, compatible with most CI systems out of the box.</p></li><li><p>Version 0.9.137 added a JSON schema for user configuration, standardizing nextest settings across a workspace.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/nextest-rs/nextest&quot;,&quot;text&quot;:&quot;Learn more about cargo-nextest&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/nextest-rs/nextest"><span>Learn more about cargo-nextest</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://docs.docker.com/desktop/release-notes/">Docker Desktop 4.77.0 released</a> - Marketplace extensions now install by pinned manifest digest, reducing tag-mutation risk after publication.</p></li><li><p><a href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/">Rust 1.96.0 released</a> - New Copy-compatible range types, assert_matches! macro stabilization, and two Cargo security fixes for third-party registry users.</p></li><li><p><a href="https://go.dev/doc/devel/release#go1.26.4">Go 1.26.4 released</a> - Security fixes ship for crypto/x509, mime, and net/textproto alongside compiler and runtime bug fixes.</p></li><li><p><a href="https://docs.docker.com/desktop/release-notes/">Docker Desktop security update</a> - Two container-to-host code execution CVEs in the Model Runner inference backend patched, with a Linux kernel backport fixing a container privilege escalation.</p></li><li><p><a href="https://github.com/rust-lang/rust-analyzer/releases">rust-analyzer update</a> - New diagnostics, predicate evaluation, and completion fixes improve daily Rust IDE feedback loops.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Keep building,</p><p>Saqib Jan</p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company wants to reach senior developers, software engineers, and technical decision-makers, <a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">speak to us about partnering</a> with Deep Engineering.</em></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #50: Brian Allbee on Building Better Python Software]]></title><description><![CDATA[Brian Allbee on why most Python developers are optimising for correctness when they should be optimising for sustainability, and what that shift actually looks like in practice.]]></description><link>https://deepengineering.net/p/issue50-building-better-python-software-brian-allbee</link><guid isPermaLink="false">https://deepengineering.net/p/issue50-building-better-python-software-brian-allbee</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 04 Jun 2026 15:11:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c2a26cd4-2f69-448c-b36a-d4cbb68058ad_690x310.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng">Claude Code for Software Engineering</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5k27!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 424w, https://substackcdn.com/image/fetch/$s_!5k27!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 848w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png" width="900" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5k27!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 424w, https://substackcdn.com/image/fetch/$s_!5k27!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 848w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Join this interactive workshop to learn how to turn Claude Code from a session-by-session assistant into a repeatable engineering system, using structured context, reusable skills, scoped rules, hooks, and guardrails that work across real codebases and team workflows.</p><p>&#128467;&#65039; Friday, June 20 &#183; 10:30 AM EDT onwards</p><p style="text-align: center;"> Use code <strong>DEEPENG50</strong> for 50% off.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>50th</strong> issue of Deep Engineering!</p><p><a href="https://www.anthropic.com/news/expanding-project-glasswing">Anthropic expanded Project Glasswing on June 2</a>, extending Claude Mythos Preview to approximately 150 new organizations for codebase vulnerability scanning, after initial partners found more than 10,000 high-severity security flaws in production code. </p><p>AI can now find vulnerabilities in production systems that were presumably tested, reviewed, and shipped by engineering teams. The gap between code that compiles and code that holds up under real-world pressure is no longer theoretical.</p><p>That gap also has a cause. <a href="https://www.linkedin.com/in/brianallbee">Brian Allbee</a>, Staff Software Engineer at Cleerly and author of <a href="https://www.packtpub.com/en-us/product/hands-on-software-engineering-with-python-9781835888018">Hands-On Software Engineering with Python</a> (Packt), argues that programming focuses on the correctness of the code itself, while software engineering expands that focus to sustainability as change occurs. Too many developers optimize for code that works today, without enough attention to whether that code can be changed, tested, maintained, and handed off tomorrow.</p><blockquote><p>Allbee joined <a href="https://deepengineering.substack.com/p/hands-on-software-engineering-python-brian-allbee">Deep Engineering Live</a> to discuss what closing that gap looks like in practice. Today&#8217;s expert insights are based on that conversation, and you can read or watch the full <a href="https://deepengineering.substack.com/p/hands-on-software-engineering-python-brian-allbee">Q&amp;A here</a>.</p></blockquote><p>Let&#8217;s get started.</p><div><hr></div><p style="text-align: center;"><strong>Featured: <a href="http://daily.dev/">All the dev content that matters, in one personalized feed</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="http://daily.dev/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WB1m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!WB1m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!WB1m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!WB1m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WB1m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png" width="466" height="291.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:466,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;http://daily.dev/&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!WB1m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!WB1m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!WB1m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!WB1m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7b61d3-2791-4eb0-9529-449c16315ca3_1280x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="http://daily.dev/">daily.dev</a> is a professional network for developers, built around a personalized feed of the best content from across the dev ecosystem. Millions of developers use it to stay current with their stack, discover new tools and frameworks, and connect with a global community that shares what they&#8217;re learning. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;http://daily.dev/&quot;,&quot;text&quot;:&quot;Join for free at daily.dev&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="http://daily.dev/"><span>Join for free at daily.dev</span></a></p><div><hr></div><p>Expert Insights</p><h2>Building Better Python Software Is Not About Writing Better Code</h2><p><em>by <a href="https://in.linkedin.com/in/s-jan">Saqib Jan</a> with <a href="https://www.linkedin.com/in/brianallbee/">Brian Allbee</a></em></p><p>Most Python developers measure their work by whether the code runs, assuming the job is done once the function returns the right value, the tests pass, and the build is green. <a href="https://www.linkedin.com/in/brianallbee/">Brian Allbee</a>, Staff Software Engineer at Cleerly and author of <em><a href="https://www.packtpub.com/en-us/product/hands-on-software-engineering-with-python-9781835888018">Hands-On Software Engineering with Python</a></em> (Packt), thinks that measure is correct but incomplete, noting that the gap between correct code and sustainable software is where most Python developers stop growing without realizing it.</p><p>The distinction Allbee draws is precise. Programming, he explained in our live interview, is focused on &#8220;the correctness of the code itself,&#8221; whereas software engineering &#8220;starts expanding out into more of a focus on sustainability as change occurs.&#8221; That shift in focus sounds subtle, but it changes almost every decision an engineer makes, from how they structure a module and handle a growing codebase to how they talk about technical debt with the people who control the roadmap.</p><h2>The discipline that architecture cannot replace</h2><p>The instinct when a Python codebase starts to grow is to reach for architecture by breaking things into services, introducing abstractions, and redesigning the data model. Allbee&#8217;s experience points in a different direction. &#8220;I think most of the paths to success in that context, at least the ones that I can think of that I&#8217;ve seen, don&#8217;t really start with the architecture, but with discipline behind the process,&#8221; he shares.</p><p>The discipline he describes is specific and unglamorous, emphasizing the need to keep things as simple as possible while wrapping repeated processes into functions or methods, stressing &#8220;that teams should agree on documentation standards and stick to them until something unexpected comes up, and that developers must write code with testability in mind from the beginning, even when there is no immediate requirement for tests.&#8221; These practices do not require a new framework or a redesign because they rely on consistency, which is often much harder to achieve than architecture.</p><p>The reason discipline comes before architecture is that architecture without discipline produces complexity without clarity. Allbee, in <a href="https://deepengineering.substack.com/p/hands-on-software-engineering-python-brian-allbee">our interview</a>, shared a vivid example with the audience from his own experience regarding a system he encountered that had been written in Python by an engineer who came from a C# background, resulting in an architecture where every function and every class had its own isolated module. The functional layers of the system were seven or eight deep depending on the context, creating a project that was &#8220;ridiculously huge,&#8221; he recalls, and &#8220;way more complicated than it needed to be, and it was hard to manage... hard to maintain.&#8221;</p><p>The problem was not the language or incompetence, but rather a mental model built for a different environment being applied wholesale to Python. Allbee points to a concept from the book <em><a href="https://www.speakingsoftwareshow.com/episodes/code-that-fits-in-your-head-1">Code That Fits In Your Head</a></em><a href="https://www.speakingsoftwareshow.com/episodes/code-that-fits-in-your-head-1"> </a>to explain why this matters, because humans can only keep &#8220;five to seven bits of information in the front of their memory at a given point in time.&#8221; A system with seven layers of depth saturates that capacity before a developer has even started reasoning about what any individual layer does. </p><p>Allbee argues that developers must &#8220;keep it simple&#8221; and &#8220;collapse things down to the point where you don&#8217;t have to have 19 different classes and 15 different instances of, you know, all these other classes to deal with something that really should be capable of being managed as a single function.&#8221;</p><h2>Technical debt is a product decision, not a technical one</h2><p>One of the more practically useful things Allbee explains about managing an evolving Python system is that technical debt is not primarily a technical problem. &#8220;Technical debt is one of those product-level priorities,&#8221; he reasons, adding that &#8220;whoever&#8217;s making the prioritization decisions is going to be in control of when those get tackled, if they get tackled.&#8221;</p><p>That framing shifts where an engineer should focus their energy when technical debt is accumulating, meaning the work is not just to identify the debt but to communicate its consequences clearly enough that the people controlling the roadmap can make an informed decision. &#8220;Making sure that you can communicate effectively, here&#8217;s what the impact of this technical debt is to your product-level people or whoever&#8217;s making those decisions, is gonna be a key thing,&#8221; he adds. That requires being able to sit down and say clearly that if the team does not deal with a bug, it is going to lead to cascading issues, and the longer they put it off, the more likely it is to lead to a really significant problem that will take even longer to get past.</p><p>The teams that handle technical debt well, in Allbee&#8217;s experience, are the ones that treat it as a first-class concern rather than an emergency. The difference between those two approaches is almost entirely about communication, where debt that gets communicated early and framed in terms of product risk gets prioritized, while debt that surfaces as a crisis gets managed badly.</p><h2>Testing is a design decision</h2><p>The most common framing of testing in Python projects is that it is something you add to code that already exists, but Allbee&#8217;s position is that testability is a property of the code itself, meaning that designing for it from the beginning changes the shape of the code in ways that make it easier to understand, change, and hand off to other engineers.</p><p>His testing approach for his own projects is a method that &#8220;exercises valid and invalid inputs for all of the parameters of every callable in the project.&#8221; He shares, &#8220;You combine that with judicious monitoring of missing lines and a code coverage report, that has served really well for me in making sure that the targets of those tests are being both thoroughly and realistically exercised.&#8221; The more important principle underneath the practice is that tests are most valuable when they reflect how the system is actually used, not just how the code is structured.</p><p>In team contexts, Allbee advocates for explicit agreement about how tests are organized and what tools are involved. &#8220;I&#8217;ve seen what happens when different engineers who aren&#8217;t communicating with each other each go their own way,&#8221; he points out, noting that &#8220;the tests that result, even if they&#8217;re rigorous and well thought out, are oftentimes difficult to follow across different test modules.&#8221; The investment in agreement upfront produces a test suite that the whole team can confidently read, maintain, and extend.</p><p>On AI-generated code in testing contexts, Allbee recommends defining a test suite that only humans are permitted to modify, making it as rigorous and complete as possible, and then allowing AI to generate implementation code that must pass that suite. He explains the boundary by stating that you can tell the AI to &#8220;write all the code you want,&#8221; but it &#8220;must pass this test suite&#8221; and it does &#8220;not get to modify that test suite.&#8221; That boundary, he reasons, provides about as much coverage as can realistically be achieved when AI is involved in production code.</p><div class="callout-block" data-callout="true"><p><strong>Bring Claude Code into real engineering workflows, not just isolated coding sessions. <a href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng2">Register here.</a></strong></p></div><h2>Concurrency is a design problem first</h2><p>Python&#8217;s performance limitations and its Global Interpreter Lock have been a recurring concern for engineers building high-throughput systems, and CPython&#8217;s free-threaded build has stirred interest in what Python might make possible beyond the GIL. Allbee is measured about expectations, highlighting that most Python code is IO-bound rather than CPU-bound, which is where the GIL has its most significant impact, though he is hopeful that the free-threaded model will open doors for more CPU-bound work to be written in Python.</p><p>The framing that matters most to many developers is not about the runtime at all. &#8220;Concurrency is a design problem before it&#8217;s a runtime problem,&#8221; he underscores, adding that having better concurrency support in the language really does not eliminate the need to understand how your processes are going to contend against each other, how to deal with data ownership at the scope of the code, or how failures can happen. His practical advice on concurrency reflects this directly by recommending that developers add it sparingly and only when there is an actual benefit that outweighs the overhead of handling errors, data contention, and coordination costs. &#8220;Optimize your clarity and correctness first,&#8221; he recommends, and &#8220;really only reach for concurrency when you understand where the time is actually being spent.&#8221;</p><h2>Cloud readiness is designing for volatility</h2><p>The question of what makes a Python application cloud-ready is one Allbee addresses in terms of design principles rather than tools or platforms. The containerized application is cloud-ready, he acknowledges, but so are function-as-a-service constructs like AWS Lambda functions, proving that the specific mechanism matters less than the underlying design orientation.</p><p>&#8220;The key concept that ties almost every cloud-resident system together, containerization, stateless design, any of those, is that they are inherently disposable,&#8221; he explains. Because a container can be killed at any time, a Lambda invocation could be terminated before it reaches a successful completion, and Kubernetes pods restarting are probably routine events, designing for that reality means building processes around the expectation that the hardware can disappear at any point in time.</p><p>Statelessness in that context is about making failure cheap. There is no state to manage and no need to write code to reacquire that state, meaning a process simply ends and is restarted, making recovery from a failure as simple as starting a new instance. &#8220;Statelessness and containerization matter more because they make failure cheap and recovery routine than for any other purpose or reason,&#8221; he says, arguing that this principle should sit near the top of the list of factors shaping design decisions for any system built to run in a cloud environment.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>What senior engineers actually do</h2><p>The question of what separates an engineer ready for senior work from one who is not comes back to the same systems-oriented thinking that distinguishes engineering from programming, where the indicator is not technical mastery but curiosity about the system rather than just the isolated function.</p><p>&#8220;If they started demonstrating that they&#8217;re concerned with more than just is the code doing what it&#8217;s supposed to do,&#8221; he explains, &#8220;if there&#8217;s a certain amount of curiosity, why are we doing it this way, do they recognize the trade-offs, those are the things that I think start really indicating somebody is actually ready to go beyond just I&#8217;ve written this function, and it&#8217;s done, and it&#8217;s tested, and it works. Done. I&#8217;m finished.&#8221;</p><p>The senior engineers Allbee has tried to emulate and seen do their best work are not defined by the code they write but by the systems they shape and the teams they are enabling. That involves asking questions that guide less senior engineers to ask those same questions on their own, such as why the team is going down a certain road, what the benefits are, and what trade-offs exist. &#8220;There are always trade-offs,&#8221; he notes, emphasizing, &#8220;Always, always, always trade-offs.&#8221;</p><p>The advice he offers to Python developers trying to grow in an AI-accelerated world collapses to three core principles, which are to &#8220;think in systems,&#8221; to &#8220;design for change,&#8221; and to &#8220;optimize for your team.&#8221; If you come away thinking differently about why you write the code that you are writing and not just how, then that is the shift that matters. Since the language, tools, and expectations placed on Python engineers will inevitably keep growing, the engineers who hold up under those pressures are the ones who stopped measuring their work by whether the code runs and started asking what it will take for the system to survive.</p><div class="pullquote"><p><strong><a href="https://www.packtpub.com/en-us/product/hands-on-software-engineering-with-python-9781835888018">Go deeper with Brian Allbee&#8217;s book</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.packtpub.com/en-us/product/hands-on-software-engineering-with-python-9781835888018" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8VAS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 424w, https://substackcdn.com/image/fetch/$s_!8VAS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 848w, https://substackcdn.com/image/fetch/$s_!8VAS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 1272w, https://substackcdn.com/image/fetch/$s_!8VAS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8VAS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775" width="309" height="381.1565934065934" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/caa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:309,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Hands-On Software Engineering with Python&quot;,&quot;title&quot;:&quot;Hands-On Software Engineering with Python&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.packtpub.com/en-us/product/hands-on-software-engineering-with-python-9781835888018&quot;,&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="Hands-On Software Engineering with Python" title="Hands-On Software Engineering with Python" srcset="https://substackcdn.com/image/fetch/$s_!8VAS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 424w, https://substackcdn.com/image/fetch/$s_!8VAS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 848w, https://substackcdn.com/image/fetch/$s_!8VAS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 1272w, https://substackcdn.com/image/fetch/$s_!8VAS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa7bb37-8ccf-4fd6-9057-c6a4f217af4c_2250x2775 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Brian Allbee</strong> explores these ideas in more depth in <em>Hands-On Software Engineering with Python</em>, a practical guide to building Python systems that are easier to test, maintain, evolve, and hand off.</p><p><strong><a href="https://www.packtpub.com/en-us/product/hands-on-software-engineering-with-python-9781835888018">Explore the book here</a></strong></p></div><h3>In case you missed </h3><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f18d1d6b-4915-4374-94c7-b25bdf20dd98&quot;,&quot;caption&quot;:&quot;Brian Allbee joined Deep Engineering Live to talk about what separates engineering from programming, how to scale and refactor Python systems responsibly, and what it actually takes to grow into senior and staff-level roles.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Hands-On Software Engineering with Python with Brian Allbee&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-03T12:30:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4a795b5-9037-483c-9276-02a30b0de712_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/hands-on-software-engineering-python-brian-allbee&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:200469642,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div><hr></div><h2>&#128736;&#65039; Tool of the Week</h2><p><strong><a href="https://github.com/astral-sh/ruff">Ruff</a></strong> - fast Python linting and formatting for teams trying to keep quality gates enforceable without slowing every commit.</p><p><strong>Highlights</strong></p><ul><li><p>Consolidates linting, import sorting, upgrade checks, and formatting behind one configuration surface.</p></li><li><p>Runs fast enough for pre-commit and CI workflows, which makes quality checks more likely to stay enabled.</p></li><li><p>Supports monorepos and hierarchical configuration, helping larger teams avoid one-off project rules.</p></li><li><p>Already used across major Python projects, making it a practical default rather than a niche experiment.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/astral-sh/ruff&quot;,&quot;text&quot;:&quot;Learn more about Ruff&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/astral-sh/ruff"><span>Learn more about Ruff</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://github.blog/changelog/2026-06-02-copilot-sdk-is-now-generally-available/">Copilot SDK is now generally available</a> - GitHub made Copilot SDK stable across six languages, letting teams embed agent workflows into internal tools.</p></li><li><p><a href="https://www.anthropic.com/news/expanding-project-glasswing">Anthropic expands Project Glasswing</a> - Project Glasswing now extends to 150 organizations, shifting AI vulnerability discovery toward coordinated patching capacity.</p></li><li><p><a href="https://pypi.org/project/pip/">Python pip 26.1.2</a> - Pip 26.1.2 shipped with Trusted Publishing attestations, tightening provenance for standard Python installation workflows across teams.</p></li><li><p><a href="https://docs.astral.sh/uv/guides/integration/gitlab/">Using uv in GitLab CI/CD</a> - Astral added GitLab CI guidance for uv images and cache pruning, simplifying reproducible Python pipelines outside GitHub.</p></li><li><p><a href="https://pypi.org/project/pyright/">Pyright 1.1.410</a> - Pyright 1.1.410 refreshed the Python wrapper package, keeping CLI and editor type checks aligned automatically.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Keep building,</p><p>Saqib Jan</p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering Specials: Enterprise AI has an API problem]]></title><description><![CDATA[The next enterprise AI bottleneck is not model capability. It is whether agents can discover, understand, and safely use the systems they need to act on]]></description><link>https://deepengineering.net/p/enterprise-ai-has-an-api-problem</link><guid isPermaLink="false">https://deepengineering.net/p/enterprise-ai-has-an-api-problem</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Tue, 02 Jun 2026 16:16:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d09c63a2-7c9f-43b5-ad5f-8625b8ed2dca_690x310.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you have 30,000 APIs, you probably have 300,000 endpoints across your organization. While that sounds like a problem of scale, it is actually one of design. </p><p>With agents discovering and calling APIs at runtime rather than developers hardcoding them at build time, that design problem has become one of the most urgent infrastructure questions in enterprise engineering.</p><p><em>This month&#8217;s special issue digs into how APIs built for developers need to become discoverable, understandable, governed, and safe runtime capabilities for agents, with commentary from <a href="https://ch.linkedin.com/in/erikwilde">Erik Wilde</a>, Head of Enterprise Strategy at Jentic; <a href="https://www.linkedin.com/in/nandita-giri">Nandita Giri</a>, Senior Software Engineer at Microsoft; <a href="https://www.linkedin.com/in/swarnendurohan-gupta">Rohan Gupta</a>, Principal Product Manager at Harness; and <a href="https://www.linkedin.com/in/mayankbhola">Mayank Bhola</a>, Co-Founder and Head of Products at TestMu AI.</em></p><p>Let&#8217;s get started.</p><div><hr></div><p><strong>Special issue &#8212; June 2026</strong></p><h2>Your APIs were built for developers, not agents</h2><div class="pullquote"><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.linkedin.com/in/erikwilde/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UR3A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UR3A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UR3A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UR3A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UR3A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg" width="266" height="266" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:400,&quot;resizeWidth&quot;:266,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Erik Wilde (@dret) / Posts / X&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.linkedin.com/in/erikwilde/&quot;,&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="Erik Wilde (@dret) / Posts / X" title="Erik Wilde (@dret) / Posts / X" srcset="https://substackcdn.com/image/fetch/$s_!UR3A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UR3A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UR3A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UR3A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde33cbd7-d094-4ae1-adb8-fbd6e9427d91_400x400.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;You don&#8217;t just look for APIs when you&#8217;re writing an app. You kind of look for APIs every time you solve a problem.&#8221; &#8212; <a href="https://ch.linkedin.com/in/erikwilde">Erik Wilde</a>, Head of Enterprise Strategy at Jentic and OpenAPI Ambassador</p></div><p>Most large enterprises have no idea how many APIs they have. Ask them and the honest answer is usually somewhere between a guess and a shrug. What they do know is that the number is large, the endpoints are larger, and the documentation is somewhere between incomplete and missing. For years that was manageable because the people consuming those APIs could compensate. They had context, experience, and enough judgment to work around the gaps in a poorly written spec or an ambiguous parameter name.</p><p>For the better part of two decades, engineering teams designed APIs for a specific kind of consumer, a developer sitting at a keyboard, reading documentation, and making deliberate decisions about which endpoints to call and in what order. That consumer had context, experience, and the judgment to fill in the gaps that a poorly written spec inevitably left open. The API did not need to be perfect because the developer compensated for its imperfections at design time, before a single line of integration code was written.</p><p>That assumption breaks down when the consumer is an agent, says <a href="https://ch.linkedin.com/in/erikwilde">Erik Wilde</a>, Head of Enterprise Strategy at <a href="https://jentic.com/">Jentic</a> and OpenAPI Ambassador. Agents do not read between the lines, compensate for ambiguous parameter names, or infer the intent behind a generic error response. They act on what the contract says, at runtime, every time they need to solve a problem, and the gap between what most enterprise APIs offer and what agents actually need is where many AI projects begin to fail before they deliver measurable value.</p><p><a href="https://cdn.sanity.io/files/4zrzovbb/website/cd77281ebc251e6b860543d8943ede8d06c4ef50.pdf">Anthropic&#8217;s 2026 State of AI Agents Report</a> found that 46% of engineering teams cite integration with existing systems as their primary challenge when deploying agents, placing it above model capability, prompt quality, and every other factor on the list. The bottleneck is infrastructure, and that infrastructure depends on APIs that were never designed for this kind of consumer.</p><div><hr></div><p><strong>Masterclass:</strong> <strong><a href="https://www.eventbrite.co.uk/e/building-ai-ready-apis-with-agent-skills-tickets-1990383757398?aff=deepeng">Building AI-Ready APIs with Agent Skills</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/building-ai-ready-apis-with-agent-skills-tickets-1990383757398?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nAr1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nAr1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nAr1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nAr1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nAr1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg" width="800" height="267" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:267,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/building-ai-ready-apis-with-agent-skills-tickets-1990383757398?aff=deepeng&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!nAr1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nAr1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nAr1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nAr1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77512a7b-9c4e-4e42-b1e0-1c12265d132b_800x267.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Join <strong>OpenAPI Ambassadors</strong> <a href="https://ch.linkedin.com/in/erikwilde">Erik Wilde</a> and <a href="https://ie.linkedin.com/in/frank-kilcommins">Frank Kilcommins</a> for a hands-on masterclass on building AI-ready APIs with agent skills, covering OpenAPI, Overlay, Arazzo, semantic discovery, deterministic workflows, and governance guardrails for agent-driven integrations. </p><p>&#128467;&#65039; July 1, 2026 &#183; 10:30 AM &#8211; 1:30 PM ET &#183; Online</p><p style="text-align: center;">Use code <strong>DEEPENG50</strong> for 50% off.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/building-ai-ready-apis-with-agent-skills-tickets-1990383757398?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/building-ai-ready-apis-with-agent-skills-tickets-1990383757398?aff=deepeng"><span>Register here</span></a></p><div><hr></div><h2>Agents discover APIs at runtime, developers do not</h2><p><a href="https://deepengineering.substack.com/p/building-agent-ready-apis-in-production">In our live interview</a>, Wilde gave one of the clearest framings for how agent consumption differs from developer consumption. Developers search for APIs when building an application, make a decision, and hardcode the integration so it stays consistent for the lifetime of the application. Agents search for APIs at runtime, every time they encounter a problem they need to solve, against a catalog that may contain hundreds of thousands of options across a large enterprise.</p><p>That changes the API problem from documentation quality to runtime selection. The consumer is no longer a skilled person who can fill in the gaps of a poorly written spec. It is a machine that acts on exactly what the contract says, nothing more and nothing less, and it does so without the accumulated context that a developer brings to the integration process.</p><p>Wilde illustrated the scale of this problem by sharing a recent experience with a car manufacturer operating roughly 50,000 APIs and 500,000 endpoints across the organization. The point is not that this number is exceptional. For a large enterprise with decades of accumulated systems and services, it is closer to the normal condition than most teams would like to admit. What changes with agents is the cost of that normal condition. When the consumer needs to find the right capability at runtime, the selection problem alone can make the API landscape effectively unusable without a serious restructuring of how capabilities are described, organized, and exposed.</p><h2>Agents cannot compensate for spec drift</h2><div class="pullquote"><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.linkedin.com/in/nandita-giri/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9qx9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9qx9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9qx9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9qx9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9qx9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg" width="266" height="266" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:768,&quot;resizeWidth&quot;:266,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Profile image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.linkedin.com/in/nandita-giri/&quot;,&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="Profile image" title="Profile image" srcset="https://substackcdn.com/image/fetch/$s_!9qx9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9qx9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9qx9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9qx9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F648dfec6-6b09-4770-990c-8670faeb30ec_768x768.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;Think of the API as a contract with a very literal, very curious machine.&#8221; &#8212; <a href="https://www.linkedin.com/in/nandita-giri/">Nandita Giri</a>, Senior Software Engineer at Microsoft</p></div><p><a href="https://www.linkedin.com/in/nandita-giri/">Nandita Giri</a>, Senior Software Engineer at Microsoft with prior engineering experience at Meta and Amazon, works across agentic AI and automation, and the pattern she observes across organizations working to become AI-ready is consistent and predictable. Teams invest in producing a good OpenAPI specification at launch, treat it as a first-class deliverable at the time of release, and then watch the specification and the actual API behavior silently diverge over the following months as the code evolves faster than the documentation does.</p><p>For developer-facing APIs, this drift is a manageable nuisance because developers notice the discrepancy, ask questions in Teams, Slack or a GitHub issue, and someone eventually updates the documentation before the next consumer runs into the same problem. But for agent-facing APIs, spec drift is not a nuisance. It is a silent failure mode that is exceptionally difficult to trace because agents have no mechanism for noticing the discrepancy between what the spec says and how the API actually behaves. They act on what the spec says, encounter failures they cannot interpret without the surrounding context that a developer would have, and either produce incorrect results or abandon the task entirely without surfacing a meaningful error to the system that called them.</p><p>The only way to stop that drift from compounding, Giri argues, is to treat the specification as a first-class part of the release process on every change, with CI pipelines that validate spec fidelity against actual runtime behavior before deployment proceeds, not as a quarterly audit task but as a gate that blocks release when the spec and the actual behavior have diverged.</p><p>Giri is equally specific about what good specifications actually require for agent consumption, and her examples are concrete enough to apply immediately. A field called status that returns values 1, 2, and 3 is useless to an agent unless the spec also documents that 1 means New, 2 means In Progress, and 3 means Completed, because the agent has no way to infer that mapping from the field name or the values themselves. An endpoint that documents only that it returns a 400 error for bad input, without specifying which input combinations trigger that response, leaves an agent unable to prevalidate its requests or recover gracefully when the error occurs. A rate limit that appears only in external documentation and not in the spec itself is invisible to any agent that has not been specifically trained on that external documentation. These are not edge cases that organizations can deprioritize. They are the normal state of most enterprise API specifications, and they are a primary reason why agents fail in ways that produce poor results without surfacing a clear explanation of what went wrong.</p><p>The same distinction applies on the API producer side. Standard linting tools check structure, including whether a description field exists, whether it meets a minimum length, and whether required parameters are present. That structural check is genuinely useful as a first line of defense, but it cannot evaluate whether a description is written in a way that helps an agent understand what the operation is actually for.</p><p>A field that passes every linting rule can still be useless to an agent if it describes what the endpoint does technically without explaining the intent a consumer would bring to it. Descriptions need to represent intent, including what somebody would use the operation for, what constraints apply, and how the agent should reason about the result. The gap between a description that passes a linting check and a description that an agent can act on reliably is the gap that most teams are not yet closing, and closing it requires evaluation mechanisms that go beyond pattern matching on the specification itself.</p><h2>Cross-service inconsistency breaks agent workflows</h2><div class="pullquote"><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="http://linkedin.com/in/swarnendurohan-gupta" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JvYd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!JvYd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!JvYd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!JvYd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JvYd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png" width="270" height="270" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:270,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Explore DevOps Insights from Rohan Gupta&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;http://linkedin.com/in/swarnendurohan-gupta&quot;,&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="Explore DevOps Insights from Rohan Gupta" title="Explore DevOps Insights from Rohan Gupta" srcset="https://substackcdn.com/image/fetch/$s_!JvYd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!JvYd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!JvYd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!JvYd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aebf22c-e52c-4f63-b5c6-90dd504787af_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;It&#8217;s not just about connecting the dots for AI agents. It&#8217;s about making sure they understand what those dots mean.&#8221; &#8212; <a href="http://linkedin.com/in/swarnendurohan-gupta">Rohan Gupta</a>, Principal Product Manager at Harness</p></div><p><a href="http://linkedin.com/in/swarnendurohan-gupta">Rohan Gupta</a>, Principal Product Manager at <a href="https://www.harness.io/">Harness</a>, approaches the same problem from the perspective of an organization managing APIs across many teams and many services. His concern extends beyond the quality of any individual specification to the consistency of API design across the entire landscape. When agents operate in enterprise environments, they rarely interact with a single service in isolation. They move through workflows that cross multiple services, passing data and decisions from one system to another, and every inconsistency between how different teams have designed their APIs adds friction at the exact points where agents need to reason about how to connect things together.</p><p>Gupta&#8217;s view is that API specifications must be well-annotated and thoroughly documented so that agents can understand and execute the tasks they are given with accuracy and clarity, and that the design sloppiness which developers could historically compensate for becomes a structural blocker when the consumer is a machine reading a schema as its only source of truth. Missing descriptions, vague parameter names, inconsistent error handling patterns, and exposed implementation quirks that make no sense outside the context of the original development team all force agents into guesswork, and agents that guess tend to fail in ways that are difficult to reproduce and harder to debug than the original error would have been.</p><p>The governance problem becomes harder at the cross-service level. If one service in an agent&#8217;s workflow provides ambiguous or outdated information, the agent can be misled into triggering actions on a completely separate system in ways that no individual team would have anticipated or authorized. Lifecycle management for APIs that agents consume cannot focus only on backward compatibility within a single service anymore. It has to account for the cross-platform consistency and auditability of changes across every service in every workflow that agents are permitted to traverse, which is a meaningful expansion of what API governance has historically required.</p><h2>APIs that work for developers fail agents in production</h2><div class="pullquote"><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.linkedin.com/in/mayankbhola/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Evb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Evb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Evb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Evb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Evb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg" width="264" height="264" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:340,&quot;width&quot;:340,&quot;resizeWidth&quot;:264,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Mayank Bhola &#8211; Founder, LambdaTest | Startup Profile 2026 | Inc42&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.linkedin.com/in/mayankbhola/&quot;,&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="Mayank Bhola &#8211; Founder, LambdaTest | Startup Profile 2026 | Inc42" title="Mayank Bhola &#8211; Founder, LambdaTest | Startup Profile 2026 | Inc42" srcset="https://substackcdn.com/image/fetch/$s_!-Evb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Evb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Evb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Evb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc010a6b-059a-4bf2-92a6-2007b6d92dfe_340x340.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;If you can&#8217;t explain why your agent made a decision, you&#8217;re not ready to go live.&#8221; &#8212; <a href="https://www.linkedin.com/in/mayankbhola/">Mayank Bhola</a>, Co-Founder and Head of Products at TestMu AI</p></div><p><a href="https://www.linkedin.com/in/mayankbhola/">Mayank Bhola</a>, Co-Founder and Head of Products at <a href="https://www.testmuai.com/">TestMu AI</a>, has a practitioner&#8217;s view of where the failure patterns actually surface when organizations move from building agentic systems in development to running them in production. The pattern he observes is consistent across teams and organizations. APIs that worked reliably for developer consumption fail at meaningful rates when agents start calling them, and the root cause is almost always constraints and rules that were documented in external guides or tribal knowledge rather than encoded explicitly in the specification itself, leaving agents with no mechanism for knowing those rules exist until they violate them and encounter a failure they cannot interpret.</p><p>The fix Bhola advocates for is not simply better documentation, because better documentation that lives outside the machine-readable contract is still invisible to agents. It requires rethinking how APIs surface information about their own behavior, making all constraints explicit within the spec itself and building API surfaces that are structured to reduce the cognitive overhead agents face when trying to understand what an endpoint does, when to call it, and what the consequences of calling it incorrectly might be. For organizations with established API landscapes, he recommends maintaining two parallel layers, with a legacy developer API preserving backward compatibility for existing integrations and an AI-optimized layer built on top of it that flattens nested data structures, makes all constraints and relationships explicit, and exposes capabilities at a level of abstraction that agents can act on without needing to combine multiple lower-level calls to accomplish a single business task.</p><p>Bhola believes the industry&#8217;s biggest blind spot is assuming that successful API consumption automatically leads to reliable agent behavior. In practice, many failures emerge after the API call succeeds. The agent selects the wrong tool, misinterprets context, follows an invalid reasoning path, or takes an action that technically satisfies the request but violates business intent. This is why validation infrastructure must be designed before deployment rather than after incidents occur.</p><p>Testing agentic systems requires teams to evaluate decision quality, tool selection accuracy, reasoning traceability, and behavioral consistency under changing conditions. The goal Bhola highlights is not just to verify outputs, but to understand whether the agent arrived at those outputs for the right reasons.</p><h2>Too many endpoints, not enough intent</h2><p>The structural problem underneath all of this is that most enterprise APIs are too fine-grained for agents to use reliably, even when every individual specification is perfectly written and maintained. As Wilde frames it, accomplishing anything meaningful often requires combining many different endpoints in a specific order that encodes implicit business logic which is obvious to a developer who understands the domain but entirely opaque to an agent that has only the API contracts to work from.</p><p>When doing something meaningful requires chaining thirty endpoints in the right sequence, agents become confused about how to combine them, inventive in ways that produce incorrect results, or they make errors partway through the sequence that cascade into larger failures that are difficult to unwind. Wilde&#8217;s position is that AI readiness requires reducing the number of endpoints agents are exposed to and improving the business alignment and intent-based nature of the APIs that remain, so that a workflow that wants to accomplish a task ideally needs only a single tool call rather than having to orchestrate many lower-level calls in the correct order. The solution he and his colleagues at Jentic are working toward is a workflow layer that sits above the existing fine-grained API landscape, exposing business-level capabilities that are designed for runtime discovery and agent consumption rather than for developer integration at build time.</p><p>This pattern already shows up in enterprise partner integrations. Organizations with complex APIs that they expose to partners face a specific version of the fine-grained problem, where a partner integrating with a large API surface has to understand the full landscape even when they only need a small part of it, and the engineering effort of that integration is significant enough to slow or block adoption entirely. </p><p>The solution Wilde describes is building purpose-built workflows for specific partners, so that a partner only needs to understand the workflows that were designed for their particular use cases rather than navigating the full API surface independently. The underlying APIs do not change. What changes is the layer of business-level capabilities that sits above them, designed for a specific consumer&#8217;s needs rather than for maximum flexibility across all possible consumers. The benefit for agents is the same as the benefit for partners, with fewer options to navigate, clearer intent at each step, and a much lower chance of combining things incorrectly.</p><p>The insight that makes this approach worth pursuing beyond its value for agents alone is one that Wilde makes explicit. This improvement is not only valuable for agents. Any developer who currently has to call fifteen underlying APIs to accomplish a task that should conceptually be a single operation would also benefit from a better-designed capability API on top of those underlying services. The investment in agent-readiness is an investment in the overall quality and usability of the API landscape, and the returns compound across every consumer of those APIs whether that consumer is a human developer or an autonomous agent running at runtime.</p><h2>The API layer is where the next two years are decided</h2><p>Wilde&#8217;s view of API lifecycle management is the right closing frame for this issue. Agents do not consume APIs the way developers do. They discover capabilities at runtime, decide whether a tool looks useful in the moment, and need machine-readable signals about what the API does, what constraints apply, what side effects it may trigger, and whether it is safe to keep using.</p><p>That changes how organizations need to think about versioning, deprecation, and governance. The old model assumes that a developer reads the documentation, notices a migration notice, and updates an integration on a schedule the team can manage. Agent-facing APIs need more of that information to be visible at runtime. If an API is being deprecated, if a capability is nearing sunset, or if a safer replacement exists, the consuming system needs a way to discover that signal before it makes a decision.</p><p>This is where API lifecycle management needs to move, and organizations that invest in the governance structures to support it now will be better positioned than those that wait for the pressure to become unavoidable. The agents are already in production, and the limiting factors are no longer model capability alone but integration, security, and operational scalability, which means the API layer is where the most consequential infrastructure work of the next two years will happen for most engineering organizations.</p><p>The same design assumption that broke enterprise APIs, that the consumer has context, judgment, and the ability to fill in gaps, is present in every other infrastructure layer that agents call at runtime. Wilde&#8217;s framing brings the issue back to a practical rule. Agents should not be used to compensate for infrastructure that fails to express intent, constraints, lifecycle state, or safe operating boundaries. The teams that build on infrastructure designed to make those signals explicit will ship more reliable agentic systems than those still working around infrastructure that was never designed for this kind of consumer.</p><div><hr></div><p>Thank you for reading this special issue of Deep Engineering on why the API layer has become the most consequential infrastructure problem in enterprise AI. </p><p>We&#8217;ll be back on Thursday with more expert-led content, and next month, on the first Tuesday of July, with another special issue.</p><p><strong>Keep building,<br></strong>Saqib Jan<br>Editor-in-Chief, Deep Engineering</p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #49: David Knickerbocker on Open Source Intelligence and Real-World AI Systems]]></title><description><![CDATA[Why messy, contradictory data changes how engineers should think about retrieval, judgment, and production AI]]></description><link>https://deepengineering.net/p/issue49-david-knickerbocker-open-source-intelligence-real-world-ai-systems</link><guid isPermaLink="false">https://deepengineering.net/p/issue49-david-knickerbocker-open-source-intelligence-real-world-ai-systems</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 28 May 2026 17:05:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b96406ea-9c17-4f34-9cc4-143870c16a5f_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="http://daily.dev/">All the dev content that matters, in one personalized feed</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="http://daily.dev/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b-4k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!b-4k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!b-4k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!b-4k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b-4k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg" width="800" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;http://daily.dev/&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!b-4k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!b-4k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!b-4k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!b-4k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db2d351-66d6-477a-aac7-b5c9cd3ef8fe_800x500.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="http://daily.dev/">daily.dev</a> is a professional network for developers, built around a personalized feed of the best content from across the dev ecosystem. Millions of developers use it to stay current with their stack, discover new tools and frameworks, and connect with a global community that shares what they're learning. </p><p>Whether you're an early-career engineer levelling up or a senior dev tracking what's next, <a href="http://daily.dev/">daily.dev</a> makes sure the signal reaches you - without the noise. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;http://daily.dev/&quot;,&quot;text&quot;:&quot;Join for free at daily.dev&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="http://daily.dev/"><span>Join for free at daily.dev</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>49th</strong> issue of Deep Engineering!</p><p>Earlier this month, CISA and its international cybersecurity partners released <em><a href="https://www.cisa.gov/resources-tools/resources/careful-adoption-agentic-ai-services">Careful Adoption of Agentic AI Services</a></em>, a guide for organisations adopting AI systems that can plan, use tools, access data, and act across digital environments. That changes the risk model because AI systems operating inside real workflows inherit risk from the surrounding data, permissions, tools, and context.</p><p>That risk is becoming easier to understand in practice. On 23 May 2026, Rohan Pandey of DigitalOcean and Archit Bhujang of Arizona State University published <em><a href="https://arxiv.org/abs/2605.24421">Poisoning the Watchtower</a></em>, which shows how logs, alerts, URLs, payloads, DNS queries, and usernames can carry attacker written instructions into LLM assisted security workflows.</p><p>AI systems do not only consume clean prompts from users. They consume context from operational systems, open web sources, documents, logs, tools, and knowledge bases that the model does not control. Once that context includes contradiction, deception, malicious text, or attacker controlled content, relevance alone becomes an unsafe target for retrieval and summarisation.</p><p><a href="https://www.linkedin.com/in/dkjapan">David Knickerbocker</a>, founder of <a href="https://www.verdantintel.com/">Verdant Intelligence</a> and author of <a href="https://www.packtpub.com/en-us/product/network-science-with-python-9781801073691">Network Science with Python</a> (Packt), builds systems for Open Source Intelligence (OSINT) environments where messy and adversarial data is normal. His perspective matters in this issue because the systems he builds separate observing from judging, treat claims as claims rather than facts, and preserve minority signals that simpler retrieval pipelines often discard.</p><blockquote><p>In <a href="https://deepengineering.substack.com/p/issue43-building-ai-that-sees-the-world-as-it-is-david-knickerbocker">issue 43</a>, we looked at Knickerbocker&#8217;s work on real-time knowledge graphs and AI systems that treat knowledge as a live stream of claims. Today&#8217;s issue continues that conversation with what OSINT teaches engineers about messy, adversarial data. You can also watch our interview or read the full Q&amp;A <a href="https://deepengineering.substack.com/p/knowledge-graphs-graphrag-and-real">here</a>.</p></blockquote><p>Let&#8217;s get started.</p><div><hr></div><p><strong><a href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng">Claude Code for Software Engineering</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5k27!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 424w, https://substackcdn.com/image/fetch/$s_!5k27!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 848w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png" width="900" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!5k27!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 424w, https://substackcdn.com/image/fetch/$s_!5k27!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 848w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5k27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e48a8b5-0cba-47a2-853b-baf70c32c7d7_900x300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Learn how to structure Claude Code with context, reusable skills, scoped instructions, and guardrails so it works reliably across real codebases and team workflows.</p><p>&#128467;&#65039; Friday, June 20 &#183; 10:30 AM EDT onwards</p><p style="text-align: center;"> Use code <strong>DEEPENG50</strong> for 50% off.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/claude-code-for-software-engineering-from-prompts-to-systems-tickets-1988571262176?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p>Expert Insights</p><h2>Building AI Systems That Handle Contradiction at Scale</h2><p><em>by <a href="https://in.linkedin.com/in/s-jan">Saqib Jan</a> with <a href="https://www.linkedin.com/in/dkjapan">David Knickerbocker</a></em></p><p>Most engineers building AI systems have never had to question whether their data source is working against them. The data comes, is processed, retrieved, and the system responds. The assumption underneath all of that is that the source is cooperative, that it was created to convey information accurately, stored in a format designed for retrieval, and that what comes back when you query it is at least an honest attempt at an answer. The problem is that assumption is so embedded in how most AI systems are designed that it never gets examined.</p><p><a href="https://www.linkedin.com/in/dkjapan">David Knickerbocker</a>, founder of <a href="https://www.verdantintel.com/">Verdant Intelligence</a> and author of <a href="https://www.packtpub.com/en-us/product/network-science-with-python-9781801073691">Network Science with Python</a> (Packt), builds systems for environments where data is not clean, settled, or cooperative. His AI systems ingest from the open web, across sources that contradict each other, where some information may be misleading, incomplete, or adversarial. The engineering challenge is not only making retrieval accurate. It is making the system useful when the real world refuses to behave like a clean dataset.</p><h3>The assumption that data is helpful</h3><p>Engineers who have worked primarily with internal databases, structured APIs, or carefully assembled training sets carry a baseline assumption that data is cooperative. It was created to convey information accurately, stored in a format designed for retrieval, and accessed through interfaces that return what was asked for. The job of the retrieval system is to find the right thing efficiently.</p><p>Open-source intelligence does not work this way. When ingesting from the open web at scale, some fraction of what arrives is wrong, some is deliberately misleading, and some represents one side of a contested claim. For Knickerbocker, the ingestion layer is not the right place to decide what is true. &#8220;You can have two different groups that are in opposition from each other,&#8221; he says. &#8220;One group will say this is the truth, and another group will say this is the truth, and they will be in direct conflict with each other.&#8221; The system&#8217;s job, in that moment, is to capture what is being claimed and preserve enough context for judgment to happen later.</p><div class="pullquote"><p>&#8220;The real world is a messy space. It is not just that websites disagree with each other. Websites also have malware. If you point your servers at websites and you just download everything that is on them, then you need to be prepared for the consequences of downloading malware.&#8221;</p></div><p>The practical design response is to treat the system as an observer rather than an adjudicator. Knickerbocker draws that line clearly. &#8220;My systems do not care who is right or wrong,&#8221; he explains. &#8220;They just do not. My systems are observers.&#8221; The point is not neutrality as a value statement. It is an architectural boundary. The system captures what is being said, keeps competing claims visible, and avoids collapsing observation into judgment too early.</p><p>This distinction matters far beyond open-source intelligence. Any AI system that draws on user-generated content, social media, news, or unstructured enterprise data is working with material that was not created to be machine-readable and was not vetted before ingestion. The assumption that the data is trying to help is not just wrong in those environments. It is a liability.</p><p></p><h3>Bigger clusters are not more important than smaller ones</h3><p>One of the quieter failures in production NLP systems is the treatment of minority signals as noise. A similarity-based retrieval system returns the most representative results, which in practice means the most common results. A clustering pipeline that surfaces the largest groups first will consistently deprioritize small but significant signals. In a world where the interesting thing is often the outlier, that is a serious problem.</p><p>In open-source intelligence specifically, this failure mode has consequences. A small cluster of claims pointing toward something dangerous is not less important because it is small. A single source saying something that contradicts the majority view is not less worth capturing because it is in the minority. &#8220;Bigger clusters are not more important than smaller clusters,&#8221; Knickerbocker observes. &#8220;In open source intelligence, everything matters, top to bottom.&#8221;</p><p>Drawing from his engineering experience building these systems, Knickerbocker ensures his APIs return full context rather than a ranked shortlist. &#8220;If you use a tool to do a search to find out something, you are getting a snapshot of time,&#8221; he says. His systems are designed to capture what he calls the heartbeat of the internet. &#8220;If I use my API... it is going to come back with 10,000 things. My APIs do not return 10. They return full context.&#8221; That creates a harder downstream problem because the question is no longer how to retrieve the best few results. It is how to make a large, shifting body of claims usable without discarding the signals that do not look dominant at first.</p><p>The parallel for general AI systems is specific and direct. Any retrieval or summarisation pipeline that privileges majority signal is making a judgment call that the most common view is the most relevant one. That judgment call is often wrong, and it is invisible because the discarded minority signal never surfaces.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>The difference between a claim and a fact</h3><p>Engineers trained on factual datasets tend to build systems that treat retrieved content as facts to be combined and presented. The underlying assumption is that if the source is credible and the retrieval is accurate, what comes back is true. In a contested information environment that assumption collapses immediately, and the design has to change with it.</p><p>Knickerbocker&#8217;s approach separates the task of capturing claims from the task of evaluating them. What a source says is observable. Whether what it says is correct requires judgment that depends on context, corroboration, and often human expertise that the system does not have. Turning that claim into an evaluated fact requires a different layer of judgment, and Knickerbocker is careful not to build that decision into the first act of ingestion. &#8220;I do not make that decision, and I do not allow my AI to make the decision what is true or what is false either,&#8221; he says. &#8220;I am more interested in what people are claiming is what is going on in the world.&#8221;</p><p>This design choice has a significant downstream consequence. It means the system can handle contradiction without breaking. Two sources saying opposite things about the same event are not a problem to resolve at the retrieval layer. They are two data points, both of which belong in the response. Knickerbocker simply logs these varied claims as parallel ribbons of information. The human or the downstream system that receives them can then apply judgment about which to act on, in what context, and with what confidence.</p><h3>The verification boundary</h3><p>One of the hardest design decisions in any AI system that works with real-world data is where to draw the line between surfacing an insight and making an actionable claim. The two feel similar at the output layer but require very different things from the system that produces them.</p><p>In our <a href="https://deepengineering.substack.com/p/knowledge-graphs-graphrag-and-real">live interview</a>, Knickerbocker was specific about where that line sits. &#8220;Everything that I do is intentional,&#8221; he shares. His real-time intelligence layer is built for awareness. It captures what is happening and surfaces it without making the final judgment on what should be done next. If a piece of intelligence looks actionable, the system does not automatically act on it. It surfaces the signal so a human or downstream process can decide whether it matters, who should see it, and what level of confidence is appropriate.</p><div class="pullquote"><p>&#8220;There are still certain parts that I like being a human being. Some things you just need to be aware of. Like, you do not need to respond to everybody. But it is good to know what is on the radar.&#8221;</p></div><p>In practice, this means that even when a piece of intelligence looks clearly actionable, the system does not act on it. It surfaces it. The routing of that intelligence to the right person or the right downstream process is a separate engineering and organisational problem, and conflating it with the retrieval problem produces systems that are either too conservative to be useful or too confident to be trusted.</p><p>This is a principle with broad application. AI systems that are asked to be both the observer and the actor tend to perform neither role well. Keeping the observation layer and the action layer separate, with a clear boundary between them, is one of the most reliable ways to build something that stays trustworthy as it scales.</p><h3>Entity extraction gets easier but never clean</h3><p>Entity extraction from clean text is comparatively well understood. The models are good, the cleanup is manageable, and the output is reliable enough for most downstream uses. Entity extraction from the open web at scale is a different challenge, not because the models are worse but because the data has properties that laboratory text does not.</p><p>Knickerbocker began this work in 2018, starting with part-of-speech tagging before NER models were mature, moving to spaCy as those models improved, and more recently using LLMs for extraction. The trajectory is one of improving reliability rather than changing fundamentals. &#8220;Entity extraction has improved a lot since 2015,&#8221; he notes. &#8220;I mostly have to just throw away less. I have less cleaning to do, and it gets things right a lot easier.&#8221;</p><p>What has not changed is the messiness. Natural language processing at scale on real-world text always produces noise. The question is how much noise is acceptable for the downstream use case and how to handle the cleaning efficiently. At the scale he describes from previous work, including entity extraction across internet-scale datasets, the cleaning cannot be purely manual. It has to be part of the pipeline rather than an editorial step applied after the fact.</p><p>He also flags a risk in the current extraction approach that is worth understanding. Older NLP models produced visible noise that engineers learned to catch and correct. LLM-based extraction produces outputs that look clean even when they are wrong, because the model is good at generating confident-looking text regardless of underlying accuracy.</p><div class="pullquote"><p>&#8220;LLMs are a little bit dangerous because the messiness goes away. People are a little bit more trusting of LLMs than older NLP. When you are using LLMs, everything just looks perfect. And that is kind of a dangerous downside too.&#8221;</p></div><p>The implication for engineers is that moving to LLMs for extraction does not reduce the need for validation. It makes validation harder to remember because the outputs no longer look like they need it.</p><h3>Building for the world that actually exists</h3><p>The thread running through Knickerbocker&#8217;s work is a commitment to grounding. He builds systems for the world as it is, not a cleaned version of it. That leads to a specific set of design choices: treat data as claims rather than facts, preserve minority signals, separate awareness from judgment, and let the system observe before any person or downstream workflow decides what to do next.</p><p>Those principles come from the kinds of environments Knickerbocker has worked in: data operations, cybersecurity, open-source intelligence, and production systems where the cost of getting something wrong is real. &#8220;The real world is a messy space,&#8221; he says. &#8220;Natural language processing is just messy. I have not seen it get really cleaned up yet.&#8221;</p><p>For engineers who have worked mostly with clean internal systems, that might sound like a warning about a narrow class of hard problems. It is broader than that. Any AI system that deals with content created by people, pulled from the web, generated by users, or routed through operational systems eventually has to confront the same condition. Real-world data is messy by default. The systems that handle it well are intentionally designed for that mess before it becomes a production failure.</p><div><hr></div><h3>In case you missed </h3><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;7b9be39e-b4b3-4942-92f8-1c092f6cf44f&quot;,&quot;caption&quot;:&quot;Real-time knowledge graphs, awareness before truth, and why an empty dataset is better than a hallucination&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Deep Engineering #43: David Knickerbocker on Building AI That Sees the World as It Is, Not as It Was&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-16T15:30:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/542c8988-3aa8-439a-94c1-20a10d857430_716x421.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/issue43-building-ai-that-sees-the-world-as-it-is-david-knickerbocker&quot;,&quot;section_name&quot;:&quot;Newsletter Issues&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:194401065,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:2,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d5bd6b9c-b1b5-4c08-84a4-9c2a022c147e&quot;,&quot;caption&quot;:&quot;This conversation with David Knickerbocker keeps returning to a single conviction: the best engineering starts with intentional problem definition, and most AI failures happen when teams rush to use a tool before understanding what they are actually trying to build.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Knowledge Graphs, GraphRAG, and Real-Time AI in Production with David Knickerbocker&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-15T12:30:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93b09a18-df5c-49af-93ca-6f4d45a26bdc_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/knowledge-graphs-graphrag-and-real&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:194390901,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/microsoft/graphrag">GraphRAG</a> &#8212; A graph-based retrieval pipeline for unstructured text</strong></p><p>GraphRAG helps teams preserve relationships across messy documents, conflicting claims, and large text collections before asking an LLM to answer.</p><p><strong>Highlights:</strong></p><ul><li><p>Builds knowledge graphs from unstructured text instead of relying only on isolated chunks.</p></li><li><p>Links entities, claims, and topics so retrieval can use structure, not just similarity.</p></li><li><p>Supports local and global search for both narrow evidence lookup and corpus-level synthesis.</p></li><li><p>Gives engineers a practical starting point for testing graph-based RAG patterns.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/microsoft/graphrag&quot;,&quot;text&quot;:&quot;Learn more about GraphRag&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/microsoft/graphrag"><span>Learn more about GraphRag</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://support.claude.com/en/articles/15167101-get-started-with-claude-compliance-api-integrations">Claude Compliance API Integrations</a> - Compliance API integrations help IT and security teams govern Claude across connected enterprise workflows.</p></li><li><p><a href="https://meet.modelcontextprotocol.io/2026/05">MCP Events Working Groups</a> - Gateway, transport, registry, and agents groups advanced protocol work around tool-connected AI systems.</p></li><li><p><a href="https://ragflow.io/docs/release_notes">RAGFlow v0.25.6</a> - Browser agents and RAPTOR AHC mode expand RAGFlow from document retrieval into web-aware ingestion workflows.</p></li><li><p><a href="https://github.com/qdrant/qdrant/releases/tag/v1.18.1">Qdrant v1.18.1</a> &#8212; Vector dimension validation before WAL writes reduces ingestion failure risk during async upserts.</p></li><li><p><a href="https://github.com/weaviate/weaviate/releases/tag/v1.38.0-rc.0">Weaviate v1.38.0-rc.0</a> - Nested object filtering and namespace support improve retrieval precision for structured, multi-tenant corpora.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Keep building,</p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #48: Erik Wilde on Agent-Ready APIs, Widespread MCP Adoption, and the OpenAPI Standards That Matter]]></title><description><![CDATA[On the abstraction level problem, the limits of linting, and why investing in your API foundation matters more than chasing the current delivery protocol]]></description><link>https://deepengineering.net/p/agent-ready-apis-mcp-adoption-openapi-standards</link><guid isPermaLink="false">https://deepengineering.net/p/agent-ready-apis-mcp-adoption-openapi-standards</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 21 May 2026 17:43:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d8a775e3-e4ed-4323-a21b-de0e1b0915e0_1266x530.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="https://www.eventbrite.co.uk/e/building-reliable-ai-agents-with-java-and-langchain4j-tickets-1987887565220?aff=deepeng">Building Reliable AI Agents with Java and LangChain4J</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/building-reliable-ai-agents-with-java-and-langchain4j-tickets-1987887565220?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xWNj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!xWNj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!xWNj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!xWNj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xWNj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/building-reliable-ai-agents-with-java-and-langchain4j-tickets-1987887565220?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xWNj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!xWNj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!xWNj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!xWNj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9600ceae-059d-47a6-8f52-348d94ae7467_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A hands-on workshop covering how to build production-grade AI agents using Java and LangChain4J.</p><p>&#128467;&#65039; Friday, June 13 &#183; 10:00 AM &#8211; 1:30 PM ET &#183; Online</p><p style="text-align: center;">2 for 1 deal is live. Use code <strong>DEEPENG50</strong> for 50% off.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/building-reliable-ai-agents-with-java-and-langchain4j-tickets-1987887565220?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/building-reliable-ai-agents-with-java-and-langchain4j-tickets-1987887565220?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p>&#9997;&#65039; <strong>From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>48th</strong> issue of Deep Engineering!</p><p>Google <a href="https://blog.google/innovation-and-ai/technology/developers-tools/managed-agents-gemini-api/">announced Managed Agents in the Gemini API</a> two days ago at Google I/O, making it possible to spin up an agent that can reason, use tools, execute code, and browse the web with a single API call. The infrastructure work that previously required teams to build and manage sandboxes, scaffolding, and execution environments is being abstracted away. The capability is in public preview and Google is clear that outputs should be reviewed before use in sensitive workflows, but the direction is quite clear. Deploying agents is getting significantly easier.</p><p>What is not getting easier at the same pace is making the APIs those agents will call worth calling. APIs designed for actual developers, who can tolerate ambiguous descriptions, infer intent from sparse documentation, and navigate hundreds of operations to find the right one, do not work the same way for agents. Agents are less reliable at resolving ambiguous API semantics, choosing among many overlapping operations, and safely composing actions without machine-readable contracts and guardrails.</p><p><a href="https://ch.linkedin.com/in/erikwilde">Erik Wilde</a>, Head of Enterprise Strategy at <a href="https://jentic.com/">Jentic</a> and OpenAPI Ambassador at the <a href="https://www.openapis.org/">OpenAPI Initiative</a>, has spent considerable time on solving for that gap. We spoke with Wilde about what agent-ready actually means in practice, and he explained from his engineering purview why MCP will not fix a poorly designed API foundation, and what platform engineers should start planning for today.</p><blockquote><p>The expert insights in today's issue are based on our recent live interview with Wilde and you can read or watch the full Q&amp;A <a href="https://deepengineering.substack.com/p/building-agent-ready-apis-in-production">here</a>.</p></blockquote><p>Let&#8217;s get started.</p><div><hr></div><h4 style="text-align: center;"><strong>Featured Newsletter: <a href="https://machinelearningatscale.substack.com/">Machine Learning at Scale.</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://machinelearningatscale.substack.com/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GrnZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GrnZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GrnZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GrnZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GrnZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg" width="316" height="264.21966341895484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:944,&quot;width&quot;:1129,&quot;resizeWidth&quot;:316,&quot;bytes&quot;:205590,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://machinelearningatscale.substack.com/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/198600531?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GrnZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GrnZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GrnZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GrnZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6adb71-dd8c-4a45-a8b2-2f452b0654fd_1129x944.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Are you a SWE looking to upskill into ML systems? Get high quality ML system design content delivered to your inbox. Learn how to design and scale Machine Learning Systems.</p><p><strong>Subscribe to <a href="https://machinelearningatscale.substack.com/">Machine Learning at Scale</a></strong></p><div><hr></div><p><strong>&#129504; Expert Insights</strong></p><h2><strong>Your APIs Are Not Ready for Agents, and MCP Will Not Fix That</strong></h2><p><em>by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;3709f44c-b30e-491a-b737-39d98482143a&quot;}" data-component-name="MentionToDOM"></span> with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Erik Wilde&quot;,&quot;id&quot;:149691045,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87e21c23-bc24-4b52-8b8a-3146d31edbee_3024x3024.jpeg&quot;,&quot;uuid&quot;:&quot;3916d049-523c-4e50-a490-8dd50c6c08df&quot;}" data-component-name="MentionToDOM"></span> </em></p><p>The conversation about AI agents in enterprise software dominates engineering mindshare as to how agents will consume APIs and what it actually takes to make that consumption work reliably. Most organisations have taken the shortcut. They have built an MCP server, pointed it at their existing API landscape, and told themselves the agent problem is solved. <a href="https://ch.linkedin.com/in/erikwilde">Erik Wilde</a>, Head of Enterprise Strategy at <a href="https://jentic.com/">Jentic</a> and OpenAPI Ambassador at the <a href="https://www.openapis.org/">OpenAPI Initiative</a>, thinks that is the wrong bet, and his reasoning is specific enough to be useful.</p><p>&#8220;Whatever you invest in better APIs becomes useful for everybody,&#8221; Wilde affirms. &#8220;If you invest specifically in MCP, that investment is effectively scoped to LLM consumers.&#8221; The point is not that MCP is useless. It is that MCP is a delivery mechanism, and delivery mechanisms change. The API foundation underneath it does not change nearly as quickly, and if that foundation is poorly designed for the agents that will eventually consume it, no amount of tooling stacked on top of it will compensate. The organisations that will be in the strongest position in two years are the ones investing in the foundation now, not the ones chasing the current delivery protocol.</p><h3>The abstraction level problem</h3><p>The clearest way to understand what makes an API agent-ready is to look at a concrete example, and Wilde in our interview offered one that makes the problem immediately legible. The <a href="https://docs.github.com/en/rest">GitHub REST API</a> currently has around 1,100 operations. That is not unreasonable for a product as complex as GitHub. A developer can navigate 1,100 operations because they bring context, experience, and the ability to read documentation and infer intent. They know roughly what they are looking for and they can work toward it even when the path is not obvious.</p><p>An agent does not work that way. &#8220;For an agent to work directly with that GitHub API is pretty complex,&#8221; Wilde points out, &#8220;because a lot of those operations need to be combined in a certain way to result in the workflows that you really want to accomplish on GitHub.&#8221; The agent has to figure out not just what each individual operation does but how they compose, in what order, under what conditions, and with what dependencies. With 1,100 operations, the combinatorial space of possible workflows is enormous, and agents navigating it without guidance will produce unreliable results.</p><p>Now look at the GitHub MCP server, which has around 70 tools. Each of those tools represents a higher-level workflow, something a developer might actually want to accomplish on GitHub rather than a low-level operation that contributes to that accomplishment. The reduction from 1,100 to 70 is not a loss of capability. It is a gain in usability for the specific class of consumer that is trying to get things done rather than explore a surface. &#8220;What I would say,&#8221; Wilde argues on this point, &#8220;is that if you had a genuinely agent-friendly GitHub API, it might also just have around 70 operations.&#8221; The MCP server is not adding something new. It is providing the abstraction level that the underlying API should have provided in the first place.</p><p>This is the abstraction level problem, and it is the most important design question for engineering teams building API infrastructure that agents will consume. The APIs that were designed for developer flexibility, with many fine-grained operations that compose in powerful ways, are exactly the wrong shape for agents that need to accomplish specific goals reliably. The discipline of designing for agents is the discipline of asking what a consumer actually wants to accomplish and surfacing that at the API level, rather than exposing every atomic capability and leaving the composition to the consumer.</p><h3>What agent-ready actually means</h3><p>The properties that follow from the abstraction level insight are consistent and actionable. An API designed for agent consumption should not be too fine-grained, and its descriptions should be intent-based and written at a level that is meaningful for a language model rather than just technically accurate for a developer who already knows the domain. It should have examples, ideally multiple examples per operation rather than one, because examples are one of the most reliable ways for a model to understand what an operation actually does in practice. Its error messages should be meaningful enough that an agent encountering a failure has enough information to understand what happened and what it might do next.</p><p>&#8220;If an AI agent looks at a poorly described API and cannot figure out how it works, it will just move on to the next one,&#8221; Wilde notes. &#8220;It has less context. It has less experience. It does not really know as well as an actual developer what to do.&#8221; This is the practical consequence of the abstraction level problem at the description level. A developer reading a sparse API description can fill in the gaps from domain knowledge and engineering experience. An agent cannot do that reliably, and the result is not a helpful error or a clarifying question. It is a silent failure or a wrong action.</p><p>Wilde and his team have built a scoring mechanism for API readiness that makes these dimensions concrete. The scoring uses a combination of standard linting, running tools like <a href="https://stoplight.io/open-source/spectral">Spectral</a> and <a href="http://redocly.com/">Redocly</a> to check structural conditions, and LLM-based checks that evaluate whether descriptions are written in a way that is genuinely useful for an agent rather than just present. The distinction matters because a description that exists and passes a structural check may still be useless for an agent if it describes what an operation does technically without explaining what a consumer would use it to accomplish. &#8220;These descriptions need to represent intent,&#8221; Wilde highlights. &#8220;What is the intent of somebody who would use this operation?&#8221;</p><h3>Linting though necessary is not sufficient</h3><p>Linting has become standard practice in well-run API programs, and Wilde endorses it as a first line of defense. The popular tools are capable and in some cases open source, and the practice of defining shared rule sets that teams can discuss, extend, and maintain in version control is genuinely useful. But in our conversation he was clear that linting alone does not get you to agent-ready, and teams that treat it as the complete solution are leaving the most important problems unaddressed.</p><p>The structural checks that linting tools perform are exactly that. They can tell you whether a description field exists and whether it meets a minimum length requirement, but they cannot tell you whether the description is written in a way that helps an agent understand what the operation is for. They can flag a missing example but cannot evaluate whether the examples present give a model enough signal to use the operation correctly in a novel context. The gap between what linting checks and what agent readiness requires is the gap between structure and meaning, and closing it requires evaluation mechanisms that go beyond pattern matching on OpenAPI descriptions.</p><p>Wilde also makes an important point about rule set governance that is worth taking seriously. &#8220;I am not a big fan of just reusing existing rule sets,&#8221; he contends. &#8220;I would always say start owning this, build up your own in a collaborative fashion.&#8221; The Zalando and Adidas rule sets that circulate in the API community are useful references, but they were built for specific contexts and specific quality standards. Adopting them wholesale means inheriting decisions that were made for a different organisation&#8217;s constraints. The value of a rule set comes not just from the rules it contains but from the process by which those rules were agreed upon, which is a process that builds shared understanding of what good API design actually means in a particular context.</p><h3>MCP is a delivery mechanism, not a foundation</h3><p>MCP has been growing fast. It is now <a href="https://aaif.io/">under the Linux Foundation</a>, major model providers support it, and a growing number of enterprise vendors are shipping MCP servers as a standard part of their product offering. For engineers deciding where to invest, it looks like an obvious answer to the question of how to make APIs accessible to agents.</p><p>Wilde&#8217;s skepticism is not about MCP&#8217;s current momentum. It is about what MCP is and what it is not. &#8220;MCP is the current delivery mechanism,&#8221; he says. &#8220;You need a delivery mechanism, but I would not build too many things that are MCP-specific.&#8221; At Jentic, the team supports MCP because it is what the market expects right now, but they have deliberately avoided deep investment in MCP-specific infrastructure. If MCP were replaced by something else, the transition would be straightforward because the underlying work, making APIs well-described, well-structured, and semantically rich, would carry over entirely. That work is not MCP-dependent. It is foundational.</p><p>The risk for teams that invert this priority is real. Building an MCP server on top of a poorly designed API landscape means the MCP server inherits all of those same problems. Operations that are too fine-grained stay too fine-grained, descriptions that lack intent stay unreadable to a model, and error messages that tell a human nothing tell an agent even less. The wrapper changes the protocol by which those problems reach the agent, not the problems themselves.</p><h3>Open standards outlast any delivery protocol</h3><p>One of the clearest threads in Wilde&#8217;s thinking is the value of building on open standards rather than specific tools or protocols. This is not an abstract preference for openness. It is a practical argument about optionality. Teams that build their API practices on <a href="https://www.openapis.org/">OpenAPI</a>, <a href="https://www.openapis.org/arazzo-specification">Arazzo</a>, and <a href="https://learn.openapis.org/overlay/">Overlays</a> are building on specifications that are independent of any vendor, any model provider, and any current delivery protocol including MCP. When the next delivery mechanism arrives, or when the current tooling landscape shifts, the foundation remains.</p><p><a href="https://www.openapis.org/arazzo-specification">Arazzo</a> is worth understanding in this context. It is a workflow language published by the OpenAPI Initiative that allows you to describe sequences of API interactions in a standardised format. If accomplishing a particular goal requires calling five endpoints in a specific order with specific dependencies, Arazzo is the language for expressing that. For agents, which struggle with exactly this kind of multi-step composition, a well-constructed Arazzo workflow is one of the most useful things an API producer can provide. &#8220;Figuring out multi-step workflows is one of the hardest things for agents to do right now,&#8221; Wilde says, &#8220;and Arazzo is genuinely good at describing those. We just need to make it discoverable.&#8221;</p><p>Overlays, the third specification from the OpenAPI Initiative, provides a way to express changes to an OpenAPI description in a standardised diff format. &#8220;We use overlays,&#8221; Wilde shares, &#8220;to deliver improvement suggestions alongside API scores. When the scoring mechanism identifies that an API is not well-designed for AI consumption, it also produces an Overlay that shows exactly what would need to change to improve it.&#8221; That makes the gap between current state and agent-ready state concrete and actionable rather than a list of abstract recommendations.</p><h3>The APIs you design today will still be running in two years</h3><p>The practical implication of everything Wilde argues is a specific recommendation about timing. API landscapes change slowly. Whatever is designed or changed today will likely remain largely unchanged for one to three years. Agents are arriving in enterprise contexts incrementally but consistently. The customer support and HR agents that are already deployed broadly are the early wave, and the business agents with genuine decision-making authority are behind them.</p><p>&#8220;API landscapes evolve slowly,&#8221; Wilde says. &#8220;Whatever you design or change today, you will probably have around for a year or two or three before you touch it again.&#8221; The teams that start building API readiness for agents now are the teams whose infrastructure will be in the right shape when agents with more capability and more authority arrive. The teams that wait for agents to become mainstream before improving their APIs will find themselves doing expensive remediation work on a landscape that is already in production and already depended upon.</p><p>The recommendation is not to stop shipping features or to redesign everything at once. It is to make agent readiness a standard consideration in the decisions that are already being made. When writing a new operation, write the description for an agent as well as for a developer. When adding examples, add enough that a model can generalise. When defining error responses, add enough context that a consumer without domain knowledge can understand what happened. These are not large investments per decision and they compound over time into an API landscape that agents can actually use.</p><p>To this end, &#8220;All the platform people out there who are building API platforms or doing platform engineering,&#8221; Wilde says, &#8220;think about how all of this will change if you have more and more agentic actors and consumers in your organisation, and start planning for that today, even if you can say that right now you do not have it this much and it is going to be another year or two. It is going to arrive.&#8221;</p><div><hr></div><h3>In case you missed</h3><p><em>Here&#8217;s the full Q&amp;A with the interview video featuring Erik Wilde.</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;77abce22-b4ff-4d42-963d-6a98b9f31593&quot;,&quot;caption&quot;:&quot;Erik Wilde joined Deep Engineering Live interview session to talk about OpenAPI 3.2, what agent-ready APIs actually look like, and why he is more skeptical about MCP than most people expect.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building Agent-Ready APIs in Production with Erik Wilde&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:149691045,&quot;name&quot;:&quot;Erik Wilde&quot;,&quot;bio&quot;:&quot;Erik Wilde works in digital transformation and API management. Erik is the author of many articles, books, and speaks at conferences around the globe. His \&quot;Getting APIs to Work\&quot; YouTube channel provides updates about technologies, tools, and events.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87e21c23-bc24-4b52-8b8a-3146d31edbee_3024x3024.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://gettingapistowork.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://gettingapistowork.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Getting APIs to Work&quot;,&quot;primaryPublicationId&quot;:1702325}],&quot;post_date&quot;:&quot;2026-05-20T20:06:57.058Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/iJXKkD5ySsY&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/building-agent-ready-apis-in-production&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:198599140,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/stoplightio/spectral">Spectral</a></strong> &#8212; open-source JSON and YAML linter with built-in support for OpenAPI, Arazzo, and AsyncAPI</p><ul><li><p>Validates OpenAPI v3.1, v3.0, v2.0, Arazzo v1.0, and AsyncAPI v2.x out of the box.</p></li><li><p>Supports fully custom rule sets, letting teams build and own their own governance standards.</p></li><li><p>Integrates with VS Code, JetBrains, GitHub Actions, and Azure API Center for shift-left linting.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/stoplightio/spectral&quot;,&quot;text&quot;:&quot;Learn more about Spectral&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/stoplightio/spectral"><span>Learn more about Spectral</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://blog.google/innovation-and-ai/technology/developers-tools/managed-agents-gemini-api/">Google Managed Agents now in Gemini API</a> - A single API call now provisions an ephemeral Linux sandbox with code execution, web browsing, and tool use built in.</p></li><li><p><a href="https://www.cncf.io/blog/2026/05/05/announcing-kyverno-release-1-18/">Kyverno 1.18 released post-CNCF graduation</a> - First post-graduation release patches two SSRF CVEs and adds cleanup policy support to the Kubernetes policy engine.</p></li><li><p><a href="https://openai.com/index/dell-codex-enterprise-partnership/">OpenAI and Dell bring Codex to on-premises enterprise</a> - The partnership makes the Codex coding agent available in hybrid and air-gapped enterprise environments for the first time.</p></li><li><p><a href="https://cloud.google.com/blog/topics/developers-practitioners/io26-news-for-agent-developers-on-google-cloud">A2A protocol underpins Google&#8217;s full agent stack</a> - Agents built at any abstraction level can be called as sub-agents across the entire Google Cloud agent platform.</p></li><li><p><a href="https://www.devopsdigest.com/almost-half-of-ai-generated-code-fails-in-production">43% of AI-generated code fails in production</a> - Survey of 200 SRE leaders finds teams average three production redeploy cycles to verify a single AI-suggested fix.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you so very much for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome,</p><p>Saqib Jan</p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a><em>.</em></p><p></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #47: Evan Williams on Why Experienced Developers Have the Hardest Time Learning Rust]]></title><description><![CDATA[On the borrow checker as a design tool, the object-oriented trap, and why the engineers who struggle most with Rust are often the most experienced ones]]></description><link>https://deepengineering.net/p/deep-engineering-47-why-experienced-developers-hardest-time-learning-rust</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-47-why-experienced-developers-hardest-time-learning-rust</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 14 May 2026 16:42:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/43a42d88-ec70-4d7f-8213-85796343b4f5_677x337.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="https://www.eventbrite.co.uk/e/eval-driven-development-for-engineers-tickets-1987673491921?aff=deepeng">Eval Driven Development for Engineers</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/eval-driven-development-for-engineers-tickets-1987673491921?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ogRK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ogRK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ogRK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ogRK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ogRK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/eval-driven-development-for-engineers-tickets-1987673491921?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ogRK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ogRK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ogRK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ogRK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e501442-5ce4-4dd6-b286-3b65f129b544_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This hands-on workshop teaches you to build reliable, production-ready AI systems using eval-driven development. Taught by <a href="https://www.linkedin.com/in/cloudanum/">Imran Ahmad</a>, Data Scientist and author of <em><a href="https://www.packtpub.com/en-us/product/50-algorithms-every-programmer-should-know-9781803246475?srsltid=AfmBOorcXTtocMMH1oL6pNvZ19CwHKuqSCqPVNf-C0khptLyBqafs9Dh">50 Algorithms Every Programmer Should Know</a></em>.</p><p>&#128467;&#65039; May 30 &#183; 11:00 AM &#8211; 3:30 PM ET </p><p style="text-align: center;">Use code <strong>EDD50</strong> for 50% off.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/eval-driven-development-for-engineers-tickets-1987673491921?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/eval-driven-development-for-engineers-tickets-1987673491921?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>47th</strong> issue of Deep Engineering!</p><p>Debian&#8217;s APT package manager is moving toward the Rust threshold its maintainers set more than six months ago. APT maintainer Julian Andres Klode<a href="https://lists.debian.org/debian-devel/2025/11/msg00188.html"> announced on the Debian developer mailing list</a> that hard Rust dependencies and Rust code would be introduced no earlier than May 2026, citing memory safety and stronger unit testing as reasons to move core parsing and signature-verification paths toward Rust and the Sequoia ecosystem. For a tool that underpins Debian, Ubuntu, and their many derivatives, this is not a marginal adoption story. It is Rust moving into infrastructure that enormous numbers of systems rely on every day.</p><p>That kind of decision does not get made because Rust is fashionable. It gets made because the language can shift whole classes of errors from production failures into compile-time constraints. That is precisely the argument <a href="https://www.linkedin.com/in/evan-williams-1512092">Evan Williams</a>, senior software engineer and author of <a href="https://www.packtpub.com/en-us/product/design-patterns-and-best-practices-in-rust-9781836209461">Design Patterns and Best Practices in Rust</a>, makes in this week&#8217;s issue. We spoke with Williams about what it actually takes to think in Rust, why the borrow checker is a design tool rather than a compiler obstacle, and why he found it harder to write bad Rust than good Rust when working on the book. You can <a href="https://deepengineering.substack.com/p/design-patterns-ownership-models-resilient-systems-rust-evan-williams">watch our interview or read the full Q&amp;A here</a>.</p><p>Let&#8217;s get started.</p><div><hr></div><h4 style="text-align: center;"><strong>Featured Newsletter: </strong><a href="https://www.devopsbulletin.com/">DevOps Bulletin</a></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vvSm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vvSm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vvSm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vvSm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vvSm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vvSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png" width="313" height="313" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:313,&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_!vvSm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vvSm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vvSm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vvSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feea1899b-2d52-43a6-adb8-ef38edd7ea42_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you work across DevOps, Cloud Native, AI and security and want a weekly read that surfaces the most relevant open-source tooling, stories, and insights in the space, <a href="https://www.devopsbulletin.com/">DevOps Bulletin</a> is worth adding to your reading list.</p><p><strong><a href="https://www.devopsbulletin.com/">Subscribe to DevOps Bulletin</a></strong></p><div><hr></div><p><strong>Expert Insights</strong></p><h2>Rust Makes It Harder to Write Bad Code Than Good Code</h2><p><em>by <a href="https://in.linkedin.com/in/s-jan">Saqib Jan</a> with <a href="https://www.linkedin.com/in/evan-williams-1512092">Evan Williams</a></em></p><p>Most engineers who struggle with Rust describe the same experience. The compiler rejects code that would compile without complaint in C++ or Java, and the borrow checker surfaces errors that feel arbitrary until, gradually, they start to feel like something else entirely. <a href="https://www.linkedin.com/in/evan-williams-1512092">Evan Williams</a>, author of <em><a href="https://www.packtpub.com/en-nz/product/design-patterns-and-best-practices-in-rust-9781836209461">Design Patterns and Best Practices in Rust</a></em> (Packt), has a precise name for what they are. They are design feedback, not feedback about syntax or style, but about the structure of the program itself, the shape of data flow, the discipline of ownership, and the decisions about who controls what and for how long. &#8220;Rust is your partner in doing that,&#8221; Williams says. &#8220;You can still write code with bugs in it, but Rust makes it harder to do that and easier to write code that&#8217;s going to be solid.&#8221;</p><p>That framing changes how to think about the borrow checker, and it changes how to think about what Rust actually is. Most languages make it easy to write code that works in isolation. Rust makes it hard to write code that fails in combination, and the difference matters more as systems grow.</p><h3>The borrow checker is enforcing design, not syntax</h3><p>Most engineers who pick up Rust treat borrow checker errors as obstacles to route around. The instinct is understandable because in Java or Python, the path from a failing compiler error to working code runs through adjustment: find what the compiler dislikes, change it, move on. Rust works differently, and engineers who apply the same strategy find that routing around the borrow checker is possible in the short term and damaging in the long term.</p><p>&#8220;The borrow checker is your friend because it prevents you from making a messy design. It prevents you from making a broken design. It prevents you from writing whole classes of bugs that you will then spend many hours trying to find,&#8221; Williams says. &#8220;I have found it to be an incredible partner in writing code that allows me to sleep at night.&#8221;</p><p>The reason the borrow checker behaves this way is structural. Java and Python allow data to be accessed from many places at once, which gives engineers flexibility but leaves the responsibility of managing that access entirely with the programmer. Rust removes that flexibility. A value has one owner. References are either shared and immutable or exclusive and mutable, never both at the same time. This constraint forces the programmer to be explicit about who owns what and when, because the compiler will not let the program proceed otherwise. The practical consequence is that programs which compile in Rust tend to have a quality that programs in other languages achieve only through discipline: their data flows are explicit. You can read a Rust program and understand, without running it, who controls which piece of state, when that control transfers, and what happens at the boundary.</p><p>&#8220;The principles that the borrow checker forces you to adhere to in Rust are the exact principles that you should be using in every programming language,&#8221; Williams reasons. &#8220;But you don&#8217;t have to. So it&#8217;s very easy to not think about those things.&#8221;</p><h3>The object-oriented trap</h3><p>The single most common mistake engineers make when getting started with Rust is treating it as an object-oriented language. It resembles one superficially, with structs, methods, and something that looks like encapsulation, but it has no inheritance, no abstract base classes, and no shared mutable state by default. An engineer who brings a Java or C++ mental model will find that the things they reach for instinctively are either unavailable or actively counterproductive.</p><p>&#8220;If you carry with you an object-oriented language mindset, then you&#8217;re going to have nothing but trouble,&#8221; Williams says. &#8220;The more experienced you are, the more years you have doing something in some other language, the more trouble you&#8217;re likely to have, because you have patterns of thought that come from those languages that you don&#8217;t even realize are there.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.packtpub.com/en-in/product/rust-for-c-developers-9781836206514" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1avs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1avs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1avs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1avs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1avs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg" width="317" height="391.3862815884477" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:342,&quot;width&quot;:277,&quot;resizeWidth&quot;:317,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rust for C++ Developers: Leverage your C++ expertise to write safer and faster systems code in Rust&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.packtpub.com/en-in/product/rust-for-c-developers-9781836206514&quot;,&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="Rust for C++ Developers: Leverage your C++ expertise to write safer and faster systems code in Rust" title="Rust for C++ Developers: Leverage your C++ expertise to write safer and faster systems code in Rust" srcset="https://substackcdn.com/image/fetch/$s_!1avs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1avs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1avs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1avs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d048692-ae54-47fa-9dfa-9c28d2b605a0_277x342.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://www.packtpub.com/en-in/product/rust-for-c-developers-9781836206514">Rust for C++ Developers</a></strong></figcaption></figure></div><p>This is a precise observation about how expertise transfers, or fails to. An engineer with ten years in Java has a large inventory of solutions to common problems, and most of those solutions depend on inheritance, shared mutable references, or runtime polymorphism through interfaces. In Rust, none of those approaches work as expected. The patterns are not wrong in their original context. They are wrong for this one, and the difficulty is that the engineer applying them does not recognize the mismatch until the borrow checker makes it unavoidable.</p><p>The design patterns that experienced engineers carry into Rust need to be examined before use, not applied by default. Some evolve into new forms because Rust&#8217;s enums and advanced generics make several classical patterns either less necessary or unnecessary entirely. Others require fundamental rethinking. The Singleton pattern, useful enough in Java and Python that engineers reach for it without deliberation, tends to become either redundant or actively problematic in Rust. &#8220;In Rust, it tends to be either completely unnecessary because other features of the language make it unneeded, or it tends to encourage designs that are really not necessary and where a much better approach could be used,&#8221; Williams says.</p><p>The replacement for inheritance in most cases is traits, which provide polymorphism without the coupling that comes from sharing a class hierarchy. The discipline required to work with traits well is the same discipline the borrow checker enforces on data: think about the boundaries, be explicit about what crosses them, and design the structure before writing the code.</p><h3>Ownership as architecture</h3><p>The ownership model does more than prevent bugs at the function level. It shapes the architecture of the system, because the rules that apply to individual values apply at every level of scale. A program that handles data ownership correctly in a single function has to handle it correctly across modules, across threads, and across the boundaries between components. The borrow checker enforces this at compile time, which means architectural decisions that in other languages can be deferred until the system grows large enough to break start being made from the beginning.</p><p>&#8220;You need to think about who controls what, how it is controlled, and you need to start from the very beginning thinking about the boundaries of your program and the system architecture, dividing things up into areas of responsibility,&#8221; Williams says. &#8220;Because unlike Python or Java, you can&#8217;t have links going all over the place. The borrow checker is never going to accept that.&#8221;</p><p>This constraint produces a specific architectural tendency in well-written Rust systems: data flows in one direction. Rather than components that hold references to each other in a web of mutual dependency, Rust systems tend toward chains of ownership that move in one direction and do not loop back. &#8220;By saying, I have a chain of ownership that moves down but never moves back up, you are now much more likely to have a system that is going to work,&#8221; Williams says. &#8220;Data flowing down is something that feels natural and smooth and just works. Data trying to fight the stream back up is going to end up giving you problems because the borrow checker is not going to like you.&#8221;</p><p>The architectural benefit of this tendency is legibility as much as correctness. A system where data flows in one direction is a system where behavior is predictable from the structure, and debugging does not require reconstructing who might have modified a value and when, because the ownership model makes that history explicit. </p><p>Williams illustrates this with an <a href="https://www.packtpub.com/en-nz/product/design-patterns-and-best-practices-in-rust-9781836209461">example from his book</a>, a miniature publish-and-subscribe system built to resemble Kafka at a much smaller scale. &#8220;Because Rust has move semantics, you know that if something leaves here and goes here, it&#8217;s now not here anymore. It&#8217;s there. There&#8217;s no question about things like having references dangling or anything like that. The clarity of things moving through the system, the clarity of being able to have immutable data in a lot of places and knowing who can and can&#8217;t modify any piece of data, it just makes the design of the system so clear and it makes it so much harder to make a system that doesn&#8217;t work,&#8221; he says.</p><h3>The typestate pattern</h3><p>The most underutilized expression of this architectural discipline in Rust is one that Williams returns to with visible enthusiasm. The typestate pattern uses the type system to encode the state of a value at compile time in a way that makes invalid state transitions not just errors but programs that will not compile.</p><p>&#8220;It&#8217;s a way of developing state machines and systems that have state that evolves where invalid state transitions aren&#8217;t just errors, they&#8217;re impossible to write. The compiler won&#8217;t compile them,&#8221; Williams says. &#8220;It represents a huge advance in the way that such systems are written because now instead of runtime errors, you have a state machine that is guaranteed to work because every transition either is a valid transition or it won&#8217;t even compile. That&#8217;s an amazing thing.&#8221;</p><p>The typestate pattern was not invented for Rust, but the language&#8217;s ownership system and its handling of types make it practical in a way that other languages do not. The result is that a class of bugs that normally surfaces at runtime, invalid transitions through a state machine, surfaces instead at compile time, before the program runs. For systems where correctness is not optional, this is a material improvement. &#8220;Not invented for Rust, but it fits Rust so perfectly, it&#8217;s hard to believe it,&#8221; Williams says.</p><h3>What this requires in practice</h3><p>None of this comes without a cost. The discipline that Rust enforces at compile time is discipline that engineers have to supply at design time, and for teams moving from other languages the transition is genuinely difficult. Williams is specific about where the difficulty concentrates. Velocity drops during the learning period, often enough that teams take it as a signal that the decision was wrong, and it usually is not. &#8220;Once the team becomes very well acquainted with Rust, velocity can increase dramatically, but there is a period of time where it seems like things have gotten worse,&#8221; he says.</p><p>The answer for most teams is to start with a small, non-critical piece of work rather than a rewrite of an existing system, with the goal of building familiarity in a context where the cost of roadblocks is low and then expanding from there. &#8220;What you don&#8217;t want to do is jump into saying, we&#8217;re just going to rewrite our project in Rust now. Pick a small piece, focus on that, gain confidence and mastery of the language, and then use that to build upon it and start bringing in more things,&#8221; Williams says.</p><p>There are also cases where Rust is the wrong tool. Prototyping benefits from the flexibility that Python provides and that Rust does not. Environments where the tooling is incomplete are not the right place to fight the language and the Rust ecosystem, while growing rapidly, still has gaps where Java or C libraries are well established. User interfaces are the clearest current example. But in systems where failure is expensive, where correctness cannot be approximated, and where the code has to remain understandable as the team around it changes, Rust&#8217;s constraints are not a cost. They are the point.</p><h3>The harder thing to write</h3><p>The most revealing observation Williams made came not from a question about patterns or architecture but from the experience of writing the early chapters of his book, the ones about what not to do. He went back and tried to write bad Rust deliberately, the kind of code that would illustrate the mistakes he was cautioning against, and it was harder than he expected.</p><p>&#8220;When I went back and tried to write bad code in Rust, it was much harder than writing the good code,&#8221; Williams says. &#8220;That&#8217;s an interesting perspective that just didn&#8217;t even occur to me.&#8221;</p><p>That observation captures something important about what the language is doing. Rust is not just a language with a strict compiler. Its constraints push code toward a specific shape, one that is explicit about data flow, deliberate about ownership, and structured around clear boundaries of responsibility. The engineers who find Rust most difficult are often the engineers with the most experience, because they have the most deeply held instincts to unlearn. And the engineers who find it most rewarding tend to be the ones who stop treating the borrow checker as an obstacle and start reading it as design feedback. The language is not rejecting their code. It is asking them to think more clearly about what the code is actually doing.</p><div><hr></div><h3>In case you missed </h3><p><em>Here&#8217;s the full Q&amp;A with the interview video featuring Evan Williams.</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;140e7e87-c811-4a40-a09c-86b76c37b154&quot;,&quot;caption&quot;:&quot;Evan Williams has been writing software for more than 40 years, across every layer of the stack and more programming languages than most engineers will encounter in a career. He recently sat down with Deep Engineering to talk about what that shift requires, which traditional patterns break in Rust, the typestate pattern he finds almost impossible to stop talking about, and why he discovered it is harder to write bad Rust than good Rust.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Design Patterns, Ownership Models, and Building Resilient Systems in Rust with Evan Williams&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-13T18:07:20.569Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/-ElpmT7DCX4&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/design-patterns-ownership-models-resilient-systems-rust-evan-williams&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:197553608,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/rust-lang/rust-analyzer">rust-analyzer</a></strong> &#8212; Rust language server that provides IDE functionality for writing Rust programs.</p><p><strong>Highlights:</strong></p><ul><li><p>Surfaces Rust diagnostics, including ownership and borrow-checker errors from compiler checks, inline during editing.</p></li><li><p>Supports major LSP-compatible editors such as VS Code, Vim, Emacs, and Zed, with regular stable releases.</p></li><li><p>Widely used across the Rust ecosystem as the standard Rust IDE backend, including in workflows at organizations that build with Rust.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/rust-lang/rust-analyzer&quot;,&quot;text&quot;:&quot;Learn more about rust-analyzer&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/rust-lang/rust-analyzer"><span>Learn more about rust-analyzer</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://ubuntu.com/blog/dirty-frag-linux-vulnerability-fixes-available">Dirty Frag vulnerabilities disclosed in the Linux kernel</a> - Two CVEs in Linux ESP/IPsec and RxRPC components allow unprivileged local users to gain root on affected systems.</p></li><li><p><a href="https://lwn.net/Articles/1071776/">Linux 7.0.5 stable released with partial Dirty Frag fix</a> - Linux 7.0.5 ships a partial XFRM/ESP patch for Dirty Frag, with a second required fix still in development at release time.</p></li><li><p><a href="https://github.blog/changelog/2026-05-05-secret-scanning-with-github-mcp-server-is-now-generally-available/">GitHub secret scanning via MCP Server now generally available</a> - Credential scanning is now available in MCP-compatible coding agents before commits or pull requests, requiring GitHub Secret Protection to be enabled on the repository.</p></li><li><p><a href="https://www.neowin.net/news/linux-71-rc2-lands-as-ai-generated-patches-and-kvm-oddities-shake-up-the-kernel/">Linux 7.1-rc2 published</a> &#8212; KVM selftest renaming drove the unusual patch volume in rc2, with functional work covering driver and networking fixes throughout the tree.</p></li><li><p><a href="https://blogs.oracle.com/mysql/mysql-9-7-0-lts-is-now-available-expanded-community-capabilities-and-dynamic-data-masking-for-enterprise">MySQL 9.7.0 LTS generally available</a> - New MySQL LTS line ships the Hypergraph Optimizer in Community Edition, with Dynamic Data Masking remaining Enterprise-only in this release.</p></li></ul><div><hr></div><p></p><p>That&#8217;s all for today. Thank you so very much for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><p>Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and help grow our work.</p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #46: Jim Ledin on Modern Computer Architecture and the AI Infrastructure Layer]]></title><description><![CDATA[Memory bandwidth, GPU trade-offs, and the infrastructure decisions that determine whether AI systems are resilient up in production]]></description><link>https://deepengineering.net/p/issue-46-jim-ledin-computer-architecture-ai-infrastructure-layer</link><guid isPermaLink="false">https://deepengineering.net/p/issue-46-jim-ledin-computer-architecture-ai-infrastructure-layer</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 07 May 2026 15:03:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8adf3738-2898-4207-9a54-e3709b1e9c3c_850x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6">View the latest HubSpot Developer Platform updates in Spring Spotlight</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hxs6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 424w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 848w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1272w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png" width="728" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e807db93-d946-4468-b471-e473ec937fe7_1320x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:1320,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Hxs6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 424w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 848w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1272w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>See what&#8217;s new for the <a href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6">HubSpot Developer Platform! </a></strong></p><p>Ship faster with AI coding tools like Cursor, Claude Code, and Codex. Build MCP-powered AI connectors, run serverless functions with support for UI extensions, and use date-based versioning to streamline roadmap planning.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6&quot;,&quot;text&quot;:&quot;Explore Updates&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6"><span>Explore Updates</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>46th</strong> issue of Deep Engineering!</p><p>This week, InfoQ analyzed what it actually took for <a href="https://www.infoq.com/news/2026/05/cloudflare-llm-infrastructure/">Cloudflare to run large language models efficiently on their global network</a>. The team built a custom inference engine called <a href="https://blog.cloudflare.com/cloudflares-most-efficient-ai-inference-engine/">Infire</a> from scratch in Rust, split model processing into two separate hardware stages because a single machine could not handle both efficiently, and compressed model weights by 15 to 22 percent to reduce what GPUs need to load and move during inference. The reason they had to do all of this is the same one that matters to every engineering team building AI systems: the hardware layer is not an abstraction you can ignore. It is the constraint that every other architectural decision is made around.</p><p>This pattern, where standard approaches to running AI workloads break down under real production constraints and the fix requires going back to the hardware layer, is one most engineering teams will eventually encounter. The engineers who avoid it are the ones who understood the hardware constraints before they started building, not after they hit them. Cloudflare&#8217;s <a href="https://blog.cloudflare.com/high-performance-llms/">engineering blog post</a> goes into the technical detail for teams who want to dig further.</p><p>This week we are featuring <a href="https://www.linkedin.com/in/jimledin">Jim Ledin</a>, CEO of <a href="https://ledin.com/">Ledin Engineering</a> and author of <a href="https://www.packtpub.com/en-us/product/modern-computer-architecture-and-organization-9781806028023">Modern Computer Architecture and Organization</a>, now in its third edition published by Packt. Ledin has over thirty years of experience working on embedded systems, safety-critical hardware, and cybersecurity. In this issue he breaks down what engineers building AI systems get wrong about the hardware layer and why it costs them.</p><p>Let&#8217;s get started.</p><div><hr></div><h3><a href="https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng">Architecting Production-Ready APIs for Agents</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TMPf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 424w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 848w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1272w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TMPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png" width="960" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!TMPf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 424w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 848w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1272w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most API ecosystems were not built for autonomous agent usage. This hands-on masterclass covers governed API design, OpenAPI specifications, and multi-API workflow modelling with Arazzo so your platform stays predictable and safe under automated usage.</p><p><em><strong>2 FOR 1</strong> deal is also live. Bring a colleague free and learn how to design AI-ready, governed APIs</em></p><p style="text-align: center;">Use code <strong>DEEPENG50</strong> for 50% off. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p><strong>Expert Insights</strong></p><h2>Hardware Is Not Someone Else&#8217;s Problem </h2><p><em>by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;b6d1db25-f28c-44b6-b061-76c13060f148&quot;}" data-component-name="MentionToDOM"></span> with </em><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jim Ledin&quot;,&quot;id&quot;:284339563,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:null,&quot;uuid&quot;:&quot;63f4d055-a492-421d-bb86-877ea9e10086&quot;}" data-component-name="MentionToDOM"></span></p><p>For most software engineers working in the cloud, hardware is an abstraction managed by someone else. You provision compute, write code, deploy, and pay the bill. What happens between the instruction and the silicon is not your concern. That assumption has always had a cost. In an AI-accelerated world, that cost is becoming visible in ways that are harder to ignore.</p><p>Jim Ledin, CEO of Ledin Engineering, has been working at the boundary where software meets silicon for over thirty years. His entry point into computer architecture was not a formal computer science curriculum. It was a Commodore 64, a joystick, and a drawing program so slow you could watch it move one pixel at a time.</p><blockquote><p>&#8220;That episode really cemented for me how important it is to understand what is going on in the hardware of a system, and not just write what you want to do in your favourite language,&#8221; Ledin reflects.</p></blockquote><p>He rewrote the inner loops of that drawing program in 6502 assembly, poking opcodes directly into memory, and the line shot across the screen faster than he could see. The lesson stayed with him across thirty years of embedded systems work, electric vehicle software, and cybersecurity testing on safety-critical hardware. Understanding what the hardware is actually doing is not an optimization exercise. It is the difference between software that works and software that works reliably under real constraints.</p><p>That distinction matters more now than it ever has, because the hardware layer is where most AI system performance problems actually live, and most of the engineers building those systems have never had to care about it before.</p><h3>Where the GPU consensus breaks down</h3><p>The idea that GPUs are the right architecture for AI workloads has become so widely accepted that most teams treat it as settled. Ledin&#8217;s view is more specific, and the specificity matters. For local and personal use, running models on a consumer GPU like an Nvidia RTX 4090, GPUs are the right choice. For large-scale deployments running the largest models, the picture is different.</p><p>The distinction comes down to what GPUs were actually designed to do. The &#8220;G&#8221; in GPU stands for graphics, and consumer GPUs still carry silicon dedicated to real-time video generation and gaming workloads. TPUs, by contrast, are built entirely around the tensor operations that dominate AI model processing. At least 80% of the execution time in a transformer-based model is matrix multiplications, and TPUs concentrate every transistor on exactly that work.</p><p>The more pressing constraint, though, is memory bandwidth. &#8220;AI workloads are becoming increasingly memory bandwidth limited. That means it is taking more time to bring data into the GPU or TPU memory than it is taking for the computation itself to complete,&#8221; Ledin explains.</p><p>This is the reason high-end AI systems use high bandwidth memory, or HBM, stacked RAM modules with far higher data rates than anything available on a consumer GPU. &#8220;It is also,&#8221; Ledin notes, &#8220;part of why DDR5 is becoming harder to find. Production capacity for memory is increasingly going into HBM modules for AI infrastructure rather than into consumer components.&#8221;</p><p>And so, for engineering teams choosing hardware for AI deployments, the implication is concrete: the GPU consensus is correct for a specific part of the problem space, and incomplete for the rest of it.</p><h3><strong>Data movement is the real cost</strong></h3><p>The performance conversation in AI engineering tends to focus on compute: cores, clock speed, parallelization. Ledin redirects it toward something that gets less attention and causes more problems.</p><p>&#8220;Data movement can often be more expensive than the actual computation steps. The latency of moving large data structures across different levels of the memory hierarchy can dominate and leave a lot of compute bandwidth idle,&#8221; he emphasizes.</p><p>This is not a new insight in systems engineering, but it is one that most application developers have never had to internalize because the abstractions they work with hide it. In a modern PC, reading a single byte from DRAM causes 64 bytes to be transferred into the CPU cache. If the code then bounces to other memory locations, causes those to be loaded into cache, and pushes that first block out, the next access to that original data requires fetching it again from DRAM. The latency compounds across every cache miss, and in AI workloads operating on large data structures, those misses accumulate fast.</p><p>The practical recommendation follows directly. Iterating across large data structures multiple times in an algorithm should be avoided wherever possible. Working through memory linearly, in a way that keeps recently accessed data in cache rather than evicting it, is the single most impactful optimization available to most AI system code. It does not require a new framework or a different hardware platform. It requires understanding what the hardware is doing with the data you give it.</p><p>In cloud environments, this understanding has a direct financial translation. &#8220;You are paying for the usage of the system whether the CPU is actually crunching instructions or sitting idle waiting for a data item to come in from memory,&#8221; Ledin warns. This is because inefficient memory access patterns do not just slow down a system. They inflate the bill for it.</p><h3>When abstraction becomes the problem</h3><p>Abstractions are one of the most effective tools available to software teams. They accelerate development, limit mistakes, and allow large teams to work on complex systems without every engineer needing to understand every layer. Ledin does not dispute any of this. His concern is more specific: abstractions that obscure hardware costs, in performance-critical applications, are not just unhelpful. They actively create risk.</p><p>&#8220;Where it becomes dangerous is when abstraction obscures what is happening with the data layout in memory and the execution patterns, basically how the processor is interacting with data as the algorithm proceeds,&#8221; he cautions.</p><p>The failure mode is not that abstractions break. It is that they make costs invisible until those costs produce an incident. An engineer works within an abstraction layer, the code looks correct at that level, and the performance problem lives underneath it in a layer the abstraction was designed to hide. By the time the problem surfaces in production, the context needed to diagnose it is buried.</p><p>Ledin&#8217;s recommendation is a two-layer design. Use the most expressive code at the edges of the system, where the abstractions are doing the most valuable work. Use performance-aware code in the core, where the hardware interaction is most consequential. The boundary between those layers is not fixed, and finding it requires benchmarking rather than intuition. But knowing the boundary needs to exist is the starting point. Teams that treat the expressive outer layer as the whole system tend to discover, under load, that the core was never designed for the hardware it runs on.</p><h3>The CPU versus GPU distinction, for engineers who have never had to care</h3><p>Most senior software engineers working today have built careers without ever needing to think about the difference between a CPU and a GPU. That is changing, and Ledin&#8217;s framing of the distinction is the most useful one available for engineers coming to it for the first time.</p><p>A CPU is optimized for low-latency execution of complex branching code. It is built to handle conditional logic, to predict branches and recover when predictions are wrong, and to minimize the latency cost of that work. A GPU is optimized for high-throughput execution of linear code across massively parallel workloads, and it works best when it is running the same instruction across thousands of data streams simultaneously with as little branching as possible.</p><p>The implication, therefore, for algorithm design is practical. &#8220;The GPU only really becomes attractive when you have enough work for it to do that it can be parallelised, and enough that it will amortise the costs associated with moving data onto the GPU, launching the kernels to execute the code, and doing the management work to transfer data to and from the GPU,&#8221; he points out.</p><p>That last point is the one most teams miss. A GPU is not a general purpose computer. It cannot run a program on its own. It needs to be started and managed from a CPU, and the overhead of moving data onto the GPU, scheduling the kernels, and moving results back is real. If the workload is not large enough and parallel enough to amortize that overhead, the CPU implementation wins, not because GPUs are slow, but because the cost of using them correctly exceeds the benefit for that specific workload.</p><p>Knowing where that line sits, for a specific algorithm running on specific hardware, is the kind of judgment that requires understanding what the hardware is actually doing. It cannot be read off from a benchmark or inferred from a framework&#8217;s documentation. It comes from the same place Ledin&#8217;s understanding came from: going one level deeper than the abstraction, and learning what happens when the instruction meets the silicon.</p><div><hr></div><h3>In case you missed </h3><p><em>Here&#8217;s the full Q&amp;A with the interview video featuring Jim Ledin.</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;17d0842b-96a6-4cfa-a547-e1dd0c21f97b&quot;,&quot;caption&quot;:&quot;Jim Ledin has been thinking about what happens between the instruction and the silicon for over thirty years.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Computer Architecture in an AI-accelerated World with Jim Ledin&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-06T18:15:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f371179-665a-4e1b-939b-ad7b5b50839d_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/computer-architecture-in-an-ai-accelerated-world&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:196755940,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p>If the hardware layer argument resonates, the article below by <a href="https://www.linkedin.com/in/leejpeterson">Lee Peterson</a>, VP of Secure WAN Product Management at <a href="https://www.cisco.com/">Cisco</a>, covers the same constraint from the networking and distributed compute angle.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0c1e012e-2447-4eb9-aa91-095c03638118&quot;,&quot;caption&quot;:&quot;Artificial intelligence is entering a new phase with agentic AI, where autonomous systems perceive, decide, act, and learn without constant human oversight, operating independently across distributed environments while collaborating with other agents in real time.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Agentic AI Is Redefining Edge Infrastructure&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-25T18:13:57.493Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/280cd0a1-f0d5-42aa-8e78-90ac44439a30_1200x628.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/agentic-ai-is-redefining-edge-infrastructure&quot;,&quot;section_name&quot;:&quot;Thought Leadership&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:192122268,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/vllm-project/vllm">vLLM</a></strong> - high-throughput, memory-efficient inference and serving engine for large language models</p><p><em>Cloudflare referenced it as the baseline they benchmarked their custom Infire engine against when building hardware-optimized inference at scale.</em></p><p><strong>Highlights:</strong></p><ul><li><p>PagedAttention eliminates the memory waste that causes most GPU out-of-memory failures in production inference.</p></li><li><p>Continuous batching processes requests in a dynamic stream rather than static batches, keeping GPUs saturated under real load.</p></li><li><p>Disaggregated prefill/decode runs compute-bound and memory-bound stages on separate hardware for better throughput.</p></li><li><p>Supports tensor parallelism, FP8 and NVFP4 quantization across multi-GPU deployments.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/vllm-project/vllm&quot;,&quot;text&quot;:&quot;Learn more about vLLM&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/vllm-project/vllm"><span>Learn more about vLLM</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://www.theregister.com/2026/05/03/inference_is_giving_ai_chip/">Inference gives AI chip startups a second chance</a> - Disaggregated inference, splitting prefill and decode across purpose-built silicon, is making GPU-only inference architectures look like the wrong default for large-scale production deployments.</p></li><li><p><a href="https://openai.com/index/mrc-supercomputer-networking/">OpenAI releases MRC for AI training networks</a> - OpenAI&#8217;s MRC shows frontier training now depends on failure-tolerant network design, making the interconnect layer a first-class engineering constraint rather than an infrastructure afterthought.</p></li><li><p><a href="https://claude.com/blog/claude-security-public-beta">Anthropic opens Claude Security public beta</a> - Claude Security moves vulnerability scanning closer to code review, triage, and patch creation, shifting security work earlier into the engineering workflow rather than treating it as a downstream audit step.</p></li><li><p><a href="https://workspaceupdates.googleblog.com/2026/05/agent-tools-and-security-updates-for-workspace-developers.html">Google opens Workspace MCP server preview</a> - Google is turning enterprise agents into a governed API and access-control problem, with MCP making the boundary between agent capability and enterprise data policy the next infrastructure challenge for platform teams.</p></li><li><p><a href="https://github.com/vllm-project/vllm/releases">vLLM v0.20.1 ships with DeepSeek V4 stabilization and FP4 improvements</a> - The patch release stabilizes DeepSeek V4 serving and improves FP32-to-FP4 conversion speed.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><p>Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and help grow our work.</p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #45: Francesco Ciulla on Building Production Systems in Rust Without the Expensive Rewrite ]]></title><description><![CDATA[Memory safety, the borrow checker as your most patient teacher, and how to introduce Rust without the disruptive migration project that puts teams off]]></description><link>https://deepengineering.net/p/issue-45-francesco-ciulla-building-production-systems-rust-without-rewrite</link><guid isPermaLink="false">https://deepengineering.net/p/issue-45-francesco-ciulla-building-production-systems-rust-without-rewrite</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 30 Apr 2026 16:32:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6e29b888-c64d-4029-96f3-08e45522d077_656x375.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6">View the latest HubSpot Developer Platform updates in Spring Spotlight</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hxs6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 424w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 848w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1272w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png" width="717" height="358.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e807db93-d946-4468-b471-e473ec937fe7_1320x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:1320,&quot;resizeWidth&quot;:717,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Hxs6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 424w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 848w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1272w, https://substackcdn.com/image/fetch/$s_!Hxs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807db93-d946-4468-b471-e473ec937fe7_1320x660.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>See what&#8217;s new for the <a href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6">HubSpot Developer Platform! </a></strong></p><p>Ship faster with AI coding tools like Cursor, Claude Code, and Codex. Build MCP-powered AI connectors, run serverless functions with support for UI extensions, and use date-based versioning to streamline roadmap planning.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6&quot;,&quot;text&quot;:&quot;Explore Updates&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.vpdae.com/redirect/oxmujewa9r6jmrhyz62em0cftb6"><span>Explore Updates</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>45th</strong> issue of Deep Engineering!</p><p>The<a href="https://www.tiobe.com/tiobe-index/"> TIOBE Index for April 2026</a> puts Rust at number 16, up from 18 last year. While the community widely expected it to break into the top 10, that momentum has slowed. TIOBE attributes this to adoption friction, noting that broader mainstream uptake has proven harder to achieve than the language&#8217;s early trajectory suggested.</p><p>The institutional picture, however, tells a different story. The<a href="https://www.nsa.gov/Press-Room/Press-Releases-Statements/Press-Release-View/Article/4223298/nsa-and-cisa-release-csi-highlighting-importance-of-memory-safe-languages-in-so/"> NSA and CISA issued joint guidance in June 2025</a> urging organisations to adopt memory-safe languages for national security systems and critical infrastructure.<a href="https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html"> Google&#8217;s Android security team </a>reported that memory safety vulnerabilities, which accounted for 76% of Android bugs in 2019, fell below 20% for the first time in 2025 after the team prioritised writing new code in memory-safe languages.</p><p>The Linux kernel maintainers also made <a href="https://thenewstack.io/rust-goes-mainstream-in-the-linux-kernel/">Rust permanent</a>, making it a core part of the kernel. The argument about whether memory-safe systems programming languages belong in production is settled at the institutional level. The harder argument, therefore, is how engineering teams adopt it without the expensive, disruptive projects that give the language an undeserved reputation for being hard to introduce.</p><p><a href="https://it.linkedin.com/in/francesco-ciulla-roma/en">Francesco Ciulla</a>, author of <a href="https://www.packtpub.com/en-us/product/the-rust-programming-handbook-9781836208860">The Rust Programming Handbook</a> and head of developer relations at <a href="https://zerops.io/">Zerops</a>, directly challenges that perception. His framework starts not with the language&#8217;s strengths but with the one service in your system where Rust would make an undeniable, measurable difference. That is what this issue covers.</p><p>Let&#8217;s get started.</p><div><hr></div><h3><a href="https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng">Architecting Production-Ready APIs for Agents</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TMPf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 424w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 848w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1272w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TMPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png" width="960" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!TMPf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 424w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 848w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1272w, https://substackcdn.com/image/fetch/$s_!TMPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b6d1f4f-46df-4942-b020-8b23edfc5c39_960x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most API ecosystems were not built for autonomous agent usage. This hands-on masterclass covers governed API design, OpenAPI specifications, and multi-API workflow modelling with Arazzo so your platform stays predictable and safe under automated usage.</p><p><em><strong>2 FOR 1</strong> deal is also live. Bring a colleague free and learn how to design AI-ready, governed APIs</em></p><p style="text-align: center;">Use code <strong>DEEPENG50</strong> for 50% off. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng&quot;,&quot;text&quot;:&quot;Register here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/architecting-production-ready-apis-for-agents-tickets-1986966927568?aff=deepeng"><span>Register here</span></a></p><div><hr></div><p><strong>Expert Insights</strong></p><h2>Rust Does Not Need to Replace Your Stack to Make It Better</h2><p><em>by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;b6d1db25-f28c-44b6-b061-76c13060f148&quot;}" data-component-name="MentionToDOM"></span> with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Francesco Ciulla&quot;,&quot;id&quot;:11407185,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8c30606-10ba-4c87-a89b-af2f9dc27a01_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;cb0919f2-0c70-4b1f-8f6d-f4d5565d29c3&quot;}" data-component-name="MentionToDOM"></span> </em></p><p>Every engineering team that considers Rust tends to circle the same concerns. The language is difficult to learn, expensive to adopt, and more practically useful to systems programmers than to the teams building and running services at scale.</p><p><a href="https://www.linkedin.com/in/francesco-ciulla-roma">Francesco Ciulla</a>, author of <a href="https://www.amazon.in/Rust-Beginner-Professional-practical-proficient/dp/1836208871">The Rust Programming Handbook</a>, Docker Captain and head of developer relations at <a href="https://zerops.io/">Zerops</a>, says, "I've heard that conversation many times, and my response has always been that the framing is wrong from the start."</p><p>Ciulla has been building with Rust since 2022, has spoken about it internationally at conferences, and his perspective on Rust adoption is shaped less by enthusiasm for the language and more by a practitioner&#8217;s view of where it actually earns its place in a production system. That starting point matters, he says, because the teams that struggle with Rust adoption tend to start from the wrong question.</p><h3><strong>A joke that contains a kernel of truth</strong></h3><p>People in the Rust community have long joked about rewriting everything in Rust, and the memes around it have become something of a cultural shorthand for over-enthusiastic adoption. Like most good jokes, Ciulla acknowledges, it contains a kernel of truth. But the practical lesson is the opposite of what it implies. &#8220;The best way to introduce Rust in a big project is to find that hard part that is slowing things down, the bottleneck of all your services, and try to write one single service in Rust.&#8221; The rewrite everything instinct is how adoption projects become expensive and difficult to justify. The bottleneck-first instinct is how teams get a proof of concept that demonstrates real value before committing to anything broader.</p><p>The practical implication is that the adoption decision is not a language decision at the organizational level. It is an engineering decision at the service level. The question is not whether the organization should adopt Rust. The question is whether there is one service in the system that is slow, resource-intensive, or difficult to keep stable, where the properties Rust offers would make a measurable difference. If that service exists, it is the right place to start. If it does not, the case for introducing Rust at all is weaker than it might appear.</p><p>Ciulla&#8217;s production experience makes this concrete. Running a Rust web server on his own machine, he shared during our conversation that it used four megabytes of RAM in development and five in production. On a one-gigabyte droplet, that means more than 200 services running simultaneously in idle. That number is the kind of resource profile that changes what is economically viable to deploy, and it is the kind of argument that lands differently with an ops team than a language comparison ever could.</p><h3><strong>Flat latency is a real engineering argument</strong></h3><p>One of the most underappreciated technical arguments for Rust in production systems is not about speed in the raw throughput sense. It is about predictability. Languages that rely on garbage collection, including Go, Java, and Node.js, introduce periodic pauses when the collector runs. Those pauses can last hundreds of milliseconds. An HTTP request that arrives during a GC cycle experiences higher latency than one that does not. The user on the receiving end did not do anything differently. They were just unlucky.</p><p>Ciulla is candid about what this means in practice. &#8220;By not having a garbage collector on the back end side, you basically have flat latency. You don&#8217;t rely on luck, or on the user not being the unlucky one. It&#8217;s a problem that is removed.&#8221; For most web applications running at moderate scale, this distinction is invisible. For services with strict latency requirements, high concurrency, or SLAs that depend on consistent tail latency rather than average response time, it is one of the more significant architectural arguments available.</p><p>This connects to a broader point about where Rust earns its place and where it does not. The resource efficiency and latency predictability are not arguments for using Rust everywhere. They are arguments for using Rust in the specific services where those properties matter. A service that scrapes a website once a month does not need flat latency. A service handling a million concurrent users does. Knowing the difference is what separates a good adoption strategy from an expensive experiment.</p><h3><strong>Rust, when it is the wrong choice</strong></h3><p>Ciulla is honest about the cases where Rust is not the right tool, which is part of what makes his advocacy for it credible. If a team needs something simple and the deadline is tomorrow, Rust is probably the wrong choice. If a developer needs a working API by the end of the day and has no Rust experience, this is not the moment to start learning the language under delivery pressure. &#8220;When you need something simple, and you&#8217;re familiar already with Java or JavaScript, why don&#8217;t you use it?&#8221; The question is not rhetorical. It is the right question to ask before any technology adoption decision.</p><p>The ecosystem argument is also honest. Python has better libraries for data science. JavaScript has a larger package ecosystem for certain kinds of web work. Rust integrates well with other languages, but if what a team needs is native to another ecosystem, that is a real constraint rather than a preference. Good engineers use the right tool for the problem. The case for Rust is strongest when the problem involves performance, memory efficiency, or concurrency at a level where other languages start showing their limits.</p><h3><strong>The shepherd principle</strong></h3><p>One of the more practical observations Ciulla makes about organizational adoption is about knowledge rather than tooling. The bottleneck to Rust adoption at scale is rarely the language itself. It is whether the organization has someone who knows it deeply enough to validate the work being done in it. He draws the parallel to Docker adoption at the European Space Agency, where he worked and observed the tool move slowly not because of anything wrong with Docker, but because it was not well understood internally. The technology is never the problem, he points out. The knowledge is.</p><p>&#8220;You need the validation of an expert,&#8221; Ciulla says. In the era of AI-accelerated development, this point is sharper than it has ever been. Teams can now generate Rust code with AI assistance far faster than their ability to validate it has grown. That gap between generation speed and validation depth is where production incidents come from. Having at least one engineer on the team who understands the ownership model, the borrow checker, and the concurrency primitives well enough to review what the AI produces is not a nice-to-have. It is the thing that determines whether the Rust service is a genuine improvement or a liability waiting to surface.</p><h3><strong>Concurrency without the trauma</strong></h3><p>Most engineers who have worked with concurrency in Java or C++ carry a specific kind of wariness about it. The mental model for concurrency in older languages is that it is an advanced topic requiring extra care, specialized libraries, and a heightened awareness of race conditions and deadlocks. Ciulla describes learning concurrency in Java at university as the final, difficult session of the course, something treated as inherently dangerous and saved for the end of the degree.</p><p>His first attempt at a concurrency example in Rust produced the opposite experience. &#8220;When I had to teach concurrency in Rust in a YouTube video, I made an example in three minutes. I was done. I say okay, the basic example really lasted like two or three minutes because you just declare a couple of threads and literally done.&#8221; That experience reflects something structural about how Rust was designed. The language was created after multi-core processors were already standard. Concurrency was not retrofitted onto a model designed for single-threaded execution. It was built in from the start, and the ownership system that prevents data races at compile time is the same ownership system that governs memory safety everywhere else in the language. There is no separate concurrency model to learn. The properties that make Rust memory safe are the same properties that make concurrent code safe.</p><p>For teams building services that need to use available CPU resources efficiently, this is not a minor ergonomic improvement. It means that the gap between writing concurrent code and writing correct concurrent code is substantially smaller in Rust than in the languages most engineers have used before. The cost of concurrency, measured in debugging time and production incidents rather than lines of code, is genuinely lower.</p><h3><strong>The compiler is the most patient teacher on your team</strong></h3><p>The reputation Rust has for being difficult to learn is real, and Ciulla does not dismiss it. But his explanation for where the difficulty actually comes from is different from the common framing. The problem is not that the concepts are inherently harder than those in other languages. It is that Rust forces you to unlearn patterns that other languages allowed. Engineers who have spent years in C++ or JavaScript carry assumptions about how memory works, how mutability is managed, and what the runtime will silently fix for them. Rust does not fix those things silently. It surfaces them at compile time and requires you to address them explicitly before the code runs.</p><p>That shift in where the pain lands is the key insight. &#8220;Rust is not hard to learn,&#8221; Ciulla says. &#8220;It&#8217;s different. And this is how we should advocate for it.&#8221; The difficulty is front-loaded by design, because the language makes a deliberate trade of more friction during development in exchange for fewer failures in production. Teams that have spent significant time debugging null pointer exceptions, race conditions, or memory leaks in production understand this trade intuitively. The hours lost to a null pointer exception in production dwarf the hours spent fighting the borrow checker upfront.</p><p>The Rust compiler, which is the primary source of that upfront friction, is also the primary teaching tool the language provides. Error messages in Rust are unusually detailed and specific. They do not just tell you that something is wrong. They explain what rule was violated, show the relevant code, and often suggest a fix. Ciulla describes the compiler as a teacher rather than a gatekeeper, one that overcommunicates in the same way a good mentor does. &#8220;The errors in Rust are basically tutorials. They are helping you to write better code.&#8221; For teams introducing Rust to engineers who have not used it before, this property matters practically. The compiler is doing a significant part of the knowledge transfer work that would otherwise fall on the senior Rust engineer on the team.</p><h3><strong>Rust in the Linux kernel is paying off</strong></h3><p>The decision by the Linux kernel maintainers to not only allow Rust in the kernel but to plan for components that require it going forward is the kind of institutional endorsement the language community has been waiting for. Ciulla frames it clearly. Even if the experiment had failed, just the fact that Rust was considered a viable option for kernel-level work would have been a meaningful milestone. The language was competing in a domain that had been exclusively C and C++ territory for decades, and it earned a permanent place there.</p><p>For engineering leaders tracking where the industry is moving, this matters beyond the kernel itself. Government systems, military applications, and other security-critical domains are beginning to treat Rust as a default rather than an experiment. &#8220;Rust is slowly getting adopted at bigger and bigger levels,&#8221; Ciulla says. The adoption curve is not linear, but the direction is consistent. Teams that build internal expertise now are not chasing a trend. They are positioning ahead of a transition that is already underway in the most demanding environments in the industry.</p><h3><strong>The ecosystem argument is changing</strong></h3><p>One of the historically valid objections to Rust for web development was tooling maturity. Two years ago, Ciulla would not have committed to shipping a production SaaS product in Rust. Today he would, and the reason is specific rather than general. The <a href="https://docs.rs/axum/latest/axum/">Axum framework</a> has matured to the point where it is a production-grade choice for web APIs, and the broader ecosystem around async Rust has improved substantially. &#8220;In 2026, I will use it,&#8221; he says of building a paid product with Rust as the backend, dropping the qualification he would have applied even a year earlier.</p><p>The toolchain story is also one of Rust&#8217;s genuine advantages for teams evaluating the full cost of adoption. <a href="https://doc.rust-lang.org/cargo/">Cargo</a> handles dependency management, building, testing, and documentation in a single integrated tool. There is no equivalent of the npm versus yarn versus pnpm decision that teams arriving to JavaScript have to navigate before writing a single line of code. Running tests is cargo test. The integration is native to the language, not an ecosystem of competing choices layered on top of it. For teams that have spent time debugging JavaScript build configurations, this is not a small thing.</p><h3><strong>Rust in the AI accelerated development era</strong></h3><p>Ciulla makes an argument about Rust and AI that is worth sitting with. The claim is not that Rust is better for writing AI applications, though he has views on that too. The claim is that Rust may be one of the best languages to work in during the current period of AI-assisted development, specifically because of what it requires from the engineer reviewing AI-generated code.</p><p>When AI writes Rust code, the engineer validating it still has to understand ownership, borrowing, and the type system well enough to know whether the generated code is correct. The compiler will catch a large category of errors, but the human reviewer still needs to understand why the compiler is happy with a piece of code before shipping it. &#8220;If you have no control, either you are useless or you cause a problem. So in both cases, it&#8217;s not a good time for you.&#8221; That discipline, the requirement to understand what the code actually does rather than just accepting output that compiles, is not a burden unique to Rust. But it is more explicitly enforced by the language than in most alternatives, and that enforcement is valuable at a moment when the volume of AI-generated code is increasing faster than the average team&#8217;s ability to review it carefully.</p><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/bahdotsh/wrkflw">wrkflw</a></strong> &#8212; open-source tool for validating and running GitHub Actions locally</p><p>wrkflw lets you validate and execute GitHub Actions workflows on your local machine before pushing, catching configuration errors and pipeline failures before they reach CI. Version 0.8.0 shipped this week. Built in Rust.</p><ul><li><p>Validates GitHub Actions workflow syntax locally before pushing to CI</p></li><li><p>Runs multi-step jobs and matrix builds without cloud dependency</p></li><li><p>Fast startup and low resource overhead from Rust&#8217;s binary compilation model</p></li><li><p>Catches pipeline failures early, reducing the feedback loop between code and CI</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/bahdotsh/wrkflw&quot;,&quot;text&quot;:&quot;Learn more about wrkflw&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/bahdotsh/wrkflw"><span>Learn more about wrkflw</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://www.ghacks.net/2026/04/13/linux-7-0-released-with-official-rust-support-and-new-code-for-sparc-and-alpha-cpus/">Linux 7.0 ships with Rust as an official core kernel language</a> - Rust loses its experimental tag in Linux 7.0, reaching full parity with C for kernel development after the Linux Kernel Maintainers Summit decision in December 2025.</p></li><li><p><a href="https://blog.rust-lang.org/2026/04/16/Rust-1.95.0/">Rust 1.95.0 released</a> - The latest stable release introduces <code>cfg_select!</code>, a compile-time macro for conditional configuration, and removes unstable support for custom target specifications on stable toolchains.</p></li><li><p><a href="https://blog.rust-lang.org/inside-rust/2026/04/17/crates-io-svelte-public-testing/">crates.io opens new Svelte-based frontend for public testing</a> - The Rust team invites the community to test the rebuilt crates.io frontend ahead of the planned production migration.</p></li><li><p><a href="https://github.com/rust-lang/cargo/pull/16796">Cargo stabilises build.warnings configuration</a> - The build.warnings field is now stable, giving teams a standardised way to configure compiler warning behaviour across workspace builds.</p></li><li><p><a href="https://zed.dev/blog/zed-1-0">Zed 1.0 ships</a> - The Rust-built code editor reaches stable release with GPU-accelerated rendering, real-time collaborative editing, Git integration, and native AI assistant support across macOS, Windows, and Linux.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><p>Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and help grow our work.</p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #44: Sándor Dargó on C++26, Adoption Traps, Compiler Gap, and Maintainability]]></title><description><![CDATA[On C++26 adoption decisions, the fallback plan most teams skip, what the compiler gap costs in practice, and keeping large C++ systems maintainable]]></description><link>https://deepengineering.net/p/issue44-cpp-26-adoption-traps-compiler-gaps-maintainability</link><guid isPermaLink="false">https://deepengineering.net/p/issue44-cpp-26-adoption-traps-compiler-gaps-maintainability</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 23 Apr 2026 16:31:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/efb9ba36-137d-4762-93d8-c394bc1fe4da_681x277.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng">Building an AI-Powered Internal Developer Platform from Scratch</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X-O7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X-O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!X-O7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Hone your skills to design, implement, and ship an AI-powered internal developer platform from scratch with <a href="https://www.linkedin.com/in/chankramath/">Ajay Chankramath</a>.</p><p>&#128197; <strong>25th</strong> and <strong>26th</strong> April 2026 | <strong>11:00 AM</strong> to <strong>3:00 PM</strong> ET</p><p>Use code<strong> DEEPENG50 </strong>for<strong> 50% off, </strong>or grab the<strong> 2-for-1 </strong>deal</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tick%E2%80%A6&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tick%E2%80%A6"><span>Register now</span></a></p><p><em>Includes access to <a href="https://www.packtpub.com/en-us/product/the-platform-engineers-handbook-9781806380121">The Platform Engineer&#8217;s Handbook</a> by Ajay Chankramath upon release (eBook worth $35.99)</em></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>44th</strong> issue of <em><strong>Deep Engineering</strong>!</em></p><p><a href="https://www.infoq.com/news/2026/04/cpp-26-reflection-safety-async/">C++ just had its most consequential standard in years finalized</a>. Contracts and static reflection are expected after a decade of committee work, and the async execution model is in. This has the conference circuit energised, blog posts are multiplying, and most production teams are continuing to ship C++17 or C++20 while they wait for compiler support to catch up and patterns to settle.</p><p>The ISO C++ Foundation also opened its<a href="https://isocpp.org/blog/2026/04/2026-annual-cpp-developer-survey-lite1"> 2026 annual developer survey</a> this week, the single biggest opportunity the global C++ community gets each year to tell the standards committee and tooling vendors what actually matters in practice. If you write C++ at any scale it is worth ten minutes of your time before it closes next week.</p><p>This week we are featuring <a href="https://www.linkedin.com/in/sandor-dargo/">S&#225;ndor Darg&#243;</a>, senior software engineer at <a href="https://engineering.atspotify.com/about">Spotify</a>, on what responsible C++26 adoption decisions should look like in production, what most teams get wrong, why fallback plans need to be on every adoption checklist, and what the gap between a finalized standard and a production system actually costs. The feature is based on our live interview with him and you can watch or read the full Q&amp;A<a href="https://deepengineering.substack.com/p/clean-c-code-and-the-hidden-cost"> here</a>.</p><blockquote><p>Darg&#243; also spoke at length in that session about clean code, cognitive load, and what it actually costs teams to optimize for the wrong things. We have collated those insights alongside our previous conversation with <a href="https://uk.linkedin.com/in/morleys90">Sam Morley</a>, mathematician and C++ researcher at the <a href="https://www.maths.ox.ac.uk/">University of Oxford</a>, into this separate piece &#8220;<a href="https://deepengineering.substack.com/p/clean-code-trap-decompose-for-performance-physics">Clean Code Is a Trap, Decompose Instead for Physics and Performance</a>&#8221; published this week.</p></blockquote><p>Let&#8217;s get started.</p><div><hr></div><h4>View the latest <a href="https://www.vpdae.com/redirect/u3qwp467xevuba5rxtpp16lir2u">HubSpot Developer Platform</a> updates in Spring Spotlight</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.vpdae.com/open/28773e7b.gif?opens=1" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9x1C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 424w, https://substackcdn.com/image/fetch/$s_!9x1C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 848w, https://substackcdn.com/image/fetch/$s_!9x1C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 1272w, https://substackcdn.com/image/fetch/$s_!9x1C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9x1C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png" width="467" height="237.34588235294117" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:216,&quot;width&quot;:425,&quot;resizeWidth&quot;:467,&quot;bytes&quot;:142277,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.vpdae.com/open/28773e7b.gif?opens=1&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/195242079?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.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_!9x1C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 424w, https://substackcdn.com/image/fetch/$s_!9x1C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 848w, https://substackcdn.com/image/fetch/$s_!9x1C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 1272w, https://substackcdn.com/image/fetch/$s_!9x1C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c477a6-ed05-42d2-ad4c-7e8cecf8c781_425x216.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>See what&#8217;s new for the <strong><a href="https://www.vpdae.com/redirect/u3qwp467xevuba5rxtpp16lir2u">HubSpot Developer Platform</a></strong>! </p><p>Ship faster with AI coding tools like Cursor, Claude Code, and Codex. Build MCP-powered AI connectors, run serverless functions with support for UI extensions, and use date-based versioning to streamline roadmap planning.</p><p><strong>Check </strong>&#8594;<strong> <a href="https://www.vpdae.com/redirect/u3qwp467xevuba5rxtpp16lir2u">HubSpot Developer Platform</a></strong></p><div><hr></div><h2>Most C++ Teams Get Feature Adoption Wrong, and What the Pragmatic Ones Do Differently</h2><p><em>by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;009808d6-9a61-4f08-bf0d-ba6566a6b426&quot;}" data-component-name="MentionToDOM"></span> with <a href="https://www.linkedin.com/in/sandor-dargo/">S&#225;ndor Darg&#243;</a></em></p><p>C++26 is heading to its final approval ballot. Contracts and static reflection are expected. The feature set is the largest the language has seen in years, and the C++ community is already deep into discussing what it means. And yet, while they wait for compiler support to catch up and patterns to settle, engineering teams are starting to ask how to prepare for when they can actually ship it.</p><p>That gap between what the standard says and what teams can actually ship is not a failure of ambition, but the normal condition of C++ in production. It has looked roughly the same across every major standard transition for the past fifteen years. &#8220;The engineering teams that navigate it well have learned to keep understanding and adoption on separate timelines,&#8221; says S&#225;ndor Darg&#243;, senior software engineer at Spotify. &#8220;It serves well to invest deeply in knowing a feature years before you need to ship it, because conflating the two is where most adoption mistakes gain foothold.&#8221;</p><p>Darg&#243; has a different set of questions he likes to ask first. His framework is intentional and straightforward. The feature set is not the starting point. What matters is whether the team can live with the code a year from now, when the engineer who introduced it has moved on and compiler support is still uneven across platforms. Proven and maintainable is not playing it safe. It is what keeps production systems running while the language moves underneath them.</p><p>At Spotify, where he works on large-scale C++ systems with a hard requirement that the code stays clean, maintainable, and operable over time. He has observed teams navigate standard transitions from C++11 through C++23, and the pattern he sees repeat is always the same one. &#8220;Teams focus on what the standard says, and they underestimate the distance between the standard and the compiler, between the compiler and the toolchain, and between the toolchain and the production system that has to run reliably when all of this settles,&#8221; he said. &#8220;Everyone is talking about contracts and reflection. That&#8217;s going to change everything. I&#8217;m not sure about the time scale though. If you look at C++23 support right now, even that is not complete yet, especially if you look at the differences across compilers. You go on cppreference, check what&#8217;s implemented on which compiler, and we are simply not there yet.&#8221;</p><p>That observation shapes everything that follows in Darg&#243;&#8217;s approach to feature adoption, and it is worth understanding precisely what he means by it.</p><h3>The gap between the standard and the production system</h3><p>The C++ standard finalizes on a schedule. Compiler vendors implement on a different one, and they do not always agree on approach, especially for genuinely new features that require significant infrastructure rather than incremental additions. Small library extensions arrive with almost no implementation lag because compilers already have the machinery to support them. But contracts and reflection are not small library extensions. Both require compilers to build something they have never built before, and different vendors will make different choices along the way, as they did with modules in C++20.</p><p>Darg&#243; cited modules in our <a href="https://deepengineering.substack.com/p/clean-c-code-and-the-hidden-cost">live interview</a> as the clearest recent example of how this plays out in practice. Vendors diverged, build system integration took years to stabilize, and teams that moved early discovered that the standard&#8217;s guarantees did not insulate them from the fragmentation that came from uneven implementation across compilers. &#8220;There might be a bigger gap, just like we saw with C++20 modules. I hope it won&#8217;t be that problematic. But I don&#8217;t think I&#8217;ll be able to use those in a production environment in the next one or two years.&#8221; Darg&#243;, drawing on his years of engineering experience leading high-velocity teams at Spotify, a company with engineering resources that most teams do not have. If Darg&#243; is not planning to ship contracts or reflection to production in the next two years, the average multi-platform C++ team operating with a mixed compiler pipeline and a long-lived codebase should be thinking in similar terms.</p><p>This does not mean the features are not worth understanding. It means the time horizon for understanding and the time horizon for shipping are different, and most adoption conversations conflate the two.</p><h3>Cautious is not the same as resistant</h3><p>Darg&#243;&#8217;s posture toward new features is not skepticism. It is a more specific kind of discipline that he applies before any adoption decision, and it comes down to two distinct questions that most teams skip. The first is whether the usage pattern is proven in a production environment with real operational constraints, not in a blog post or a conference demo. The second is whether the feature actually solves a problem in the specific codebase, rather than just offering a more modern way to write something that was already working. &#8220;If they only bring a different syntax, that&#8217;s not really good. If they actually solve a problem in your codebase, in your use case, then it&#8217;s good. And let&#8217;s discuss why and how that&#8217;s the right solution.&#8221;</p><p>The distinction between a genuinely useful adoption and a syntactic upgrade matters more than most teams want to admit, because every feature adoption comes with a cost that does not appear in the initial pull request. The team has to understand the feature well enough to review code that uses it, to debug it when it breaks, and to maintain it when the engineer who introduced it has moved to a different team. &#8220;You cannot just push the new way of coding. You should share the knowledge and discuss what these new features actually bring. Deep down, everyone wants to learn about these things, and we all want to start using them as soon as possible.&#8221; Darg&#243; acknowledges that impulse is not wrong. But the enthusiasm of the early adopter on the team and the readiness of the rest of the team to live with the decision are two different things, and adoption decisions that ignore the second tend to create the kind of complexity that shows up as maintenance debt two years later.</p><h3>No one puts the fallback plan on the checklist</h3><p>The most operationally concrete principle Darg&#243; applies to feature adoption is also the one that almost no team&#8217;s adoption checklist includes. Before shipping code that uses a new compiler feature, make sure you can roll back the compiler version without having to change the code. This constraint is not about being conservative for the sake of it. It is about what happens when a compiler update introduces a regression or a new feature behaves differently than expected on a specific platform, and the fastest path to stability is to revert the compiler version rather than to fix the code.</p><p>Darg&#243; walked through the alternative. &#8220;Move to a new version, start using concepts from C++20, and then in two weeks they say there&#8217;s a problem, we must go back. And then you realize it&#8217;s not just updating the compiler version, you actually have to change the code.&#8221; At that point the team is no longer choosing between a rollback and a fix. They are choosing between a broken build and a risky code change under pressure, and neither is a good position to be making decisions from. The fallback plan requirement changes how the team thinks about adoption from the start because it sets a concrete constraint on which features can be used and how deeply they can be integrated before the team has sufficient confidence in the compiler support. For single-platform, single-compiler environments, that constraint is loose. For multi-platform pipelines with mixed compiler versions, it is the gate that determines what gets shipped and what gets saved for a later standard cycle.</p><h3>Making trade-offs explicit before someone else makes them implicit</h3><p>The broader philosophy Darg&#243; brings to C++ at scale is that complexity is always the enemy, and the job of a senior engineer is to reduce it through the daily decisions that accumulate into the character of a codebase over time. Clean code reduces cognitive load. Smaller binaries reduce operational cost. Eliminating undefined behavior reduces hidden risk. New language standards reduce boilerplate and enable safer abstractions. And all of these things connect, in Darg&#243;&#8217;s framing, to the same underlying goal: making large C++ systems more maintainable and more evolvable over the years that teams and requirements will inevitably change.</p><p>But maintainability does not happen by default. It requires making trade-offs explicit at the moment they are made, in the code itself, not just in the code review thread that will be forgotten. Darg&#243; has been on the receiving end of what happens when this does not happen. He came into a codebase, saw code that looked wrong, began cleaning it up, and realized too late that the seemingly redundant choice was affecting binary size in a way that mattered operationally. Some pull requests had already merged before the context became clear. &#8220;Trade-offs there will be. But make them conscious and share the knowledge.&#8221; That principle applies to binary size decisions and it applies equally to feature adoption decisions. The team that adopts contracts without documenting why, which problem it was solving, what compiler version it was verified on, and what the fallback plan is, has introduced complexity that is invisible until the moment it becomes a production incident.</p><h3>What C++26 actually changes and when it matters</h3><p>Contracts and reflection are genuinely significant features. Contracts bring the language its first formal precondition and postcondition system, giving teams a way to enforce interface discipline through the language rather than through documentation and convention. Static reflection enables code generation, serialization frameworks, and tooling that the language simply could not support before in any ergonomic way. Both of these things will change how C++ gets written over the next decade, and engineers who understand them deeply before the production window opens will be in a stronger position than those who try to learn them under delivery pressure.</p><p>But a decade is closer to the right time scale for thinking about the full impact than a release cycle is. The standard has finalized, but the compilers have not caught up. And the community has not yet established the patterns worth following or the misuse patterns worth avoiding. For engineering leaders building roadmaps, Darg&#243;&#8217;s framework points toward a clear separation between understanding and shipping. Invest in understanding contracts and reflection now, run experiments on non-production code, track compiler support as it lands, and build team knowledge before the toolchain is ready. Then, when the support is solid, the patterns are clear, and the fallback plan can be written, adoption becomes a technical decision rather than a leap of faith.</p><p>Darg&#243; likes to put it in simple words. &#8220;Being among the first adopters is sometimes good. Sometimes it&#8217;s better to be in the second line.&#8221; For most production C++ systems with multi-platform requirements, long-lived codebases, and teams where knowledge has to be shared rather than siloed, the second line is where proven and maintainable gets built. The first line is where the lessons come from that make the second line possible.</p><div><hr></div><h2><strong>&#128269; In case you missed it&#8230;</strong></h2><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;67b2c8c3-41c2-48ec-8224-d8b75b385ddf&quot;,&quot;caption&quot;:&quot;S&#225;ndor Darg&#243; has spent years making large C++ systems easier to maintain, safer to change, and cheaper to run.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Clean C++ Code, and the Hidden Cost of Complexity with S&#225;ndor Darg&#243;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-22T11:30:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a04535d6-a8d4-4ff0-bc53-bf31cb699f9a_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/clean-c-code-and-the-hidden-cost&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:195180770,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;3703a973-03a7-4c85-9cfc-c4ee5698a2b6&quot;,&quot;caption&quot;:&quot;Engineering teams obsess over clean code because they want software to look organized and logical in the text editor.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Clean Code Is a Trap, Decompose Instead for Physics and Performance&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:440051761,&quot;name&quot;:&quot;Sam Morley&quot;,&quot;bio&quot;:&quot;Research software engineer and mathematician on the DataSig project at the University of Oxford.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfZA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b7dcfcf-a878-45d0-99e4-a8f2045dee3e_144x144.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://sammorley.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://sammorley.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Sam Morley&quot;,&quot;primaryPublicationId&quot;:7726502}],&quot;post_date&quot;:&quot;2026-04-23T15:15:59.899Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4a62837-3922-40ce-8859-73c783c89af9_822x371.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/clean-code-trap-decompose-for-performance-physics&quot;,&quot;section_name&quot;:&quot;Thought Leadership&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:195245104,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/microsoft/vcpkg">vcpkg</a></strong> &#8212; open-source C and C++ package manager</p><p>vcpkg removes the dependency management friction that makes compiler and toolchain transitions harder than they need to be, letting teams verify library support across targets without manually managing platform-specific build configurations.</p><ul><li><p>Parallel file installation for faster builds</p></li><li><p>2,773 ports in the curated registry, each validated across all major triplets</p></li><li><p>Dependabot support for automated dependency vulnerability tracking</p></li><li><p>OpenSSL packaging security fix on Windows</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/microsoft/vcpkg&quot;,&quot;text&quot;:&quot;Learn more about vcpkg&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/microsoft/vcpkg"><span>Learn more about vcpkg</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://engineering.atspotify.com/2026/4/background-coding-agents-dataset-migrations-honk-part-4">Spotify publishes how it used Honk, Backstage, and Fleet Management to migrate thousands of datasets</a> - Details how background coding agents reduced the manual overhead of large cross-repository migrations at scale.</p></li><li><p><a href="https://devblogs.microsoft.com/cppblog/c-code-intelligence-for-github-copilot-cli-preview/">GitHub ships C++ Language Server for Copilot CLI in public preview</a> - Extends semantic C++ code intelligence to the command line, giving Copilot symbol definitions, call hierarchies, and type data beyond what grep returns.</p></li><li><p><a href="https://github.com/llvm/llvm-project/releases/tag/llvmorg-22.1.4">Clang/LLVM 22.1.4 released</a> - Patch release of Clang 22, the compiler with the most active C++26 feature tracking. Teams on Clang should update.</p></li><li><p><a href="https://devblogs.microsoft.com/cppblog/msvc-build-tools-version-14-51-release-candidate-now-available/">MSVC Build Tools 14.51 release candidate ships in Visual Studio 2026 Insiders</a> - Adds expanded C++23 conformance, CWG and LWG issue resolutions, and runtime performance improvements. Stable release expected in May.</p></li><li><p><a href="https://isocpp.org/blog/2026/04/announcement-cppreference.com-update">cppreference.com returning to read-write after ISO C++ Foundation takes over infrastructure</a> - Herb Sutter announced the Foundation is taking over hosting and maintenance for cppreference, the primary compiler support reference for the C++ community.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><p>Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and help grow our work.</p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #43: David Knickerbocker on Building AI That Sees the World as It Is, Not as It Was]]></title><description><![CDATA[Real-time knowledge graphs, awareness before truth, and why an empty dataset is better than a hallucination]]></description><link>https://deepengineering.net/p/issue43-building-ai-that-sees-the-world-as-it-is-david-knickerbocker</link><guid isPermaLink="false">https://deepengineering.net/p/issue43-building-ai-that-sees-the-world-as-it-is-david-knickerbocker</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 16 Apr 2026 15:30:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/542c8988-3aa8-439a-94c1-20a10d857430_716x421.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng">C++ Memory Management Masterclass (Live) &#8212; Back for the 3rd Run</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1qKl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1qKl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1qKl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1qKl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1qKl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!1qKl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1qKl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1qKl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1qKl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f3a7652-0edf-4737-a16a-6b90e7bb9a91_800x400.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Learn ownership, RAII, smart pointers &amp; allocators to eliminate leaks/UB&#8212;live hands-on with <strong>Patrice Roy</strong>&#8212;#1 bestselling author of <em><strong>C++ Memory Management</strong></em> and ISO C++ Standards Committee (WG21) member. </p><p><strong>&#128197; Online: Apr 18 </strong>&amp;<strong> Apr 19.</strong> Limited seats.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng"><span>Register now</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the <strong>43rd</strong> issue of Deep Engineering!</p><p>On April 15, Neo4j ran <a href="https://neo4j.com/nodes-ai/">NODES AI 2026</a>, a full-day virtual conference dedicated to AI with knowledge graphs, with tracks covering GraphRAG, graph-based agent memory, and context engineering. Interestingly, the <a href="https://neo4j.com/videos/nodes-ai-2026-opening-keynote-exploring-context-graphs-from-data-to-decisions/">opening keynote</a> framed the central challenge directly around how most AI systems behave as if they have never seen the data that the organisations deploying them have spent years accumulating. The gap between what a system has access to and what it can actually use at query time is, in the view of the practitioners at NODES, the defining engineering problem of this moment.</p><p>And so, in today&#8217;s issue we want to address exactly that gap. <a href="https://www.linkedin.com/in/dkjapan">David Knickerbocker</a>, founder of <a href="https://www.verdantintel.com/">Verdant Intelligence</a> and author of <a href="https://www.packtpub.com/en-us/product/network-science-with-python-9781801073691">Network Science with Python</a> (Packt), has spent years building knowledge graph systems that stay current with a different design constraint than most teams start from: not how to make retrieval faster, but how to make the system aware of what changed a minute ago. His system (Verdant Eye) treats knowledge as a continuous stream of claims rather than a static store of facts, and that distinction has significant consequences for how you handle freshness, hallucination, temporal drift, and testing.</p><blockquote><p>This is the first of two features from our conversation with David, the second will cover what building AI on top of messy, adversarial, real-world data teaches you that clean-dataset engineers never have to confront. You can read the full interview and watch the conversation <a href="https://deepengineering.substack.com/p/knowledge-graphs-graphrag-and-real">here</a>.</p></blockquote><p>Let&#8217;s get started.</p><div><hr></div><h4 style="text-align: center;"><strong>30k+ DevOps Engineers Read <a href="https://links.uk.defend.egress.com/Warning?crId=69df8dab3269e6a874d09e8e&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoNxVEKABAMANAb2b-SsygLxbZsyO15P6-aiXoAwqMON85rtVHJuFnU_SAOzqkHbYWWPLQTEkg%3D&amp;@OriginalLink=news.everythingdevops.dev">EverythingDevOps</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://links.uk.defend.egress.com/Warning?crId=69df8dab3269e6a874d09e8e&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoNxVEKABAMANAb2b-SsygLxbZsyO15P6-aiXoAwqMON85rtVHJuFnU_SAOzqkHbYWWPLQTEkg%3D&amp;@OriginalLink=news.everythingdevops.dev" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DeZN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 424w, https://substackcdn.com/image/fetch/$s_!DeZN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 848w, https://substackcdn.com/image/fetch/$s_!DeZN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 1272w, https://substackcdn.com/image/fetch/$s_!DeZN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DeZN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png" width="604" height="332.282967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:604,&quot;bytes&quot;:400435,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://links.uk.defend.egress.com/Warning?crId=69df8dab3269e6a874d09e8e&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoNxVEKABAMANAb2b-SsygLxbZsyO15P6-aiXoAwqMON85rtVHJuFnU_SAOzqkHbYWWPLQTEkg%3D&amp;@OriginalLink=news.everythingdevops.dev&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/194401065?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.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_!DeZN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 424w, https://substackcdn.com/image/fetch/$s_!DeZN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 848w, https://substackcdn.com/image/fetch/$s_!DeZN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 1272w, https://substackcdn.com/image/fetch/$s_!DeZN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b48ace5-23b7-43ba-b2ce-8dc697323934_3971x2184.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The cloud-native ecosystem moves on its own schedule. New tooling, shifting practices, team structures that look nothing like they did two years ago. Therefore, keeping up is not optional when your job is to build and run reliable systems.</p><p><a href="https://links.uk.defend.egress.com/Warning?crId=69df8dab3269e6a874d09e8e&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoNxVEKABAMANAb2b-SsygLxbZsyO15P6-aiXoAwqMON85rtVHJuFnU_SAOzqkHbYWWPLQTEkg%3D&amp;@OriginalLink=news.everythingdevops.dev">EverythingDevOps</a>&#8216; weekly digest is built specifically for engineers who want the signal without the scroll.</p><ul><li><p>What&#8217;s changing in the ecosystem &#8212; and what it actually means for your work</p></li><li><p>Career thinking for engineers moving from senior to staff to leadership</p></li><li><p>Events, opportunities, and community conversations worth your Frida</p></li></ul><p><strong><a href="https://links.uk.defend.egress.com/Warning?crId=69df8dab3269e6a874d09e8e&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoNxVEKABAMANAb2b-SsygLxbZsyO15P6-aiXoAwqMON85rtVHJuFnU_SAOzqkHbYWWPLQTEkg%3D&amp;@OriginalLink=news.everythingdevops.dev">Join 30,000+ engineers</a></strong></p><div><hr></div><h1>AI That Sees the World as It Is, Not as It Was</h1><p><em>by </em><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;f89aae65-246f-44b5-b849-dc27f0060228&quot;}" data-component-name="MentionToDOM"></span> <em>with </em><a href="https://www.linkedin.com/in/dkjapan/">David Knickerbocker</a></p><p>Most AI systems are answering questions about a world that no longer quite exists. They draw from training data frozen at a point in time, from retrieval systems that return whatever was most recently indexed, from pipelines that treat knowledge as a stable object rather than a moving one. For <strong>David Knickerbocker</strong>, founder of <strong>Verdant Intelligence</strong>, this is not a limitation to work around, but a design error to avoid from the start.</p><h3>The problem starts at problem definition</h3><p>Building a knowledge graph that stays fresh does not require a different database. It requires a different question. For Knickerbocker the starting point is always the same, &#8220;what is the system actually trying to know, and at what resolution of time?&#8221;</p><p>He explains, &#8220;If you want to build a world AI and be able to answer questions about things that happened a minute ago, then that is your problem statement. And then you think about how to get that data into the database so that it is there and it is fresh. But then you also have to get AI to be able to use that data. There are two sides to this coin.&#8221;</p><p>The engineering philosophy he applies is <strong>KISS</strong> (Keep it Super Simple), and <strong>YAGNI</strong> (You Aren't Gonna Need It"). Both push in the same direction, he reasons &#8220;build the minimum thing that works, validate that it works, and expand from there.&#8221; His system (Verdant Eye) maintains data fresh up to a minute old, not by doing something architecturally exotic, but by treating freshness as a first-class constraint from day one rather than an optimization to add later.</p><p>&#8220;The AI industry feels very shiny and very new, but there is a lot of old school discipline that is still extremely useful. You start with the idea, you go through the ideation, from ideation you create your spec, from the spec you do your project management, you assign tasks and do the work. It feels like vanilla old school engineering to me.&#8221;</p><h3><strong>Awareness before truth</strong></h3><p>The instinct when building a real-time knowledge system is to treat freshness and accuracy as a tension to manage: newer data is less verified, older data is more reliable, and the system needs some formula for weighing one against the other. But Knickerbocker rejects this frame entirely.</p><p>He explains from his engineering experience that why his systems are not trying to determine what is true. But instead trying to capture what is being claimed, and those are fundamentally different engineering problems.</p><p>&#8220;In the world of open source intelligence, it has less to do with right and wrong. It has less to do with facts. What I am looking for is really claims of what is going on in the world. I do not make that decision, and I do not allow my AI to make the decision about what is true or false either.&#8221;</p><p>In adversarial open source intelligence environments, two sources in direct conflict with each other are not a problem to resolve. But they are both signal. And what matters is that both claims are captured, clustered, and surfaced. Knickerbocker describes this structure using a frame he developed from years of NLP work: not clusters in the geometric sense, but ribbons, layered bands of related information that emerge from the data.</p><p>&#8220;You have a whole bunch of information and this top ribbon might be this bad thing happened. The next ribbon might be this event is happening at the library. The next ribbon might be a punk rock show is happening at this nightclub.&#8221;</p><p>The consequence of this design is that awareness comes before truth, and that is by intention. For the applications the Verdant Eye is built for, knowing what is being said and where is actionable before you know whether any of it is correct. Adjudicating truth is a downstream problem, one that can be handled by human judgment or purpose-built downstream systems, not by the ingestion layer.</p><h3><strong>Snapshot versus movie</strong></h3><p>What separates a real-time knowledge graph from an agent that runs searches is not a matter of degree. It is a structural difference in what kind of object the system is.</p><p>An agent with search tools takes a snapshot. It queries for something, gets back the most relevant indexed results, and presents them. The system only knows what it was asked to look for, and it only looks when prompted. A knowledge graph that continuously ingests from the open web is more like a movie: it is always recording, and when you query it, you are not taking a new photograph but pulling a frame from a film that has been running the whole time.</p><p>&#8220;If you use a tool to do a search to find out something, you are getting a snapshot of time. My systems capture the heartbeat of the Internet themselves, and they are always listening. It would be closer to a movie compared to a photograph.&#8221;</p><p>The practical difference shows up clearly in demos with clients who need urgent situational information. Running a calibration query against the Verdant Eye, asking what is the latest information, returns results anywhere from a few seconds old to a minute and a half old. That behaviour is not possible with a search-tool approach at any level of optimization.</p><p>An empty result matters too. If nothing has been reported in the last minute on a given topic, the system returns nothing. That discipline is load-bearing.</p><p>&#8220;An empty dataset,&#8221; Knickerbocker underscores, &#8220;is better than a hallucination.&#8221;</p><h3><strong>The rush to use a tool before understanding it</strong></h3><p>Knickerbocker spent years watching teams fail with graph databases in 2020 and 2021, and he sees the same pattern repeating now with agents and AI. Teams adopt the tool before building the understanding, and then cannot tell whether it is working.</p><p>&#8220;There is a rush to use agents before even understanding AI. And if the understanding is not there, then it is just wishful. If you do not know how it works, you cannot tell the difference between it ran and it ran correctly. Those are very different things.&#8221;</p><p>His own relationship with graphs predates the graph database trend by years. At Intel, from 2015 to 2019, he was using graph theory for data flow mapping, tracing inputs to outputs across thousands of scripts and hundreds of servers, using centralities to find important nodes and shortest paths to understand flow. He was never using graph databases. He was using the underlying science.</p><p>&#8220;I was never invited to the cool kid graph database parties. I was always just doing stuff with graphs and using it to map out data flows and fix production outages. Dead serious stuff.&#8221;</p><p>That gap between tool and understanding is what drove him to write <a href="https://www.packtpub.com/en-us/product/network-science-with-python-9781801073691">Network Science with Python</a>. Teams were populating graph databases and then stopping, treating the populated database as the deliverable. The value, in his view, starts the moment the graph is populated and you begin running network science on top of it.</p><p>&#8220;If you do not know about the basics of network science, then what are you gonna do with the graph database? You have put your data in the graph database. Whereas if you come to graph databases and you have learned about centralities, community detection, shortest paths, simulations, then it can really have an impact on your network thinking.&#8221;</p><h3><strong>Similarity is not the same as identical</strong></h3><p>The central limitation of vector-based retrieval is one that Knickerbocker has framed the same way since at least 2017. Semantic similarity is a probabilistic measure, not a logical one. Two pieces of text can be highly similar in embedding space while referring to entirely different things. A graph replaces probabilistic similarity with structural traversal.</p><p>&#8220;Similarity in language is not equal to same. I will say that one more time. Similarity is not equal to same. Similar sounding things can be very, very different from each other. A graph anchors things into a piece of context.&#8221;</p><p>In a GraphRAG system, the query does not ask what is most like this input. It traverses the graph: if you are asking about jazz events in Portland, Oregon, you are connected to the Oregon node, to the Portland node, to the jazz node. The hallucination space collapses because the answer space is bounded by structure rather than probability.</p><p>&#8220;In a GraphRAG system, if there is no match then the output is that there is no match. There is no hallucination opportunity. With a similarity-based system, there could be similarity even if it is only a single word in a paragraph.&#8221;</p><p>This intuition was clear to him during his data operations years at Intel. Log files across hundreds of servers written by dozens of engineers contain enormous amounts of natural language. Working with that language to understand what a production system was doing made it obvious that the structure, the graph, and the meaning, the language, were inseparable.</p><p>&#8220;Graphs show you where things go,&#8221; Knickerbocker adds. &#8220;But all of the context about what that node even is is often carried by language itself.&#8221;</p><h3><strong>Deliberate forgetting</strong></h3><p>Temporal drift is usually framed as a correctness problem: facts become outdated, relationships change, the graph silently goes wrong. The standard response is validation pipelines, contradiction detection, freshness scores. Knickerbocker builds around a different principle.</p><p>Sharing from his experience building the Verdant Eye, Knickerbocker explains that the Verdant Eye system is not called the Verdant Brain because the metaphor is not storage. It is perception.</p><p>&#8220;The Verdant Eye sees, and it does not contain eternal memory, because that is not what an eye does. An eye sees. When the scene changes, the scene changes. Your eyes do not need to be recalibrated. The thing has just changed.&#8221;</p><p>The design principle is biological: living systems do not maintain eternal memory, and a knowledge system that tracks a living world should not either. The practical implementation mirrors transactional database patterns he worked with throughout his career in data operations. Data that is no longer operationally relevant gets archived. The live layer runs on what is current, and the cost of maintaining it stays proportional to what the system actually needs to know.</p><p>&#8220;In a transactional database, you operate off of what you need, and data that is not needed eventually gets archived. I want to build AI that does not boil the ocean, that can be bootstrapped by individuals. Infinite memory is not just philosophically wrong for this kind of system. It is economically unworkable.&#8221;</p><h3><strong>The pass butter philosophy</strong></h3><p>Knickerbocker shares how he currently runs three production GraphRAG systems, each built for a distinct purpose with its own testing criteria. Verdant Intelligence operates at high altitude, tracking events across states and regions. Grooveseeker (which he created to put his AI system to a different and specific kind of use) operates at street level, finding events in specific cities on specific nights. A third system contains thirty years of AI research, useful for tracing the intellectual lineage of ideas when building new things.</p><p>The principle connecting all three comes from a scene in Rick and Morty. Rick builds a robot. The robot asks what its purpose is. Rick says: you pass butter.</p><p>&#8220;There is no testing framework anybody else can give me that is going to be fit for purpose for what I am trying to build, because I am not trying to build general intelligence. I am trying to build intelligence that serves a specific purpose.&#8221;</p><p>Each system is therefore tested against the specific failures that would make it useless for its purpose. For Grooveseeker, that means verifying the right city, not a city of the same name in a different state; the right date, not a historical recurrence of the same event; and a URL that actually leads somewhere you can buy a ticket.</p><p>The final test of the Grooveseeker system was to stop writing articles proving it worked and simply use it. The system returned events in Portland between March 10 and March 13. Knickerbocker even attended one of them, bought a ticket at the door, saw the band, and spoke to one of the musicians. </p><p>His AI did not send him to a venue that did not exist. &#8220;That is how I know it works,&#8221; Knickerbocker affirms.</p><div><hr></div><h2><strong>&#128269; In case you missed it&#8230;</strong></h2><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5fd69076-1db8-4cdd-ba01-395d5b521b8f&quot;,&quot;caption&quot;:&quot;This conversation with David Knickerbocker keeps returning to a single conviction: the best engineering starts with intentional problem definition, and most AI failures happen when teams rush to use a tool before understanding what they are actually trying to build.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Knowledge Graphs, GraphRAG, and Real-Time AI in Production with David Knickerbocker&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-15T12:30:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93b09a18-df5c-49af-93ca-6f4d45a26bdc_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/knowledge-graphs-graphrag-and-real&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:194390901,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/getzep/graphiti">Graphiti</a></strong> &#8212; open-source temporal knowledge graph engine for AI agents</p><p><strong>Highlights:</strong></p><ul><li><p><strong>Temporal fact management:</strong> Facts carry explicit validity windows &#8212; invalidated when superseded, never deleted, queryable at any point in time.</p></li><li><p><strong>Incremental ingestion:</strong> New data integrates immediately without batch recomputation, keeping the graph current as the world changes.</p></li><li><p><strong>Hybrid retrieval:</strong> Combines semantic search, BM25, and graph traversal in a single query, typically under 100ms.</p></li><li><p><strong>MCP-native:</strong> Ships an MCP server for direct integration with Claude, Cursor, and other MCP clients.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/getzep/graphiti&quot;,&quot;text&quot;:&quot;Learn more about Graphiti&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/getzep/graphiti"><span>Learn more about Graphiti</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://neo4j.com/videos/nodes-ai-2026-closing-keynote-from-data-to-knowledge-to-action-the-graph-intelligence-platform/">Neo4j NODES AI 2026 closing keynote: From Data to Knowledge to Action</a> - Sudhir Hasbe makes the case that most enterprise AI behaves as if it has never seen the organisation's own data, and how graphs help close that gap.</p></li><li><p><a href="https://tianpan.co/blog/2026-04-10-graph-memory-llm-agents-relational-reasoning">Graph memory for LLM agents: the relational blind spots that flat vectors miss</a> - Zep's LongMemEval evaluation shows 18.5% accuracy gains over vector baselines, context tokens dropping from 115,000 to 1,600, and latency falling from 29 seconds to under 3 seconds.</p></li><li><p><a href="https://www.falkordb.com/news-updates/falkordb-browser-updates-april-2026/">FalkorDB Browser ships April 2026 update for GraphRAG developers</a> - Adds favourite query saving, one-click connection string copying, enhanced graph statistics, and configurable table views..</p></li><li><p><a href="https://community.neo4j.com/t/start-here-register-get-aura-credits-aura-agent-hackathon-2026/77191">Neo4j Aura Agent Hackathon opens</a> - Developers building knowledge-graph-grounded AI agents can register for cloud credits and managed GraphRAG platform access.</p></li><li><p><a href="https://github.com/DEEP-PolyU/Awesome-GraphRAG">Four GraphRAG papers accepted at ACL 2026</a> - PolyU&#8217;s Awesome-GraphRAG repo confirmed acceptances including ProbeRAG for retrieval faithfulness, LegalGraphRAG for legal reasoning, and LinearRAG for efficient graph construction.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><p>Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support my work.</p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #42: Building Reliable Multi-Agent Systems with Fitz Nowlan]]></title><description><![CDATA[How to preserve facts across agent handoffs, when to use MCP, and why bounding execution is non-negotiable]]></description><link>https://deepengineering.net/p/deep-engineering-42-building-reliable</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-42-building-reliable</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 09 Apr 2026 15:21:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a5466920-69f5-4417-8a13-fc13b9f5ec76_1440x868.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng">Building an AI-Powered Internal Developer Platform from Scratch</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X-O7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X-O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!X-O7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!X-O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e46c203-54b4-4dfa-99e6-d2d8ce40b7fc_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Hone your skills to design, implement, and ship an AI-powered internal developer platform from scratch with <a href="https://www.linkedin.com/in/chankramath/">Ajay Chankramath</a>.</p><p>&#128197; <strong>25th</strong> and <strong>26th</strong> April 2026 | <strong>11:00 AM</strong> to <strong>3:00 PM</strong> ET</p><p>Use code<strong> DEEPENG50 </strong>for<strong> 50% off, </strong>or grab the<strong> 2-for-1 </strong>deal</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tick%E2%80%A6&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.co.uk/e/building-an-ai-powered-internal-developer-platform-from-scratch-tick%E2%80%A6"><span>Register now</span></a></p><p><em>Includes access to <a href="https://www.packtpub.com/en-us/product/the-platform-engineers-handbook-9781806380121">The Platform Engineer&#8217;s Handbook</a> by Ajay Chankramath upon release (eBook worth $35.99)</em></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the 42nd issue of Deep Engineering!</p><p>Multi-agent AI is widely being adopted in production, but the engineering reality is messier than the demos suggest. GitHub Engineering published<a href="https://github.blog/ai-and-ml/generative-ai/multi-agent-workflows-often-fail-heres-how-to-engineer-ones-that-dont/"> a post by Gwen Davis</a> laying out the most common ways multi-agent workflows fail in practice. Most failures come down to missing structure, not model capability. </p><p>Agents make implicit assumptions about state, ordering, and validation at the points where they hand off work to one another, and without explicit data formats, typed interfaces, and defined action schemas at those boundaries, the system breaks in ways that are hard to reproduce and harder to debug.</p><p>The architectural decisions you make around the model matter more than the model itself. That is precisely what today&#8217;s issue covers. <strong><a href="https://www.linkedin.com/in/fitz-nowlan/">Fitz Nowlan</a></strong>, VP of AI and Architecture at <a href="https://smartbear.com/">SmartBear</a>, has spent years building agentic systems in production.</p><p>Let&#8217;s get started.</p><div><hr></div><h4 style="text-align: center;"><strong>Featured Newsletter: <a href="https://www.thecloudplaybook.com/">The Cloud Playbook</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.thecloudplaybook.com/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NQSA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 424w, https://substackcdn.com/image/fetch/$s_!NQSA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 848w, https://substackcdn.com/image/fetch/$s_!NQSA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!NQSA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NQSA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png" width="312" height="312" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:500,&quot;resizeWidth&quot;:312,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.thecloudplaybook.com/&quot;,&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_!NQSA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 424w, https://substackcdn.com/image/fetch/$s_!NQSA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 848w, https://substackcdn.com/image/fetch/$s_!NQSA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!NQSA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd83d05f4-88b5-4f79-b558-2f658c5c21e5_500x500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you own reliability, cost, and compliance in production on AWS, <strong><a href="https://www.thecloudplaybook.com/">The Cloud Playbook</a></strong> newsletter is worth your attention.</p><p><em>It is a weekly read for engineering leaders building platforms where incidents, audits, and surprise AWS bills are real problems. It covers AWS architecture, platform engineering, FinOps, security, observability, and compliance frameworks like FedRAMP, HIPAA, and ISO 27001.</em></p><p><strong><a href="https://www.thecloudplaybook.com/">Subscribe to The Cloud Playbook</a></strong></p><div><hr></div><h1><strong>Multi-Agent Systems Need Rules to Stay Reliable in Production</strong></h1><p><em>by </em><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;f89aae65-246f-44b5-b849-dc27f0060228&quot;}" data-component-name="MentionToDOM"></span> <em>with <a href="https://www.linkedin.com/in/fitz-nowlan/">Fitz Nowlan</a></em></p><p>As agents pass tasks to one another, reason autonomously, and compose solutions on the fly, it is easy to construct a version of multi-agent AI that looks technically sound on a whiteboard. In practice, however, that version tends to fall apart when context gets lost between handoffs, when loops run without terminating, and when open-ended systems become progressively harder to test, debug, or trust.</p><p><strong><a href="https://www.linkedin.com/in/fitz-nowlan/">Fitz Nowlan</a></strong>, VP of AI and Architecture at <a href="https://smartbear.com/">SmartBear</a>, has spent the past two years building agentic systems in production, and his view, drawn from that engineering experience, is that the reliability of a multi-agent system is determined less by the model you choose and more by the architectural decisions you make around it.</p><h2>Preserving facts across the handoff boundary</h2><p>The first place multi-agent systems break down is at the handoff. When agent A passes context to agent B, the question is not just what to pass but how to pass it. Raw string prompts are the path of least resistance, but Nowlan argues they are also the path most likely to introduce errors.</p><p>&#8220;We are almost always using some form of structured data,&#8221; he points out. &#8220;It&#8217;s generally going to be JSON. What we&#8217;ll often try to do on top of that JSON is define, effectively, a domain-specific language, or DSL, or our own schema, to cache, kind of, to preserve truth that we&#8217;ve already determined.&#8221;</p><p>The distinction matters because of what happens when you do not preserve that truth. Suppose an agent is working within the context of a browser and identifies that two elements appear inside the same container on a page. That relationship has been syntactically proven through a screenshot, the HTML, or the DOM. If you pass that context as plain text to the next agent, that agent has to decompose the text and then probabilistically reconstruct whether the relationship exists at all.</p><p>&#8220;That other agent has to effectively decompose and then probabilistically, i.e., potentially hallucinate, that relationship is there,&#8221; Nowlan notes. &#8220;So what we try to do is communicate over JSON and lock in to the JSON in our custom schema the facts that we&#8217;ve identified or extracted from one context or world to another.&#8221;</p><p>The practical principle is simple enough. Anything that has been established as a fact should be encoded as a fact, not as prose. Structured contracts at the handoff boundary are not just a formatting preference. They are a mechanism for preventing the downstream agent from having to guess at things the upstream agent already knew.</p><h2>When MCP outperforms a static API wrapper</h2><p>Model Context Protocol (MCP) has become a standard topic in agentic architecture discussions, and anyone planning to use it should understand where it actually adds value and where it does not.</p><p>&#8220;If you knew all five workflows that your customers ever did in your application, well, then you should just statically code them up,&#8221; Nowlan reasons. &#8220;Make it a single API endpoint, take the inputs at the outset, chain them all together, and spit the outputs back out to your user. That would be highly efficient. You wouldn&#8217;t then need MCP or agents at all.&#8221;</p><p>The benefit of MCP is the emergent use case. That is the workflow your users need that you did not anticipate, in the sequence they need it, composed on the fly from the tools you have exposed. By giving the model a set of tools rather than a fixed pipeline, you allow the system to compose solutions for problems you never explicitly programmed for.</p><p>&#8220;If you have an application that&#8217;s very diverse, with a diverse set of data, with a wide-ranging type or class of data, and maybe even different user roles that are coming in and using your product, that&#8217;s where MCP can really be a massive unlock, because the composition artifacts are effectively infinite,&#8221; Nowlan observes.</p><p>The corollary is equally important. If your application is relatively rigid and your users reliably need the same five things, MCP introduces complexity without adding value. The decision to use it should follow directly from the diversity of your use cases, not from the fact that it is available.</p><h2>The 80-20 rule for DAG versus autonomous orchestration</h2><p>One of the more practically useful frameworks Nowlan describes is how his team decides when to use a fixed Directed Acyclic Graph (DAG)-based workflow versus an open-ended MCP-style loop, and how that decision evolves over time.</p><p>The starting point is openness. When a new feature or product area is introduced, the team tends to begin with the full MCP loop. The premise is straightforward. Here is the set of tools. Let the system compose whatever the user needs. This preserves maximum flexibility while the team learns how customers actually use the system.</p><p>Over time, patterns emerge. Certain workflows appear repeatedly. Those are the candidates for promotion into a DAG.</p><p>&#8220;There&#8217;s kind of an 80-20 rule here, where 80% of the time your customers are looking to solve their problems with 20% of these key workflows that you&#8217;ve identified,&#8221; Nowlan notes. &#8220;Those should then be translated into DAGs, into workflows, into a little bit stricter information flow architecture.&#8221;</p><p>The payoff is significant, Nowlan affirms. Once a workflow is on a DAG, you can optimise aggressively. You can use a cheaper model for nodes that do not require frontier-level reasoning. You can shed context that is irrelevant to a particular step rather than packing everything into the window. You can bound latency because the execution path is known in advance.</p><p>&#8220;When you get on that track, that predefined workflow, that&#8217;s where you can save cost, you can potentially use a cheaper model for a particular node that you know doesn&#8217;t need the most expensive model. And you can also shed information from context in that workflow when you know it&#8217;s not necessary for the outcome.&#8221;</p><p>The open-ended MCP loop remains available for everything else, for the 20% of use cases that do not fit a known pattern. The architecture supports both, and the team actively monitors usage to identify when a new workflow has crossed the threshold and is ready to be promoted. There is no firm cutoff, just the observation that a workflow is appearing often enough to justify the investment in making it faster and cheaper.</p><h2>The infinite loop problem</h2><p>Bounding execution is one of the more fundamental challenges in agentic systems, and it is one that the industry is still working through. The early solutions were basic by necessity. At the most fundamental level, Nowlan explains, it comes down to two questions: has the system hit a timeout, and has it exceeded a set number of attempts.</p><p>The deeper issue is that the problem did not originate with modern agents. In the early days of GPT-3-era pipelines, a common approach was to ask the model for one action at a time, execute it, and return for the next. The loop would never terminate because the model had no reliable sense of when it was done.</p><p>&#8220;We quickly realized they would literally go on forever. The loop would just never terminate, would never know that it was done, or it would know that it was done way too early.&#8221;</p><p>The response was to shift from reactive step-by-step prompting to upfront scoping. Rather than asking the model what to do next after each action, you ask it at the outset to decompose the overall task into a bounded set of subtasks, and then you execute those subtasks in sequence and stop.</p><p>&#8220;We pivoted from the early days toward putting more bounds on the problem space. What are the things you think I should do? Break this down into a set of tasks, a set of subtasks, and then I&#8217;ll take each of those subtasks in turn, but when I get to that last subtask, I&#8217;m done. I&#8217;m not going back and asking you for more.&#8221;</p><p>As models have improved, this has relaxed somewhat. The team now allows a final evaluation pass, a double or triple check at the end, before closing the loop. But the underlying principle has not changed. Get the model to scope the work before execution begins, and treat that scope as a constraint rather than a suggestion.</p><p>&#8220;You want to get the AI to put bounds and scope around the overall work that you&#8217;ll be doing to solve or complete some task, and try to stick to that as a guide so that you don&#8217;t run off into the infinite space of querying forever.&#8221;</p><h2>Testing non-deterministic flows</h2><p>Testing a system where the execution path changes based on the model&#8217;s output requires a different approach from conventional integration testing. Nowlan and his team lean toward trace-based evaluation, grounded in a close understanding of realistic user inputs.</p><p>&#8220;All of our evaluations are, we think, we hope, reasonably close to the reality of those inputs that we&#8217;re going to get from our end users.&#8221;</p><p>The logic is that if you understand the domain well enough, you can anticipate the shape of the tasks users will bring to the system even if you cannot predict the exact inputs. In a web testing context, for example, that means understanding that users are going to log in, fill out forms, scroll through lists, and navigate between pages. Those logical actions become the basis for evaluations, and the evaluations can then check whether the agent followed a reasonable path to completion rather than whether it followed an exact predetermined path.</p><p>At the same time, Nowlan acknowledges that no evaluation suite fully covers the space of real-world inputs. The complement to pre-built evaluations is comprehensive logging and tracing of every prompt and response the system exchanges with the model.</p><p>&#8220;We log and trace all of our inputs and outputs that we exchange to the LLMs, and then we can go back and debug those, and examine those, and we can obviously use AI to probabilistically parse and understand those inputs and outputs.&#8221;</p><p>This creates a feedback loop that pre-built evaluations cannot replicate. When a user reports a bad experience or churns, the team can go back to the traces for that user, examine the prompt and response sequences, and use a model to evaluate whether the quality of the AI outputs degraded at any point. The evaluation happens after the fact, using the actual production inputs rather than synthetic ones.</p><p>Nowlan&#8217;s broader point is that evaluation in non-deterministic systems is not a gate you run before deployment. It is an ongoing process that runs in parallel with production, using real data to surface quality issues that no pre-deployment test suite would have caught.</p><div><hr></div><h2><strong>&#128736;&#65039; Tool of the Week</strong></h2><p><strong><a href="https://github.com/huggingface/smolagents">smolagents</a></strong> &#8212; Hugging Face&#8217;s open-source library for building agents that think in code</p><p><strong>Highlights:</strong></p><ul><li><p><strong>Code-first agents:</strong> Generates and executes Python code instead of structured tool calls, which can reduce back-and-forth with the model in some workflows.</p></li><li><p><strong>Model-agnostic:</strong> Works with local Transformers models, Hugging Face Inference API, and providers via LiteLLM.</p></li><li><p><strong>Supports sandboxing:</strong> Can run code in environments like Docker, E2B, or Pyodide, but requires proper setup for safety.</p></li><li><p><strong>Hub integration:</strong> Tools and agents can be shared and reused via the Hugging Face Hub.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/huggingface/smolagents&quot;,&quot;text&quot;:&quot;Learn more about smolagents&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://github.com/huggingface/smolagents"><span>Learn more about smolagents</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://techcrunch.com/2026/04/07/anthropic-mythos-ai-model-preview-security/">Anthropic moves Claude Mythos into controlled early access under Project Glasswing</a> - Limited rollout to partners including Amazon, Apple, and Microsoft for defensive security work, with early reports pointing to strong capability in identifying software vulnerabilities</p></li><li><p><a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/copilot-studio/new-and-improved-multi-agent-orchestration-connected-experiences-and-faster-prompt-iteration/">Microsoft Copilot Studio ships multi-agent orchestration to general availability</a> - Now supports A2A protocol for agent-to-agent delegation and cross-app agent reuse via the Microsoft 365 Agents SDK.</p></li><li><p><a href="https://www.openpr.com/news/4454447/2026-agentic-ai-era-why-multi-model-routing-has-become">Google releases Gemma 4 under Apache 2.0</a> - Ranges from lightweight edge models to a 31B-parameter variant with strong performance on reasoning, agentic workflows, and multilingual tasks.</p></li><li><p><a href="https://docs.langchain.com/oss/python/releases/changelog">LangGraph ships async subagents in latest Deep Agents update</a> - Adds non-blocking background subagents alongside type-safe streaming and Pydantic coercion in the new v2 API.</p></li><li><p><a href="https://www.helpnetsecurity.com/2026/04/03/microsoft-ai-agent-governance-toolkit/">Microsoft releases open-source Agent Governance Toolkit</a> - A seven-package system that intercepts every agent action before execution at sub-millisecond latency, with native integrations for LangChain, CrewAI, Google ADK, and Microsoft Agent Framework.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><p>Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support my work.</p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #41: Scaling C++ the Right Way with Sam Morley]]></title><description><![CDATA[Template metaprogramming, cache-aware design, concurrency models, and why learning Rust might actually make you a better C++ programmer.]]></description><link>https://deepengineering.net/p/deep-engineering-41-scaling-c-the</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-41-scaling-c-the</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 02 Apr 2026 15:16:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4017b543-27c2-4082-9f3b-1bd7abbbdd3a_1432x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng">C++ Memory Management Masterclass (Live) &#8212; Back for the 3rd Run</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M9ZS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:508191,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/189970085?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!M9ZS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Back by demand (3rd run). </figcaption></figure></div><p>Learn ownership, RAII, smart pointers &amp; allocators to eliminate leaks/UB&#8212;live hands-on with <strong>Patrice Roy</strong>&#8212;#1 bestselling author of <em><strong>C++ Memory Management</strong></em> and ISO C++ Standards Committee (WG21) member. <strong>Online: Sat Apr 11, 10:30 AM&#8211;Sun Apr 12, 4:00 PM ET.</strong> Limited seats.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng"><span>Register now</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the 41<sup>st</sup> issue of Deep Engineering!</p><p>As AI scaling hits the <a href="https://semiengineering.com/memory-wall-gets-higher/">memory wall</a>, system performance is increasingly limited by data movement rather than raw compute power. This shifts the optimization focus toward data locality because adding cores provides no benefit when bandwidth bottlenecks the system. Writing fast code now requires precise control over memory layout and concurrency, yet these techniques often introduce complexity that becomes unmanageable as codebases grow.</p><p>That specific tension defines this week&#8217;s feature with <strong><a href="https://www.linkedin.com/in/morleys90/">Sam Morley</a></strong>, Research Software Engineer and Mathematician at the <strong>University of Oxford</strong> and author of <em><strong><a href="https://www.packtpub.com/en-us/product/the-c-programmers-mindset-9781835888438">The C++ Programmer&#8217;s Mindset</a></strong></em>. </p><p>Building on our earlier discussion in <a href="https://deepengineering.substack.com/p/deep-engineering-31-sam-morley-on">Part 1 around decomposition and abstraction</a> costs, today's issue digs deeper into the guiding principles for scaling C++ systems. It covers how teams can keep complexity under control as codebases grow, why template metaprogramming deserves extreme caution, and why thinking with the machine is non-negotiable when optimising cache layout.</p><p>Let&#8217;s get started.</p><div><hr></div><h2 style="text-align: center;"><a href="https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf">Stop Building Vault</a></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Syn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 424w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 848w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1272w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Syn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!_Syn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 424w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 848w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1272w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sponsored </figcaption></figure></div><p style="text-align: center;">Secrets, PKI, &amp; PAM in one platform. Postgres-backed. No custom orchestration. Flexible deployment.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf&quot;,&quot;text&quot;:&quot;Start for free today &#8594;&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf"><span>Start for free today &#8594;</span></a></p><div><hr></div><h1>Adopting the C++ Programmer&#8217;s Mindset (Part 2) with Sam Morley</h1><p>Before listing any specific practices, Morley introduces a concept he returns to repeatedly. He calls it the future you.</p><p>&#8220;Future you is your future self and for all intents and purposes this is a different person,&#8221; Morley says. &#8220;When you&#8217;re writing some code, you understand things the way they are in the context of what you&#8217;re doing at the moment. Future you will have lost this context. So, when you come back to your code in a month, six months, a year&#8217;s time and you look at it and you think what was I thinking &#8212; almost surely the answer to that is: I don&#8217;t know.&#8221;</p><p>The practical implication is easy to skip under deadline pressure, but it could be costly to ignore. Comments are not just for teammates. They are messages to yourself, written at the moment of maximum understanding, for a future reader who no longer has that understanding. Morley is explicit that this does not mean narrating the obvious. What he does instead, particularly on mathematically intricate work, is write large block comments that describe where the process is, how the next section works, and what the algorithm is intended to achieve. &#8220;These comments save me so much pain when I jump off the project for a week and then go back and have to remember exactly what I was trying to do.&#8221;</p><p>Beyond comments, Morley points to three C++ specific practices that matter most for scalability. The first is a <strong>strict separation of concerns</strong>. Numerical computation should not live in the same place as user-facing code. Components should be modular enough to be tested in isolation. This also pays dividends when distributing computation across clusters, because reusable tight-loop routines can be dropped into different distribution mechanisms without rework.</p><p>The second practice is <strong>thinking about thread safety earlier</strong> than you think you need to. Designing class members with that future in mind costs almost nothing early and can be enormously expensive to retrofit later. The third is <strong>keeping your build system clean</strong>. Morley uses CMake and is emphatic about this. &#8220;Having a broken build system is far worse than having broken code. It&#8217;s much harder to figure out what exactly has gone wrong if your build system is broken.&#8221; Build systems accumulate debt quietly and the consequences arrive at the worst possible moment, usually when you need to extract a component into its own library under time pressure.</p><h2><strong>When metaprogramming becomes the problem</strong></h2><p>&#8220;I&#8217;ve seen some horrendous template metaprogramming in my life,&#8221; Morley reflects. &#8220;I&#8217;ve written some horrendous template metaprogramming in my life. I&#8217;m going to be the first one to admit that it&#8217;s never worth it.&#8221;</p><p>The target here is the elaborate kind: deeply nested type machinery and SFINAE-heavy <code>enable_if</code> chains. Instantiating a complex template metaprogram can easily double compile time for a single translation unit. At scale, across thousands of files, the cost becomes structural. Morley notes this is exactly why Google kept metaprogramming to an absolute minimum when writing Abseil. Modern C++ has reduced the genuine need for TMP significantly. Concepts and <code>constexpr</code> functions cover much of what engineers used to reach for TMP to solve, with readable syntax and without the compile time penalty.</p><p>Lambdas are a different conversation. Used correctly, Morley thinks they are one of the most readability-enhancing tools in the language. Used carelessly, they introduce exactly the kind of invisible coupling that makes the future you miserable. His specific warning is about lambdas that capture and modify values defined far away from where the lambda is used. &#8220;Every time you think what is this lambda doing, it&#8217;s modifying something that you&#8217;ve not looked at for a long time because your screen has been further down the page.&#8221; In cases where a lambda is the only place that reads or writes a particular value, Morley argues the value almost certainly belongs inside a class, where the ownership and mutation path are explicit.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4WHF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4WHF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 424w, https://substackcdn.com/image/fetch/$s_!4WHF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 848w, https://substackcdn.com/image/fetch/$s_!4WHF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 1272w, https://substackcdn.com/image/fetch/$s_!4WHF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4WHF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png" width="903" height="337" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:337,&quot;width&quot;:903,&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_!4WHF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 424w, https://substackcdn.com/image/fetch/$s_!4WHF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 848w, https://substackcdn.com/image/fetch/$s_!4WHF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 1272w, https://substackcdn.com/image/fetch/$s_!4WHF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5180dc2f-843c-405c-a720-a93da5a3970e_903x337.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Thinking with the machine</strong></h2><p>Morley uses a road analogy to introduce hardware-aware programming. If you are driving down an unfamiliar road in the dark, you slow down because you cannot see what is ahead. Knowing the road means you can go faster without risk. The system you are running the code on is the road, the code you are writing is the car, and understanding the road conditions means you can drive faster with confidence.</p><p>The most practically important piece of hardware to understand is the <strong>cache hierarchy</strong>. Cache behavior is invisible in the code but determines a large part of actual runtime performance. The canonical example comes from the games industry: the debate between <strong>Array of Structs (AoS)</strong> and <strong>Struct of Arrays (SoA)</strong>.</p><p>If you represent each game entity as a large struct and store those structs in a vector, then iterating over position data means striding across the full width of each struct to reach the next position value. &#8220;Big strides are bad for the cache. What you really want is all of the position data to be close together.&#8221;</p><p>The alternative is to separate data by type, storing all position values together and all velocity values together, so that each field is laid out contiguously in memory rather than interleaved across structs. As Morley puts it: &#8220;This transformation basically doubles or quadruples your throughput because now you don&#8217;t have to step over all of the useless data in order to update your position.&#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_!EP7K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EP7K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 424w, https://substackcdn.com/image/fetch/$s_!EP7K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 848w, https://substackcdn.com/image/fetch/$s_!EP7K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 1272w, https://substackcdn.com/image/fetch/$s_!EP7K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EP7K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png" width="903" height="343" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:343,&quot;width&quot;:903,&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_!EP7K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 424w, https://substackcdn.com/image/fetch/$s_!EP7K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 848w, https://substackcdn.com/image/fetch/$s_!EP7K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 1272w, https://substackcdn.com/image/fetch/$s_!EP7K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd791d54-d1d0-4d6f-a213-7b9634b9b71c_903x343.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Matrix multiplication illustrates the same principle at a more concrete level. In one direction, data access is sequential and cache-friendly. In the other direction, moving between rows in a column means jumping across memory in steps as wide as the entire matrix, which is exactly what the cache is designed to avoid. The standard mitigation is tiling: load a small tile of the matrix, do as much computation as possible on that tile, then move to the next one. Morley walks through a tiled implementation in the book and notes roughly a four-times improvement over the naive approach from tiling alone, before any SIMD or pipelining optimisations are applied.</p><p>Branch prediction and SIMD matter too, but Morley is careful about context. For general-purpose application code, the compiler will usually make reasonable decisions, and the latency bottleneck is more often a network call or a disk write than an instruction pipeline stall. These details start to matter seriously when throughput is the primary constraint: training large models, running physics simulations, anything where a microsecond saved per operation compounds into meaningful wall-clock time across billions of invocations. &#8220;Taking an extra microsecond to do a calculation is devastating when you have to do that a billion times.&#8221;</p><h2><strong>Concurrency: two models, two risk profiles</strong></h2><p>Morley distinguishes two fundamentally different multi-threaded scenarios that require different mental models.</p><p>The first is data parallelism. A large dataset split across threads, each thread operating on its own independent range with no shared state. <em>&#8220;There&#8217;s never any overlap. Each thread goes away, does its work, and the results are put in the buffer.&#8221;</em> This is relatively safe territory. Parallel algorithms and OpenMP handle much of the machinery, and as long as the data partition is clean and there is no self-referential access, data races are structurally prevented.</p><p>The second scenario is harder. Multiple worker threads operating on shared state within a larger system. A dispatch queue is the typical pattern, where a main thread stacks work items and worker threads pull from the queue. Here, ownership discipline becomes non-negotiable. </p><p>Morley&#8217;s design goal is simple to state and difficult to achieve: only one thread, one function, one whatever should be able to modify a value at any given time. There are two ways to achieve this. The first is architectural: design the program so that each thread exclusively owns its data and never touches another thread&#8217;s values. The second is synchronisation: use atomics, mutex-locked values, or other thread-safe mechanisms to control access.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ahy9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ahy9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 424w, https://substackcdn.com/image/fetch/$s_!ahy9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 848w, https://substackcdn.com/image/fetch/$s_!ahy9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 1272w, https://substackcdn.com/image/fetch/$s_!ahy9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ahy9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png" width="903" height="367" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:367,&quot;width&quot;:903,&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_!ahy9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 424w, https://substackcdn.com/image/fetch/$s_!ahy9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 848w, https://substackcdn.com/image/fetch/$s_!ahy9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 1272w, https://substackcdn.com/image/fetch/$s_!ahy9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85faf9b9-f322-4c67-8086-a294a8baa630_903x367.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Morley urges engineers to read the synchronisation documentation carefully before reaching for any of these tools. Deadlocks happen when engineers use them without fully understanding their semantics. The architectural solution is always preferable when achievable: if you can design the program so that each thread never touches another thread&#8217;s data, you eliminate the entire class of problem. When you cannot, synchronisation primitives are available, but the burden of correctness falls entirely on the engineer.</p><h2><strong>Memory safety and the Rust argument</strong></h2><p>The issue closes on a topic that provokes strong reactions in C++ communities. With around 70% of serious security vulnerabilities attributed to memory safety failures in C and C++ code, the question of whether the language itself is the problem is not academic.</p><blockquote><p>Morley&#8217;s answer is direct. <em>&#8220;Go and learn some Rust.&#8221;</em></p></blockquote><p>He anticipates the objection. <em>&#8220;A lot of C++ programmers turn their nose up when Rust is mentioned. Generally, the feeling is: we don&#8217;t need Rust, we can do all of this in C++. But that&#8217;s not the point.&#8221;</em> The point is that the Rust compiler forces a specific kind of thinking about ownership and lifetime that C++ leaves entirely to the developer. Rust&#8217;s sync and send traits enforce thread safety at the type system level. Unsafe code is marked explicitly, which means the developer makes a deliberate choice to step outside safe boundaries rather than doing so accidentally. <em>&#8220;Learning a bit of Rust will make you better at writing safe C++. The reverse is not true.&#8221;</em></p><p>For engineers who are not yet ready to invest in Rust, Morley's immediate C++ recommendations are practical and specific. Prefer <code>std::array</code> over C-style arrays. Use smart pointers instead of manual memory management; writing operator new directly in application code is an antipattern at this point. Use <code>std::span</code> rather than raw pointers when passing data around. Avoid the C standard library IO functions entirely: <code>gets</code>, <code>puts</code>, <code>sprintf</code>, and their relatives have documented vulnerabilities and safer equivalents exist.</p><blockquote><p><em>&#8220;The best-case scenario for a bad memory access is a crash. If it goes unnoticed, it could happen for months before you notice that this has been producing garbage the entire time. By which point you&#8217;ve wasted months.&#8221;</em></p></blockquote><p>The throughline from <a href="https://deepengineering.substack.com/p/deep-engineering-31-sam-morley-on">Part 1</a> holds here. Whether the subject is decomposition, abstraction, maintainability, or memory safety, Morley keeps returning to the same discipline: be conscious of what you are doing, understand the costs of your choices, write for the person who will read the code next, and treat the machine as a collaborator rather than a black box.</p><h2><strong>&#128269; In case you missed it&#8230;</strong></h2><p>The complete Chapter 1 from Sam Morley&#8217;s book, The C++ Programmer&#8217;s Mindset &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5269e736-ea61-4f8d-b468-9e75cd9dbf63&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Thinking Computationally&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:440051761,&quot;name&quot;:&quot;Sam Morley&quot;,&quot;bio&quot;:&quot;Research software engineer and mathematician on the DataSig project at the University of Oxford.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfZA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b7dcfcf-a878-45d0-99e4-a8f2045dee3e_144x144.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://sammorley.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://sammorley.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Sam Morley&quot;,&quot;primaryPublicationId&quot;:7726502}],&quot;post_date&quot;:&quot;2026-01-22T08:31:44.729Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7667fcd3-2279-4e00-a74d-ff1459f26896_800x533.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/thinking-computationally&quot;,&quot;section_name&quot;:&quot;Practical Deep-Dives&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:185392285,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0154149e-12fd-4a3b-bd08-fe678eb672c9&quot;,&quot;caption&quot;:&quot;C++ rewards engineers who treat problem-solving as a deliberate process rather than an improvisation. In this conversation, Sam Morley returns repeatedly to that theme: decompose the work until it becomes a set of solvable, &#8220;atomic&#8221; parts, then choose abstractions that fit the real constraints of the system. He argues that abstractions are never free, e&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The C++ Programmer&#8217;s Mindset on Abstraction Costs, &#8220;Future You,&#8221; and Thinking with the Machine: A Conversation with Sam Morley&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Editor-in-Chief of Deep Engineering by Packt&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:440051761,&quot;name&quot;:&quot;Sam Morley&quot;,&quot;bio&quot;:&quot;Research software engineer and mathematician on the DataSig project at the University of Oxford.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfZA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b7dcfcf-a878-45d0-99e4-a8f2045dee3e_144x144.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://sammorley.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://sammorley.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Sam Morley&quot;,&quot;primaryPublicationId&quot;:7726502}],&quot;post_date&quot;:&quot;2026-01-22T05:13:13.607Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/TRii5U87yn8&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/the-c-programmers-mindset-on-abstraction&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:185273208,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a75cf9ab-b8b4-43a8-bfa5-5fa6353fe767&quot;,&quot;caption&quot;:&quot;C++ Memory Management Masterclass (Live) &#8212; Jan 24&#8211;25&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Deep Engineering #31: Sam Morley on decomposition &amp; abstraction in C++&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Editor-in-Chief of Deep Engineering by Packt&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:440051761,&quot;name&quot;:&quot;Sam Morley&quot;,&quot;bio&quot;:&quot;Research software engineer and mathematician on the DataSig project at the University of Oxford.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfZA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b7dcfcf-a878-45d0-99e4-a8f2045dee3e_144x144.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://sammorley.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://sammorley.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Sam Morley&quot;,&quot;primaryPublicationId&quot;:7726502}],&quot;post_date&quot;:&quot;2026-01-22T13:31:21.327Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8e6bf12-873b-4f08-ac14-f9e4d69295a8_800x533.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/deep-engineering-31-sam-morley-on&quot;,&quot;section_name&quot;:&quot;Newsletter Issues&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:185385606,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128736;&#65039; Tool of the Week</h2><p><strong><a href="https://github.com/google/benchmark">Google Benchmark</a> </strong>&#8212; A microbenchmark support library for C++</p><p>Google Benchmark is an open-source framework for measuring the performance of isolated C++ code so you can test cache-aware designs and tight-loop optimizations with high precision.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/google/benchmark&quot;,&quot;text&quot;:&quot;Learn more about Google Benchmark&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://github.com/google/benchmark"><span>Learn more about Google Benchmark</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/">C++26 Finalizes Technical Work</a> &#8212; The ISO committee completed the C++26 draft in London, locking in features like compile-time reflection, memory safety improvements, and contracts ahead of final approval.</p></li><li><p><a href="https://blog.rust-lang.org/2026/03/26/1.94.1-release/">Rust 1.94.1 Shipped</a> &#8212; A point release that fixes compiler regressions, resolves clippy false positives on match arms, and updates Cargo dependencies to address critical CVEs.</p></li><li><p><a href="https://blog.jetbrains.com/rust/2026/03/30/whats-new-in-rustrover-2026-1/">RustRover 2026.1 Released</a> &#8212; JetBrains introduced cargo-nextest integration, a call hierarchy view, LLDB 21 upgrades, and improved DWARF indexing for procedural macros.</p></li><li><p><a href="https://cppcon.org/category/news/">CppCon 2026 Opens Registration</a> &#8212; Registration is open for the Colorado event, with sessions covering AI infrastructure, low-latency design, and hardware-aware performance.</p></li><li><p><a href="https://www.helpnetsecurity.com/2026/02/09/linux-kernel-6-19-released/">Linux Kernel 7.0 Approaches</a> &#8212; After Linux 6.19, the merge window for 7.0 is now open, pointing to a major version release expected later this April.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #40: Karun Thankachan on Small Language Models in production]]></title><description><![CDATA[How to train SLMs to reason well, route across specialised models, and govern correctness at scale]]></description><link>https://deepengineering.net/p/deep-engineering-40-karun-thankachan</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-40-karun-thankachan</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 26 Mar 2026 14:49:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d04425f8-ad70-4b72-85e9-c60becee333c_2816x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong><a href="https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng">Building Production-Ready Agent Systems with MCP</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dyy6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dyy6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dyy6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A full-lifecycle workshop on designing, securing, evaluating, and optimizing agent systems that hold up in production. </p><p><strong>Online: </strong>March 29 <strong>|</strong> 10:30 AM - 4:00 PM EST</p><p>&#10003; 2-for-1 deal: Bring a colleague, get 2 passes for the price of 1.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng"><span>Register now</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p>Welcome to the 40th issue of Deep Engineering!</p><p>The conversation around AI infrastructure is heating up. Nvidia this week pointed to more than <strong>$1 trillion</strong> in <a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoNyksOgzAMBNATDUZUYsFtTBliJOejxFXF7WH1Ns8i2thEgl8r9eCUvO7qsszLKvPnVf52Y2R1h2tJP01EfqcPZL2xE2FE6mRhR9MwnLVDW_OLB_SSB9XXIys%3D&amp;@OriginalLink=technode.global">AI chip revenue opportunity</a> by 2027, explicitly tying that outlook to growing demand for inference. And when inference at scale becomes a boardroom number, model efficiency stops being a niche engineering concern and starts shaping cost control, product design, and build versus buy decisions. That is the<a href="https://www.reuters.com/world/asia-pacific/nvidia-ceo-set-reveal-new-chips-software-ai-megaconference-gtc-2026-03-16/"> </a>context in which small language models are becoming harder to ignore.</p><p>The case is not that general-purpose LLMs are going away &#8211; it is that a large share of production workloads, classification, structured extraction, and domain-specific reasoning, do not need an LLM. Serving a 7-billion parameter&#8239;<a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoFwkEKwCAMBMAX2bUWPPQ3YkMqbFRI-v8y80ZsvwHfK8YMIYfK7HL0ZSi5VOQLZ4VbIxPb1K-pJFuP0JPTHD8qOheY&amp;@OriginalLink=spotintelligence.com">SLM runs 10 to 30 times cheaper</a>&#8239;than a 70-billion parameter LLM, and that gap compounds across millions of requests. For engineering leaders, the question is no longer whether SLMs belong in the stack &#8211; it is how to train them to reason well, how to route across multiple specialized models at runtime, and how to govern correctness when AI is accelerating the pace of change.</p><p>This week&#8217;s feature is based on a conversation with&#8239;<a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNrLKCkpKLbS1y8vL9fLyczLTk3JzNNLzs_Vz8zTz04sKs0rAQDf1Azk&amp;@OriginalLink=www.linkedin.com">Karun Thankachan</a>, Senior Data Scientist at&#8239;<a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNotyssJgEAMBcCKNrnbjMQQzCEfcZ_Yvgh7HcaBa27MMHV6JVJukHaydsEKvGyc0YfE-B9b7c8kR8YH-UoX7w%3D%3D&amp;@OriginalLink=tech.walmart.com">Walmart</a>. We dig deep into how to treat reasoning as a budgeted resource, when routing across specialized models beats relying on a single large one, and why context engineering is winning over fine-tuning for many teams right now.</p><p>And we also have a <a href="https://deepengineering.substack.com/p/agentic-ai-is-redefining-edge-infrastructure">thought leadership</a> piece by <a href="https://www.linkedin.com/in/leejpeterson">Lee Peterson</a>, VP of Secure WAN Product Management at <strong>Cisco</strong>, on why the network layer underneath agentic systems matters just as much as the models running on top of it.</p><p>Let&#8217;s get started.</p><div><hr></div><h2 style="text-align: center;"><a href="https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf">Stop Building Vault</a></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Syn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 424w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 848w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1272w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Syn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!_Syn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 424w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 848w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1272w, https://substackcdn.com/image/fetch/$s_!_Syn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83f67aa6-849f-46a9-8a05-53e9c5620c5e_300x300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sponsored </figcaption></figure></div><p style="text-align: center;">Secrets, PKI, &amp; PAM in one platform. Postgres-backed. No custom orchestration. Flexible deployment.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf&quot;,&quot;text&quot;:&quot;Start for free today &#8594;&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.vpdae.com/redirect/5fyjlge1f9ex7lvgzd49zncleuf"><span>Start for free today &#8594;</span></a></p><div><hr></div><h1>The Case for Small Language Models in Real Systems</h1><p><em>by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Deepayan Bhattacharjee&quot;,&quot;id&quot;:480630041,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!jegY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F385931a8-2eb0-4f8a-bd57-14713ff3988d_144x144.png&quot;,&quot;uuid&quot;:&quot;e098a63a-523a-4081-9d92-9b51e15de766&quot;}" data-component-name="MentionToDOM"></span> with </em><a href="https://www.linkedin.com/in/karunt">Karun Thankachan</a>.</p><p>Karun Thankachan&#8217;s <a href="https://deepengineering.substack.com/p/small-language-models-and-the-future">conversation</a> with us keeps circling back to one production truth:</p><p>The &#8220;best&#8221; model is the one that meets your accuracy target inside your cost and latency budget.</p><p>In early phases of a product, teams often use large general-purpose LLMs to explore what&#8217;s possible. But once the user experience stabilizes, the engineering focus shifts &#8211; toward predictable latency, controllable spend, and repeatable quality. That shift is where small language models (SLMs) start to matter more than giant LLMs, because many real systems don&#8217;t need universal reasoning &#8211; they need reliable, narrow reasoning at scale.</p><p>Recent research and releases support this trajectory. For example,&#8239;<strong><a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoNyEEOwyAMBMAXgaMccuhvqFkVS8aOjFO-385xRua9XkR779pmr-yTYNTxhfqNoMDyJxiLEjxMuGlpkcL6r_M4LxLL8P6w2KcE2nJTSZSjXO86cuoPOBskkw%3D%3D&amp;@OriginalLink=www.amd.com">Zihao An et al. (Jan 20, 2026)</a></strong>&#8239;show that a&#8239;<strong>0.6B-parameter</strong>&#8239;reasoning model (ReasonLite) can reach&#8239;<strong>75.2% accuracy on AIME 2024</strong>, and they attribute it to distillation and training recipe design rather than sheer parameter count. This is exactly the kind of result that makes SLMs a serious production option once you know what task you need to solve.</p><h2>Cost-effective reasoning is a budget problem</h2><p>Thankachan&#8217;s core argument is not that LLMs are bad. It&#8217;s that <strong>general-purpose reasoning is expensive overkill</strong> for many high-volume workflows (customer support classification, catalog normalization, routing, anomaly triage, internal copilots for one domain). When a feature goes from thousands of calls to millions, the economics change.</p><p>A key point from the research community is that reasoning often becomes expensive because teams implicitly pay for&#8239;<strong>long reasoning traces</strong>&#8239;even when a request is simple.&#8239;<strong><a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNrLKCkpKLbS108sqsgs08svStdPTCrWNzIzMNQzsDA2NAAAuWoJ8w%3D%3D&amp;@OriginalLink=arxiv.org">Kun Liang et al. (Jan 13, 2026)</a></strong>&#8239;describe this problem directly: long-form chain-of-thought reasoning can improve accuracy, but applying &#8220;overlong reasoning&#8221; uniformly at inference time creates &#8220;substantial and often unnecessary computational cost.&#8221; They propose&#8239;<strong>ORBIT</strong>, which aims to make reasoning behavior controllable across multiple &#8220;budgets.&#8221;</p><p>That maps cleanly to production reality: <strong>you don&#8217;t want a single mode of intelligence</strong>. You want a system that can do &#8220;fast and cheap&#8221; when it can, and &#8220;slow and deep&#8221; only when it must.</p><h2>Teaching SLMs to reason without bloating latency</h2><p>The approach Thankachan describes in the interview treats SLM training like an engineering workflow: combine distillation techniques, program-aided verification, and evaluation probes to close the gap between a teacher model and a smaller student.</p><p>What&#8217;s notable is that the <em>same idea</em> is showing up in recent public work: reasoning performance in small models is increasingly a function of <strong>distillation data quality, training curriculum, and trace control</strong>, not only scale.</p><p>In the AMD ReasonLite write-up, the authors describe a <strong>two-stage distillation curriculum</strong>: first fine-tune on <strong>short chain-of-thought</strong> for efficiency, then fine-tune on <strong>long chain-of-thought</strong> for peak accuracy. They also report that the &#8220;Turbo&#8221; variant tends to generate shorter outputs and offers a better efficiency/accuracy balance, while the long-trace variant reaches higher peak performance. This lines up with the production emphasis Thankachan describes: if your model is trained to be verbose, it will be slow and costly; if you want predictable serving, you must treat <em>thinking length</em> as a first-class knob.</p><p>A practical pattern for senior engineers is to separate <strong>training-time compute</strong> from <strong>serving-time compute</strong>:</p><ul><li><p>Use heavier techniques (like generating multiple traces, voting, or deeper teacher reasoning) during dataset creation and training, where batching and offline pipelines reduce the pain.</p></li><li><p>Enforce strict budgets at inference (max reasoning tokens, max latency, max retries) and treat budget violations as signals to improve training data or shorten traces.</p></li></ul><p><strong>The leadership takeaway:</strong> budgeting belongs in the contract, not just in infrastructure dashboards after costs explode.</p><h2>Orchestrating many small models beats one giant model</h2><p>The SLM-Fusion framing Thankachan describes &#8211; routing across specialized models, merging where it helps, and wrapping the whole thing behind an OpenAI-compatible gateway &#8211; reflects a broader trend:</p><p>Modern systems are becoming mixtures, not monoliths.</p><p>Recent work in retrieval-heavy QA shows why. <strong><a href="https://arxiv.org/abs/2603.14045">Yasaman Zarrinkia, Venkatesh Srinivasan, and Alex Thomo (Mar 18, 2026; v2)</a></strong> report a striking result when evaluating a Graph-RAG system: 77%&#8211;91% of questions contain the gold answer in the retrieved context, yet end-to-end accuracy is only 35%&#8211;78%, and 73%&#8211;84% of errors are reasoning failures.</p><p>That finding matters for architecture decisions. It implies that &#8220;better retrieval&#8221; alone isn&#8217;t enough; you need <strong>better reasoning structure</strong> and <strong>better context shaping</strong>. The same paper proposes two augmentations &#8211; structured prompting plus graph-walk compression &#8211; and then shows something that should make engineering leaders pay attention: with question-type routing, an <strong>open-weight Llama-8B</strong> configuration can <strong>match or exceed an unaugmented Llama-70B baseline</strong> across multiple benchmarks at about <strong>12&#215; lower cost</strong>.</p><p>This is the pragmatic case for SLM-centric production:</p><ul><li><p><strong>Route</strong> by intent/domain and cost budget, not just by &#8220;best model available.&#8221;</p></li><li><p><strong>Specialize</strong> models for stable tasks (where fine-tuning or distillation pays off).</p></li><li><p><strong>Escalate</strong> to a larger model only when uncertainty is high or stakes demand it.</p></li></ul><h2>Why context engineering is beating fine-tuning right now</h2><p>Thankachan argues that industry attention is shifting toward RAG and context engineering because it can be cheaper and easier to operationalize than constant fine-tuning &#8211; especially when domain knowledge changes frequently.</p><p>The Graph-RAG results above reinforce this. Even when the answer is present in retrieved context, the failure mode is often <strong>reasoning over context</strong>, not retrieval itself. That pushes teams toward two concrete engineering priorities:</p><ul><li><p><strong>Structure the prompt</strong> so the model reasons in a way that matches the data representation (for Graph-RAG, they use SPARQL-style decomposition).</p></li><li><p><strong>Compress context</strong> so the model sees less noise and wastes fewer tokens, while still preserving the minimal information needed to answer.</p></li></ul><p>For architects, the key decision lens is: <strong>fine-tuning changes the model; context engineering changes the problem presented to the model</strong>. When requirements or source documents change weekly, the second approach often has a faster operational loop.</p><h2>What&#8217;s next &#8211; budget-aware reasoning and diffusion models</h2><p>Thankachan flags diffusion models as a trend to watch. The key reason is not hype &#8211; it&#8217;s that diffusion-based language models may offer <strong>new efficiency controls</strong> that differ from token-by-token autoregressive decoding.</p><p>A concrete example:&#8239;<strong><a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNrLKCkpKLbS108sqsgs08svStdPTCrWNzIzMNYzMDM0MgYAuW8J9Q%3D%3D&amp;@OriginalLink=arxiv.org">Vittorio Rossi et al. (Mar 6, 2026)</a></strong>&#8239;argue that diffusion language models (DLMs) can waste compute because they run denoising steps over a fixed maximum length even when the desired response is short. They propose a zero-shot mechanism to estimate required output length and crop the context window before generation, reporting large FLOP reductions without statistically significant performance loss (and improvements in 2 of 4 benchmarks).</p><p>This matters because &#8220;right-sized reasoning&#8221; is becoming an explicit research goal across paradigms &#8211; whether you do it with controllable budgets in autoregressive models (as in ORBIT) or with length control in diffusion models.</p><p>Finally, distillation itself is getting more modular.&#8239;<strong><a href="https://links.uk.defend.egress.com/Warning?crId=69c523b34c6c9c9ab6d09b48&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNrLKCkpKLbS108sqsgs08svStdPTCrWNzIzMNIzMDQyMgIAuVYJ7w%3D%3D&amp;@OriginalLink=arxiv.org">Shaoxiong Yang et al. (Feb 1, 2026)</a></strong>&#8239;propose&#8239;<strong>FutureMind</strong>, which combines adaptive distillation with a multi-stage reasoning pipeline and retrieval guidance &#8211; explicitly acknowledging that SLMs are attractive for low-latency settings but often struggle on knowledge-intensive tasks without structured reasoning and retrieval help.</p><h2>Key Takeaways</h2><ul><li><p><strong>Treat reasoning as a budgeted resource.</strong> Put token limits and latency targets into your API contract, not just your monitoring dashboards, and design &#8220;fast vs deep&#8221; modes intentionally.</p></li><li><p><strong>Distillation makes small models competitive when the recipe is right.</strong>&#8239;Evidence from subbillion models shows that curriculum design and trace supervision can close surprising amounts of the gap.</p></li><li><p><strong>RAG failures are often reasoning failures, not retrieval failures.</strong> Even when the answer is in-context, models may fail to use it &#8211; so prompt structure and context compression matter.</p></li><li><p><strong>Routing is a cost lever.</strong> With the right augmentations and routing, smaller open-weight models can rival much larger baselines at large cost reductions.</p></li><li><p><strong>Watch diffusion LMs for new efficiency primitives.</strong> Length-aware diffusion decoding suggests a different path to controlling wasted compute, which may matter for production workloads dominated by short answers.</p></li></ul><h2><strong>&#128269; In case you missed it&#8230;</strong></h2><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b1fe48f4-5104-4892-8986-23ff6c9a668c&quot;,&quot;caption&quot;:&quot;This conversation with Karun Thankachan is a practical tour through small language models in production, starting from the limitations of general-purpose LLMs and repeatedly returning to a single constraint. Cost-effective reasoning for specific tasks is a different engineering problem than general-purpose reasoning, and good engineers choose their tool&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Small Language Models and the Future of Production AI with Karun Thankachan&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Editor-in-Chief of Deep Engineering by Packt&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-26T07:55:56.871Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9159d430-667c-43e3-ac30-1a5827aab86a_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/small-language-models-and-the-future&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:191846393,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128161;<strong> Industry Perspective</strong></h2><h3><strong><a href="https://deepengineering.substack.com/p/agentic-ai-is-redefining-edge-infrastructure">Agentic AI Is Redefining Edge Infrastructure</a></strong></h3><p><em>Thought leadership piece by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;73d576a3-a268-40d4-b9f0-ae4567e5103a&quot;}" data-component-name="MentionToDOM"></span> with <a href="https://www.linkedin.com/in/leejpeterson">Lee Peterson</a>, VP of Secure WAN Product Management at <a href="https://www.cisco.com/">Cisco</a>.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://deepengineering.substack.com/p/agentic-ai-is-redefining-edge-infrastructure" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3-Bj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 424w, https://substackcdn.com/image/fetch/$s_!3-Bj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 848w, https://substackcdn.com/image/fetch/$s_!3-Bj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 1272w, https://substackcdn.com/image/fetch/$s_!3-Bj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3-Bj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png" width="724" height="378.8933333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1200,&quot;resizeWidth&quot;:724,&quot;bytes&quot;:175042,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://deepengineering.substack.com/p/agentic-ai-is-redefining-edge-infrastructure&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/189967537?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!3-Bj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 424w, https://substackcdn.com/image/fetch/$s_!3-Bj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 848w, https://substackcdn.com/image/fetch/$s_!3-Bj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 1272w, https://substackcdn.com/image/fetch/$s_!3-Bj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f898dfb-9641-4ff5-8cc8-053df85f5268_1200x628.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As agentic systems move closer to the edge, the network underneath them matters just as much as the models running on top. Peterson makes the case that organizations still designing around centralized control will hit a wall at exactly the wrong moment, and that getting edge compute and networking right is not an upgrade but a rethink from the ground up.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:192122268,&quot;url&quot;:&quot;https://deepengineering.substack.com/p/agentic-ai-is-redefining-edge-infrastructure&quot;,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;title&quot;:&quot;Agentic AI Is Redefining Edge Infrastructure&quot;,&quot;truncated_body_text&quot;:&quot;Artificial intelligence is entering a new phase with agentic AI, where autonomous systems perceive, decide, act, and learn without constant human oversight, operating independently across distributed environments while collaborating with other agents in real time.&quot;,&quot;date&quot;:&quot;2026-03-25T18:13:57.493Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:427210082,&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;handle&quot;:&quot;sjan00&quot;,&quot;previous_name&quot;:&quot;S Jan&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;bio&quot;:&quot;/localhost&quot;,&quot;profile_set_up_at&quot;:&quot;2025-12-19T07:06:59.856Z&quot;,&quot;reader_installed_at&quot;:null,&quot;publicationUsers&quot;:[],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://deepengineering.substack.com/p/agentic-ai-is-redefining-edge-infrastructure?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!H5BJ!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png" loading="lazy"><span class="embedded-post-publication-name">Packt Deep Engineering</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Agentic AI Is Redefining Edge Infrastructure</div></div><div class="embedded-post-body">Artificial intelligence is entering a new phase with agentic AI, where autonomous systems perceive, decide, act, and learn without constant human oversight, operating independently across distributed environments while collaborating with other agents in real time&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; Saqib Jan</div></a></div><div><hr></div><h2>&#128736;&#65039; Tool of the Week</h2><p><strong><a href="https://github.com/arcee-ai/DistillKit">DistillKit</a></strong> &#8212; open-source knowledge distillation toolkit for language models</p><p><strong>Highlights:</strong></p><ul><li><p><strong>Two distillation methods in one toolkit:</strong> Supports both logit-based distillation and hidden states-based distillation, which aligns intermediate layer representations and allows distillation across different model architectures.</p></li><li><p><strong>Offline distillation at scale:</strong> An advanced logit compression system using polynomial approximation, error-diffusion quantization, and bit-packing makes it practical to train from pre-captured teacher outputs without running the teacher model live during every training step.</p></li><li><p><strong>Composable loss functions:</strong> Mix and match KL divergence, JSD, TVD, ranking losses, and hidden state alignment to control exactly what the student model learns and how aggressively it is pushed toward the teacher&#8217;s behaviour.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/arcee-ai/DistillKit&quot;,&quot;text&quot;:&quot;Learn more about Distillkit&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://github.com/arcee-ai/DistillKit"><span>Learn more about Distillkit</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><a href="https://huggingface.co/blog/huggingface/state-of-os-hf-spring-2026">Hugging Face Spring 2026 open source report released</a>: The platform now has 13 million users and over 2 million models, with Chinese models accounting for 41% of downloads and robotics datasets growing 23x to become the largest category.</p></li><li><p><a href="https://github.com/vllm-project/vllm/releases">vLLM 0.18.0 released with 30.8% throughput improvement and new Realtime API</a>: The release ships async scheduling with Pipeline Parallelism delivering a 30.8% end-to-end throughput gain, a WebSocket-based Realtime API for streaming audio, and expanded hardware support across NVIDIA, AMD, Intel, and TPU.</p></li><li><p><a href="https://openai.com/index/introducing-gpt-5-4-mini-and-nano/">OpenAI launches GPT-5.4 mini and GPT-5.4 nano</a>: Two smaller models optimized for speed and efficiency in coding, subagents, and high-volume tool use, continuing the industry shift toward task-specific models over general-purpose frontier inference.</p></li><li><p><a href="https://blockchain.news/news/nvidia-ai-grid-distributed-edge-inference-gtc-2026">NVIDIA&#8217;s AI Grid reference design cuts edge inference costs by 76% in early benchmarks</a>: The architecture distributes AI compute across telco network nodes, with Comcast benchmarks showing sub-500ms latency at P99 burst traffic and 80.9% throughput gains over a centralized deployment.</p></li><li><p><a href="https://www.anthropic.com/news/the-anthropic-institute">Anthropic announces the Anthropic Institute</a>: A new research body focused on the economic, societal, and security impacts of advanced AI, signalling that frontier labs are formalizing impact analysis as a structured part of model development and evaluation.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #39: Ron Veen on Java-to-Kotlin migration without the rewrite]]></title><description><![CDATA[How to modernize a large JVM codebase layer by layer, without freezing product velocity or introducing semantic risk]]></description><link>https://deepengineering.net/p/deep-engineering-39-ron-veen-on-java</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-39-ron-veen-on-java</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 19 Mar 2026 14:30:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c19ffd8d-5fc7-43bb-aa4e-c6917f552142_2816x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong><a href="https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng">Building Production-Ready Agent Systems with MCP</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dyy6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dyy6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dyy6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!dyy6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a1d5a-7aae-4aff-9217-f01110781728_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A full-lifecycle workshop on designing, securing, evaluating, and optimizing agent systems that hold up in production. </p><p><strong>Online: </strong>March 29 <strong>|</strong> 10:30 AM - 4:00 PM EST</p><p>&#10003; 2-for-1 deal: Bring a colleague, get 2 passes for the price of 1.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.com/e/building-production-ready-agent-systems-with-mcp-tickets-1982519419953?aff=deepeng"><span>Register now</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p><strong>Welcome to the 39th issue of Deep Engineering!</strong></p><p>In Issue <strong><a href="https://deepengineering.substack.com/p/deep-engineering-34-jose-dimas-lujan">#34</a> </strong>we spoke with Jos&#233; Dimas Luj&#225;n Castillo and Ron Veen, authors of <em><strong><a href="https://www.packtpub.com/en-us/product/kotlin-for-java-developers-9781835884836">Kotlin for Java Developers</a></strong>, </em>to unpack practical decision lenses for modernizing JVM systems. In the past week, JetBrains released <strong><a href="https://kotlinlang.org/docs/whatsnew2320.html">Kotlin 2.3.20</a></strong> with a simpler Maven setup and compiler-plugin improvements, and OpenAI added <strong><a href="https://developers.openai.com/codex/changelog">GPT-5.4 mini to Codex</a></strong> as a faster, lighter model for coding tasks. The language stack is evolving, and so are the AI tools teams now use to change production code at speed.</p><p>But how can a large Java codebase be migrated without turning modernization into a rewrite, a slowdown, or a source of subtle semantic risk? We are collaborating again with Ron Veen, whose <strong><a href="https://deepengineering.substack.com/p/from-java-to-kotlin-a-large-scale">article</a></strong> answers that by treating migration as a controlled, layer-by-layer transformation&#8212;one where Kotlin&#8217;s gains in null safety and expressiveness matter, but where the harder engineering work lies in framework compatibility, review discipline, and keeping humans accountable while AI accelerates the mechanics.</p><p><strong><a href="https://www.linkedin.com/in/ron-veen/">Ron Veen</a> </strong>is<strong> </strong>a JVM veteran with over 20 years of experience across enterprise systems, from mainframes to modern microservices. Veen is an <strong>Oracle Certified Java Programmer </strong>and certified <strong>Sun Business Component Developer</strong>. As a Lead Developer at Team Rockstars IT and a regular international speaker, Veen brings both hands-on experience and architectural perspective.</p><p>Let&#8217;s get started</p><div><hr></div><blockquote><p><strong>Mike Scientific Repo:</strong> Tons (&gt; 1200) of FREE Math, AI, Machine Learning Books, All reviews (almost 600), presentations and more learning resources: <a href="https://github.com/merlihson/scientific-resources">https://github.com/merlihson/scientific-resources</a></p><p><strong>Science and AI with Mike:</strong> Telegram channel - fresh deep learning paper reviews and free books: <a href="https://t.me/science_and_ai_with_mike_english/">https://t.me/science_and_ai_with_mike_english/</a></p></blockquote><div><hr></div><h3>From Java to Kotlin at Scale &#8211; with AI in the Loop</h3><p>by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Deepayan Bhattacharjee&quot;,&quot;id&quot;:480630041,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!jegY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F385931a8-2eb0-4f8a-bd57-14713ff3988d_144x144.png&quot;,&quot;uuid&quot;:&quot;cda99dd1-94d3-43cb-b196-cc364895bb37&quot;}" data-component-name="MentionToDOM"></span> with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Ron veen&quot;,&quot;id&quot;:102761742,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!QPwW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa02f9f-52dd-4573-942f-cefe45913adb_1166x1168.jpeg&quot;,&quot;uuid&quot;:&quot;7db32e64-476b-4f87-97b1-bc288d5e2a2f&quot;}" data-component-name="MentionToDOM"></span></p><p>Most large engineering organizations are sitting on a paradox.</p><p>Their core systems &#8211; often millions of lines of Java &#8211; are stable, battle-tested, and deeply valuable. But they&#8217;re also increasingly out of step with how modern teams want to write software: safer by default, more expressive, and easier to reason about. Kotlin promises exactly that. The problem is not <em>why</em> to migrate, it&#8217;s <em>how</em> to do it without freezing product velocity or introducing subtle, system-wide risk.</p><p>This is where Ron Veen&#8217;s migration story becomes relevant. Instead of treating Java-to-Kotlin as a one-shot rewrite or a tooling exercise, he approaches it as a controlled, layer-by-layer transformation &#8211; reconstructed on an OpenMRS codebase to mirror real-world enterprise constraints. The twist: AI is not just assisting but <em>actively accelerating</em> the migration &#8211; while humans remain accountable for every semantic decision.</p><p>What emerges is not just a migration playbook, but a shift in how we think about large-scale code evolution. The bottleneck is no longer writing code &#8211; it&#8217;s governing correctness at speed. And in that world, success depends less on conversion tools and more on how teams handle semantics, frameworks, and oversight under AI-assisted velocity.</p><p>To this end, today&#8217;s issue focuses on three action points for senior engineers and engineering leaders:</p><ul><li><p>Kotlin migrations succeed when you treat them as a <em>semantic</em> change (types, nullability, and idioms), not a mechanical translation.</p></li><li><p>Framework constraints (Spring/Hibernate/JPA) are where migrations usually get stuck &#8211; unless you plan for Kotlin&#8217;s &#8220;final by default&#8221; stance and use the right compiler plugins.</p></li><li><p>AI can compress weeks of conversion work into days, but it shifts the hard work to <em>governance</em>: review strategy, testing cadence, and repeatable patterns.</p></li></ul><h2>1: Treat migration as a semantic refactor, not a syntax swap</h2><p>One of the easiest mistakes in a Java-to-Kotlin migration is to treat it as a tooling problem. Run the IDE converter, clean up a few warnings, and move on. Veen&#8217;s work makes it clear why that approach fails: working Kotlin isn&#8217;t the goal &#8211; <em>idiomatic</em> Kotlin is. And the gap between the two is where most of the risk, and value, lies.</p><p>Veen&#8217;s core point is easy to miss if you&#8217;ve only used IDE &#8220;convert Java to Kotlin&#8221; tools: <em>working Kotlin is not the goal &#8211; idiomatic Kotlin is.</em> The difference shows up most sharply in nullability, because Kotlin forces you to say what can be null and what cannot.</p><p>That&#8217;s also why Kotlin&#8217;s Java interop rules matter for incremental migration. Kotlin can call existing Java &#8220;naturally,&#8221; but when Kotlin reads Java types, it must assume any reference might be null. Kotlin handles this by using <em>platform types</em>, which relax compile-time null checks and can still fail at runtime if your assumptions are wrong. For leaders, the practical implication is: your migration policy must include a nullability strategy (what becomes <code>T</code>, what becomes <code>T?</code>, and when you tighten types).</p><p>Veen&#8217;s entity conversion example shows why this is a worthwhile discipline:</p><p><strong>Java Version</strong></p><pre><code><code>@Entity 
@Table(name = "location_tag") 
@Audited 
@AttributeOverride(name = "name", column = @Column(name = "name", nullable = false, length = 50)) 
public class LocationTag extends BaseChangeableOpenmrsMetadata { 
 
    private static final long serialVersionUID = 7654L; 
    private Integer locationTagId; 
    
    public LocationTag() { 
    } 
 
    public LocationTag(Integer locationTagId) { 
        this.locationTagId = locationTagId; 
    } 
 
    public LocationTag(String name, String description) { 
        setName(name); 
        setDescription(description); 
    } 
 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "location_tag_id", nullable = false) 
    public Integer getLocationTagId() { 
        return this.locationTagId; 
    } 
 
    public void setLocationTagId(Integer locationTagId) { 
        this.locationTagId = locationTagId; 
    } 
 
    @Override 
    public Integer getId() { 
        return getLocationTagId(); 
    } 
 
    @Override 
    public void setId(Integer id) { 
        setLocationTagId(id); 
    } 
 
    @Override 
    public String toString() { 
        return getName() != null ? getName() : ""; 
    } 
} </code></code></pre><p><strong>Kotlin Version</strong></p><pre><code><code>@Audited 
@Entity 
@Table(name = "location_tag") 
@AttributeOverride(name = "name", column = Column(name = "name", nullable = false, length = 50)) 
class LocationTag() : BaseChangeableOpenmrsMetadata() { 
 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "location_tag_id", nullable = false) 
    var locationTagId: Int? = null 
 
    constructor(locationTagId: Int?) : this() { 
        this.locationTagId = locationTagId 
    } 
 
    constructor(name: String?, description: String?) : this() { 
        this.name = name 
        this.description = description 
    } 
 
    override fun toString(): String = name ?: "" 
 
    override fun getId(): Int? = locationTagId 
 
    override fun setId(id: Int?) { 
        locationTagId = id 
    } 
 
    companion object { 
        private const val serialVersionUID = 7654L 
    } 
} </code></code></pre><p>With this approach, boilerplate shrinks, but more importantly, intent becomes visible in the type system.</p><p>For senior reviewers, the takeaway is that &#8220;semantic migration&#8221; is reviewable. You can ask: Do the nullability markings reflect reality? Did we remove boilerplate without losing invariants? Are we leaning on Kotlin&#8217;s strengths (properties, expression bodies, Elvis operator) in ways that reduce bug surface?</p><h2>2: Framework constraints are the hidden migration backlog</h2><p>Most Java-to-Kotlin migration pain doesn&#8217;t come from language syntax. It comes from frameworks that depend on bytecode tricks: proxies, reflection, and runtime enhancement.</p><p>Two Kotlin compiler plugins exist precisely to reduce this friction:</p><ul><li><p>The <strong>all-open</strong> plugin addresses Kotlin&#8217;s default of making classes and members <em>final</em>. Kotlin&#8217;s docs explicitly call out that this default is inconvenient for frameworks such as Spring AOP, which require classes to be <code>open</code> so proxies can be created.</p></li><li><p>The <strong>no-arg</strong> plugin generates a synthetic zero-argument constructor for annotated classes, which helps frameworks like JPA instantiate entities via reflection even when Kotlin doesn&#8217;t define a zero-arg constructor explicitly.</p></li></ul><p>These are leadership-level concerns because they determine whether your migration scales. If teams manually sprinkle <code>open</code> and constructors across hundreds of files with inconsistent rules, you get a &#8220;looks migrated, runs broken&#8221; outcome.</p><p>Veen shows this in his service implementation example:</p><pre><code><code>@Service("medicationDispenseService") 
@Transactional 
open class MedicationDispenseServiceImpl : BaseOpenmrsService(), MedicationDispenseService { 
 
    @Autowired 
    lateinit var dao: MedicationDispenseDAO 
 
    @Transactional(readOnly = true) 
    override fun getMedicationDispense(id: Int?): MedicationDispense? = 
        dao.getMedicationDispense(id) 
 
    override fun saveMedicationDispense(dispense: MedicationDispense): MedicationDispense { 
        require(dispense != null) { "MedicationDispense cannot be null" } 
        return dao.saveMedicationDispense(dispense) 
    } 
 
    @Transactional(readOnly = true) 
    override fun getMedicationDispenses( 
        patient: Patient, 
        drug: Drug?, 
        dateRangeParam: DateRangeParam?, 
        startIndex: Int?, 
        limit: Int? 
    ): List&lt;MedicationDispense&gt; { 
        require(patient != null) { "Patient cannot be null" } 
        return dao.getMedicationDispenses(patient, drug, dateRangeParam, startIndex, limit) 
    } 
} </code></code></pre><p>In the preceding code, the <code>open</code> keyword is a runtime requirement, not a stylistic choice, when frameworks proxy your classes for transactions.</p><p>A practical leadership move here is to standardize <em>how</em> these requirements are met: prefer compiler plugins (where feasible) over manual edits. Kotlin&#8217;s docs note that you can use a Spring-specific wrapper (<code>kotlin-spring</code>) on top of <code>all-open</code>, and that Spring project templates typically enable it by default. Likewise, Kotlin documents that <code>kotlin-jpa</code> is a wrapper on top of <code>no-arg</code> and automatically targets common JPA annotations.</p><h2>3: AI accelerates conversion, but governance determines quality</h2><p>Veen&#8217;s migration stance is not &#8220;AI replaces engineers.&#8221; It&#8217;s closer to: <em>AI replaces repetitive conversion work, so humans can spend time on correctness and architecture.</em></p><p>Recent developments reinforce why that governance burden is growing. Anthropic positions Claude Opus 4.6 as improved for coding tasks that involve longer planning, more reliable operation in larger codebases, and stronger debugging and code review &#8211; with a very large context window intended for long, multi-step work. In practice, Anthropic&#8217;s telemetry-based research suggests users are already letting Claude Code run autonomously for longer on the most complex work: the 99.9th percentile &#8220;turn duration&#8221; in Claude Code nearly doubled from under 25 minutes to over 45 minutes over a three-month span, and experienced users enable auto-approve more often while interrupting when needed.</p><p>That pattern maps directly onto migration risk. The faster you transform files, the easier it is to:</p><ul><li><p>Propagate a wrong nullability decision across a layer.</p></li><li><p>Preserve a Java anti-pattern in Kotlin clothing.</p></li><li><p>Break a proxy/reflection expectation in subtle ways.</p></li></ul><p>For senior engineers and architects, the emphasis shifts to <em>controlling the blast radius</em>. Veen&#8217;s own best practices (small batches, frequent commits, tests between batches, and explicit pattern guides) are not process overload &#8211; they are how you turn &#8220;AI speed&#8221; into &#8220;organizational safety.&#8221;</p><p>Even Kotlin itself nudges teams toward explicitness where Java might have relied on convention. For example, Kotlin treats Java&#8217;s checked exceptions as unchecked &#8211; the compiler won&#8217;t force catches &#8211; so interoperability requires deliberate documentation patterns (for example, <code>@Throws</code> for Java callers, as Veen shows).</p><p>A smaller but telling example from Veen&#8217;s validator conversion shows how Kotlin idioms can reduce branching and clarify intent &#8211; if reviewers insist on it:</p><pre><code><code>@Component 
@Handler(supports = [EncounterRole::class]) 
class EncounterRoleValidator : RequireNameValidator() { 
 
    @Autowired 
    private lateinit var encounterService: EncounterService 
 
    override fun validate(obj: Any, errors: Errors) { 
        super.validate(obj, errors) 
        if (errors.hasErrors()) return 
 
        val encounterRole = obj as EncounterRole 
        val name = encounterRole.name?.trim() 
 
        if (!name.isNullOrBlank()) { 
            val duplicate = encounterService.getEncounterRoleByName(name) 
            if (duplicate != null &amp;&amp; encounterRole.uuid != duplicate.uuid) { 
                errors.rejectValue( 
                    "name", 
                    "EncounterRole.duplicate.name", 
                    "Specified Encounter Role name already exists" 
                ) 
            } 
        } 
    } 
} </code></code></pre><h2>Key Takeaways</h2><ul><li><p><strong>Migration success depends on semantic decisions, not just conversion volume.</strong> Lock down your nullability rules early, and review them as architecture, not style.</p></li><li><p><strong>Use Kotlin&#8217;s compiler plugins to meet framework requirements at scale.</strong> Kotlin is <code>final</code> by default; <code>all-open</code> (and wrappers like <code>kotlin-spring</code>) exist because frameworks such as Spring AOP need <code>open</code> classes.</p></li><li><p><strong>Plan for reflection and JPA.</strong> If your entities need zero-arg constructors for runtime instantiation, <code>no-arg</code> (and wrappers like <code>kotlin-jpa</code>) can generate them safely.</p></li><li><p><strong>AI makes migration fast, but it increases the need for governance.</strong> Long-context models are designed for sustained, multi-step coding work.</p></li><li><p><strong>Adopt &#8220;human-in-the-loop&#8221; guardrails</strong> that match how agents are used in practice &#8211; users increasingly auto-approve and let agents run longer, intervening when needed.</p></li></ul><div><hr></div><h1><strong>&#129504; Expert Insight</strong></h1><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f969b9dc-121d-4c8f-9c00-2ec7bea53303&quot;,&quot;caption&quot;:&quot;Recently, I had to migrate a Java codebase to Kotlin. Now, we are talking about proprietary software, so the code cannot be shared in this article. Thus, I decided to find an open-source project with approximately the same characteristics. That is the reason why we use OpenMRS in this article.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;From Java to Kotlin: A Large-Scale Migration Story with AI Assistance&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:102761742,&quot;name&quot;:&quot;Ron veen&quot;,&quot;bio&quot;:&quot;Experienced Java developer, conference speaker, book autor. Specializing in AI supported software development.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!QPwW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa02f9f-52dd-4573-942f-cefe45913adb_1166x1168.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-18T18:09:02.960Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3586000-b386-4273-b570-744b0f0b7291_2816x1536.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/from-java-to-kotlin-a-large-scale&quot;,&quot;section_name&quot;:&quot;Tutorials&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:191366305,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128269; In case you missed it&#8230;</h2><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;3272d5f8-8de5-4f1d-abbf-c97968611c66&quot;,&quot;caption&quot;:&quot;Multi-Agent Code Review That Catches Real Issues&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Deep Engineering #34: Jos&#233; Dimas Luj&#225;n Castillo and Ron Veen on Kotlin for Java in Production&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Editor-in-Chief of Deep Engineering by Packt&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:102761742,&quot;name&quot;:&quot;Ron veen&quot;,&quot;bio&quot;:&quot;Experienced Java developer, conference speaker, book autor. Specializing in AI supported software development.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!QPwW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa02f9f-52dd-4573-942f-cefe45913adb_1166x1168.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:112865362,&quot;name&quot;:&quot;Jos&#233; Dimas Luj&#225;n&quot;,&quot;bio&quot;:&quot;Jos&#233; Dimas Luj&#225;n Castillo is an Engineering Manager, author, and tech community leader with 20+ years in software development. He writes about AI, software engineering, leadership, and how developers evolve in an AI-driven world.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0700d6f9-50c3-45f7-a72b-461aa7132a7c_400x400.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://josedlujan.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://josedlujan.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Jos&#233; Dimas Luj&#225;n&quot;,&quot;primaryPublicationId&quot;:8364593}],&quot;post_date&quot;:&quot;2026-02-12T13:31:35.690Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adf8dee9-ff71-4fc4-8023-42b2b6ce5011_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/deep-engineering-34-jose-dimas-lujan&quot;,&quot;section_name&quot;:&quot;Newsletter Issues&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:187724506,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128736;&#65039; Tool of the Week</h2><p><strong><a href="https://github.com/JetBrains/Exposed">Exposed</a></strong> &#8212; Kotlin&#8217;s type-safe SQL framework, now at 1.0</p><p>Exposed is JetBrains&#8217; open-source SQL framework for Kotlin, hitting 1.0 this week with R2DBC support for reactive database access and a guaranteed stable API, making it a production-ready database layer for teams adopting Kotlin.</p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><strong><a href="https://www.oracle.com/middleeast/news/announcement/oracle-releases-java-26-2026-03-17/">Java 26 released</a></strong> &#8212; Java 26 ships ten JEPs including HTTP/3 for the HTTP Client API, lazy constants in second preview, and an AOT cache that now works with any garbage collector including ZGC.</p></li><li><p><strong><a href="https://blog.jetbrains.com/kotlin/2026/03/kotlin-2-3-20-released/">Kotlin 2.3.20 released</a></strong> &#8212; The release removes significant manual Maven setup by automating source root configuration and stdlib inclusion, and adds name-based destructuring declarations to the language.</p></li><li><p><strong><a href="https://blog.jetbrains.com/idea/2026/03/java-26-in-intellij-idea/">Java 26 support lands in IntelliJ IDEA</a></strong> &#8212; IntelliJ IDEA adds full Java 26 support this week, including inspections and quick-fixes for lazy constants, primitive patterns, and the extended ahead-of-time cache for ZGC.</p></li><li><p><strong><a href="https://blog.jetbrains.com/kotlin/2026/03/gsoc-2026-contribute-to-kotlin/">Kotlin Foundation joins Google Summer of Code 2026</a> </strong>&#8212; The programme is accepting applications for projects spanning Swift-to-Kotlin interop, tail call support in Kotlin/Wasm, and a Kotlin education landscape research report, with the deadline on March 31.</p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #38: Steven Lott on Practical Object-Oriented Design in Python]]></title><description><![CDATA[Review can catch defects, but not weak design. This issue looks at dependency injection, protocols, and the architectural choices that shape reliable Python code.]]></description><link>https://deepengineering.net/p/deep-engineering-38-steven-lott-on</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-38-steven-lott-on</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 12 Mar 2026 14:44:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d33058d0-8435-4c51-a7ca-e5db0666799a_3168x1344.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong><a href="https://www.eventbrite.com/e/safely-refactor-production-codebases-with-ai-registration-1982005923070?aff=deepengg">Safely Refactor Production Codebases with AI</a></strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KVPk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KVPk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KVPk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KVPk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KVPk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KVPk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!KVPk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KVPk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KVPk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KVPk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad82ea1-0eb0-419b-ba9a-8e3b8f582e41_800x400.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>AI can refactor your code in seconds, but it can introduce subtle breakages just as quickly. Learn how to combine AI-assisted reasoning with AST-based structural guarantees to refactor code safely.</p><p><strong>Online: </strong>March 14<strong> | </strong>10:00 AM EST</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>&#10003; 2-for-1 deal: Bring a colleague, get 2 passes for $48<br>&#10003; Includes 300+ page <em>Mastering ast-grep</em> ebook</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/safely-refactor-production-codebases-with-ai-registration-1982005923070?aff=deepengineeringnewsletter&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.com/e/safely-refactor-production-codebases-with-ai-registration-1982005923070?aff=deepengineeringnewsletter"><span>Register now</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><p><strong>Welcome to the 38th issue of Deep Engineering!</strong></p><p>The rise of AI-generated code is putting pressure on a familiar engineering constraint: review does not scale as easily as output. Anthropic&#8217;s own <a href="https://www.anthropic.com/research/measuring-agent-autonomy">recent research</a> on Claude Code points in the same direction. It found that longer autonomous coding sessions are becoming more common, and that experienced users increasingly shift from step-by-step approval to letting the tool run and intervening when needed. But, <strong>if more code is being written with less direct review, how do engineers stop poor design from shipping in the first place?</strong></p><p>Anthropic&#8217;s new <strong><a href="https://claude.com/plugins/code-review">Code Review</a></strong> system for Claude Code is one answer at the downstream end. It runs five specialized reviewers in parallel, scores findings on a confidence scale, and only posts high-confidence comments back to GitHub. That is a useful safeguard. But it also clarifies the limit of review itself. The more teams rely on layered automation to inspect pull requests, the more important the original design decisions become. Review can catch defects. It cannot compensate for weak boundaries, poor abstractions, or code that was hard to reason about from the start.</p><p>That is the context for this week&#8217;s Expert Insight from <strong><a href="https://www.linkedin.com/in/steven-lott-029835/">Steven F. Lott</a></strong>. Lott has been programming since the era when computers were large, expensive, and rare, and has worked with Python since the 1990s. He is the co-author of the newly published fifth edition of <em><strong><a href="https://www.packtpub.com/en-us/product/python-object-oriented-programming-9781801075237">Python Object-Oriented Programming</a></strong></em>, updated for Python 3.13 with added material on areas such as type hints, testing, and professional software engineering practice. In this issue, his <strong><a href="https://deepengineering.substack.com/p/part-2-getting-started-with-object">piece</a></strong> looks at object-oriented design as a practical engineering discipline: dependency injection, protocols, and duck typing as choices that shape coupling, change, and maintainability in production systems. We have also included <strong>Chapter 1, &#8220;Object-Oriented Design,&#8221;</strong> from the new edition for readers who want the full foundation.</p><p>Let&#8217;s get started.</p><div><hr></div><h3><a href="https://www.pulsemcp.com/newsletter">PulseMCP Newsletter</a></h3><p>Our friends at PulseMCP recently wrote up a great post on the <a href="https://links.uk.defend.egress.com/Warning?crId=699801b5256d531b1560050d&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNoFwtEJwDAIBcCJEv-zTZCHFRqVanD9cvdURS6i7p5x38ThmOyHwrOStsBKecBEDfjU5AfokhNf&amp;@OriginalLink=www.pulsemcp.com">rise of agentic engineering</a>. It highlights both the very public, high profile case studies of top tier engineering organizations adopting the practice, and gets into the weeds of what&#8217;s working in the<a href="https://links.uk.defend.egress.com/Warning?crId=699801b5256d531b1560050d&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNrLKCkpKLbS1y9JzMmp1CvO1y_Sz0oMLAyoAAB4Ewkn&amp;@OriginalLink=tally.so"> PulseMCP team&#8217;s personal coaching</a> of engineering teams trying to make the transition from &#8220;AI pair programming&#8221; to &#8220;autonomous agents&#8221;.</p><p><a href="https://www.pulsemcp.com/newsletter">Check out PulseMCP &#8594;</a></p><div><hr></div><h1><strong>&#129504;Expert Insight</strong></h1><h3>Part 2: Getting Started with Object-Oriented Programming in Python</h3><p><em>by </em><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Steven Lott&quot;,&quot;id&quot;:151485613,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s97l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78bc1bf-a569-465d-997a-85a14c1135ba_480x640.png&quot;,&quot;uuid&quot;:&quot;3dd75240-e39e-42a6-99ce-333b61b30daf&quot;}" data-component-name="MentionToDOM"></span> </p><p>Python provides three primary ways to structure immutable data: <code>dataclass</code> with <code>frozen=True</code>, <code>NamedTuple</code>, and <code>TypedDict</code>. Each carries different trade-offs that matter in production systems.</p><p>A <code>dataclass</code> with <code>frozen=True</code> provides immutability through runtime enforcement. When you attempt to modify a frozen dataclass instance, Python raises an exception. This makes frozen dataclasses useful when you need immutability guarantees but also need features like inheritance, custom methods, or post-initialization processing. The runtime check adds minimal overhead and catches mutation attempts immediately in development and testing.</p><p><code>NamedTuple</code> provides immutability through tuple semantics. Because NamedTuple instances are actual tuples under the hood, they inherit tuple&#8217;s immutability at the language level. This makes NamedTuple marginally faster than frozen dataclass and ensures that mutation is structurally impossible rather than runtime-prevented. NamedTuple works well for simple data containers that do not require inheritance or complex initialization logic.</p><p><code>TypedDict</code> does not provide immutability at all. TypedDict exists purely for type checking and documentation. At runtime, a TypedDict is just a regular dictionary with no special behavior or constraints. This makes TypedDict appropriate when you need to type-hint dictionary structures for API contracts or configuration, but you do not control the actual dictionary creation or mutation.</p><p>The choice between these three depends on what guarantees your system actually requires. If you need inheritance or custom methods, use frozen dataclass. If you need maximum performance for simple data structures, use NamedTuple. If you need to type-hint existing dictionary-based interfaces without changing runtime behavior, use TypedDict.</p><h3><strong>Hashability and when it matters</strong></h3><p>Immutable objects in Python can be hashable, which means they can be used as dictionary keys or stored in sets. This is not just a convenience feature. Hashability enables certain architectural patterns that would otherwise require significantly more complex code.</p><p>When you need to deduplicate objects, track which objects have been processed, or use objects as cache keys, hashability becomes a structural requirement rather than a nice-to-have feature. A frozen dataclass or NamedTuple containing only hashable fields is automatically hashable. A regular mutable dataclass is not hashable because its contents could change after being added to a set or used as a dictionary key, which would break the fundamental contract of hash-based collections.</p><h3><strong>SOLID principles in Python</strong></h3><p>The SOLID principles originated in statically-typed object-oriented languages like Java and C++, but they translate to Python with some adjustments for Python&#8217;s dynamic nature and duck typing.</p><p>Single Responsibility Principle states that a class should have one reason to change. In Python, this often means keeping data structures separate from business logic, keeping validation logic separate from transformation logic, and keeping I/O operations separate from computation. When a class starts accumulating methods that could logically belong to different concerns, it is time to split it.</p><p>Open/Closed Principle states that software entities should be open for extension but closed for modification. In Python, this is typically achieved through composition and protocols rather than deep inheritance hierarchies. Instead of modifying existing classes to add behavior, you compose new classes that delegate to existing ones or define protocol-based interfaces that new classes can implement without touching existing code.</p><p>Liskov Substitution Principle states that subtypes must be substitutable for their base types. In Python, this means that if your code expects a file-like object, any object that implements the file protocol (read, write, close) should work correctly. The principle prevents surprising behavior when substituting one implementation for another.</p><p>Interface Segregation Principle states that clients should not depend on interfaces they do not use. In Python, this translates to keeping protocols narrow and focused rather than creating large monolithic base classes with dozens of methods that most implementations leave empty or raise NotImplementedError.</p><p>Dependency Inversion Principle states that high-level modules should not depend on low-level modules; both should depend on abstractions. In Python, this is achieved through dependency injection and protocols. Instead of instantiating concrete dependencies inside a class, you pass dependencies in as constructor arguments, and instead of depending on concrete types, you depend on protocols that define the interface you actually need.</p><h3><strong>Dependency injection without frameworks</strong></h3><p>Dependency injection in Python does not require a framework. The pattern is simple: instead of creating dependencies inside a class, pass them in as constructor arguments.</p><p>python</p><pre><code><code># Without dependency injection
class OrderProcessor:
    def __init__(self):
        self.payment_gateway = StripeGateway()  # Hard dependency
        self.email_service = SendGridService()  # Hard dependency
    
    def process(self, order):
        self.payment_gateway.charge(order.amount)
        self.email_service.send_confirmation(order.email)

# With dependency injection
class OrderProcessor:
    def __init__(self, payment_gateway, email_service):
        self.payment_gateway = payment_gateway
        self.email_service = email_service
    
    def process(self, order):
        self.payment_gateway.charge(order.amount)
        self.email_service.send_confirmation(order.email)</code></code></pre><p>The second version allows you to swap payment gateways or email services without modifying OrderProcessor. It allows you to test OrderProcessor with mock implementations that do not actually charge credit cards or send emails. It makes the dependencies explicit in the constructor signature rather than hidden inside the implementation.</p><h3><strong>Protocols and duck typing</strong></h3><p>Python&#8217;s protocols allow you to define interfaces without requiring inheritance. A protocol specifies what methods an object must have without requiring the object to inherit from a specific base class.</p><p>python</p><pre><code><code>from typing import Protocol

class PaymentGateway(Protocol):
    def charge(self, amount: float) -&gt; bool: ...

class StripeGateway:
    def charge(self, amount: float) -&gt; bool:
        # Stripe implementation
        return True

class PayPalGateway:
    def charge(self, amount: float) -&gt; bool:
        # PayPal implementation
        return True</code></code></pre><p>Both StripeGateway and PayPalGateway satisfy the PaymentGateway protocol without inheriting from it. Type checkers like mypy will verify that any object passed where a PaymentGateway is expected actually implements the charge method with the correct signature.</p><p>This is duck typing with type safety. You get the flexibility of duck typing (if it walks like a duck and quacks like a duck, it is a duck) combined with static verification that the duck actually has the methods you are going to call on it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.substack.com/p/part-2-getting-started-with-object&quot;,&quot;text&quot;:&quot;Continue Reading&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://deepengineering.substack.com/p/part-2-getting-started-with-object"><span>Continue Reading</span></a></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ea7a2ad8-2287-48e4-8f2c-6ea090f4d859&quot;,&quot;caption&quot;:&quot;Previously, we looked at some of the reasons OO programming is hard. And, we pitched a few strategies for getting started quickly:&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Part 2: Getting Started with Object-Oriented Programming in Python&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:151485613,&quot;name&quot;:&quot;Steven Lott&quot;,&quot;bio&quot;:&quot;Been turning coffee to code since computers where large, expensive, and rare.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s97l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78bc1bf-a569-465d-997a-85a14c1135ba_480x640.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://stevenlott.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://stevenlott.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Steven&#8217;s Substack&quot;,&quot;primaryPublicationId&quot;:5788192}],&quot;post_date&quot;:&quot;2026-03-10T14:03:55.379Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec55e455-845b-450f-8c15-d1b0e2a4b87c_2752x1536.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/part-2-getting-started-with-object&quot;,&quot;section_name&quot;:&quot;Tutorials&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:169639977,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><h2>Chapter 1: Object-Oriented Design </h2><p>The complete foundation chapter from <em>Object-Oriented Python</em> by Steven Lott, from <em><a href="https://www.packtpub.com/en-us/product/python-object-oriented-programming-9781801077262">Python Object-Oriented Programming</a></em> (Fourth Edition) that teaches how to build robust and maintainable object-oriented Python applications and libraries.</p><div class="file-embed-wrapper" data-component-name="FileToDOM"><div class="file-embed-container-reader"><div class="file-embed-container-top"><image class="file-embed-thumbnail-default" src="https://substackcdn.com/image/fetch/$s_!0Cy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fattachment_icon.svg"></image><div class="file-embed-details"><div class="file-embed-details-h1">Chapter 1 Object Oriented Design (from Python Object Oriented Programming Build Robust And Maintainable Object Oriented Python Applications And Libraries , Fourth Edition)</div><div class="file-embed-details-h2">1.05MB &#8729; PDF file</div></div><a class="file-embed-button wide" href="https://deepengineering.substack.com/api/v1/file/54fd9ea0-991b-4839-af25-0a3a68644179.pdf"><span class="file-embed-button-text">Download</span></a></div><a class="file-embed-button narrow" href="https://deepengineering.substack.com/api/v1/file/54fd9ea0-991b-4839-af25-0a3a68644179.pdf"><span class="file-embed-button-text">Download</span></a></div></div><div><hr></div><h1><strong>&#128269;In case you missed it&#8230;</strong></h1><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f4a1c6e0-3c36-405a-8671-f32dd33805a7&quot;,&quot;caption&quot;:&quot;This is Part 1 of 2. In Part 2, we&#8217;ll look at immutability, hashability, and dependency management: when to switch from @dataclass to NamedTuple or frozen=True, how TypedDict fits a schema-first workflow, and how Protocols enable painless dependency injection.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Part 1: Getting Started with Object-Oriented Programming in Python&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:151485613,&quot;name&quot;:&quot;Steven Lott&quot;,&quot;bio&quot;:&quot;Been turning coffee to code since computers where large, expensive, and rare.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s97l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78bc1bf-a569-465d-997a-85a14c1135ba_480x640.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://stevenlott.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://stevenlott.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Steven&#8217;s Substack&quot;,&quot;primaryPublicationId&quot;:5788192}],&quot;post_date&quot;:&quot;2025-08-27T07:38:12.397Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70d33dca-aec7-4a44-b3bd-d2f891ac29f2_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/part-1-getting-started-with-object&quot;,&quot;section_name&quot;:&quot;Tutorials&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:169634247,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d6afc213-693f-44c9-addf-668eff40a4e5&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Deep Engineering #15: Steven F. Lott on Pragmatic Object-Oriented Python&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Editor-in-Chief of Deep Engineering by Packt&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:151485613,&quot;name&quot;:&quot;Steven Lott&quot;,&quot;bio&quot;:&quot;Been turning coffee to code since computers where large, expensive, and rare.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s97l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78bc1bf-a569-465d-997a-85a14c1135ba_480x640.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-28T13:45:34.390Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34004285-61db-48c0-87b4-651e23902b3c_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/deep-engineering-15-steven-f-lott&quot;,&quot;section_name&quot;:&quot;Newsletter Issues&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:172070070,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b4f70351-0464-41ef-aeb8-f5a9e67c409c&quot;,&quot;caption&quot;:&quot;In previous chapters, we've covered many of the defining features of object-oriented programming. We now know some principles and paradigms of object-oriented design, and we've covered the syntax of object-oriented programming in Python.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;When to Use Object-Oriented Programming&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:151485613,&quot;name&quot;:&quot;Steven Lott&quot;,&quot;bio&quot;:&quot;Been turning coffee to code since computers where large, expensive, and rare.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!s97l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78bc1bf-a569-465d-997a-85a14c1135ba_480x640.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-27T08:36:19.467Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!S24_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0059565-ab59-4421-90dd-de189e63939f_810x1000&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/when-to-use-object-oriented-programming&quot;,&quot;section_name&quot;:&quot;Practical Deep-Dives&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:172067259,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128736;&#65039; Tool of the Week</h2><p><a href="https://mypy-lang.org">mypy</a> &#8212; static type checker for Python</p><p><strong>Highlights:</strong></p><ul><li><p><strong>Catches type errors before runtime:</strong> Analyzes Python code statically to detect type inconsistencies, function signature mismatches, and attribute errors before the code ever runs, preventing entire classes of bugs from reaching production.</p></li><li><p><strong>First-class support for OOP patterns:</strong> Understands inheritance hierarchies, protocols, generics, and abstract base classes, making it especially valuable for object-oriented codebases where polymorphism and interface contracts matter.</p></li><li><p><strong>Gradual typing for existing projects:</strong> Works alongside untyped code, allowing you to add type hints incrementally to legacy projects without requiring a full rewrite, and can be configured to enforce strict typing only where needed.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://mypy-lang.org&quot;,&quot;text&quot;:&quot;Learn more about mypy&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://mypy-lang.org"><span>Learn more about mypy</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><strong><a href="https://discuss.python.org/t/python-3-15-0-alpha-7/106475">Python 3.15.0a7</a></strong><a href="https://discuss.python.org/t/python-3-15-0-alpha-7/106475"> </a><em><a href="https://discuss.python.org/t/python-3-15-0-alpha-7/106475">(March 10, 2026)</a></em> &#8212; The seventh alpha for Python 3.15 gives developers an early look at changes that matter to Python design work, including a built-in <code>frozendict</code>, typed extra items for <code>TypedDict</code>, <code>TypeForm</code>, and further JIT performance gains. </p></li><li><p><strong><a href="https://discuss.python.org/t/python-3-12-13-3-11-15-and-3-10-20-are-now-available/106363">Python 3.12.13, 3.11.15, and 3.10.20 security releases</a></strong> <em>(March 3, 2026)</em> &#8212; Python shipped source-only security releases for 3.10&#8211;3.12 that fix header-injection issues, control-character handling bugs in HTTP and cookies, and bundled <code>libexpat</code> vulnerabilities. </p></li><li><p><strong><a href="https://github.blog/changelog/2026-03-05-copilot-code-review-now-runs-on-an-agentic-architecture/">Copilot code review now runs on an agentic architecture</a></strong> <em>(March 5, 2026)</em> &#8212; GitHub moved Copilot code review to an agentic tool-calling architecture that pulls broader repository context so review comments are higher-signal, lower-noise, and more grounded in architectural intent. </p></li><li><p><strong><a href="https://github.blog/ai-and-ml/github-copilot/60-million-copilot-code-reviews-and-counting/">60 million Copilot code reviews and counting</a></strong> <em>(March 5, 2026)</em> &#8212; GitHub says Copilot code review usage has grown 10x to more than one in five code reviews on GitHub, and says its current system is optimized around accuracy, signal, and speed rather than comment volume. </p></li><li><p><strong><a href="https://github.blog/changelog/2026-03-11-request-copilot-code-review-from-github-cli/">Request Copilot code review from GitHub CLI</a></strong> <em>(March 11, 2026)</em> &#8212; GitHub now lets developers request Copilot review directly from the terminal with <code>gh pr edit</code> and <code>gh pr create</code>, pulling AI review more tightly into the existing pull-request workflow. </p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #37: Shreyans Doshi on building C++ trading systems under 50µs]]></title><description><![CDATA[Kernel bypass, memory pools, and the latency budget every performance engineer should know]]></description><link>https://deepengineering.net/p/deep-engineering-37-shreyans-doshi</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-37-shreyans-doshi</guid><dc:creator><![CDATA[Saqib Jan]]></dc:creator><pubDate>Thu, 05 Mar 2026 13:31:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8c4e945b-a7e2-4e15-a5b2-008bcf49b095_1584x672.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng">C++ Memory Management Masterclass (Live) &#8212; Back for the 3rd Run</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M9ZS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:508191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/189970085?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.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_!M9ZS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!M9ZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23118828-1505-45fe-972f-5c55ac0dd359_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Back by demand (3rd run). Learn ownership, RAII, smart pointers &amp; allocators to eliminate leaks/UB&#8212;live hands-on with <strong>Patrice Roy</strong>&#8212;#1 bestselling author of <em><strong>C++ Memory Management</strong></em> and ISO C++ Standards Committee (WG21) member. <strong>Online: Sat Apr 11, 10:30 AM&#8211;Sun Apr 12, 4:00 PM ET.</strong> Limited seats.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.com/e/c-memory-management-masterclass-tickets-1983063567513?aff=deepeng"><span>Register now</span></a></p><div><hr></div><p><strong>&#9997;&#65039; From the editor&#8217;s desk,</strong></p><blockquote><p>Hello, It&#8217;s a privilege to take over as the new Editor-in-Chief of Deep Engineering, which already has a strong foundation and readership.<br><br>With support from colleagues at Packt, I also plan to expand coverage into system design, cloud native applications, platform engineering, and other areas of modern software development where engineering leaders have strong interest.</p><p>Thank you.</p></blockquote><p>Welcome to the<strong> 37th </strong>issue of<strong> </strong><em><strong>Deep Engineering</strong>!</em></p><p>This week&#8217;s <strong><a href="https://source.android.com/docs/security/bulletin/2026/2026-03-01?">Android Security Bulletin</a></strong> includes a familiar warning for anyone who builds systems close to the metal: <em>&#8220;There are indications that CVE-2026-21385 may be under limited, targeted exploitation.&#8221;</em> Whatever the specific exploit chain looks like, <strong>memory corruption remains a production-grade failure mode</strong>, not a theoretical one.</p><p>This week&#8217;s Expert Insight comes from <strong><a href="https://www.linkedin.com/in/shreyans800755/">Shreyans Doshi</a> </strong>(ex Flow Traders,  Morgan Stanley), a software engineer who has spent the last several years building trading infrastructure in C++ and Rust. His article, <em><strong><a href="https://deepengineering.substack.com/p/from-nic-to-p99-engineering-low-latency">From NIC to P99: Engineering Low-Latency C++ Trading Systems in 2026</a></strong></em>, walks through the full stack of decisions required to hit a p95 wire-to-wire latency under 50 microseconds. It covers kernel bypass and memory pool design, NUMA affinity, hardware clock selection, and observability at nanosecond granularity.</p><p>This issue answers three questions that recur in performance-critical systems (trading and otherwise):</p><ul><li><p><strong>Where the latency budget actually goes</strong> once you include the NIC, kernel boundary, CPU topology, caches, and clocks&#8212;not just business logic.</p></li><li><p><strong>What belongs on the critical path</strong> vs. off it, using a clean pipeline model (ingestion &#8594; checks &#8594; pricing &#8594; strategy &#8594; OMS).</p></li><li><p><strong>How to measure regressions early</strong>, using stage-level histograms and system-level tracing that exposes jitter sources you won&#8217;t see in application profiles.</p></li></ul><p>Let&#8217;s get started.</p><div><hr></div><h3><strong><a href="https://www.eventbrite.com/e/openclaw-masterclass-workshop-tickets-1983508689886?aff=mobilenloc">OpenClaw Masterclass Workshop</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/building-and-running-your-startup-with-openclaw-tickets-1983508689886?aff=mobilenloc" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I9Ju!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!I9Ju!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!I9Ju!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!I9Ju!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I9Ju!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:924673,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.eventbrite.com/e/building-and-running-your-startup-with-openclaw-tickets-1983508689886?aff=mobilenloc&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/189970085?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!I9Ju!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!I9Ju!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!I9Ju!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!I9Ju!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76c61fec-d6a8-4c65-82c3-e09f1a015931_2160x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>Learn how to turn AI into a safe and cost-effective operational backbone with live case studies from experts who are running their business</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/openclaw-masterclass-workshop-tickets-1983508689886?aff=mobilenloc&quot;,&quot;text&quot;:&quot;Register&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.com/e/openclaw-masterclass-workshop-tickets-1983508689886?aff=mobilenloc"><span>Register</span></a></p><div><hr></div><h4>Before we dive in&#8230;</h4><p>On the morning of August 1, 2012, Knight Capital Group opened for trading as one of the largest market makers in the US, handling roughly 10% of all equity trading volume on American exchanges. By 10:15 AM, 45 minutes after the market opened, the firm had lost $440 million and was effectively finished as an independent company.</p><p>The cause was a software deployment error. A new version of Knight&#8217;s order routing system had been pushed to seven of its eight production servers. The eighth server, missed during deployment, continued running a dormant piece of code that had not been used since 2003. When the market opened, that server began firing child orders into the market at full speed to fill just 212 customer orders, and kept going. The system sent more than 4 million orders before anyone intervened. Ninety-seven automated alert emails had been generated referencing the error before the market even opened. And nobody even acted on them. (<a href="https://www.sec.gov/files/litigation/admin/2013/34-70694.pdf">SEC enforcement order, October 2013</a>)</p><p>Knight Capital did not fail because its engineers were careless or inexperienced. It failed because the engineering discipline required to run software at trading-system speeds was not matched to the speed at which the system could cause damage. That discipline covers deterministic deployment, observable behavior, and a tested kill path. In a system capable of sending thousands of orders per second, the gap between &#8220;something is wrong&#8221; and &#8220;the damage is done&#8221; is measured in minutes, not days.</p><p>This is what <strong>Shreyans Doshi</strong> addresses in his article.</p><div><hr></div><h1><strong>&#129504;Expert Insight</strong></h1><h2>From NIC to P99: Engineering Low-Latency C++ Trading Systems in 2026</h2><p><em><strong>by Shreyans</strong> <strong>Doshi</strong></em></p><p>Trading systems have been evolving for decades, moving from manual execution based on charts and indicators to automated strategies that fire within tens of nanoseconds using FPGA and ASIC hardware. Both approaches still coexist today, but most advanced and systematic trading has moved into the sub-100 microsecond range. In this article I want to focus on the hardware and software aspects you need to understand in order to build a trading system with p95 wire-to-wire latency under 50 microseconds.</p><p>Traditional technology stacks like Java, JavaScript, TypeScript, and C# offer a lot of flexibility and scalability for large-scale applications, but their inherently nondeterministic nature makes it very difficult to get below a p50 latency of 500 microseconds. While there are ways to optimize garbage collection and other Java components for latency, most standard Java libraries do not focus on low-level concepts like aligning data to cache lines or reducing cache line misses. C and C++ applications optimize for a specific platform at the cost of portability, but that trade-off is exactly what gives you access to manual memory management and the ability to avoid multithreading pitfalls like false sharing. When the goal is to reduce latency, you need lower-level languages like C, C++, or Rust on critical paths. I will not cover pure hardware implementations like FPGAs or ASICs here since they are not required for our 50-microsecond latency target.</p><h3>Important definitions</h3><p>Before diving into the architecture and hardware optimizations, it will be helpful to establish exactly how performance is measured in a low-latency environment.</p><h4><strong>Wire-to-wire latency</strong></h4><p>Wire-to-wire latency is measured from the moment a market data packet is received on the NIC from the exchange to the moment an order is sent back to the exchange on the same NIC. You compute it as order send timestamp minus market data receive timestamp. The most precise measurements require NIC cards with hardware timestamping enabled, so the NIC stamps every inbound and outbound packet with a hardware timestamp that you can later use to analyze the latency graph. Exanic cards provide APIs for retrieving these hardware timestamps.</p><h4>Assumptions about the system</h4><p>To hit the latency target of under 50 microseconds, you need to optimize both hardware and server setup alongside your software, and the following assumptions underpin everything in this article.</p><ul><li><p><strong>Colocated host:</strong> Most stock exchanges in traditional finance provide colocation services where your servers sit physically adjacent to the exchange&#8217;s servers, removing extra network jitter from the equation.</p></li><li><p><strong>UDP market data access:</strong> Most stock exchanges distribute market data via UDP multicast to all subscribed parties, and this is the fastest way to consume and react to it.</p></li><li><p><strong>Kernel bypass NIC:</strong> The system runs on NIC cards enabled for kernel bypass and tuned for low-latency operation.</p></li><li><p><strong>Single venue:</strong> These systems are single-venue, meaning at any point they process market data to generate orders for one stock exchange only. For multi-venue setups, the assumption is one colocated host per venue with no shared critical-path processing.</p></li></ul><h4>Workload model</h4><p>Most trading systems follow this model of data processing in abstract terms.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_1_W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_1_W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!_1_W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!_1_W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!_1_W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_1_W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&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_!_1_W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!_1_W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!_1_W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!_1_W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e071ec-b507-4278-a874-052d6e5cd7c1_1024x559.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every strategy engine takes market data from the exchange as its primary input and produces orders sent to the exchange as its primary output, moving through multiple stages as described below. Exchange responses are a secondary input to the engine but are not on the hot path for latency calculations.</p><h4><strong>Market data ingestion</strong></h4><p>The first layer is responsible for ingesting the market data (raw or normalized) from the network card. This layer routinely processes terabytes of data per day and can exceed a petabyte on busy days at venues like CME or Eurex. On an average day at CME you can expect 20 to 30 million trades and 100 to 150 million open interest events in a single segment. Processing a full L1 feed for one segment means receiving traffic in the range of a few terabytes to hundreds of terabytes per day, so both software and hardware need to be extremely optimized.</p><h4><strong>Filtering and checks</strong></h4><p>Filtering and checks come next, cleaning up incoming data and validating it before it reaches downstream stages. This layer handles packet drops, invalid market data, trading phase transitions like moving from an active session to a halted one, and anomalous price changes that might indicate a software bug. When something goes wrong at this stage, the right response is often to instruct strategies to stop rather than pass bad data forward.</p><h4><strong>Pricing engine</strong></h4><p>The pricing engine receives valid and normalized market data and can range from a simple no-op or currency conversion all the way to a full ML-powered model. Lightweight pricing fits comfortably on the critical path. Complex ML models that require large amounts of memory and processing do not, because they would blow the latency budget. In practice, ML-powered engines in low-latency applications split into two processes: time-consuming training and inference model preparation happen off the critical path, and a lightweight inference step runs on the critical path using small linearized models fed configuration parameters from the heavier ML output. This keeps the heavy lifting off the hot path while still giving the strategy access to model-driven signals. Colocation also constrains available compute, so you want to reserve it for work that directly impacts critical path performance.</p><h4><strong>Strategy evaluation</strong></h4><p>Strategy evaluation compares transformed or theoretical prices against real prices and fires an order when it identifies an opportunity. Strategies generally fall into three categories.</p><ul><li><p><strong>Maker:</strong> Maker strategies keep quotes on both the buy and sell sides to provide liquidity and take advantage of the bid-ask spread. Exchanges often provide incentives to HFT firms that add liquidity this way.</p></li><li><p><strong>Taker:</strong> Taker strategies identify mispricing and fire IOC or FOK orders for immediate execution.</p></li><li><p><strong>Hedging:</strong> Hedging strategies reduce risk or book profit by executing the opposite side of an existing position.</p></li></ul><h4><strong>Order aggregation and routing (OMS)</strong></h4><p>Order aggregation and routing (OMS) can be combined with strategy evaluation in simple setups, but should be separated as complexity grows. It serves three purposes: aggregating orders from multiple strategies to reduce the number of orders sent to the exchange, managing exchange responses and passing normalized results back to the strategy, and handling the routing logic that grows more complex as your strategy count increases.</p><h2>Latency map: where the latency lies</h2><p>Now that the high-level components are clear, it is worth mapping out where the latency actually sits so you can allocate your budget with precision. Beyond the business logic itself, your latency profile depends on CPU model and generation, NIC type and model, operating system, software architecture, and business logic complexity.</p><p>Beyond the business logic stages, several factors contribute latency that stays invisible if you only look at application code. These factors come from hardware, OS and kernel processing, network behavior, and I/O, and they play an outsized role in ultra-low-latency systems. Even if they occur infrequently, they introduce jitter and latency spikes that directly hurt your p99. Although many of these latency sources depend on a multitude of factors, you can work with approximate cost ranges that provide a useful benchmark.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.substack.com/p/from-nic-to-p99-engineering-low-latency&quot;,&quot;text&quot;:&quot;Continue reading&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://deepengineering.substack.com/p/from-nic-to-p99-engineering-low-latency"><span>Continue reading</span></a></p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;905a4c05-051d-41a5-a3ce-0d08102b8135&quot;,&quot;caption&quot;:&quot;Trading systems have been evolving for decades, moving from manual execution based on charts and indicators to automated strategies that fire within tens of nanoseconds using FPGA and ASIC hardware. Both approaches still coexist today, but most advanced and systematic trading has moved into the sub-100 microsecond range. In this article I want to focus &#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;From NIC to P99: Engineering Low-Latency C++ Trading Systems in 2026&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:16210726,&quot;name&quot;:&quot;Shreyans&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/298da20e-a7b4-4aa4-bfd7-ac6282cb6cbe_144x144.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-04T08:19:17.026Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b449d007-c2e0-4447-a359-fffc7681e42b_1792x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/from-nic-to-p99-engineering-low-latency&quot;,&quot;section_name&quot;:&quot;Practical Deep-Dives&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:189117004,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>&#128736;&#65039;Tool of the Week</strong></h1><p><strong><a href="https://github.com/bpftrace/bpftrace">bpftrace</a></strong> &#8212; open-source high-level tracing language for Linux systems, built on eBPF</p><p><strong>Highlights:</strong></p><ul><li><p><strong>Instant latency visibility where it leaks</strong>: Attach probes to kernel/user-space events (kprobes/tracepoints/uprobes) to pinpoint tail-latency sources&#8212;scheduler delays, IRQ/softirq behavior, and &#8220;surprise&#8221; syscalls&#8212;without changing your C++ code.</p></li><li><p><strong>Built-in distribution tooling (histograms by default)</strong>: First-class aggregations like <code>hist()</code> and <code>quantize()</code> make it trivial to generate p50/p95/p99-style views (not just averages), which is exactly what you need for jitter and p99 debugging.</p></li><li><p><strong>Ready-to-run scripts for common low-latency failure modes</strong>: The bundled <code>tools/</code> library covers practical staples like syscall counts, run-queue latency, and retransmits&#8212;fast to deploy during an investigation, easy to keep as regression checks.</p><p></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/bpftrace/bpftrace&quot;,&quot;text&quot;:&quot;Learn more about bpftrace&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://github.com/bpftrace/bpftrace"><span>Learn more about bpftrace</span></a></p><div><hr></div><h1><strong>&#128206; Tech Briefs</strong></h1><ul><li><p><strong><a href="https://www.postgresql.org/about/news/postgresql-183-179-1613-1517-and-1422-released-3246/">PostgreSQL 18.3 / 17.9 / 16.13 / 15.17 / 14.22 released</a>:</strong> PostgreSQL shipped an <strong>out-of-cycle</strong> patch set to all supported branches to fix <strong>regressions</strong> (including fixes touching standby behavior, <code>substring()</code> encoding edge cases related to a CVE fix, <code>pg_trgm</code> stability, and restoring <code>json*_strip_nulls()</code> immutability for index use). </p></li><li><p><strong><a href="https://github.blog/changelog/2026-02-26-github-actions-now-supports-uploading-and-downloading-non-zipped-artifacts/">GitHub Actions: upload/download artifacts without forced ZIP</a>:</strong> GitHub Actions added support to upload and download <strong>non-zipped</strong> artifacts (via <code>actions/upload-artifact@v7</code> with <code>archive: false</code> and <code>actions/download-artifact@v8</code>), reducing friction for single-file downloads, in-browser viewing, and &#8220;double-zip&#8221; workflows. </p></li><li><p><strong><a href="https://www.dpdk.org/dpdk-governing-board-minutes-february-17-2026/">DPDK Governing Board minutes: quality-first 26.03 cycle + AI-assisted review gate)</a>:</strong> DPDK&#8217;s Feb 17 governing-board update highlights a <strong>code-hardening</strong> 26.03 cycle (roughly &#8220;half the commits&#8221; focused on fixes/backports) and describes introducing <strong>AI-assisted code reviews</strong> hosted by the UNH lab as an additional quality gate after standard CI passes. </p></li><li><p><strong><a href="https://nodejs.org/en/blog/release/v25.8.0">Node.js 25.8.0 (Current) released</a>:</strong> Node.js 25.8.0 landed with notable changes including SQLite <code>DatabaseSync</code> additions, expanded diagnostics channel support, a new <code>--permission-audit</code> flag, and dependency updates (including an npm upgrade). </p></li><li><p><strong><a href="https://github.blog/changelog/2026-03-03-dependabot-alert-assignees-are-now-generally-available/">Dependabot alert assignees GA</a>:</strong> GitHub made <strong>Dependabot alert assignees</strong> generally available, enabling explicit ownership of dependency vulnerability alerts (UI + REST API + webhooks) and visibility across repo/org/enterprise alert views. </p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of Deep Engineering.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome, </p><p>Saqib Jan </p><p>Editor-in-Chief, Deep Engineering</p><div><hr></div><p><em>If your company is interested in reaching an audience of senior developers, software engineers, and technical decision-makers, you may want to </em><strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong><em>.</em></p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.net/p/deep-engineering-37-shreyans-doshi/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://deepengineering.net/p/deep-engineering-37-shreyans-doshi/comments"><span>Leave a comment</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Packt Deep Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #36: Archit Agarwal on System Design Trade-offs ]]></title><description><![CDATA[From monolith-to-services signals to &#8220;performance per dollar&#8221; and practical resilience under real attacks&#8212;clear choices you can defend in production and interviews.]]></description><link>https://deepengineering.net/p/deep-engineering-36-archit-agarwal</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-36-archit-agarwal</guid><dc:creator><![CDATA[Divya Anne Selvaraj]]></dc:creator><pubDate>Thu, 26 Feb 2026 13:30:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/837caa73-ceef-4856-b9c0-49f815314471_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><a href="https://getunblocked.com/?utm_source=packt_deepengineering&amp;utm_medium=email&amp;utm_campaign=contextengine&amp;utm_content=260223_primary">Unblocked: The context layer your AI tools are missing</a></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://getunblocked.com/?utm_source=packt_deepengineering&amp;utm_medium=email&amp;utm_campaign=contextengine&amp;utm_content=260223_primary" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YXRj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!YXRj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!YXRj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!YXRj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YXRj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:307185,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://getunblocked.com/?utm_source=packt_deepengineering&amp;utm_medium=email&amp;utm_campaign=contextengine&amp;utm_content=260223_primary&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/188591840?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.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_!YXRj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!YXRj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!YXRj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!YXRj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30bfa32d-8982-4958-accb-32aa662ac2bd_1200x600.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Give AI agents the knowledge of your most experienced engineers. Unblocked builds context from your team&#8217;s code, PR history, conversations, documentation, planning tools, and runtime signals to surface what matters for the task at hand &#8211; while resolving conflicts and respecting permissions. Ship faster with AI outputs that reflect how your system actually works.</p></blockquote><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://getunblocked.com/?utm_source=packt_deepengineering&amp;utm_medium=email&amp;utm_campaign=contextengine&amp;utm_content=260223_primary&quot;,&quot;text&quot;:&quot;See how it works&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://getunblocked.com/?utm_source=packt_deepengineering&amp;utm_medium=email&amp;utm_campaign=contextengine&amp;utm_content=260223_primary"><span>See how it works</span></a></p><div><hr></div><p><strong>&#9997;&#65039;From the editor&#8217;s desk,</strong></p><blockquote><p><em>Dear reader,</em></p><p><em>It has been a privilege to serve you as we built Deep Engineering over the past year. This is my final issue, and next month the newsletter will continue under new editorial leadership. I&#8217;m glad to introduce <strong><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Saqib Jan&quot;,&quot;id&quot;:427210082,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997a788a-cd78-4f84-9b3b-c72ab6dc0153_1008x1008.jpeg&quot;,&quot;uuid&quot;:&quot;0aae71ef-7739-476e-afec-921b8781202c&quot;}" data-component-name="MentionToDOM"></span></strong> as the new Editor-in-Chief of Deep Engineering.</em></p><p><em>Deep Engineering remains committed to serving the software community with timely, expert-led insights. Thank you for reading and for being part of this journey with me.</em></p></blockquote><p><strong>Welcome to the 36th issue of Deep Engineering!</strong></p><p><a href="https://blog.cloudflare.com/ddos-threat-report-2025-q4/">Cloudflare&#8217;s Q4 2025 DDoS Threat Report</a> described a record <strong>31.4 Tbps</strong> attack and hyper-volumetric HTTP floods exceeding <strong>200 million requests per second</strong>&#8212;a useful reminder that production systems run in a hostile environment. Today&#8217;s issue is grounded in my conversation with <strong><a href="https://www.linkedin.com/in/architagarwal984/">Archit Agarwal</a></strong>, <strong>Principal Member of Technical Staff</strong> at <strong>Oracle</strong> working on ultra-low-latency authorization services in Go, and the author of <em><strong><a href="https://www.linkedin.com/newsletters/the-weekly-golang-journal-7261403856079597568/">The Weekly Golang Journal</a></strong></em>. As Agarwal says, we must assume <strong>the system will fail and the system will be attacked</strong>, then work backward into controls that keep the blast radius small.</p><p>In this issue, we explore <strong>what makes a system design hold up in production once cost, failure, and security constraints become non-negotiable?</strong> Agarwal&#8217;s guidance is consistent across topics: delay microservices until &#8220;splitting signals&#8221; are visible, treat <strong>performance per dollar</strong> as a design requirement, cap autoscaling to prevent runaway spend during attacks, and keep dependency risk contained through abstraction, version discipline, and unified observability. Agarwal also offers battle-tested <strong>tips on cracking the system design interview</strong>.</p><p>You can watch the complete interview and read the transcript<strong> <a href="https://deepengineering.substack.com/p/trade-offs-in-modern-system-design">here</a></strong>, or read on for distilled insights.</p><div id="youtube2-rOLA2NpKPfM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;rOLA2NpKPfM&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/rOLA2NpKPfM?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><div><hr></div><h4><a href="https://www.eventbrite.com/e/building-an-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng">Build an Internal Developer Platform from scratch (2-day live workshop)</a></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/building-an-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2saJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!2saJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!2saJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!2saJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2saJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:391116,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.eventbrite.com/e/building-an-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/188591840?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.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_!2saJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!2saJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!2saJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!2saJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F778ffd99-31f8-4ad0-9f1f-f6b5fccec31c_2160x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most IDPs fail when teams build tools, not products. This 2-day live, hands-on workshop shows how to design and build a production-ready IDP with platform-as-a-product patterns, adoption, governance, and reliability. <strong>Sat, Apr 25, 2026 &#8212; 11:00 AM ET.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/building-an-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng&quot;,&quot;text&quot;:&quot;Reserve your seat &#8594;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.com/e/building-an-internal-developer-platform-from-scratch-tickets-1978960034736?aff=deepeng"><span>Reserve your seat &#8594;</span></a></p><div><hr></div><h1><strong>System Design That Holds Up in Production with Archit Agarwal</strong></h1><p>A system design diagram is only useful if it reflects the constraints the system will live under. Archit Agarwal&#8217;s answer to most design questions is the same: make the trade-offs explicit, and choose them deliberately.</p><h2><strong>When microservices are worth it</strong></h2><p>It is now generally established best practice to begin with a monolith when requirements are still changing and the domain is still unfamiliar. Agarwal recommends keeping module boundaries clean so that separation is possible later, but he delays distribution until there is clear evidence it will help.</p><p>He looks for &#8220;splitting signals&#8221;:</p><ul><li><p><strong>Deployment friction shows up:</strong> Releases get larger, slower, and harder to roll back.</p></li><li><p><strong>The blast radius grows:</strong> A defect in one area increasingly breaks unrelated user paths.</p></li><li><p><strong>Independent scaling becomes necessary:</strong> One workload needs more capacity than others during predictable peaks.</p></li><li><p><strong>Technology needs diverge:</strong> A subsystem truly benefits from different runtimes, storage, or processing tools.</p></li></ul><p>Microservices add team autonomy, but they also add coordination overhead and network latency. According to Agarwal, splitting makes sense when the monolith&#8217;s pain is observable, repeatable, and clearly outweighs the operational tax of moving to services.</p><h2><strong>Performance per dollar as a design requirement</strong></h2><p>Cost is part of the architecture. Agarwal evaluates choices as &#8220;performance per dollar,&#8221; so teams weigh latency gains against the full cost of running and operating the system.</p><p>A cost-aware loop can:</p><ul><li><p>Make spend visible through dashboards, so teams connect architecture to real numbers.</p></li><li><p>Put cost into design reviews alongside latency, availability, and security trade-offs.</p></li><li><p>Build for horizontal scaling, then scale only when demand and reliability targets prove the need.</p></li><li><p>Manage data by lifecycle. Keep frequently accessed data in hot tiers and move cold data to cheaper storage.</p></li></ul><h2><strong>Design for a hostile environment</strong></h2><p>It is also important to <strong>design around two expectations: systems fail, and systems get attacked</strong>. Planning for both keeps failure domains small and recovery predictable.</p><p>Recent threat telemetry supports the posture. <strong><a href="https://radar.cloudflare.com/reports/ddos-2025-q4">Cloudflare&#8217;s Q4 2025 DDoS report</a></strong> describes a record 31.4 Tbps attack and a subsequent campaign with hyper-volumetric HTTP floods exceeding 200 million requests per second. The same report says DDoS attacks surged 121% in 2025, averaging 5,376 mitigations per hour on Cloudflare&#8217;s network.</p><p>Agarwal recommends a practical resilience toolkit that ties these risks to concrete controls:</p><ul><li><p>Add layered defenses at the edge before the application spends CPU.</p></li><li><p>Rate-limit meaningfully by user, token, IP, and geography, and tune limits using real traffic.</p></li><li><p>Cap autoscaling so an attack cannot trigger runaway capacity and spend.</p></li><li><p>Separate failure domains with multi&#8211;availability zone deployments, and reserve multi-region for the paths that must stay up.</p></li><li><p>Keep observability complete, because incident response depends on fast visibility.</p></li></ul><p>Supply chain exposure belongs in the same threat model. <strong><a href="https://www.sonatype.com/blog/open-source-malware-index-q4-2025-automation-overwhelms-ecosystems">Sonatype</a></strong> reported 394,877 new malicious open-source packages in Q4 2025 alone, a 476% jump compared to the prior three quarters combined, with 99.8% of the malware it saw in that quarter originating from npm. <strong><a href="https://www.reversinglabs.com/blog/sscs-report-2026-takeaways">ReversingLabs&#8217; 2026 software supply chain report</a></strong> also points to npm as the primary hotspot, reporting 10,819 malicious packages detected there in 2025 (nearly 90% of its detections across OSS platforms) and describing a first-of-its-kind self-replicating registry-native worm dubbed Shai-hulud that compromised close to 1,000 npm packages across two campaigns.</p><p>Design implications follow naturally: pin and review dependency updates, validate new versions before promotion, avoid automatic upgrades on production-critical paths, and enforce least privilege and deny-by-default authorization so that a compromised component has limited reach.</p><h2><strong>Depend on services without letting dependencies own you</strong></h2><p>Modern systems rely on external services and SaaS APIs. Agarwal recommends keeping those dependencies from becoming single points of failure.</p><p>His approach is pragmatic:</p><ul><li><p>Put an abstraction layer in front of major external services, so the application talks to an interface rather than a vendor-specific client library.</p></li><li><p>Prefer portable standards where they fit, such as containers and unified telemetry.</p></li><li><p>Replicate only what is mission-critical across regions or providers, and keep observability in one place.</p></li></ul><h2><strong>Ultra-low latency without sacrificing the whole codebase</strong></h2><p>Agarwal recommends treating latency like a budget: every hop and allocation spends from it. Ultra-low-latency work, in his view, is mostly subtraction.</p><p>Replicable strategies:</p><ul><li><p>Put compute closer to users when geography is on the critical path.</p></li><li><p>Remove network hops from hot paths, and keep the performance-critical code lean.</p></li><li><p>Reuse connections and choose efficient service-to-service protocols when calls are unavoidable.</p></li><li><p>Match hardware and runtime to the goal, because software choices cannot fully offset weak infrastructure.</p></li></ul><p>He also draws a boundary that protects maintainability: only a small part of most systems needs extreme optimization. Keep the rest readable and easy to change.</p><h2><strong>How to communicate system design under pressure</strong></h2><p>Agarwal&#8217;s interview advice doubles as a template for real design discussions: keep the design aligned with requirements, and keep your reasoning easy to follow.</p><p>His recommended structure for cracking the system design interview:</p><ul><li><p>Align on functional requirements first.</p></li><li><p>Capture nonfunctional requirements next, because they drive architecture.</p></li><li><p>Present a high-level design, then zoom in one component at a time.</p></li><li><p>State trade-offs as you choose, including what you gain and what you give up.</p></li></ul><p>When constraints change midstream, he recommends restating the change, identifying the affected parts, and updating only what needs updating. That approach shows control, adaptability, and a clear &#8220;commit history&#8221; of decisions.</p><div><hr></div><h1><strong>&#129504;</strong>Expert Insight</h1><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e0023496-7319-47aa-a4f2-1a9a12e1994d&quot;,&quot;caption&quot;:&quot;This conversation with Archit Agarwal is a practical tour through modern system design&#8212;starting from first principles and repeatedly returning to a single constraint: real systems live under trade-offs, and good engineers choose those trade-offs deliberately. Agarwal is a&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Trade-offs in Modern System Design: A Conversation with Archit Agarwal&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Editor-in-Chief of Deep Engineering by Packt&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:14853060,&quot;name&quot;:&quot;Archit Agarwal&quot;,&quot;bio&quot;:&quot;Principal Member of Technical Staff at Oracle, building ultra-low latency auth in Golang. Creator of The Weekly Golang Journal, turning system design theory into practical, high-performance code using language and SQL internals, cloud solutions.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d3d8661-57d3-4b2a-8e42-f789caf14aa6_200x200.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-26T05:13:34.221Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4a14374-2767-4450-9c5b-ca04d9e4a48a_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/trade-offs-in-modern-system-design&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:189001968,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>&#128736;&#65039;</strong>Tool of the Week</h1><p><strong><a href="https://github.com/envoyproxy/envoy">Envoy Proxy</a></strong>: a high-performance L7 proxy that standardizes service-to-service and edge traffic management (routing, resilience, security, and telemetry) across distributed systems.</p><p><strong>Highlights:</strong></p><ul><li><p><strong>Advanced traffic routing &amp; load balancing:</strong> dynamic routing rules, weighted traffic splitting, and multiple load-balancing policies.</p></li><li><p><strong>Resilience controls built in:</strong> timeouts, retries, circuit breaking, and outlier detection to contain failures.</p></li><li><p><strong>Security + observability hooks:</strong> mTLS/TLS termination, external authorization integration, and first-class metrics/logging/tracing support.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/envoyproxy/envoy&quot;,&quot;text&quot;:&quot;Learn more about Envoy Proxy&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/envoyproxy/envoy"><span>Learn more about Envoy Proxy</span></a></p><div><hr></div><h1><strong>&#128206;</strong>Tech Briefs</h1><ul><li><p><strong><a href="https://blog.cloudflare.com/cloudflare-outage-february-20-2026/">Cloudflare outage (BYOIP route withdrawal)</a>: </strong>Explains how a change in BYOIP prefix management unintentionally triggered BGP route withdrawals for some customers, causing timeouts and connectivity failures, and documents the mitigations and follow-up controls.</p></li><li><p><strong><a href="https://blog.cloudflare.com/post-quantum-sase/">Post-quantum encryption across Cloudflare One (SASE)</a>: </strong>Cloudflare has rolled out standards-based post-quantum hybrid ML-KEM across Zero Trust and WAN on-ramps/off-ramps (including TLS/MASQUE/IPsec paths) without requiring specialized hardware changes.</p></li><li><p><strong><a href="https://www.fastly.com/blog/private-incident-notifications">Private incident + maintenance notifications (SSO &amp; Slack) &#8212; Fastly</a></strong>: <br>Fastly has introduced private, security-sensitive incident and maintenance notifications with integrations like SSO and Slack to improve operational transparency for customers without exposing details publicly.</p></li><li><p><strong><a href="https://www.postgresql.org/about/news/aptpostgresqlorg-changelogs-build-logs-and-ubuntu-releases-resolute-and-plucky-3238/">apt.postgresql.org operational updates</a></strong>: The PostgreSQL project&#8217;s apt repository announces automatic apt-retrievable changelogs, colocated build logs, and repository changes as Ubuntu 26.04 work begins and Ubuntu 25.04 reaches EOL.</p></li><li><p><strong><a href="https://www.postgresql.org/about/news/postgresql-anonymizer-30-parallel-static-masking-json-import-export-3236/">PostgreSQL Anonymizer 3.0</a>:</strong> Dalibo&#8217;s PostgreSQL Anonymizer 3.0 adds parallel static masking via background workers and JSON import/export for masking rules, alongside security fixes and breaking-change notes.</p></li></ul><div><hr></div><p>That is all from me today. Thank you for reading this issue of <em>Deep Engineering</em>. </p><p>We will be back next week with more expert-led content.</p><p>Signing off one last time,<br>Divya Anne Selvaraj <br><em>Editor-in-Chief, Deep Engineering</em></p><p>(Don&#8217;t forget to stay awesome!)</p><div><hr></div><p>If your company is interested in reaching an audience of developers, software engineers, and tech decision makers, you may want to <strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong>.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.substack.com/p/deep-engineering-22-richard-d-avila/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://deepengineering.substack.com/p/deep-engineering-22-richard-d-avila/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #35: Scott Millett on closing the “story gap”]]></title><description><![CDATA[SCQA, the Pyramid Principle, and the decision-forcing close]]></description><link>https://deepengineering.net/p/deep-engineering-35-scott-millett</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-35-scott-millett</guid><dc:creator><![CDATA[Divya Anne Selvaraj]]></dc:creator><pubDate>Fri, 20 Feb 2026 13:31:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7431607d-0784-4098-8a5a-27ef0c494085_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://www.eventbrite.com/e/building-mcp-servers-in-production-tickets-1982519419953?aff=deepeng">Building MCP Servers in Production (Live workshop)</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/building-mcp-servers-in-production-tickets-1982519419953?aff=deepeng" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ggl4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ggl4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ggl4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ggl4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ggl4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:354237,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.eventbrite.com/e/building-mcp-servers-in-production-tickets-1982519419953?aff=deepeng&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/188463970?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.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_!ggl4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ggl4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ggl4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ggl4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586e101-bf2d-47ed-a165-7012ad066f2a_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Move MCP from demos to production. In this 5-hour online workshop you&#8217;ll cover OAuth 2.1 auth pitfalls, OpenTelemetry observability, scaling persistent connections, and managing context growth/cost. Led by Saxo Bank Principal Dev Peder Holdgaard Pedersen. <strong>When: Mar 29, 10:30am&#8211;3:30pm ET / 7:30am&#8211;12:30pm PT.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/building-mcp-servers-in-production-tickets-1982519419953?aff=deepeng&quot;,&quot;text&quot;:&quot;Get tickets on Eventbrite&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.com/e/building-mcp-servers-in-production-tickets-1982519419953?aff=deepeng"><span>Get tickets on Eventbrite</span></a></p><div><hr></div><p><strong>&#9997;&#65039;From the editor&#8217;s desk,</strong></p><p>Welcome to the 35th issue of <em><strong>Deep Engineering</strong></em>!</p><p>This is the second installment in Deep Engineering&#8217;s ongoing series adapted from chapter 2 of <em><strong><a href="https://www.packtpub.com/en-us/product/the-it-strategy-playbook-9781806109623">The IT Strategy Playbook</a></strong></em> by <strong><a href="https://www.linkedin.com/in/scottmillett/">Scott Millett</a></strong> (Packt; publishing May 2026). Millett is a long-time IT leader and architect who has served in CIO/CTO roles and led large-scale transformation work across multiple sectors (as you saw in <strong><a href="https://deepengineering.substack.com/p/the-it-strategy-playbook-part-1-define">Part 1&#8217;s</a></strong> &#8220;100 Day Plan&#8221; boardroom story).</p><p>Today&#8217;s adaptation focuses on a practical problem: <strong>how technical realities become executive decisions</strong>. Millett lays out a repeatable approach for communicating strategy&#8212;clarifying the single objective, framing the narrative with <strong>SCQA (Situation&#8211;Complication&#8211;Question&#8211;Answer)</strong>, and supporting the recommendation using the <strong>Pyramid Principle</strong>&#8212;so boards and executives can evaluate trade-offs and commit to a direction.</p><p>This is well aligned with what US technology leaders are navigating this week: <strong><a href="https://www.gartner.com/en/newsroom/press-releases/2026-02-17-gartner-global-ai-regulations-fuel-billion-dollar-market-for-ai-governance-platforms">Gartner&#8217;s Feb 17 Q&amp;A</a></strong> piece argues that fragmented AI regulation is accelerating spend on <strong>AI governance platforms</strong> as organizations try to manage compliance and operational risk. At the same time, a multi-industry coalition urged the Commerce Department to preserve the core of the <strong><a href="https://www.axios.com/2026/02/13/industry-lutnick-ai-risk-framework">NIST AI Risk Management Framework</a></strong>, a signal that many enterprises are already using it as a shared language for oversight and internal controls. And <strong><a href="https://www.cisa.gov/news-events/news/cisa-announces-new-town-halls-engage-stakeholders-cyber-incident-reporting-critical-infrastructure">CISA&#8217;s Feb 13 announcement of CIRCIA</a></strong> rulemaking town halls reinforces that incident reporting expectations&#8212;and the need to communicate risk and response clearly&#8212;remain active, moving targets.</p><p>Let&#8217;s get started.</p><div><hr></div><h4><a href="https://www.eventbrite.com/e/safely-refactor-large-production-codebases-with-ai-registration-1982005923070?aff=deepengineeringnewsletter">Safely Refactor Large Production Codebases with AI</a></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/safely-refactor-large-production-codebases-with-ai-registration-1982005923070?aff=deepengineeringnewsletter" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j7oI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!j7oI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!j7oI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!j7oI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j7oI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:449917,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.eventbrite.com/e/safely-refactor-large-production-codebases-with-ai-registration-1982005923070?aff=deepengineeringnewsletter&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://deepengineering.substack.com/i/188463970?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.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_!j7oI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!j7oI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!j7oI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!j7oI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8b9324-9d90-414d-a7d4-21d21727822d_2160x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Safely refactor large production codebases with AI. Learn a workflow that pairs Claude Code with ast-grep&#8217;s AST-based rewrites for structural guarantees&#8212;migrations, guardrails, and best-practice enforcement. Ticket includes <em>Mastering ast-grep</em> + prompt templates. <strong>Mar 14, 10&#8211;11:30am ET / 7&#8211;8:30am PT.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/safely-refactor-large-production-codebases-with-ai-registration-1982005923070?aff=deepengineeringnewsletter&quot;,&quot;text&quot;:&quot;Get tickets&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.com/e/safely-refactor-large-production-codebases-with-ai-registration-1982005923070?aff=deepengineeringnewsletter"><span>Get tickets</span></a></p><div><hr></div><h1><strong>&#129504;Expert Insight:</strong></h1><h1><strong>The IT Strategy Playbook (Part 2): Closing the Story Gap by Scott Millett</strong></h1><blockquote><p><em><strong>&#8220;The most powerful person in the world is the storyteller.&#8221; &#8212; Steve Jobs</strong></em></p></blockquote><p>In the early 2000s, Nokia dominated mobile phones. Its strategy, built on exceptional hardware engineering and global supply-chain execution, worked flawlessly until 2007. The company didn&#8217;t fall because its engineers lacked insight. It fell because the organization couldn&#8217;t convert critical technical knowledge into strategic intent. The signals were present; the translation mechanisms were not.</p><p>Nokia&#8217;s software teams had long recognized that Symbian&#8217;s architecture was reaching its limits. It was fragmented, costly to evolve, and increasingly misaligned with the emerging touch-driven experience. Alternative platforms such as Maemo and later MeeGo were being explored, and the technical risks were well understood within engineering. But these concerns were filtered through a hardware-first culture that interpreted platform limitations as minor technical defects, not as threats to the business model. The communication path from &#8220;this architecture will constrain what the business can do&#8221; to &#8220;this requires a strategic shift&#8221; simply wasn&#8217;t there.</p><p>At the same time, senior leadership continued to optimize short-term device metrics. They still viewed the competitive landscape as a handset battle rather than an ecosystem battle, and the implications of Apple&#8217;s and Google&#8217;s platform strategies never translated into a unified architectural or strategic response. Nokia&#8217;s organizational structure created a communication gradient: technical truths lost meaning as they travelled upward, and strategic signals failed to reorient investment, priorities, or direction.</p><p>Within five years, the world&#8217;s leading mobile manufacturer was forced to exit the handset business, not because it lacked capability, but because it lacked the ability to translate insight into coherent action. This chapter focuses on the story gap: how to communicate strategic needs clearly, how to ensure signals travel across the organization intact, and how to avoid the silent failures that undermine strategy long before the market ever does.</p><p>In this chapter, you&#8217;ll learn how to:</p><ul><li><p>Communicate strategic intent with clarity, ensuring technical insight translates into decisions rather than confusion</p></li><li><p>Structure a coherent strategic narrative using proven frameworks to move from context to conclusion</p></li><li><p>Develop presentation material that supports decision-making, not just information sharing</p></li><li><p>Deliver your message effectively, guiding senior stakeholders from understanding to commitment</p></li></ul><p>You will use these skills to close the story gap: translating strategy, architectural intent, and plans into a narrative that enables decisions. Not more slides, but a clear line from context to conclusion, so leaders understand the trade-offs, commit to a direction, and act.</p><h1><strong>How to Be An Effective Communicator</strong></h1><p>Delivering a technology strategy is not simply an act of presenting information; it is an act of leadership and influence. The best strategy in the world will fail if the communicator lacks clarity of purpose or the ability to authentically connect with the audience.</p><h2><strong>Clarify your objective</strong></h2><p>Before you open a slide deck or write a single email, you must answer one question with absolute, non-negotiable clarity: What is the one thing I need the audience to believe or do when I stop speaking or reading? This is the foundation of strategic communication. Without a single, clearly defined objective, your message will lack focus, and your audience will leave confused about the desired next step. Your objective should never be passive, such as &#8220;to inform the Board&#8221; or &#8220;to update the team.&#8221; It must be an action verb tied to a measurable outcome. Consider the examples in table 2-1 where we take a passive goal and turn it into an active objective.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ajHS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ajHS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 424w, https://substackcdn.com/image/fetch/$s_!ajHS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 848w, https://substackcdn.com/image/fetch/$s_!ajHS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 1272w, https://substackcdn.com/image/fetch/$s_!ajHS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ajHS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png" width="783" height="440" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:440,&quot;width&quot;:783,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36978,&quot;alt&quot;:&quot;&quot;,&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://deepengineering.substack.com/i/188464810?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ajHS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 424w, https://substackcdn.com/image/fetch/$s_!ajHS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 848w, https://substackcdn.com/image/fetch/$s_!ajHS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 1272w, https://substackcdn.com/image/fetch/$s_!ajHS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe71b8b6-7a49-4c69-8680-e16fe0ff9ce5_783x440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When you define your objective down to the &#8216;one thing,&#8217; you achieve two crucial results:</p><ol><li><p><strong>Elimination of Noise:</strong> Every slide, chart, and word you use must directly serve that single objective. If a piece of data doesn&#8217;t help you achieve the objective, it belongs in the appendix, or nowhere at all.</p></li><li><p><strong>Forcing the Answer:</strong> By knowing the desired action, you structure your entire presentation to lead logically and inevitably to that conclusion. Your presentation becomes a persuasive roadmap, not a rambling document review.</p></li></ol><h2><strong>Master the three modes of Persuasion</strong></h2><p>As an IT leader, you must consciously deploy all three modes to secure buy-in. Relying solely on data (Logos) is rarely enough; you must also establish your credibility (Ethos) and connect your strategy to the organization&#8217;s goals and fears (Pathos). The following subsections detail how to weave each of these essential appeals into your strategic narrative to maximize influence and drive action.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9M5u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9M5u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 424w, https://substackcdn.com/image/fetch/$s_!9M5u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 848w, https://substackcdn.com/image/fetch/$s_!9M5u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 1272w, https://substackcdn.com/image/fetch/$s_!9M5u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9M5u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png" width="624" height="213" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:213,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38983,&quot;alt&quot;:&quot;&quot;,&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://deepengineering.substack.com/i/188464810?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!9M5u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 424w, https://substackcdn.com/image/fetch/$s_!9M5u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 848w, https://substackcdn.com/image/fetch/$s_!9M5u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 1272w, https://substackcdn.com/image/fetch/$s_!9M5u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25742a-ce1d-4540-996c-f9c06976a3ed_624x213.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Figure 2-1 Ethos, Pathos and Logos</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.substack.com/p/the-it-strategy-playbook-part-2-closing&quot;,&quot;text&quot;:&quot;Continue reading...&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://deepengineering.substack.com/p/the-it-strategy-playbook-part-2-closing"><span>Continue reading...</span></a></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;54329835-b5e6-4210-a02d-63aa9b4978aa&quot;,&quot;caption&quot;:&quot;This article is Part 2 of Deep Engineering&#8217;s ongoing series adapted from The IT Strategy Playbook: How CIOs and CTOs can drive business growth through focused action, architecture, and execution (Packt; publishing May 2026). Each installment is a web-ready adaptation of a draft chapter. I&#8217;m refining the manuscript as we go&#8212;leave feedback in the comments.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The IT Strategy Playbook (Part 2): Closing the Story Gap&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:49430582,&quot;name&quot;:&quot;Scott Millett&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!gt3L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37d1c66-6fe0-4fcc-b196-a539a4cf2ab5_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-19T08:50:59.447Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/635c10ea-b2c3-439b-94d7-f30a83565938_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/the-it-strategy-playbook-part-2-closing&quot;,&quot;section_name&quot;:&quot;The IT Strategy Playbook&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:188464810,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>&#128269;In case you missed it&#8230;</strong></h1><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;75f8c7f7-e95b-41d3-a68a-019494769ac9&quot;,&quot;caption&quot;:&quot;This article is Part 1 of Deep Engineering&#8217;s exclusive ongoing series adapted from The IT Strategy Playbook: How CIOs and CTOs can drive business growth through focused action, architecture, and execution by Scott Millett (Packt; publishing May 2026). Millett is an IT leader, strategist, and author with 25+ years&#8217; experience, having served as a CIO, CTO, and archite&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The IT Strategy Playbook (Part 1): Define, Shape, Deliver &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:49430582,&quot;name&quot;:&quot;Scott Millett&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!gt3L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37d1c66-6fe0-4fcc-b196-a539a4cf2ab5_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-29T09:22:31.808Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!6aia!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F318241a1-5076-4d65-b0a0-33ab5bbc6060_1586x1120.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/the-it-strategy-playbook-part-1-define&quot;,&quot;section_name&quot;:&quot;The IT Strategy Playbook&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:177442666,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:1,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;33badf11-f39a-4995-92ab-9cc39ba13df9&quot;,&quot;caption&quot;:&quot;Build your next app on HubSpot with the flexibility of an all-new Developer Platform&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Deep Engineering #24: Scott Millett on why IT strategy is business strategy&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Editor-in-Chief of Deep Engineering by Packt&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:49430582,&quot;name&quot;:&quot;Scott Millett&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!gt3L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37d1c66-6fe0-4fcc-b196-a539a4cf2ab5_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-10-30T13:30:55.522Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3ec52cc-71ad-48d2-850c-417237d93294_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/deep-engineering-24-scott-millett&quot;,&quot;section_name&quot;:&quot;Newsletter Issues&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:177538808,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>&#128736;&#65039;Tool of the Week</strong></h1><p><strong><a href="https://mermaid.js.org/">Mermaid &#8212; Open-source &#8220;diagrams as code&#8221; for flowcharts, sequence diagrams, and architecture visuals (rendered from plain text)</a></strong></p><p>Mermaid (mermaid-js/mermaid) is a text-based diagramming tool that turns Markdown-like syntax into diagrams you can embed in docs, RFCs, and strategy decks&#8212;useful when you want visuals that stay versionable and easy to review.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://mermaid.js.org/&quot;,&quot;text&quot;:&quot;More about Mermaid&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://mermaid.js.org/"><span>More about Mermaid</span></a></p><div><hr></div><h1><strong>&#128206;Tech Briefs</strong></h1><ul><li><p><strong><a href="https://www.federalregister.gov/documents/2026/02/13/2026-02948/cyber-incident-reporting-for-critical-infrastructure-act-circia-rulemaking-town-hall-meetings">CIRCIA town halls / reporting requirements</a></strong><a href="https://www.federalregister.gov/documents/2026/02/13/2026-02948/cyber-incident-reporting-for-critical-infrastructure-act-circia-rulemaking-town-hall-meetings"> (US critical infrastructure </a><strong><a href="https://www.federalregister.gov/documents/2026/02/13/2026-02948/cyber-incident-reporting-for-critical-infrastructure-act-circia-rulemaking-town-hall-meetings">CIRCIA rulemaking</a>: </strong>DHS/CISA scheduled sector-specific virtual town halls (plus two general sessions) to gather additional stakeholder input on refining the scope and burden of the proposed cyber incident reporting rule. </p></li><li><p><strong><a href="https://github.blog/changelog/2026-02-13-github-agentic-workflows-are-now-in-technical-preview/">GitHub Agentic Workflows (technical preview)</a>: </strong>GitHub introduced Markdown-authored &#8220;agentic&#8221; automations that compile into standard Actions workflows, aiming to make repo automation more natural-language and security-constrained by default. </p></li><li><p><strong><a href="https://www.cloudflare.com/press/press-releases/2026/cloudflare-and-mastercard-partner-to-extend-comprehensive-cyber-defense/">Attack-surface and app-sec bundling</a>: </strong>Cloudflare and Mastercard announced a partnership to combine attack surface monitoring/risk scoring with Cloudflare&#8217;s application security controls for faster remediation across internet-facing assets. </p></li><li><p><strong><a href="https://www.cisa.gov/news-events/alerts/2026/02/17/cisa-adds-four-known-exploited-vulnerabilities-catalog">CISA KEV update</a>:</strong> CISA added <strong>four</strong> vulnerabilities to its Known Exploited Vulnerabilities Catalog (evidence of active exploitation), reinforcing KEV-driven prioritization for vulnerability management. </p></li><li><p><strong><a href="https://github.com/VictoriaMetrics/VictoriaMetrics/releases">VictoriaMetrics LTS release</a>:</strong> VictoriaMetrics shipped LTS release <strong>v1.122.15</strong> (released <strong>2026-02-13</strong>) with bugfixes intended for production observability deployments. </p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of <em>Deep Engineering</em>.</p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome,<br>Divya Anne Selvaraj<br><em><strong>Editor-in-Chief, Deep Engineering</strong></em></p><div><hr></div><p>If your company is interested in reaching an audience of developers, software engineers, and tech decision makers, you may want to <strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong>.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.substack.com/leaderboard?&amp;referrer_token=2bqw9h&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://deepengineering.substack.com/leaderboard?&amp;referrer_token=2bqw9h&amp;utm_source=post"><span>Refer a friend</span></a></p>]]></content:encoded></item><item><title><![CDATA[Deep Engineering #34: José Dimas Luján Castillo and Ron Veen on Kotlin for Java in Production]]></title><description><![CDATA[Kotlin adoption, virtual threads, and modular monoliths&#8212;practical decision lenses for modernizing JVM systems]]></description><link>https://deepengineering.net/p/deep-engineering-34-jose-dimas-lujan</link><guid isPermaLink="false">https://deepengineering.net/p/deep-engineering-34-jose-dimas-lujan</guid><dc:creator><![CDATA[Divya Anne Selvaraj]]></dc:creator><pubDate>Thu, 12 Feb 2026 13:31:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/adf8dee9-ff71-4fc4-8023-42b2b6ce5011_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong><a href="https://www.vpdae.com/redirect/cnr7cdyutf5g9yhwbbyiq1813iv">Multi-Agent Code Review That Catches Real Issues</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.vpdae.com/redirect/cnr7cdyutf5g9yhwbbyiq1813iv" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4zNu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4zNu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4zNu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4zNu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4zNu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg" width="1320" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:1320,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.vpdae.com/redirect/cnr7cdyutf5g9yhwbbyiq1813iv&quot;,&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_!4zNu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4zNu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4zNu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4zNu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F225ed530-c53a-4c06-953f-c8097f016dbb_1320x660.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Code review is stuck. It's slow (manual), noisy (tools), or misses things. Qodo 2.0 is different. With highest precision &amp; recall, it finds critical issues other review tools miss, while limiting noise. Learning from your codebase &amp; PR history, Qodo gives fixes developers actually use.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/cnr7cdyutf5g9yhwbbyiq1813iv&quot;,&quot;text&quot;:&quot;Try Qodo for Free&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.vpdae.com/redirect/cnr7cdyutf5g9yhwbbyiq1813iv"><span>Try Qodo for Free</span></a></p><div><hr></div><p><strong>&#9997;&#65039;From the editor&#8217;s desk,</strong></p><p>Welcome to the 34th issue of <em><strong>Deep Engineering</strong></em>!</p><p>On February 10, 2026, the <strong>OpenJDK Quality Group</strong> warned that <strong><a href="https://inside.java/2026/02/10/quality-heads-up/">JDK 27 will remove </a></strong><code>ThreadPoolExecutor.finalize()</code>, a source-incompatible change that can surface as <strong>compile errors</strong> in code that calls or overrides it. It is a useful reminder that JVM modernization happens under load while production systems keep running. Today&#8217;s issue looks at what &#8220;practical modernization&#8221; means after the Kotlin hype cycle, grounded in my conversation with <strong>Jos&#233; Dimas Luj&#225;n Castillo</strong> and <strong>Ron Veen</strong>, co-authors of <em><strong><a href="https://www.packtpub.com/en-us/product/kotlin-for-java-developers-9781835884836">Kotlin for Java Developers</a></strong></em>.</p><p>Luj&#225;n Castillo brings a mobile-first view shaped by <strong>15 years building Android, iOS, and Flutter applications and leading teams globally</strong>, including work across <strong>500+ mobile apps</strong>, plus experience as a teacher and author. Veen brings an enterprise JVM lens from <strong>20+ years in the Java ecosystem</strong>, spanning mainframes to microservices, with certifications including <strong>Oracle Certified Java Programmer</strong> and <strong>Sun Business Component Developer</strong>, and hands-on work around Jakarta EE migrations and modern concurrency. </p><p>You can watch the complete interview and read the transcript <strong><a href="https://deepengineering.substack.com/p/coroutines-vs-virtual-threads-and">here</a></strong>, or read on for distilled insights.</p><div id="youtube2-5pfsenEI-bc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;5pfsenEI-bc&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/5pfsenEI-bc?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>Today&#8217;s issue also includes the complete <strong><a href="https://deepengineering.substack.com/p/coroutines">Chapter 15: Coroutines</a></strong> from their book in addition to our regular <strong>Tool of the Week</strong> pick and <strong>Tech Briefs</strong>.</p><p>Let&#8217;s get started.</p><div><hr></div><p><em>Sponsored:</em></p><p><strong><a href="https://links.uk.defend.egress.com/Warning?crId=697b625161078799765e2b2b&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNpNTjsOwjAMvQ2bGxYWpIqjRK5jqEVTR4nTiNtjEAPj-7_VrLRrCGOMyXjjKs-JNIfBi-xYW0h8UMW7BRS4awXHvGnh2mDVAaaAtIqTgHA5gwvEu0GpmjqZHGIvWFSb3brlmDlJzzOVfPrApt3ts495rUe-JGEuKI99ThZR4n9T_N2Ki5ge8gbF6Umj&amp;@OriginalLink=www.telerik.com">Webinar | How to Build Faster with AI Agents</a>: </strong>Learn how full&#8209;stack developers boost productivity by 50% with AI agents that automate layout, styling, and component generation through RAG and LLM pipelines. See how orchestration and spec&#8209;driven workflows keep you in control of quality and consistency. <strong><a href="https://links.uk.defend.egress.com/Warning?crId=697b625161078799765e2b2b&amp;Domain=packt.com&amp;Threat=eNpzrShJLcpLzAEADmkDRA%3D%3D&amp;Lang=en&amp;Base64Url=eNpNTjsOwjAMvQ2bGxYWpIqjRK5jqEVTR4nTiNtjEAPj-7_VrLRrCGOMyXjjKs-JNIfBi-xYW0h8UMW7BRS4awXHvGnh2mDVAaaAtIqTgHA5gwvEu0GpmjqZHGIvWFSb3brlmDlJzzOVfPrApt3ts495rUe-JGEuKI99ThZR4n9T_N2Ki5ge8gbF6Umj&amp;@OriginalLink=www.telerik.com">Save your seat!</a></strong></p><div><hr></div><h1><strong>Kotlin and Java after the Hype Cycle with Jos&#233; Dimas Luj&#225;n Castillo</strong> and <strong>Ron Veen</strong></h1><p>A language switch succeeds or fails in the space between code and people. Teams can adopt Kotlin fast and still ship Kotlin that behaves like Java. The most useful guidance is keeping modernization practical while systems keep running.</p><h2><strong>Kotlin&#8217;s first gains: safety and continuity</strong></h2><p>Luj&#225;n Castillo says Kotlin&#8217;s benefits were easy to see on Android because &#8220;<em>Java was too verbose</em>.&#8221; He names one feature that changed everyday work immediately: &#8220;<em>null safety. It&#8217;s automatic.</em>&#8221; He also describes the adoption detail that matters most in mature codebases: Kotlin&#8217;s &#8220;<em>interoperability with Java</em>.&#8221; &#8220;<em>Maybe I can do the next steps in my applications with Kotlin, but I don&#8217;t need to fight with the legacy code even if it&#8217;s in another language</em>,&#8221; he says, and he reminds teams that &#8220;<em>the main problems are still there even if you change the language</em>.&#8221;</p><p>Veen&#8217;s enterprise view focuses on maintenance and defects. &#8220;<em>There will be less code&#8212;and less code is good</em> (because it means) <em>less code to maintain</em>,&#8221; he says, and he expects Kotlin to help because it &#8220;tends to be less error-prone,&#8221; with null handling as a steady source of bugs.</p><h2><strong>The migration trap: translating Java line by line</strong></h2><p>Both warn that Kotlin adoption can stall at Java-flavored Kotlin. Veen calls it a natural reflex: teams start Kotlin while still thinking in the patterns they already know, because there is still a project to ship. &#8220;<em><strong>It&#8217;s not a drop-in replacement</strong></em>,&#8221; he says. &#8220;<em>You really have to be willing to learn</em>.&#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_!yapw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yapw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 424w, https://substackcdn.com/image/fetch/$s_!yapw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 848w, https://substackcdn.com/image/fetch/$s_!yapw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 1272w, https://substackcdn.com/image/fetch/$s_!yapw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yapw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png" width="1408" height="673" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c620da27-f3bd-40a7-8795-bc2e2d5bca5e_1408x673.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:673,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1874005,&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://deepengineering.substack.com/i/187724506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F521074b9-ab6c-40b7-8017-a618a9469130_1408x768.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_!yapw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 424w, https://substackcdn.com/image/fetch/$s_!yapw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 848w, https://substackcdn.com/image/fetch/$s_!yapw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 1272w, https://substackcdn.com/image/fetch/$s_!yapw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1766c4b-f253-4e47-8e01-2bc7d162d793_1408x673.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Luj&#225;n Castillo describes the common first step: &#8220;<em>99% of developers start by just translating the code</em>.&#8221; Translation helps people learn syntax, but it does not deliver the major improvements teams expect. &#8220;<em>If you are translating each line, you will see you don&#8217;t have less code&#8212;you have the same code in a different way</em>,&#8221; he says. He looks for a shift where developers start asking whether Kotlin makes a line unnecessary.</p><p>Veen gives a concrete way to test that shift. He rewrote an implementation and reduced it &#8220;<em>from 250&#8221; lines &#8220;down to under 100</em>,&#8221; not because shorter is always better, but because it forced him to ask how to &#8220;<em>leverage Kotlin&#8217;s native way of doing things</em>.&#8221; Luj&#225;n Castillo describes &#8220;<em>immutability first</em>&#8221; as a sign that developers have started to think in Kotlin&#8217;s defaults rather than Java&#8217;s habits.</p><h2><strong>Concurrency decisions: coroutines, virtual threads, and structure</strong></h2><p>Luj&#225;n Castillo frames concurrency as choosing a model you can work with under pressure. For coroutines, he highlights the structure: &#8220;<em>You have cancellation, you have propagation, you have control of the whole cycle</em>.&#8221; For virtual threads, he emphasizes familiarity. They are &#8220;<em>very traditional,</em>&#8221; and he sees them as attractive when a system already has &#8220;<em>a very complex structure with layer</em>s.&#8221; He avoids declaring a winner: &#8220;<em>It&#8217;s not a model about who is better</em>.&#8221;</p><p>Veen names the shared goal behind both approaches: async work that can &#8220;<em>appear sequentially in the code</em>,&#8221; so developers can reason about flow and avoid &#8220;<em>callback hell</em>.&#8221; OpenJDK&#8217;s current structured concurrency work follows that reasoning-first intent. <a href="https://openjdk.org/jeps/525">JEP 525</a> describes subtasks whose lifetimes are &#8220;<em>confined to the syntactic block</em>&#8221; of their parent task so they can be managed &#8220;<em>as a unit</em>,&#8221; and it calls structured concurrency &#8220;<em>a great match for virtual threads</em>.&#8221;</p><h2><strong>Modernization without regret: boundaries first, then change</strong></h2><p>Luj&#225;n Castillo argues that &#8220;<em><strong>microservices, in my experience, is not the goal, OK? It&#8217;s the consequence for that.</strong></em>&#8221; Before a team breaks apart a monolith, he asks, &#8220;<em><strong>Are we prepared for paying the real cost to use microservices&#8212;not just the money</strong></em>?&#8221; and &#8220;<em><strong>are we prepared to use this architecture or not?</strong></em>&#8221; He also rejects the idea that monoliths are obsolete: &#8220;<em>you can use monoliths without problems for huge systems</em>.&#8221;</p><p>Veen explains where the cost shows up. Microservices require &#8220;<em>a lot more overhead</em>&#8221; in monitoring, and debugging grows harder when incidents span &#8220;<em>dozens or hundreds of services.</em>&#8221; His default is a &#8220;<em>modular monolith</em>,&#8221; where modules have clear boundaries and must use a &#8220;<em>predefined API</em>&#8221; to interact. He then watches for signals that justify extraction, such as a module that forces frequent redeployments or has distinct scaling needs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Bed!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Bed!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 424w, https://substackcdn.com/image/fetch/$s_!5Bed!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 848w, https://substackcdn.com/image/fetch/$s_!5Bed!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 1272w, https://substackcdn.com/image/fetch/$s_!5Bed!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Bed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png" width="1408" height="638" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77604d48-d724-4a47-b44d-cafa24f83b47_1408x638.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:638,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1720898,&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://deepengineering.substack.com/i/187724506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc6e2852-b9a9-4c55-a68a-a605ca9afe1c_1408x768.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_!5Bed!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 424w, https://substackcdn.com/image/fetch/$s_!5Bed!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 848w, https://substackcdn.com/image/fetch/$s_!5Bed!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 1272w, https://substackcdn.com/image/fetch/$s_!5Bed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa794f15-6412-47f2-8a9f-4104bd040e4a_1408x638.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Both speakers treat adoption as a leadership problem. Veen recommends bringing skeptics into the work early and using mixed teams and code reviews to build confidence. Luj&#225;n Castillo recommends &#8220;<em>small limits</em>&#8221; and warns leaders away from shallow metrics: &#8220;<em>Don&#8217;t try to read productivity&#8230; as: &#8216;If you have more lines of code or less lines of code</em>.&#8217;&#8221;</p><p>JetBrains lists <a href="https://kotlinlang.org/docs/releases.html">Kotlin 2.3.10 as released on February 5, 2026</a>, which supports the kind of incremental upgrades both speakers describe</p><div><hr></div><h1><strong>&#129504;Expert Insight: </strong></h1><ol><li><p><strong><a href="https://deepengineering.substack.com/p/coroutines-vs-virtual-threads-and">The complete Deep Engineering interview with Jos&#233; Dimas Luj&#225;n Castillo and Ron Veen</a></strong></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a4c2a619-b948-4894-a129-d227ecf3995b&quot;,&quot;caption&quot;:&quot;Kotlin has moved from &#8220;Android-first&#8221; to a practical option for Java teams that want safer, more concise JVM code without abandoning their existing Java investments.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Coroutines vs Virtual Threads and the Kotlin Java Decision in Practice: A Conversation with Jos&#233; Dimas Luj&#225;n Castillo and Ron Veen&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:140662997,&quot;name&quot;:&quot;Divya Anne Selvaraj&quot;,&quot;bio&quot;:&quot;Content Engineer @Packt Software Engineering &amp; Architecture Vertical | Editor-in-Chief of Packt Deep Engineering and Packt PythonPro Newsletters&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309a6f07-27a6-40bf-ab99-d042556d816b_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:102761742,&quot;name&quot;:&quot;Ron veen&quot;,&quot;bio&quot;:&quot;Experienced Java developer, conference speaker, book autor. Specializing in AI supported software development.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!QPwW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa02f9f-52dd-4573-942f-cefe45913adb_1166x1168.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-12T07:58:23.280Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/5pfsenEI-bc&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/coroutines-vs-virtual-threads-and&quot;,&quot;section_name&quot;:&quot;Interviews&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:187715309,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div></li><li><p><strong><a href="https://deepengineering.substack.com/p/coroutines">The complete Chapter 15: Coroutines from Kotlin for Java Developers by Jos&#233; Dimas Luj&#225;n Castillo and Ron Veen (Packt, 2025)</a></strong></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ccec171a-2fd4-4d3d-b086-b26963fedd44&quot;,&quot;caption&quot;:&quot;In this chapter, we will explore one of Kotlin&#8217;s most powerful and transformative features &#8211; coroutines. Designed to simplify and enhance asynchronous programming, coroutines allow developers to write non-blocking, concurrent code with ease and clarity. By offering a structured and intuitive approach to handling tasks such as API calls, database operati&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Coroutines&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:102761742,&quot;name&quot;:&quot;Ron veen&quot;,&quot;bio&quot;:&quot;Experienced Java developer, conference speaker, book autor. Specializing in AI supported software development.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!QPwW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa02f9f-52dd-4573-942f-cefe45913adb_1166x1168.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-12T09:04:47.093Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e24774ab-3f3e-4526-86a4-4de740c0206a_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://deepengineering.substack.com/p/coroutines&quot;,&quot;section_name&quot;:&quot;Practical Deep-Dives&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:187721246,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1729053,&quot;publication_name&quot;:&quot;Packt Deep Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!H5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F736bc1ee-d689-497e-83a8-7d9bf9022eb9_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div></li></ol><div><hr></div><h1><strong>&#128736;&#65039;Tool of the Week</strong></h1><p><strong><a href="https://github.com/open-telemetry/opentelemetry-java-instrumentation">OpenTelemetry Java Agent &#8212; Open-source, zero-code auto-instrumentation for JVM services (traces, metrics, and more)</a></strong></p><p>The OpenTelemetry Java Agent (from <code>open-telemetry/opentelemetry-java-instrumentation</code>) is a Java agent JAR you attach at startup to capture telemetry from popular Java libraries and frameworks without changing application code. </p><p><strong>Highlights:</strong></p><ul><li><p><strong>Zero-code startup integration:</strong> Attach the agent with the JVM <code>-javaagent</code> flag to &#8220;gather telemetry data from a Java application without code changes.&#8221;</p></li><li><p><strong>Collector-first by default, configurable when needed:</strong> The agent&#8217;s default path uses OTLP to send telemetry to an OpenTelemetry Collector endpoint (and you can configure it via system properties or environment variables).</p></li><li><p><strong>Open source, production-oriented ecosystem, recently updated</strong></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/open-telemetry/opentelemetry-java-instrumentation&quot;,&quot;text&quot;:&quot;More about OpenTelemetry Java Agent&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/open-telemetry/opentelemetry-java-instrumentation"><span>More about OpenTelemetry Java Agent</span></a></p><div><hr></div><h1><strong>&#128206;Tech Briefs</strong></h1><ul><li><p><strong><a href="https://kotlinlang.org/docs/releases.html">Kotlin 2.3.10 Released</a></strong>: Kotlin 2.3.10 is a new Kotlin/JVM release, giving teams a concrete upgrade point for Kotlin codebases that need to stay current with the Java ecosystem. </p></li><li><p><strong><a href="https://jdk.java.net/26/">OpenJDK JDK 26 Release-Candidate Builds (Build 34)</a></strong>: DK 26&#8217;s RC builds are now available, which is useful for teams that want to validate JVM and runtime behavior changes (including concurrency-related changes) against real workloads before GA. </p></li><li><p><strong><a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide">Spring Boot 4.0 Migration Guide</a></strong>: Spring Boot&#8217;s 4.0 migration guide captures the practical baseline shifts (Java 17+, Spring Framework 7.x, Jakarta EE 11, Kotlin version requirements) that enterprise JVM teams need to account for in upgrades. </p></li><li><p><strong><a href="https://inside.java/2026/02/10/quality-heads-up/">Quality Outreach Heads-up (JDK 27): Removal of </a></strong><code>ThreadPoolExecutor.finalize()</code>: This heads-up flags a source-incompatible change where removing <code>ThreadPoolExecutor.finalize()</code> can trigger compile errors in code that directly calls or overrides it. </p></li><li><p><strong><a href="https://joelsiks.com/posts/valhalla-inlinelayoutinfo-array-optimization/">Optimizing Java Class Metadata in Project Valhalla</a>:</strong> A Project Valhalla update digs into how the JVM is evolving class metadata to support value classes and flattening/inlining, which matters for performance-sensitive JVM designs over the long term. </p></li></ul><div><hr></div><p>That&#8217;s all for today. Thank you for reading this issue of <em>Deep Engineering</em>. </p><p>We&#8217;ll be back next week with more expert-led content.</p><p>Stay awesome,<br>Divya Anne Selvaraj<br><em><strong>Editor-in-Chief, Deep Engineering</strong></em></p><div><hr></div><p>If your company is interested in reaching an audience of developers, software engineers, and tech decision makers, you may want to <strong><a href="https://packt.omeclk.com/portal/wts/uc%5EcnN2dfNaqmD-kB-mo66%7C7g%5Ef%7Cb">advertise with us</a></strong>.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://deepengineering.substack.com/leaderboard?&amp;referrer_token=2bqw9h&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://deepengineering.substack.com/leaderboard?&amp;referrer_token=2bqw9h&amp;utm_source=post"><span>Refer a friend</span></a></p>]]></content:encoded></item></channel></rss>