<?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[Engineering Enablement]]></title><description><![CDATA[Enabling software developers to be more technically equipped, aligned to business objectives, and happy.]]></description><link>https://engineeringenablement.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Hzmm!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe73a548-e7f8-4c3a-b632-e374bdde7440_256x256.png</url><title>Engineering Enablement</title><link>https://engineeringenablement.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 06 Aug 2026 15:24:36 GMT</lastBuildDate><atom:link href="https://engineeringenablement.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Fahim ul Haq]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[engineeringenablement@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[engineeringenablement@substack.com]]></itunes:email><itunes:name><![CDATA[Fahim ul Haq]]></itunes:name></itunes:owner><itunes:author><![CDATA[Fahim ul Haq]]></itunes:author><googleplay:owner><![CDATA[engineeringenablement@substack.com]]></googleplay:owner><googleplay:email><![CDATA[engineeringenablement@substack.com]]></googleplay:email><googleplay:author><![CDATA[Fahim ul Haq]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The AI course creator that teaches reliability in System Design like a production engineer]]></title><description><![CDATA[How Fenzo.ai's reliability in System Design course teaches distributed systems the way experienced engineers think]]></description><link>https://engineeringenablement.substack.com/p/the-ai-course-creator-that-teaches</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/the-ai-course-creator-that-teaches</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Thu, 06 Aug 2026 10:38:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sNUg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Most software systems don&#8217;t fail because someone forgot to add a retry or deploy another replica. They fail because seemingly small problems interact in ways that are difficult to predict until real users start noticing them.</span></p><p><span>Over the years, while building large-scale systems at Microsoft and Meta, I found that reliability wasn&#8217;t about memorizing distributed systems patterns. It was about developing the intuition to understand how failures propagate through an entire system.</span></p><p><span>That&#8217;s exactly why </span><a href="https://fenzo.ai/?ref=Ype6"><span>Fenzo.ai</span></a><span>&#8216;s reliability in System Design course caught my attention. Rather than teaching reliability as a collection of isolated concepts, this AI course creator builds one continuous engineering story that feels remarkably close to solving real production problems.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sNUg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sNUg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 424w, https://substackcdn.com/image/fetch/$s_!sNUg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 848w, https://substackcdn.com/image/fetch/$s_!sNUg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!sNUg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sNUg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png" width="1456" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!sNUg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 424w, https://substackcdn.com/image/fetch/$s_!sNUg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 848w, https://substackcdn.com/image/fetch/$s_!sNUg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!sNUg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f64540f-7556-4ed3-ae2a-890dcf5333ba_1858x1012.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Why reliability in System Design is still misunderstood</span></strong></h2><p><span>One lesson I learned fairly early while working on cloud infrastructure was that production systems almost never fail in dramatic, movie-style moments. Instead, they deteriorate gradually. One dependency becomes slightly slower than usual, queues begin forming in another service, retries quietly multiply the traffic, and suddenly customers start reporting intermittent failures that are frustratingly difficult to reproduce. Every individual component may still appear healthy when viewed in isolation, yet the overall user experience has already degraded.</span></p><p><span>Unfortunately, many educational resources unintentionally reinforce the wrong mental model. They explain redundancy in one chapter, observability in another, and distributed failures somewhere later, leaving learners with disconnected pieces rather than a complete picture. Reliability isn&#8217;t a collection of independent techniques. It&#8217;s a chain of engineering decisions where every tradeoff influences the next. That is precisely where Fenzo.ai takes a noticeably different approach.</span></p><h2><strong><span>What makes this AI course creator different</span></strong></h2><p><span>The first thing that stood out to me was how consistently the course sticks to one running example. Instead of introducing a new architecture every lesson, Fenzo.ai follows the same checkout application from beginning to end. A customer browses products, adds an item to a cart, submits an order, and that seemingly ordinary workflow becomes the foundation for explaining availability, dependency failures, redundancy, recovery patterns, and observability.</span></p><p><span>As an AI course creator, Fenzo.ai understands that engineers build intuition through continuity rather than repetition. Every lesson inherits assumptions from the previous one, so you&#8217;re never restarting your mental model. That mirrors real software engineering remarkably well because production systems evolve over time rather than resetting every time a new concept appears.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rJK9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rJK9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 424w, https://substackcdn.com/image/fetch/$s_!rJK9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 848w, https://substackcdn.com/image/fetch/$s_!rJK9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 1272w, https://substackcdn.com/image/fetch/$s_!rJK9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rJK9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png" width="1042" height="448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:448,&quot;width&quot;:1042,&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_!rJK9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 424w, https://substackcdn.com/image/fetch/$s_!rJK9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 848w, https://substackcdn.com/image/fetch/$s_!rJK9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 1272w, https://substackcdn.com/image/fetch/$s_!rJK9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdde814c-4801-4e5e-9aff-adb2442a047e_1042x448.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong><span>A curriculum that builds engineering intuition</span></strong></h2><p><span>The opening lesson immediately sets the tone by defining reliability in System Design from the user&#8217;s perspective instead of the infrastructure&#8217;s perspective. Rather than beginning with SLOs or availability percentages, the course asks a much simpler question: what failures can your users actually observe? That small shift changes everything because reliability suddenly becomes about customer experience instead of server health.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dgP_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dgP_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 424w, https://substackcdn.com/image/fetch/$s_!dgP_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 848w, https://substackcdn.com/image/fetch/$s_!dgP_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 1272w, https://substackcdn.com/image/fetch/$s_!dgP_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dgP_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png" width="1456" height="1187" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1187,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dgP_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 424w, https://substackcdn.com/image/fetch/$s_!dgP_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 848w, https://substackcdn.com/image/fetch/$s_!dgP_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 1272w, https://substackcdn.com/image/fetch/$s_!dgP_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d3163b-f093-4ca9-afed-95e8288f2944_1464x1194.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>From there, concepts like availability, reliability, durability, SLOs, and error budgets are introduced naturally through the checkout API. The interactive calculators are especially effective because they transform abstract percentages into concrete operational budgets. Instead of simply stating that a 99.9% availability target allows a limited amount of downtime, learners calculate the consequences themselves and begin seeing how every dependency consumes part of that budget.</span></p><p><span>I also appreciated how dependency chains are introduced early. The course repeatedly reminds learners that your service is rarely the sole determinant of reliability. Payments, inventory services, databases, networks, and client timeouts all contribute to what customers ultimately experience. That systems-level thinking is exactly what interviewers and senior engineering roles tend to evaluate.</span></p><h2><strong><span>Learning distributed failures instead of memorizing them</span></strong></h2><p><span>The second and third lessons were easily my favorite because they move beyond definitions and start explaining behavior. Distributed systems rarely fail cleanly. Instead, some requests succeed, others hang indefinitely, a few return stale information, and dashboards begin showing contradictory signals. Fenzo.ai recreates those situations through interactive simulations that demonstrate how latency transforms into queueing, why retries can unintentionally create overload, and how dependency failures propagate across a request path.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LNFZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LNFZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 424w, https://substackcdn.com/image/fetch/$s_!LNFZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 848w, https://substackcdn.com/image/fetch/$s_!LNFZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 1272w, https://substackcdn.com/image/fetch/$s_!LNFZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LNFZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png" width="1456" height="1248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1248,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LNFZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 424w, https://substackcdn.com/image/fetch/$s_!LNFZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 848w, https://substackcdn.com/image/fetch/$s_!LNFZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 1272w, https://substackcdn.com/image/fetch/$s_!LNFZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8434b4e9-50ff-4247-99ad-54b5fb7e7269_1482x1270.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The sections covering redundancy and fault tolerance continue that same narrative. Replication, quorum writes, leader election, and failover aren&#8217;t presented as isolated technologies. They&#8217;re introduced as responses to problems you&#8217;ve already encountered earlier in the checkout system. That progression feels remarkably natural because each new reliability mechanism solves a limitation you&#8217;ve already observed.</span></p><p><span>Perhaps the most valuable lesson throughout this section is that redundancy isn&#8217;t free. More replicas introduce more coordination, more communication, and more operational complexity. That&#8217;s an important message because reliability engineering has always been about choosing the right tradeoffs rather than maximizing every possible metric.</span></p><h2><strong><span>Why the interactive approach actually works</span></strong></h2><p><span>Interactive learning has become a common marketing phrase across online education, but meaningful interaction is surprisingly rare. Clicking animated diagrams or answering multiple-choice quizzes doesn&#8217;t necessarily build engineering intuition. Fenzo.ai takes a more thoughtful approach by making every interactive component reinforce a design decision.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nI_s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nI_s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 424w, https://substackcdn.com/image/fetch/$s_!nI_s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 848w, https://substackcdn.com/image/fetch/$s_!nI_s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 1272w, https://substackcdn.com/image/fetch/$s_!nI_s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nI_s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png" width="1456" height="994" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:994,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nI_s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 424w, https://substackcdn.com/image/fetch/$s_!nI_s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 848w, https://substackcdn.com/image/fetch/$s_!nI_s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 1272w, https://substackcdn.com/image/fetch/$s_!nI_s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f7dc40d-0027-4940-a4d0-7d00d1c11a67_1508x1030.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Watching payment latency gradually exhaust checkout capacity explains queueing theory more effectively than pages of textbook descriptions. Following quorum writes while one replica is unavailable makes coordination costs tangible. Observing retries accidentally double-charge a customer before introducing idempotency immediately demonstrates why reliability mechanisms must work together rather than independently.</span></p><p><span>This is where the AI course creator philosophy becomes particularly compelling. Instead of presenting information passively, Fenzo.ai encourages learners to observe systems changing under different conditions. That active exploration develops intuition much faster than reading definitions because you begin predicting failures before the simulation confirms them.</span></p><h2><strong><span>Observability becomes part of the engineering story</span></strong></h2><p><span>By the time the course reaches observability, it has already established a strong mental model for how failures propagate through distributed systems. Instead of introducing metrics, logs, and traces as independent monitoring tools, Fenzo.ai positions them as different ways of answering the same engineering question: where did reliability in the system begin breaking down?</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vzks!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vzks!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 424w, https://substackcdn.com/image/fetch/$s_!vzks!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 848w, https://substackcdn.com/image/fetch/$s_!vzks!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 1272w, https://substackcdn.com/image/fetch/$s_!vzks!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vzks!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png" width="1456" height="1147" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1147,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vzks!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 424w, https://substackcdn.com/image/fetch/$s_!vzks!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 848w, https://substackcdn.com/image/fetch/$s_!vzks!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 1272w, https://substackcdn.com/image/fetch/$s_!vzks!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e56f2d-1858-4146-8beb-54ffcf136b76_1614x1272.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>I particularly appreciated the emphasis on user-facing indicators instead of infrastructure metrics. Too many teams still alert on CPU utilization or memory consumption without considering whether customers are actually experiencing degraded service. The course repeatedly connects SLIs, SLOs, error budgets, and alerting back to the checkout workflow, reinforcing that operational excellence starts with measuring user experience rather than server statistics.</span></p><p><span>The discussion around consistency versus availability, retries versus overload, and redundancy versus cost also deserves recognition. Those tradeoffs aren&#8217;t treated as theoretical debates. They&#8217;re presented as everyday engineering decisions that shape how dependable production systems ultimately become.</span></p><h2><strong><span>Who should take this course?</span></strong></h2><p><span>I would comfortably recommend this course to backend engineers, platform engineers, SREs, and software developers preparing for System Design interviews. The material assumes some familiarity with APIs and distributed systems, but it spends far more time explaining engineering reasoning than overwhelming learners with academic terminology. Engineers transitioning from application development into infrastructure work will likely benefit the most because the course focuses on practical decision-making rather than mathematical theory.</span></p><p><span>Experienced engineers will already recognize many of the concepts, but they&#8217;ll probably appreciate how cohesively they&#8217;re connected. That&#8217;s ultimately what separates this course from many existing reliability in System Design resources. It doesn&#8217;t simply teach reliability techniques. It teaches how reliability decisions interact across an entire production system.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Piy8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Piy8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 424w, https://substackcdn.com/image/fetch/$s_!Piy8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 848w, https://substackcdn.com/image/fetch/$s_!Piy8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 1272w, https://substackcdn.com/image/fetch/$s_!Piy8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Piy8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png" width="1266" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:1266,&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_!Piy8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 424w, https://substackcdn.com/image/fetch/$s_!Piy8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 848w, https://substackcdn.com/image/fetch/$s_!Piy8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 1272w, https://substackcdn.com/image/fetch/$s_!Piy8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1aa8ed19-87a4-470e-95ba-40f6b57a9d29_1266x450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong><span>Where Fenzo.ai can go further</span></strong></h2><p><span>I&#8217;d like to see more complex production incident walkthroughs where multiple failures occur simultaneously. Real outages rarely arrive one at a time, and Fenzo.ai already has the interactive foundation needed to simulate cascading failures exceptionally well. Expanding into those scenarios would make an already strong course even more valuable for experienced engineers.</span></p><h2><strong><span>More System Design resources worth bookmarking</span></strong></h2><p><span>Keep building your knowledge with a few trusted free resources. These are useful for reviewing concepts, exploring real-world architectures, and strengthening your interview preparation.</span></p><ul><li><p><strong><a href="https://engineeringenablement.substack.com/p/system-design-primer-learning-to"><span>System Design Primer</span></a><span>:</span></strong><span> Refresh core distributed systems concepts and common interview fundamentals.</span></p></li><li><p><strong><a href="https://dev.to/fahimulhaq/complete-guide-to-system-design-oc7"><span>Complete Guide to System Design</span></a><span>:</span></strong><span> Follow a structured roadmap from beginner to advanced topics.</span></p></li><li><p><strong><a href="https://www.systemdesignhandbook.com/guides/system-design/"><span>System Design Handbook</span></a><span>:</span></strong><span> Learn architecture patterns, scalability, and modern design principles. Prepare specifically for System Design interviews with interview-focused guides and examples</span></p></li></ul><h2><strong><span>Final thoughts</span></strong></h2><p><span>One thing I learned after years of building distributed systems is that reliability isn&#8217;t something you master by collecting more terminology. You develop it by repeatedly asking why systems behave the way they do under stress, how seemingly unrelated failures become connected, and which engineering decisions genuinely improve user experience instead of merely shifting problems elsewhere.</span></p><p><span>That&#8217;s why this course left such a positive impression on me. Rather than overwhelming learners with disconnected concepts, Fenzo.ai constructs one coherent engineering journey where every lesson naturally prepares you for the next. The result is a learning experience that feels remarkably close to participating in real production design discussions instead of watching another online lecture.</span></p><p><span>If you&#8217;re searching for an AI course creator that goes beyond videos and static documentation, Fenzo.ai is well worth exploring. Its reliability course demonstrates that great technical education isn&#8217;t just about explaining distributed systems. It&#8217;s about helping engineers develop the intuition required to design systems that continue serving users long after the easy architectural decisions have been made.</span></p>]]></content:encoded></item><item><title><![CDATA[Designing AI systems taught me why most architectures fail before scale]]></title><description><![CDATA[A practical guide to building scalable AI systems without adding unnecessary complexity early]]></description><link>https://engineeringenablement.substack.com/p/designing-ai-systems-taught-me-why</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/designing-ai-systems-taught-me-why</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Wed, 05 Aug 2026 07:00:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Qg7o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Most engineers approach AI System Design the same way people approached microservices a few years ago. They assume the hardest part is model selection, GPU scaling, or deploying vector databases.</span></p><p><span>In reality, the hardest part is designing a system that remains observable, maintainable, and reliable once the model starts interacting with unpredictable real-world traffic and constantly changing data. I&#8217;ve seen teams spend months optimizing inference latency while ignoring retrieval quality, caching strategy, and failure isolation.</span></p><p><span>The difference between a traditional backend system and an AI-powered system becomes obvious the moment users start interacting with it at scale. In conventional applications, inputs generally map to predictable outputs. In AI systems, outputs vary depending on prompt construction, retrieval quality, model temperature, context windows, token limits, and even subtle changes in upstream data pipelines. That means </span><a href="https://www.educative.io/courses/generative-ai-system-design?aff=xDPD"><span>AI System Design</span></a><span> is no longer only about throughput and database efficiency. It becomes a discipline focused on uncertainty management, infrastructure coordination, and operational resilience.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Why AI systems break differently from traditional software</span></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_!Qg7o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qg7o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Qg7o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Qg7o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Qg7o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qg7o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!Qg7o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Qg7o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Qg7o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Qg7o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2070b0d-29d1-4165-91a4-e5139408ac24_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Traditional </span><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>distributed systems</span></a><span> fail because infrastructure becomes overloaded, dependencies become unavailable, or network communication degrades. AI systems inherit all of those problems while adding a second layer of instability driven by models and data. That is why many engineering teams underestimate the operational complexity of AI architecture until they attempt to scale it beyond prototypes.</span></p><p><span>A standard backend service usually behaves deterministically. If a request succeeds once, it will likely succeed again under identical conditions. AI systems behave probabilistically because outputs depend on learned representations rather than explicit business rules. Two requests with slightly different phrasing may produce entirely different outcomes. That variability complicates debugging because failures are no longer strictly infrastructural.</span></p><h2><strong><span>The architecture of a production AI system</span></strong></h2><p><span>One mistake I repeatedly see in AI discussions is the assumption that the model is the system. In reality, the model is usually just one layer inside a much larger architecture. Most production AI platforms spend more engineering effort on orchestration, data movement, observability, and inference optimization than on training models themselves.</span></p><p><span>The following table shows how modern AI systems are usually structured in production environments.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pgab!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pgab!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 424w, https://substackcdn.com/image/fetch/$s_!pgab!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 848w, https://substackcdn.com/image/fetch/$s_!pgab!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 1272w, https://substackcdn.com/image/fetch/$s_!pgab!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pgab!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png" width="1266" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1266,&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_!pgab!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 424w, https://substackcdn.com/image/fetch/$s_!pgab!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 848w, https://substackcdn.com/image/fetch/$s_!pgab!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 1272w, https://substackcdn.com/image/fetch/$s_!pgab!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df6a785-d079-4368-8fa6-f37d4baef682_1266x808.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The important thing here is not the tools themselves. It is the relationship between these layers. AI systems become fragile when engineers optimize one layer in isolation without understanding downstream effects.</span></p><p><span>For example, teams often optimize model latency aggressively while ignoring retrieval latency. In production, retrieval frequently dominates total response time because embedding search, ranking, reranking, and document hydration all happen before generation begins. A fast model attached to a slow retrieval pipeline still produces a slow system.</span></p><p><span>This becomes even more obvious in multi-agent architectures where models invoke external tools or services recursively. Every additional reasoning step introduces network latency, retry behavior, timeout coordination, and memory overhead. Compound AI systems can improve reasoning quality substantially, but they also expand the failure surface significantly.</span></p><p><span>That is why experienced engineers usually begin with simpler architectures before introducing agent orchestration layers.</span></p><h2><strong><span>Why most AI scalability discussions miss the real bottleneck</span></strong></h2><p><span>The internet loves discussing GPU scaling because it sounds impressive. In practice, many production AI bottlenecks are unrelated to GPUs entirely. They emerge from orchestration inefficiency, poor data flow design, or uncontrolled inference costs.</span></p><p><span>One production issue I encountered repeatedly involved token amplification. Teams optimized for request throughput but ignored how rapidly token usage expanded once conversational context accumulated. A chatbot that initially processed 1,000 tokens per request suddenly handled 15,000-token prompts after conversation history, retrieved documents, system instructions, and chain-of-thought prompts were added together.</span></p><p><span>The infrastructure looked healthy initially because request counts remained stable. Costs exploded anyway because token growth outpaced traffic growth.</span></p><p><span>This is why AI System Design must account for computational economics alongside technical scalability. In traditional backend systems, scaling costs usually correlate with traffic volume. In AI systems, costs also depend heavily on prompt structure, context size, retrieval quality, and inference strategy.</span></p><p><span>The difference becomes clearer in the following comparison.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D-I5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D-I5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 424w, https://substackcdn.com/image/fetch/$s_!D-I5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 848w, https://substackcdn.com/image/fetch/$s_!D-I5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 1272w, https://substackcdn.com/image/fetch/$s_!D-I5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D-I5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png" width="1202" height="556" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a970d267-649a-4239-bdcf-96d688831902_1202x556.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:556,&quot;width&quot;:1202,&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_!D-I5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 424w, https://substackcdn.com/image/fetch/$s_!D-I5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 848w, https://substackcdn.com/image/fetch/$s_!D-I5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 1272w, https://substackcdn.com/image/fetch/$s_!D-I5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa970d267-649a-4239-bdcf-96d688831902_1202x556.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The implication is important. AI scalability is rarely only about infrastructure. It is about controlling uncertainty and inference economics while maintaining an acceptable user experience.</span></p><h2><strong><span>Retrieval systems quietly determine AI quality</span></strong></h2><p><span>One of the biggest misconceptions in generative AI is that model quality alone determines user experience. In many enterprise AI systems, retrieval quality matters more than model size.</span></p><p><span>A smaller model paired with excellent retrieval often outperforms a larger model operating without contextual grounding. This explains why RAG architectures became dominant in enterprise AI design. Retrieval systems reduce hallucinations while allowing models to access current information dynamically.</span></p><p><span>However, retrieval pipelines introduce their own architectural complexity.</span></p><p><span>Embedding generation must remain consistent across ingestion and query pipelines. Index updates must avoid introducing stale or duplicated documents. Chunking strategies dramatically affect retrieval precision because semantic meaning can degrade when context boundaries are poorly defined.</span></p><p><span>I&#8217;ve seen systems where teams spent weeks tuning prompts while the actual problem was document chunking. Important context was being split across embeddings, which reduced retrieval accuracy before generation even started.</span></p><p><span>The architecture below represents a simplified production RAG flow.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AytE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AytE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 424w, https://substackcdn.com/image/fetch/$s_!AytE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 848w, https://substackcdn.com/image/fetch/$s_!AytE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 1272w, https://substackcdn.com/image/fetch/$s_!AytE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AytE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png" width="1072" height="626" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:626,&quot;width&quot;:1072,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AytE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 424w, https://substackcdn.com/image/fetch/$s_!AytE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 848w, https://substackcdn.com/image/fetch/$s_!AytE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 1272w, https://substackcdn.com/image/fetch/$s_!AytE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5429d13-af45-478b-b8c8-57596b395ea7_1072x626.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This is why modern AI System Design increasingly resembles search infrastructure engineering as much as machine learning engineering.</span></p><h2><strong><span>Observability matters more than model sophistication</span></strong></h2><p><span>One pattern appears repeatedly across scalable AI platforms: observability quality often predicts production stability better than model sophistication.</span></p><p><span>Teams obsess over benchmarks and model selection but fail to instrument inference pipelines properly. When failures happen, they cannot determine whether the root cause originated in retrieval, prompt orchestration, token limits, model latency, tool execution, or downstream APIs.</span></p><p><span>Traditional monitoring tools only partially solve this problem because AI systems require semantic observability in addition to infrastructure monitoring.</span></p><p><span>You need to track metrics such as:</span></p><ul><li><p><span>Retrieval relevance degradation</span></p></li><li><p><span>Prompt failure frequency</span></p></li><li><p><span>Hallucination rates</span></p></li><li><p><span>Token growth over time</span></p></li><li><p><span>Model drift</span></p></li><li><p><span>Embedding drift</span></p></li><li><p><span>Tool invocation success rates</span></p></li><li><p><span>User feedback correlation</span></p></li></ul><p><span>What makes AI observability difficult is that failures may not look like failures technically. A hallucinated answer still returns HTTP 200. Infrastructure dashboards remain green while user trust quietly deteriorates.</span></p><p><span>This is one reason responsible AI patterns are becoming increasingly important in system architecture discussions. Modern AI systems require monitoring strategies that account for safety, governance, explainability, and operational accountability.</span></p><p><span>The operational discipline resembles distributed systems engineering more than experimental ML research.</span></p><h2><strong><span>Why modular monoliths still make sense for AI platforms</span></strong></h2><p><span>There is enormous pressure in AI engineering to adopt distributed architectures immediately. Teams assume that because models are computationally expensive, the surrounding infrastructure must also be massively distributed from day one.</span></p><p><span>That assumption often creates unnecessary operational complexity.</span></p><p><span>A modular monolith remains a surprisingly effective architecture for many AI products, especially during early stages. Keeping orchestration, retrieval, caching, monitoring, and business logic inside a single deployable unit dramatically simplifies debugging and observability.</span></p><p><span>The same logic applies even more strongly to AI systems because debugging already becomes harder once probabilistic model behavior enters the stack. Fragmenting orchestration across multiple services too early amplifies that complexity further.</span></p><p><span>There are legitimate reasons to distribute AI systems eventually. GPU inference isolation, asynchronous training pipelines, retrieval scaling, and organizational ownership boundaries all justify service extraction later. However, distribution should follow measurable bottlenecks rather than theoretical scale assumptions.</span></p><p><span>One useful rule I&#8217;ve adopted is simple: if you cannot clearly identify which component is saturating, you probably are not ready to split the system yet.</span></p><h2><strong><span>AI inference is becoming a systems engineering problem</span></strong></h2><p><span>Many developers still think inference optimization means choosing faster models. Production environments reveal a different reality. Inference performance increasingly depends on systems engineering decisions rather than model architecture alone.</span></p><p><span>Batching strategy matters. Quantization matters. Memory allocation matters. GPU scheduling matters. Context window management matters. Even token streaming behavior affects perceived latency significantly.</span></p><p><span>A poorly optimized inference server can waste massive GPU capacity through inefficient scheduling. Meanwhile, optimized serving layers such as vLLM or Triton improve throughput dramatically through continuous batching and memory-aware scheduling.</span></p><p><span>This shift is changing AI engineering itself. The field increasingly overlaps with distributed systems, infrastructure engineering, and high-performance computing rather than purely model research.</span></p><p><span>That trend will likely continue as compound AI systems become more common.</span></p><h2><strong><span>The rise of compound AI systems</span></strong></h2><p><span>The most important shift happening in AI architecture right now is the movement from standalone models toward compound systems. Instead of asking a single model to solve everything directly, engineers are building coordinated systems composed of specialized components.</span></p><p><span>These systems may include:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RML4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RML4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 424w, https://substackcdn.com/image/fetch/$s_!RML4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 848w, https://substackcdn.com/image/fetch/$s_!RML4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 1272w, https://substackcdn.com/image/fetch/$s_!RML4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RML4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png" width="836" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:836,&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_!RML4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 424w, https://substackcdn.com/image/fetch/$s_!RML4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 848w, https://substackcdn.com/image/fetch/$s_!RML4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 1272w, https://substackcdn.com/image/fetch/$s_!RML4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb67f70df-142f-4679-b91b-5f0e00f28d17_836x588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This architectural direction matters because scaling intelligence increasingly depends on orchestration quality rather than raw parameter counts alone.</span></p><p><span>However, compound systems also create new operational risks. Recursive reasoning loops can increase inference costs unpredictably. Tool execution failures can propagate through agent chains. Latency becomes harder to control because response generation may require multiple inference passes and external service calls.</span></p><p><span>The systems become more capable, but they also become harder to reason about operationally.</span></p><h2><strong><span>What scalable AI systems actually optimize for</span></strong></h2><p><span>One of the biggest lessons I learned studying production AI systems is that mature architectures optimize for stability and iteration speed rather than theoretical intelligence.</span></p><p><span>The goal is not to build the most sophisticated architecture possible. The goal is to create a system that engineers can understand, debug, monitor, and evolve safely under production traffic.</span></p><p><span>That usually means prioritizing:</span></p><ul><li><p><span>Observability before orchestration complexity</span></p></li><li><p><span>Retrieval quality before larger models</span></p></li><li><p><span>Simpler deployment pipelines before distributed agents</span></p></li><li><p><span>Clear ownership boundaries before microservices</span></p></li><li><p><span>Controlled inference economics before maximum capability</span></p></li></ul><p><span>This pattern appears repeatedly across real production systems because operational complexity compounds faster than most teams expect.</span></p><p><span>The engineering challenge is no longer simply &#8220;how do we deploy AI?&#8221; The challenge is designing systems that remain measurable and reliable even when the underlying intelligence layer behaves probabilistically.</span></p><p><span>That changes the discipline fundamentally.</span></p><h2><strong>Free resources worth bookmarking</strong></h2><p>Keep building your knowledge with a few trusted free resources. These are useful for reviewing concepts, exploring real-world architectures, and strengthening your interview preparation.</p><ul><li><p><strong><a href="https://engineeringenablement.substack.com/p/system-design-primer-learning-to">System Design Primer</a>:</strong> Refresh core distributed systems concepts and common interview fundamentals.</p></li><li><p><strong><a href="https://dev.to/fahimulhaq/complete-guide-to-system-design-oc7">Complete Guide to System Design</a>:</strong> Follow a structured roadmap from beginner to advanced topics.</p></li><li><p><strong><a href="https://www.systemdesignhandbook.com/guides/system-design/">System Design Handbook</a>:</strong> Learn architecture patterns, scalability, and modern design principles. Prepare specifically for System Design interviews with interview-focused guides and examples</p></li></ul><h2><strong><span>The future of AI System Design</span></strong></h2><p><span>AI System Design is evolving into its own engineering specialization because traditional backend architecture patterns no longer fully address the realities of probabilistic systems.</span></p><p><span>The next generation of AI platforms will likely focus heavily on orchestration efficiency, inference optimization, observability, retrieval reliability, and governance rather than only on larger models. We are already seeing this shift in research discussing AI design patterns, responsible AI architecture, and compound AI systems.</span></p><p><span>What makes this transition fascinating is that AI systems increasingly resemble distributed socio-technical systems rather than isolated software products. They coordinate models, infrastructure, human feedback, retrieval pipelines, business rules, and external tools simultaneously.</span></p><p><span>That means successful AI engineering requires systems thinking more than model obsession.</span></p><p><span>The engineers who build durable AI platforms over the next few years probably will not be the ones chasing every new model release immediately. They will be the ones who understand operational tradeoffs deeply enough to design systems that remain stable while everything around them changes.</span></p><p><span>And honestly, that is what makes AI System Design interesting in the first place.</span></p>]]></content:encoded></item><item><title><![CDATA[If I were learning JavaScript again, I'd start with this AI course builder]]></title><description><![CDATA[Why personalized AI learning paths may solve the biggest problem with JavaScript courses]]></description><link>https://engineeringenablement.substack.com/p/if-i-were-learning-javascript-again</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/if-i-were-learning-javascript-again</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Tue, 04 Aug 2026 06:09:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j1wD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>When I learned JavaScript, the biggest challenge wasn&#8217;t finding resources. There were already countless books, video courses, documentation sites, YouTube tutorials, coding exercises, and blog posts explaining every concept imaginable.</span></p><p><span>The real problem was deciding what to learn next, what could safely be skipped, and how all those individual topics fit together into a coherent learning journey. Looking back, I don&#8217;t think I needed another JavaScript course.</span></p><p><span>I needed a course that understood where I was getting stuck. That&#8217;s why, if I were starting over today, I&#8217;d begin with an AI course builder instead of another traditional curriculum.</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://fenzo.ai/?ref=Ype6" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I34m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 424w, https://substackcdn.com/image/fetch/$s_!I34m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 848w, https://substackcdn.com/image/fetch/$s_!I34m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 1272w, https://substackcdn.com/image/fetch/$s_!I34m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I34m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png" width="1456" height="269" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:269,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50498,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://fenzo.ai/?ref=Ype6&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://engineeringenablement.substack.com/i/209739970?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.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_!I34m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 424w, https://substackcdn.com/image/fetch/$s_!I34m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 848w, https://substackcdn.com/image/fetch/$s_!I34m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 1272w, https://substackcdn.com/image/fetch/$s_!I34m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe792f9b-e3d8-410a-8816-892aa5da0fe4_1506x278.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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><h2><strong><span>Learning JavaScript has never been easier&#8211;or more overwhelming</span></strong></h2><p><a href="https://www.educative.io/courses/complete-guide-to-modern-javascript?aff=xDPD"><span>JavaScript</span></a><span> is one of the most accessible programming languages in the world. Within minutes, you can write code directly in your browser, build simple interactive pages, and see immediate results. That low barrier to entry is one of the reasons millions of developers choose JavaScript as their first programming language.</span></p><p><span>Ironically, that same popularity creates an entirely different problem. Search for &#8220;learn JavaScript,&#8221; and you&#8217;re immediately presented with hundreds of courses, thousands of tutorials, and years&#8217; worth of blog posts, videos, coding challenges, and documentation. None of those resources are inherently bad, but together they create an overwhelming amount of choice.</span></p><p><span>Most beginners don&#8217;t quit because JavaScript is impossible to learn. They quit because they never feel confident they&#8217;re learning the right thing at the right time.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j1wD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j1wD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!j1wD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!j1wD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!j1wD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j1wD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1315739,&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://engineeringenablement.substack.com/i/209739970?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.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_!j1wD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!j1wD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!j1wD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!j1wD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6f2c69-235f-4028-b1bd-f8b009974473_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong><span>Every learner starts somewhere different</span></strong></h2><p><span>One thing traditional online courses struggle with is that they have to teach thousands of students using a single curriculum.</span></p><p><span>Some learners already understand programming fundamentals but have never written JavaScript before. Others know </span><a href="https://www.educative.io/courses/learn-html-css-javascript-from-scratch?aff=xDPD"><span>HTML and CSS</span></a><span> but struggle with asynchronous programming. Some are comfortable with functions but get completely lost once closures, prototypes, or promises enter the conversation.</span></p><p><span>Yet nearly every course begins with the same sequence of lessons.</span></p><p><span>That approach makes perfect sense when you&#8217;re creating educational content for a broad audience, but it also means the course spends time teaching concepts you may already know while moving too quickly through the topics you actually find difficult.</span></p><p><span>If I were learning JavaScript again, I&#8217;d want something that adapts to me rather than expecting me to adapt to it.</span></p><h2><strong><span>The part I wish someone had personalized</span></strong></h2><p><span>Looking back, my learning journey wasn&#8217;t completely inefficient.</span></p><ul><li><p><span>I eventually understood variables.</span></p></li><li><p><span>Functions made sense.</span></p></li><li><p><span>Objects became familiar.</span></p></li><li><p><span>DOM manipulation stopped feeling mysterious.</span></p></li></ul><p><span>The problem was the path between those milestones.</span></p><p><span>I&#8217;d spend hours watching lessons on topics I already understood while rushing through concepts that deserved much slower explanations. Sometimes I&#8217;d jump into React tutorials before I truly understood modern JavaScript itself. Other times I&#8217;d spend an entire weekend learning something I wouldn&#8217;t use again for months.</span></p><p><span>A personalized curriculum could have eliminated much of that unnecessary detour.</span></p><h2><strong><span>Why AI course builders feel different</span></strong></h2><p><span>What makes AI course builders interesting isn&#8217;t simply that artificial intelligence writes lessons.</span></p><p><span>It&#8217;s that they can begin with the learner rather than with a predefined table of contents.</span></p><p><span>Instead of selecting &#8220;JavaScript 101&#8221; and following the same sequence as everyone else, you can describe what you&#8217;re trying to accomplish, what experience you already have, and where you struggle. From there, the platform can generate a learning path designed around those inputs rather than assuming every learner starts from exactly the same place.</span></p><p><span>That shift may sound small, but educationally it&#8217;s significant.</span></p><p><span>Learning becomes goal-driven instead of curriculum-driven.</span></p><h2><strong><span>Fenzo.ai is exploring that idea</span></strong></h2><p><span>One platform that caught my attention is </span><a href="https://fenzo.ai/?ref=Ype6"><span>Fenzo.ai</span></a><span>, an AI-powered course builder designed around personalized learning rather than static online courses.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!morN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!morN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 424w, https://substackcdn.com/image/fetch/$s_!morN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 848w, https://substackcdn.com/image/fetch/$s_!morN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 1272w, https://substackcdn.com/image/fetch/$s_!morN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!morN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png" width="1456" height="747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:747,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:630073,&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://engineeringenablement.substack.com/i/209739970?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.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_!morN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 424w, https://substackcdn.com/image/fetch/$s_!morN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 848w, https://substackcdn.com/image/fetch/$s_!morN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 1272w, https://substackcdn.com/image/fetch/$s_!morN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ecc4d8f-5836-4c8f-b223-f69886dc6d8f_1774x910.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><span>Rather than asking you to browse a marketplace containing thousands of unrelated courses, the platform focuses on generating a learning experience based on your own objective. If your goal is becoming job-ready for frontend development, reviewing JavaScript fundamentals before an interview, or strengthening weaker topics like asynchronous programming or closures, the generated course can be tailored around those needs instead of following a generic outline.</span></p><p><span>That idea feels much closer to working with a tutor than purchasing another online course.</span></p><h2><strong><span>The features that would have helped me most</span></strong></h2><p><span>If I were starting over today, there are several capabilities I&#8217;d value more than simply having another collection of video lectures.</span></p><p><span>What would make the biggest difference is a learning experience that can:</span></p><ul><li><p><span>Build a JavaScript course around my current skill level.</span></p></li><li><p><span>Spend more time on concepts I&#8217;m struggling with.</span></p></li><li><p><span>Reduce repetition on topics I already understand.</span></p></li><li><p><span>Include interactive exercises instead of passive reading.</span></p></li><li><p><span>Reinforce previous lessons through quizzes and spaced review.</span></p></li><li><p><span>Adjust the learning path as my understanding improves.</span></p></li></ul><p><span>None of those features change what JavaScript is.</span></p><p><span>They change how efficiently you learn it.</span></p><p><span>That&#8217;s an important distinction.</span></p><h2><strong><span>The goal isn&#8217;t replacing great courses</span></strong></h2><p><span>Traditional JavaScript courses still have enormous value.</span></p><p><span>Many outstanding instructors have spent years refining their explanations, creating practical projects, and helping millions of developers enter the industry. Those resources aren&#8217;t suddenly obsolete because AI exists.</span></p><p><span>Where I think AI course builders become interesting is in everything that happens between those resources.</span></p><p><span>Instead of asking every learner to follow an identical roadmap, they have the potential to create a roadmap that&#8217;s unique to each individual. One student may need three additional lessons on closures before moving forward, while another is ready to jump directly into asynchronous programming and API design.</span></p><p><span>That kind of flexibility simply isn&#8217;t practical inside a traditional course.</span></p><h2><strong><span>Learning should adapt to the student</span></strong></h2><p><span>One realization has stayed with me over the years. We spend enormous effort personalizing almost every digital experience we use.</span></p><ul><li><p><span>Music streaming platforms recommend playlists.</span></p></li><li><p><span>Video platforms recommend content.</span></p></li><li><p><span>Maps recommend routes.</span></p></li><li><p><span>Shopping platforms recommend products.</span></p></li></ul><p><span>Education, however, often still expects every learner to follow the exact same sequence regardless of background, experience, or learning goals.</span></p><p><span>That feels increasingly outdated.</span></p><p><span>If AI can meaningfully personalize education without sacrificing quality, it has the potential to remove one of the biggest sources of frustration that beginners face.</span></p><h2><strong><span>If I were starting today</span></strong></h2><p><span>If I were beginning my JavaScript journey again today, I wouldn&#8217;t abandon documentation, books, or established courses.</span></p><ul><li><p><span>I&#8217;d still read MDN.</span></p></li><li><p><span>I&#8217;d still build projects.</span></p></li><li><p><span>I&#8217;d still spend time debugging code.</span></p></li></ul><p><span>What I&#8217;d change is the starting point.</span></p><p><span>Instead of searching for the &#8220;best JavaScript course,&#8221; I&#8217;d start by generating a personalized learning path that reflects what I already know, what I ultimately want to build, and which concepts deserve the most attention. Platforms like Fenzo.ai suggest a future where learning begins with the student rather than with a fixed syllabus, and that&#8217;s a direction I find genuinely exciting.</span></p><h2><strong><span>Final thoughts</span></strong></h2><p><span>JavaScript hasn&#8217;t become easier over the years because the language itself changed dramatically. It has become easier because the ecosystem surrounding it continues to improve. Better documentation, stronger developer communities, interactive coding environments, and now AI-assisted learning all reduce the friction that once made programming feel intimidating.</span></p><p><span>If I were learning JavaScript again, I&#8217;d want every advantage available. That wouldn&#8217;t mean avoiding the fundamentals or looking for shortcuts. It would mean using tools that help me spend less time navigating thousands of disconnected resources and more time actually writing code. An AI course builder like Fenzo.ai represents one possible step toward that future, not because it replaces great teachers, but because it has the potential to make great teaching far more personal.</span></p>]]></content:encoded></item><item><title><![CDATA[How I built a retail analytics project with Fenzo.ai]]></title><description><![CDATA[Turning one retail dataset into a credible SQL portfolio project]]></description><link>https://engineeringenablement.substack.com/p/how-i-built-a-retail-analytics-project</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/how-i-built-a-retail-analytics-project</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Fri, 31 Jul 2026 10:21:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xDMr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>There is a common mistake people make when learning SQL: they spend too much time collecting individual queries and not enough time building something that feels like a complete investigation. In real engineering and analytics work, someone cares about a dataset that is usually less clean, less obvious, and less convenient than the examples found in tutorials.</span></p><p><span>That is why I wanted to experiment with building SQL projects with generative AI rather than simply asking an AI assistant to explain joins or generate practice questions. I used </span><a href="https://fenzo.ai/?ref=Ype6"><span>Fenzo.ai</span></a><span> to create a structured retail analytics course around one complete portfolio project, with every lesson contributing to the same final outcome.</span></p><p><span>The project focused on three business questions:</span></p><ul><li><p><span>How does revenue change from month to month?</span></p></li><li><p><span>Which products generate the most revenue?</span></p></li><li><p><span>Which customers place repeat orders?</span></p></li></ul><p><span>These questions are intentionally straightforward, but together they demonstrate schema design, primary and foreign keys, data validation, joins, filtering, grouping, aggregation, debugging, and analytical communication.</span></p><p><span>What made the experience useful was not that the AI wrote SQL for me. It was that the course organized the project around a coherent sequence of decisions.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://fenzo.ai/?ref=Ype6" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xDMr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 424w, https://substackcdn.com/image/fetch/$s_!xDMr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 848w, https://substackcdn.com/image/fetch/$s_!xDMr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 1272w, https://substackcdn.com/image/fetch/$s_!xDMr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xDMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png" width="1456" height="756" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:756,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://fenzo.ai/?ref=Ype6&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_!xDMr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 424w, https://substackcdn.com/image/fetch/$s_!xDMr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 848w, https://substackcdn.com/image/fetch/$s_!xDMr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 1272w, https://substackcdn.com/image/fetch/$s_!xDMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9029aff5-995a-440b-bd19-2b7a9b6db588_1776x922.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Start With Questions, Not Tables</span></strong></h2><p><span>When people begin a SQL project, they often start by creating tables. They decide they need customers, products, orders, and payments, then keep adding columns until the schema looks realistic.</span></p><p><span>I prefer starting with the questions.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mi_L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mi_L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 424w, https://substackcdn.com/image/fetch/$s_!mi_L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 848w, https://substackcdn.com/image/fetch/$s_!mi_L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!mi_L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mi_L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png" width="1456" height="902" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:902,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mi_L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 424w, https://substackcdn.com/image/fetch/$s_!mi_L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 848w, https://substackcdn.com/image/fetch/$s_!mi_L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!mi_L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b2b64c-33cb-45d0-ac12-ab8af096ff99_1614x1000.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>A database becomes useful when it supports specific access patterns, which are concrete descriptions of how the data must be read. Once the business questions are fixed, those reads tell you which entities, relationships, and columns actually need to exist.</span></p><p><span>For this project, the three questions translated into three clear patterns.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v9R-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v9R-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 424w, https://substackcdn.com/image/fetch/$s_!v9R-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 848w, https://substackcdn.com/image/fetch/$s_!v9R-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 1272w, https://substackcdn.com/image/fetch/$s_!v9R-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v9R-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png" width="1194" height="674" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:674,&quot;width&quot;:1194,&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_!v9R-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 424w, https://substackcdn.com/image/fetch/$s_!v9R-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 848w, https://substackcdn.com/image/fetch/$s_!v9R-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 1272w, https://substackcdn.com/image/fetch/$s_!v9R-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38bde2c7-5658-47a8-a397-03a43eac2dc0_1194x674.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This was one of the strongest parts of building SQL projects with generative AI. The course did not begin with syntax. It began with the investigation and worked backward into the data model.</span></p><p><span>The order timestamp existed because monthly revenue needed it. The order item table existed because product revenue required quantity and purchase-time price. The customer relationship existed because repeat behavior had to be calculated at the customer grain.</span></p><p><span>Nothing was added simply because an e-commerce database was expected to have it.</span></p><h2><strong><span>Choose a Dataset That Feels Real</span></strong></h2><p><span>A portfolio dataset needs to be large enough for trends and rankings to behave realistically. If the database contains only a hundred rows, the monthly revenue chart will look arbitrary, and the top-products query may be dominated by a few accidental purchases.</span></p><p><span>At the same time, starting with millions of rows can make a beginner project unnecessarily difficult. Slow feedback makes debugging harder because it becomes difficult to connect a query change with the resulting output.</span></p><p><span>The course recommended a practical middle ground: thousands of orders and several times as many order items. That is large enough to make joins, grouping, rankings, and time-based analysis meaningful while remaining manageable enough to inspect.</span></p><p><span>The dataset did not need to be flawless. It only needed to be clean enough for the analysis to remain trustworthy.</span></p><p><span>That meant every required key had to be present, timestamps could not be missing, quantities and prices had to be numeric, and product identifiers had to remain consistent. Any field directly involved in revenue calculations had to be protected from null or invalid values.</span></p><h2><strong><span>Design Entities From the Read Paths</span></strong></h2><p><span>Once the access patterns were clear, the course moved into entity design.</span></p><p><span>The minimum useful schema included four entities:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ycTk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ycTk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 424w, https://substackcdn.com/image/fetch/$s_!ycTk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 848w, https://substackcdn.com/image/fetch/$s_!ycTk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 1272w, https://substackcdn.com/image/fetch/$s_!ycTk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ycTk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png" width="950" height="826" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:826,&quot;width&quot;:950,&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_!ycTk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 424w, https://substackcdn.com/image/fetch/$s_!ycTk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 848w, https://substackcdn.com/image/fetch/$s_!ycTk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 1272w, https://substackcdn.com/image/fetch/$s_!ycTk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0f54d3-8314-404d-8143-27d6256f05e1_950x826.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The relationships followed naturally from the questions. One customer can place many orders, one order can contain many items, and many items can point to the same product.</span></p><p><span>That creates the chain:</span></p><p><span>customers &#8594; orders &#8594; order_items &#8594; products</span></p><p><span>This structure also introduces one of the most important ideas in SQL analytics: grain.</span></p><p><span>One order can have several line items, so joining orders to order_items expands the order into multiple rows. That expansion is expected, but it affects every count and sum that follows. If the analysis needs an order count, COUNT(*) after the join will count line items rather than orders. The correct expression is usually COUNT(DISTINCT order_id).</span></p><p><span>Understanding grain is more useful than memorizing another join example because it explains why apparently valid queries often return the wrong totals.</span></p><h2><strong><span>Use Constraints to Protect the Analysis</span></strong></h2><p><span>Keys make joins possible, but constraints make the results credible.</span></p><p><span>The course treated constraints as part of the analytical design rather than a separate database administration topic. That framing made sense because bad data eventually appears as incorrect revenue, missing months, duplicate products, or inflated customer counts.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V2O7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V2O7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 424w, https://substackcdn.com/image/fetch/$s_!V2O7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 848w, https://substackcdn.com/image/fetch/$s_!V2O7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 1272w, https://substackcdn.com/image/fetch/$s_!V2O7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V2O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png" width="1456" height="1178" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1178,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!V2O7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 424w, https://substackcdn.com/image/fetch/$s_!V2O7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 848w, https://substackcdn.com/image/fetch/$s_!V2O7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 1272w, https://substackcdn.com/image/fetch/$s_!V2O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3d7393-cdc1-4654-b32f-92e9a8d31ca5_1552x1256.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Several constraints directly supported the project:</span></p><ul><li><p><span>NOT NULL on order timestamps ensured every order could be assigned to a reporting period.</span></p></li><li><p><span>NOT NULL on quantity and price prevented revenue from disappearing inside a SUM.</span></p></li><li><p><span>Positive quantity checks prevented invalid sales lines.</span></p></li><li><p><span>Non-negative price checks blocked impossible revenue values.</span></p></li><li><p><span>UNIQUE on product SKU protected product identity.</span></p></li><li><p><span>Foreign keys prevented orphaned orders and line items.</span></p></li></ul><p><span>This is an important lesson when building SQL projects with generative AI. The AI should not merely generate queries that work against perfect data. A strong project should show how the schema itself prevents predictable analytical failures.</span></p><h2><strong><span>Implement the PostgreSQL Schema</span></strong></h2><p><span>The next step was converting the design into PostgreSQL DDL.</span></p><p><span>The choice of data types mattered because those types had to support later calculations. Quantity was stored as an integer, while unit price used numeric(10,2) so financial aggregation remained predictable. The order timestamp used a PostgreSQL timestamp type so it could be grouped with functions such as date_trunc().</span></p><p><span>A simplified version of the schema looked like this:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;a67d1437-9f4d-4311-935c-5cacb7eb6af7&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">CREATE TABLE customers (
    customer_id BIGSERIAL PRIMARY KEY,
    email TEXT NOT NULL UNIQUE,
    full_name TEXT
);

CREATE TABLE products (
    product_id BIGSERIAL PRIMARY KEY,
    sku TEXT NOT NULL UNIQUE,
    product_name TEXT NOT NULL
);

CREATE TABLE orders (
    order_id BIGSERIAL PRIMARY KEY,
    customer_id BIGINT NOT NULL REFERENCES customers(customer_id),
    ordered_at TIMESTAMPTZ NOT NULL,
    status TEXT NOT NULL
);

CREATE TABLE order_items (
    order_item_id BIGSERIAL PRIMARY KEY,
    order_id BIGINT NOT NULL REFERENCES orders(order_id),
    product_id BIGINT NOT NULL REFERENCES products(product_id),
    quantity INTEGER NOT NULL CHECK (quantity &gt; 0),
    unit_price NUMERIC(10,2) NOT NULL CHECK (unit_price &gt;= 0)
);</code></pre></div><p><span>The important part was not memorizing the DDL. It was understanding how every table and constraint connected back to the business questions.</span></p><h2><strong><span>Validate Before You Analyze</span></strong></h2><p><span>Before writing the analysis queries, the course introduced a validation layer.</span></p><p><span>This is where many portfolio projects become weaker than they need to be. People load a CSV, run a few queries, and assume that reasonable-looking results must be correct.</span></p><p><span>A better project treats validation queries like unit tests for the database.</span></p><p><span>The course recommended checking:</span></p><ul><li><p><span>Row counts for every table</span></p></li><li><p><span>Missing foreign-key relationships</span></p></li><li><p><span>Duplicate SKUs</span></p></li><li><p><span>Null timestamps</span></p></li><li><p><span>Negative prices</span></p></li><li><p><span>Quantities less than or equal to zero</span></p></li><li><p><span>Minimum and maximum order dates</span></p></li><li><p><span>Total revenue reconstructed from order items</span></p></li></ul><p><span>A compact profile query captured several baseline values:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;3cbcde48-a898-412a-92dd-653910ce653f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">SELECT
  (SELECT COUNT(*) FROM customers) AS customers,
  (SELECT COUNT(*) FROM products) AS products,
  (SELECT COUNT(*) FROM orders) AS orders,
  (SELECT COUNT(*) FROM order_items) AS order_items,
  (SELECT MIN(ordered_at) FROM orders) AS min_ordered_at,
  (SELECT MAX(ordered_at) FROM orders) AS max_ordered_at,
  (SELECT SUM(quantity * unit_price) FROM order_items) AS total_revenue;</code></pre></div><p><span>These values became sanity anchors. If a later reload caused the order item count to fall or shifted the minimum timestamp unexpectedly, I could investigate before trusting any new metric.</span></p><h2><strong><span>Query One: Monthly Revenue</span></strong></h2><p><span>The first deliverable was a monthly revenue trend.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;dockerfile&quot;,&quot;nodeId&quot;:&quot;d24fb562-386e-491f-a08f-057eaa638c13&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-dockerfile">SELECT
  date_trunc('month', o.ordered_at)::date AS month,
  SUM(oi.quantity * oi.unit_price) AS revenue,
  COUNT(DISTINCT o.order_id) AS order_count
FROM orders o
JOIN order_items oi
  ON oi.order_id = o.order_id
WHERE o.status = 'paid'
GROUP BY 1
ORDER BY 1;</code></pre></div><p><span>This query demonstrates the central pattern of the project: join to the correct grain, filter the contributing rows, then aggregate.</span></p><p><span>The join expands each order into its line items. The WHERE clause decides which rows contribute to revenue. The GROUP BY defines the final grain as one row per month, while the distinct count prevents orders from being counted once per item.</span></p><p><span>The query also forced several reporting decisions. Should cancelled orders be included? Should revenue represent gross recorded sales or paid sales? Which timezone defines the month boundary? Are the first and final months partial?</span></p><p><span>Those are not syntax questions. They are business definitions that belong in the README.</span></p><h2><strong><span>Query Two: Top Products</span></strong></h2><p><span>The second analysis ranked products by revenue.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;dockerfile&quot;,&quot;nodeId&quot;:&quot;6f6b08ef-8db9-41da-8832-1bba7e093dcf&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-dockerfile">SELECT
  p.product_id,
  p.product_name,
  SUM(oi.quantity * oi.unit_price) AS revenue,
  SUM(oi.quantity) AS units_sold
FROM order_items oi
JOIN products p
  ON p.product_id = oi.product_id
GROUP BY
  p.product_id,
  p.product_name
ORDER BY
  revenue DESC,
  p.product_id ASC
LIMIT 10;</code></pre></div><p><span>The secondary sort on product_id makes tied results deterministic, which means the same dataset produces the same ranking every time.</span></p><p><span>This query also introduced an important reconciliation test. If the LIMIT is removed and revenue is summed across all products using the same payment and date filters, the total should match the monthly revenue analysis.</span></p><p><span>If two queries claim to measure the same revenue under the same conditions, their totals should agree. When they do not, the join logic or filters need to be investigated.</span></p><h2><strong><span>Query Three: Repeat Customers</span></strong></h2><p><span>The repeat-customer analysis required even more care with grain.</span></p><p><span>A repeat customer was defined as someone with at least two paid orders inside the analysis window. Because the metric was about orders, the query had to aggregate orders at the customer level before introducing item-level spend.</span></p><p><span>Joining order_items too early would duplicate each order across its line items and make a plain count meaningless.</span></p><p><span>The final output included:</span></p><ul><li><p><span>Customer ID</span></p></li><li><p><span>First paid order date</span></p></li><li><p><span>Last paid order date</span></p></li><li><p><span>Paid order count</span></p></li><li><p><span>Total spend</span></p></li></ul><p><span>That table could support a simple repeat-customer list or a more advanced cohort analysis grouped by first purchase month.</span></p><p><span>The distinction is useful because a repeat flag answers who purchased again, while a cohort view answers when customers returned.</span></p><h2><strong><span>Debug Wrong Totals by Counting Rows</span></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_!AIVN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AIVN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 424w, https://substackcdn.com/image/fetch/$s_!AIVN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 848w, https://substackcdn.com/image/fetch/$s_!AIVN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 1272w, https://substackcdn.com/image/fetch/$s_!AIVN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AIVN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png" width="1456" height="1176" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1176,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AIVN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 424w, https://substackcdn.com/image/fetch/$s_!AIVN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 848w, https://substackcdn.com/image/fetch/$s_!AIVN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 1272w, https://substackcdn.com/image/fetch/$s_!AIVN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa17329-c644-4ff9-bf9d-b4b3e54e494b_1568x1266.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The debugging lesson may have been the most valuable part of the project.</span></p><p><span>A SQL query can return a clean, plausible result and still be wrong. The most dangerous mistakes often come from joins that multiply rows before an aggregate runs.</span></p><p><span>When revenue is too high, the first step should not be changing the SUM. It should be inspecting row counts.</span></p><p><span>The method was simple:</span></p><ol><li><p><span>Count rows in the base table.</span></p></li><li><p><span>Add one join and count again.</span></p></li><li><p><span>Continue adding joins one at a time.</span></p></li><li><p><span>Identify where rows increase unexpectedly.</span></p></li><li><p><span>Fix the join or pre-aggregate to the correct grain.</span></p></li><li><p><span>Reconcile the new total against the baseline.</span></p></li></ol><p><span>The recurring causes were missing join predicates, joins on non-unique columns, and using COUNT(*) where COUNT(DISTINCT ...) was required.</span></p><p><span>That debugging process showed not only how to produce a metric, but also how to prove that it was trustworthy.</span></p><h2><strong><span>Package the Project as a Story</span></strong></h2><p><span>The final step was packaging the work for a portfolio.</span></p><p><span>A strong README should begin with the business questions rather than a list of technologies. It should then explain the schema, analytical definitions, query outputs, assumptions, validation checks, and limitations.</span></p><p><span>The project used a simple structure:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;b1f1fdc0-6546-45d6-bced-604531e9ca80&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">schema/
  create_tables.sql

data/
  README.md

queries/
  monthly_revenue.sql
  top_products.sql
  repeat_customers.sql

analysis/
  README.md</code></pre></div><p><span>The analysis README documented the three questions, the definition of revenue, the definition of a repeat customer, representative outputs, known caveats, and reconciliation checks.</span></p><p><span>That packaging transformed the work from a collection of SQL files into a reproducible analytical investigation.</span></p><h2><strong><span>Final Thoughts</span></strong></h2><p><span>My main takeaway is that building SQL projects with generative AI works best when AI is used to structure the learning process, not bypass it.</span></p><p><a href="https://fenzo.ai/?ref=Ype6"><span>Fenzo.ai</span></a><span> helped turn a broad goal into a sequence of connected decisions. The project moved from business questions to access patterns, from access patterns to entities, from entities to constraints, and from validated data to defensible analysis.</span></p><p><span>The SQL itself was only one part of the experience. The larger lesson was how to think about grain, how to protect metrics from bad data, how to detect row multiplication, and how to explain conclusions without claiming more than the output supports.</span></p><p><span>Generative AI can produce a query in seconds, but producing SQL quickly is not the same as building a strong project. A credible portfolio project needs a coherent question, a schema designed around real reads, validation checks, reconciled totals, and a README that explains the reasoning behind the work.</span></p><p><span>For anyone interested in building SQL projects with generative AI, I would start with the same principle: do not ask the AI for a folder of queries. Ask it to help you build one complete investigation from the question all the way to the documented result.</span></p>]]></content:encoded></item><item><title><![CDATA[Google Search System Design: Why information retrieval is really a distributed systems problem]]></title><description><![CDATA[How indexing, ranking, crawling, and distributed infrastructure shape Google Search design]]></description><link>https://engineeringenablement.substack.com/p/google-search-system-design-why-information</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/google-search-system-design-why-information</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Thu, 30 Jul 2026 06:43:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QRBk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>The first time I seriously studied Google Search as a System Design problem, I made the same mistake most engineers make initially. I thought the hard part was the search itself. I assumed the challenge mainly involved indexing webpages and returning results quickly.</span></p><p><span>Then I started digging into how large-scale search systems actually behave operationally, and the architecture became far more interesting. Crawlers continuously traverse an internet that changes every second. Indexes must stay fresh while processing enormous document volumes. Ranking systems balance relevance, authority, personalization, and latency simultaneously.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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><span>Queries arrive globally with wildly uneven traffic patterns, and small ranking delays immediately affect user behavior. Once you start thinking about Google Search as a continuously evolving distributed coordination system rather than a search box, the entire design discussion changes completely.</span></p><h2><strong><span>Why Google Search is one of the hardest System Design interview problems</span></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_!QRBk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QRBk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 424w, https://substackcdn.com/image/fetch/$s_!QRBk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 848w, https://substackcdn.com/image/fetch/$s_!QRBk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 1272w, https://substackcdn.com/image/fetch/$s_!QRBk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QRBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png" width="1456" height="841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:841,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QRBk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 424w, https://substackcdn.com/image/fetch/$s_!QRBk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 848w, https://substackcdn.com/image/fetch/$s_!QRBk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 1272w, https://substackcdn.com/image/fetch/$s_!QRBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a8e07a5-25ca-4b2a-be41-55ab69034526_1536x887.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>A lot of </span><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>System Design interview</span></a><span> questions focus heavily on scalability, but Google Search introduces something more difficult than scale alone.</span></p><p><span>It combines enormous scale with strict latency expectations and constantly changing data.</span></p><p><span>That combination matters because the system cannot simply optimize for throughput in isolation. Search quality deteriorates quickly if indexing freshness falls behind. Query latency matters because users expect results almost instantly. Ranking relevance matters because weak search quality destroys trust immediately.</span></p><p><span>This means the architecture operates under continuous pressure from multiple competing constraints simultaneously.</span></p><p><span>The internet itself also behaves unpredictably.</span></p><p><span>Webpages disappear. New pages appear constantly. Content changes continuously. Spam attempts evolve aggressively. Certain search queries spike dramatically because of breaking news or global events. Popularity signals shift dynamically.</span></p><p><span>The system becomes much more than a database retrieval problem.</span></p><p><span>It becomes a real-time information processing platform operating against a constantly mutating global dataset.</span></p><p><span>That operational complexity is what makes Google Search such an important </span><a href="https://www.educative.io/courses/grokking-system-design-fundamentals?aff=xDPD"><span>System Design</span></a><span> problem.</span></p><h2><strong><span>The architecture starts with crawling, not searching</span></strong></h2><p><span>One mistake candidates frequently make during </span><a href="https://www.educative.io/blog/google-system-design-interview-questions?aff=xDPD"><span>Google Search interview question</span></a><span> discussions is starting directly with query processing and ranking systems.</span></p><p><span>In reality, the architecture begins much earlier with web crawling.</span></p><p><span>Before the search engine can answer queries, it must continuously discover and retrieve webpages from across the internet. That sounds straightforward initially until you realize the scale involved.</span></p><p><span>Billions of pages exist, and many change continuously.</span></p><p><span>The crawler infrastructure becomes a large-scale distributed scheduling and retrieval system.</span></p><p><span>A simplified architecture often contains the following major components:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pb5i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pb5i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 424w, https://substackcdn.com/image/fetch/$s_!pb5i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 848w, https://substackcdn.com/image/fetch/$s_!pb5i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 1272w, https://substackcdn.com/image/fetch/$s_!pb5i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pb5i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png" width="836" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:836,&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_!pb5i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 424w, https://substackcdn.com/image/fetch/$s_!pb5i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 848w, https://substackcdn.com/image/fetch/$s_!pb5i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 1272w, https://substackcdn.com/image/fetch/$s_!pb5i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa106151c-413b-4ba2-ba7f-f06ebcc398e5_836x588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The operational challenge is that crawling itself becomes resource-constrained quickly.</span></p><p><span>The system cannot continuously crawl the entire internet at maximum frequency. Bandwidth, politeness limits, duplicate detection, prioritization logic, and content freshness all influence crawl strategy continuously.</span></p><p><span>This means crawl scheduling becomes one of the most important parts of the architecture.</span></p><h2><strong><span>Indexing becomes a massive distributed data processing system</span></strong></h2><p><span>Once pages are crawled, the architecture faces another difficult challenge: transforming raw documents into searchable structures efficiently.</span></p><p><span>The indexing pipeline is where Google Search starts behaving like a large-scale distributed processing platform.</span></p><p><span>Raw HTML content must be parsed, normalized, tokenized, deduplicated, and structured into inverted indexes optimized for fast retrieval.</span></p><p><span>At a small scale, indexing sounds conceptually simple. At the internet scale, it becomes operationally enormous.</span></p><p><span>Suppose billions of documents are continuously updated while millions of new pages arrive daily. The indexing system must process all this data while maintaining freshness and supporting low-latency query retrieval simultaneously.</span></p><p><span>This is why indexing architectures often evolve into distributed pipelines.</span></p><p><span>Documents move through multiple stages:</span></p><ul><li><p><span>HTML parsing</span></p></li><li><p><span>Language detection</span></p></li><li><p><span>Spam analysis</span></p></li><li><p><span>Link extraction</span></p></li><li><p><span>Content normalization</span></p></li><li><p><span>Term indexing</span></p></li><li><p><span>Ranking signal computation</span></p></li></ul><p><span>The operational challenge becomes synchronization.</span></p><p><span>If indexing pipelines lag significantly, search freshness deteriorates. Users begin receiving outdated results even though crawlers successfully retrieved updated content earlier.</span></p><p><span>This means indexing latency directly affects user experience.</span></p><p><span>One thing strong candidates usually recognize is that indexing systems are fundamentally streaming systems rather than static batch-processing pipelines.</span></p><h2><strong><span>Ranking is where the real complexity begins</span></strong></h2><p><span>Most engineers initially think search quality comes mainly from keyword matching.</span></p><p><span>In reality, modern search systems rely heavily on ranking infrastructure because raw retrieval alone produces far too many potentially relevant results.</span></p><p><span>The architecture separates retrieval from ranking.</span></p><p><span>Retrieval narrows billions of documents down to candidate sets. Ranking systems then determine which documents deserve top placement.</span></p><p><span>This is where Google Search becomes an extraordinarily complex operation.</span></p><p><span>Ranking systems evaluate:</span></p><ul><li><p><span>Query relevance</span></p></li><li><p><span>Link authority</span></p></li><li><p><span>Content quality</span></p></li><li><p><span>User behavior signals</span></p></li><li><p><span>Freshness</span></p></li><li><p><span>Personalization</span></p></li><li><p><span>Geographic context</span></p></li><li><p><span>Spam likelihood</span></p></li></ul><p><span>The challenge is that ranking itself must happen extremely quickly.</span></p><p><span>Users expect search responses within milliseconds, which means ranking systems operate under tight latency budgets despite evaluating massive feature sets continuously.</span></p><p><span>One thing strong interview discussions usually include is ranking-stage optimization.</span></p><p><span>Search systems often use multi-stage ranking pipelines where lightweight models narrow candidate sets first before heavier ranking models evaluate final results.</span></p><p><span>This improves latency efficiency significantly.</span></p><h2><strong><span>Caching becomes operationally essential</span></strong></h2><p><span>Google Search handles enormous query volumes, but query traffic is highly uneven.</span></p><p><span>Certain searches occur repeatedly on a massive scale. Trending news events, sports results, celebrity queries, and common informational searches generate enormous request concentration.</span></p><p><span>Without caching, backend query infrastructure would become prohibitively expensive.</span></p><p><span>The architecture relies heavily on multiple caching layers.</span></p><p><span>Frequently queried search results may remain cached close to the serving infrastructure. Intermediate ranking results may also cache partially. Popular document snippets may remain memory-resident to reduce retrieval overhead further.</span></p><p><span>The operational challenge is freshness.</span></p><p><span>Suppose breaking news occurs suddenly. Cached results may become outdated almost immediately. Search systems must balance caching efficiency against result freshness carefully.</span></p><p><span>This creates difficult trade-offs because aggressive caching improves latency while increasing stale result risk.</span></p><p><span>Strong candidates usually acknowledge that cache invalidation becomes operationally difficult in systems where underlying data changes continuously.</span></p><h2><strong><span>Query serving infrastructure must handle enormous traffic volatility</span></strong></h2><p><span>One of the hardest operational problems in Google Search is handling unpredictable traffic spikes.</span></p><p><span>Search traffic behaves unevenly because global events dramatically alter user behavior within minutes.</span></p><p><span>Breaking news, elections, sporting events, disasters, and viral trends all create concentrated query surges rapidly.</span></p><p><span>The query serving infrastructure must scale dynamically while maintaining low latency.</span></p><p><span>Suppose millions of users suddenly search for the same breaking event simultaneously. The system must absorb enormous request spikes without destabilizing unrelated query workloads.</span></p><p><span>This is where distributed load balancing, caching, and workload partitioning become extremely important operationally.</span></p><p><span>One thing years of infrastructure experience teach you quickly is that real systems rarely fail because of evenly distributed load. They fail because hotspots emerge faster than systems adapt.</span></p><p><span>Search infrastructure is especially vulnerable to this because human attention itself behaves unpredictably.</span></p><h2><strong><span>Spam detection becomes foundational infrastructure</span></strong></h2><p><span>A lot of candidates barely discuss spam systems during Google Search design interviews.</span></p><p><span>In reality, spam prevention is foundational to search quality.</span></p><p><span>The internet continuously contains:</span></p><ul><li><p><span>Keyword stuffing</span></p></li><li><p><span>Link farms</span></p></li><li><p><span>Duplicate content</span></p></li><li><p><span>Malicious redirects</span></p></li><li><p><span>AI-generated spam pages</span></p></li><li><p><span>Manipulative SEO behavior</span></p></li></ul><p><span>Without a strong spam detection infrastructure, ranking quality collapses quickly.</span></p><p><span>This means search systems continuously evaluate document trustworthiness using behavioral analysis, link quality, content signals, and anomaly detection models.</span></p><p><span>The difficult part is balancing filtering aggressiveness.</span></p><p><span>Overly aggressive filtering risks suppressing legitimate content. Weak filtering degrades search quality dramatically.</span></p><p><span>This becomes especially difficult because spam tactics evolve continuously in response to ranking behavior itself.</span></p><p><span>Strong interview answers usually recognize that abuse prevention systems are deeply integrated into ranking infrastructure rather than operating as isolated moderation pipelines.</span></p><h2><strong><span>Distributed systems problems appear everywhere</span></strong></h2><p><span>Google Search looks like a search problem externally, but internally, it behaves like a massive distributed systems platform.</span></p><p><span>Almost every major challenge eventually becomes a distributed coordination problem.</span></p><p><span>Suppose index updates propagate slowly across regions. Search consistency degrades. Suppose ranking infrastructure experiences partial failures. Query latency spikes. Suppose crawl scheduling falls behind. Freshness deteriorates globally.</span></p><p><span>The architecture must continuously coordinate enormous distributed workloads while minimizing synchronization overhead.</span></p><p><span>This creates familiar distributed systems trade-offs:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ah9i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ah9i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 424w, https://substackcdn.com/image/fetch/$s_!Ah9i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 848w, https://substackcdn.com/image/fetch/$s_!Ah9i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 1272w, https://substackcdn.com/image/fetch/$s_!Ah9i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ah9i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png" width="844" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:844,&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_!Ah9i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 424w, https://substackcdn.com/image/fetch/$s_!Ah9i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 848w, https://substackcdn.com/image/fetch/$s_!Ah9i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 1272w, https://substackcdn.com/image/fetch/$s_!Ah9i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F033f6f98-9c1c-4af5-ab66-fd8e8fe7ddd4_844x520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One thing strong engineers usually understand instinctively is that operational simplicity matters enormously once systems become globally distributed.</span></p><p><span>Complexity compounds quickly at this scale.</span></p><h2><strong><span>Observability becomes essential</span></strong></h2><p><span>Search systems generate enormous operational telemetry because every component depends on freshness, latency, and synchronization quality simultaneously.</span></p><p><span>Without strong observability, diagnosing degradation becomes extremely difficult.</span></p><p><span>Important metrics often include:</span></p><ul><li><p><span>Query latency distributions</span></p></li><li><p><span>Crawl backlog depth</span></p></li><li><p><span>Indexing freshness lag</span></p></li><li><p><span>Cache hit ratio</span></p></li><li><p><span>Ranking throughput</span></p></li><li><p><span>Query error rates</span></p></li><li><p><span>Replication delays</span></p></li><li><p><span>Spam classification accuracy</span></p></li></ul><p><span>One particularly important signal is indexing freshness lag.</span></p><p><span>Search systems can appear operationally healthy from an infrastructure perspective while quietly serving increasingly stale results due to delayed indexing propagation.</span></p><p><span>That is why freshness itself becomes a first-class operational metric.</span></p><h2><strong><span>The biggest mistake candidates make during Google Search interviews</span></strong></h2><p><span>The most common mistake candidates make is treating Google Search primarily as a database retrieval problem.</span></p><p><span>They focus heavily on query APIs and not enough on crawling, indexing freshness, ranking complexity, synchronization behavior, distributed coordination, and operational scalability under constantly changing data.</span></p><p><span>The architecture becomes difficult because nearly every subsystem evolves continuously while latency expectations remain extremely tight.</span></p><p><span>Once you understand that, the design conversation becomes much deeper and much more realistic.</span></p><h2><strong><span>How I would prepare for a Google Search System Design interview today</span></strong></h2><p><span>If I were preparing for a Google Search System Design interview today, I would spend far less time memorizing search terminology and far more time understanding information retrieval systems operationally.</span></p><p><span>I would focus heavily on:</span></p><ul><li><p><span>Crawl scheduling</span></p></li><li><p><span>Distributed indexing pipelines</span></p></li><li><p><span>Ranking infrastructure</span></p></li><li><p><span>Cache invalidation</span></p></li><li><p><span>Query serving scalability</span></p></li><li><p><span>Search freshness trade-offs</span></p></li><li><p><span>Spam prevention systems</span></p></li><li><p><span>Distributed synchronization behavior</span></p></li></ul><p><span>Most importantly, I would avoid overengineering early in the discussion.</span></p><p><span>One thing years of building infrastructure and interviewing engineers teach you is that strong System Design is rarely about introducing maximum architectural complexity immediately. The strongest systems are usually the ones that remain operationally understandable as scale, data volume, and infrastructure coordination pressure increase continuously.</span></p><p><span>That principle matters enormously in search systems because complexity compounds faster than most engineers initially expect.</span></p><p><span>And honestly, that is what makes Google Search one of the most fascinating System Design problems in engineering.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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[Anthropic System Design interview: how to think in systems of intelligence]]></title><description><![CDATA[How to approach Anthropic System Design interviews by thinking in LLM systems]]></description><link>https://engineeringenablement.substack.com/p/anthropic-system-design-interview</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/anthropic-system-design-interview</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Wed, 29 Jul 2026 09:29:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!u-30!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>If you approach an Anthropic </span><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>System Design interview</span></a><span> with the same mental model you would use for a traditional distributed systems problem, you will quickly find that your answers feel structurally sound but conceptually incomplete. The reason is not that the fundamentals of System Design no longer apply, but that the primary unit of complexity is no longer a request, a database, or a service. The primary unit of complexity is the model itself, and more importantly, how that model behaves when embedded inside a production system.</span></p><p><span>Anthropic builds systems around large language models that are probabilistic, computationally expensive, and sensitive to input context. This introduces a very different class of design challenges compared to deterministic systems. You are no longer designing a system that simply transforms inputs into outputs through predictable logic. You are designing a system that orchestrates inference, manages context, enforces safety constraints, and delivers consistent user experiences on top of inherently non-deterministic behavior.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><p><span>The interview is not testing whether you can deploy a model. It is testing whether you understand how model-driven systems behave under real-world constraints such as latency, cost, safety, and scale. Once you internalize this shift, the rest of the design becomes less about services and more about orchestration.</span></p><h2><strong><span>The nature of systems Anthropic builds</span></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_!u-30!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u-30!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 424w, https://substackcdn.com/image/fetch/$s_!u-30!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 848w, https://substackcdn.com/image/fetch/$s_!u-30!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 1272w, https://substackcdn.com/image/fetch/$s_!u-30!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u-30!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png" width="1456" height="838" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!u-30!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 424w, https://substackcdn.com/image/fetch/$s_!u-30!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 848w, https://substackcdn.com/image/fetch/$s_!u-30!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 1272w, https://substackcdn.com/image/fetch/$s_!u-30!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e12b3c4-b61e-4a12-b43c-915a35471d89_1536x884.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>To understand what Anthropic expects, it helps to ground your thinking in the types of systems they operate. At a high level, Anthropic builds AI systems that serve large language model outputs to users through APIs, chat interfaces, and integrated applications. These systems must handle high-throughput inference, maintain conversational context, enforce safety policies, and operate reliably under varying workloads.</span></p><p><span>Unlike traditional backend systems, where the logic is deterministic and the cost of computation is relatively predictable, LLM systems introduce variability at multiple levels. The cost of generating a response depends on token length, the latency depends on model size and hardware allocation, and the output itself is probabilistic.</span></p><p><span>The table below highlights how Anthropic-style systems differ from traditional distributed systems:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S4QO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S4QO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 424w, https://substackcdn.com/image/fetch/$s_!S4QO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 848w, https://substackcdn.com/image/fetch/$s_!S4QO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 1272w, https://substackcdn.com/image/fetch/$s_!S4QO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S4QO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png" width="1274" height="674" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:674,&quot;width&quot;:1274,&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_!S4QO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 424w, https://substackcdn.com/image/fetch/$s_!S4QO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 848w, https://substackcdn.com/image/fetch/$s_!S4QO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 1272w, https://substackcdn.com/image/fetch/$s_!S4QO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd1915f-36f5-4de4-9ca7-2a5f0065bd35_1274x674.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This difference is critical because it shifts the focus of </span><a href="https://www.educative.io/courses/grokking-system-design-fundamentals?aff=xDPD"><span>System Design</span></a><span>. Instead of optimizing only for throughput and latency, you must also consider how the model behaves, how context is managed, and how safety constraints are enforced.</span></p><h2><strong><span>How Anthropic frames System Design problems</span></strong></h2><p><a href="https://www.educative.io/blog/anthropic-system-design-interview?aff=xDPD"><span>Anthropic System Design interviews</span></a><span> often revolve around problems such as designing a chat system powered by an LLM, building a document question-answering system, or creating an API for model inference. These problems may sound familiar, but the depth lies in how you handle model-specific constraints.</span></p><p><span>The interviewer is not just interested in your ability to design scalable services. They are interested in how you integrate the model into the system. This includes how you manage prompts, handle context, control costs, and ensure that outputs remain safe and useful.</span></p><p><span>A strong answer begins by recognizing that the model is not just another service dependency. It is the core of the system, and everything else exists to support it.</span></p><h2><strong><span>A representative problem: designing an LLM-powered chat system</span></strong></h2><p><span>Consider a scenario where you are asked to design a chat system similar to Claude. At a high level, the system must accept user inputs, generate responses using an LLM, and maintain conversational context.</span></p><p><span>The table below outlines the core components of such a system:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xf9I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xf9I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 424w, https://substackcdn.com/image/fetch/$s_!Xf9I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 848w, https://substackcdn.com/image/fetch/$s_!Xf9I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 1272w, https://substackcdn.com/image/fetch/$s_!Xf9I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xf9I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png" width="1218" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1218,&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_!Xf9I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 424w, https://substackcdn.com/image/fetch/$s_!Xf9I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 848w, https://substackcdn.com/image/fetch/$s_!Xf9I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 1272w, https://substackcdn.com/image/fetch/$s_!Xf9I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eab037-d00e-4e82-8540-aecc9b7a8f9a_1218x490.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>At a glance, this architecture may resemble a standard microservices system, but the complexity emerges when you consider how these components interact under real-world conditions.</span></p><h2><strong><span>Context management: the hidden complexity</span></strong></h2><p><span>One of the most important and often underestimated aspects of LLM systems is context management. Unlike traditional systems, where state is stored explicitly in databases, LLMs rely on context windows that have limited capacity.</span></p><p><span>This means that the system must decide what information to include in each request to the model. Including too much information increases cost and latency, while including too little can degrade the quality of responses.</span></p><p><span>This introduces a trade-off that is unique to LLM systems. You are constantly balancing context richness against computational constraints. Techniques such as summarization, retrieval augmentation, and context pruning become essential.</span></p><p><span>The challenge is not just technical, but conceptual. You must think of context as a resource that is consumed with every request.</span></p><h2><strong><span>Latency and cost: tightly coupled constraints</span></strong></h2><p><span>In traditional systems, latency and cost are often loosely coupled. In LLM systems, they are tightly linked. Generating more tokens increases both latency and cost, and larger models amplify this effect.</span></p><p><span>This creates a design constraint where every decision about response length, model selection, and prompt construction has financial implications. A system that is technically correct but economically inefficient is not viable at scale.</span></p><p><span>The table below illustrates common trade-offs:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LoeG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LoeG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 424w, https://substackcdn.com/image/fetch/$s_!LoeG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 848w, https://substackcdn.com/image/fetch/$s_!LoeG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 1272w, https://substackcdn.com/image/fetch/$s_!LoeG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LoeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png" width="1112" height="488" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:488,&quot;width&quot;:1112,&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_!LoeG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 424w, https://substackcdn.com/image/fetch/$s_!LoeG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 848w, https://substackcdn.com/image/fetch/$s_!LoeG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 1272w, https://substackcdn.com/image/fetch/$s_!LoeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0093bdd-3cb5-4a8b-9da5-15d3d85c0961_1112x488.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>What makes this challenging is that these trade-offs are dynamic. The optimal configuration may change based on usage patterns and system load.</span></p><h2><strong><span>Safety and alignment as system constraints</span></strong></h2><p><span>One of the defining aspects of Anthropic systems is the emphasis on safety and alignment. Unlike many other systems, where correctness is defined purely in terms of functionality, here, correctness also includes ensuring that outputs adhere to safety policies.</span></p><p><span>This introduces an additional layer in the system architecture. Outputs must be evaluated, filtered, and potentially modified before being returned to the user. This process must be reliable and consistent, even under high load.</span></p><p><span>The challenge is that safety mechanisms can introduce latency and complexity. For example, running additional checks on model outputs may increase response time, but skipping these checks can lead to unsafe behavior.</span></p><p><span>This trade-off must be managed carefully, and the system must be designed to enforce safety without significantly degrading performance.</span></p><h2><strong><span>Handling failures in LLM systems</span></strong></h2><p><span>Failures in LLM systems are different from traditional system failures. In addition to infrastructure issues, you must consider model-specific failures such as hallucinations, incomplete responses, and unsafe outputs.</span></p><p><span>A robust design must account for these scenarios explicitly. This may involve retry mechanisms, fallback models, or post-processing steps that validate outputs.</span></p><p><span>The table below outlines common failure scenarios:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JQed!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JQed!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 424w, https://substackcdn.com/image/fetch/$s_!JQed!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 848w, https://substackcdn.com/image/fetch/$s_!JQed!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 1272w, https://substackcdn.com/image/fetch/$s_!JQed!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JQed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png" width="1262" height="454" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:454,&quot;width&quot;:1262,&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_!JQed!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 424w, https://substackcdn.com/image/fetch/$s_!JQed!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 848w, https://substackcdn.com/image/fetch/$s_!JQed!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 1272w, https://substackcdn.com/image/fetch/$s_!JQed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd9f2ee6-7fc8-4186-9d48-8e4f1ccd80d3_1262x454.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>What makes these failures challenging is that they are not always detectable through traditional monitoring. You must design systems that can identify and mitigate these issues proactively.</span></p><h2><strong><span>Scaling inference systems</span></strong></h2><p><span>Scaling an LLM system is fundamentally different from scaling stateless services. Instead of simply adding more instances, you are scaling computationally intensive workloads that require specialized hardware such as GPUs.</span></p><p><span>This introduces challenges around resource allocation, scheduling, and load balancing. You must ensure that inference requests are distributed efficiently across available resources while maintaining low latency.</span></p><p><span>The table below outlines common bottlenecks:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Tnsm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Tnsm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 424w, https://substackcdn.com/image/fetch/$s_!Tnsm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 848w, https://substackcdn.com/image/fetch/$s_!Tnsm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 1272w, https://substackcdn.com/image/fetch/$s_!Tnsm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Tnsm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png" width="1140" height="452" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:452,&quot;width&quot;:1140,&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_!Tnsm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 424w, https://substackcdn.com/image/fetch/$s_!Tnsm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 848w, https://substackcdn.com/image/fetch/$s_!Tnsm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 1272w, https://substackcdn.com/image/fetch/$s_!Tnsm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91a3572-0b41-4c13-89a1-086010d2f76f_1140x452.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>These challenges require careful orchestration. Unlike traditional systems, where scaling is often straightforward, here it involves managing both compute and data efficiently.</span></p><h2><strong><span>Observability in AI systems</span></strong></h2><p><span>Observability in LLM systems extends beyond traditional metrics such as latency and error rates. You must also monitor output quality, safety compliance, and user satisfaction.</span></p><p><span>This requires collecting and analyzing data at multiple levels. You need metrics for system performance, but also mechanisms for evaluating model behavior.</span></p><p><span>Without this visibility, it becomes difficult to diagnose issues or improve the system over time.</span></p><h2><strong><span>Structuring your answer in the interview</span></strong></h2><p><span>When presenting your design, it is important to structure your explanation around the lifecycle of a request. Start by defining the requirements and constraints, then describe how the system processes inputs, interacts with the model, and returns outputs.</span></p><p><span>Instead of focusing solely on infrastructure, emphasize how the model is integrated into the system. This includes context management, safety mechanisms, and cost optimization.</span></p><p><span>Your design should evolve naturally as you introduce constraints. Each component should address a specific challenge, and each trade-off should be explained clearly.</span></p><h2><strong><span>What Anthropic is really evaluating</span></strong></h2><p><span>At its core, the Anthropic System Design interview is evaluating your ability to think about systems where intelligence itself is a variable. It is testing whether you understand how to design systems that integrate models, manage uncertainty, and operate reliably under real-world constraints.</span></p><p><span>The strongest candidates are those who can reason about trade-offs, justify their decisions, and adapt their designs based on evolving requirements.</span></p><h2><strong><span>Final perspective</span></strong></h2><p><span>Designing systems for Anthropic requires a shift in mindset from deterministic systems to probabilistic systems. It requires an understanding of how models behave, how context is managed, and how systems can be designed to deliver reliable and safe outputs.</span></p><p><span>If you approach the interview with this perspective, the complexity becomes more manageable. Instead of trying to design the most sophisticated system, focus on designing a system that is grounded in real-world constraints and capable of evolving as those constraints change.</span></p>]]></content:encoded></item><item><title><![CDATA[What mobile-first API Design taught me about building better systems]]></title><description><![CDATA[Design APIs that perform reliably on real mobile networks]]></description><link>https://engineeringenablement.substack.com/p/what-mobile-first-api-design-taught</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/what-mobile-first-api-design-taught</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Tue, 28 Jul 2026 07:07:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aFv5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I&#8217;ve reviewed mobile API designs where the backend looked clean on paper but completely broke down once real devices, real networks, and real user behavior entered the picture. The API followed REST conventions, the endpoints were logically named, and the database queries were optimized, yet the mobile app still felt slow, unreliable, and inconsistent in ways that were difficult to debug.</span></p><p><span>The problem was not that the API was incorrect. The problem was that it was designed as if the client were a stable, high-bandwidth, always-connected system rather than a device operating under unpredictable constraints. Mobile-first API design forces you to rethink assumptions about latency, reliability, payload size, and interaction patterns in ways that traditional web backend design often ignores.</span></p><p><a href="https://www.educative.io/blog/grokking-the-api-design-interview?aff=xDPD"><span>Designing an API</span></a><span> for a mobile-first application is not about adapting an existing backend for mobile consumption. It is about starting from the constraints of the mobile environment and building the API around those constraints so that the system behaves predictably under real-world conditions.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Understanding the mobile constraint model</span></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_!aFv5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aFv5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!aFv5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!aFv5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!aFv5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aFv5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!aFv5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!aFv5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!aFv5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!aFv5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb68ae1e-ca31-482c-b76d-e3ca29336b31_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>A mobile client does not behave like a desktop browser or a server-side consumer. Network conditions fluctuate constantly, connections drop without warning, and users interact with the application in short, bursty sessions rather than long, continuous workflows.</span></p><p><span>A request that takes 300 milliseconds in a data center environment can easily stretch beyond a second on a mobile network once latency, packet loss, and retries are factored in. That additional delay compounds across multiple requests, turning what should be a simple interaction into a noticeably slow experience.</span></p><p><span>Battery consumption is another constraint that is often ignored in backend design discussions. Every network request wakes up the radio on the device, and frequent requests can drain battery faster than expected. </span><a href="https://www.educative.io/courses/grokking-the-product-architecture-interview/unpacking-api-design?aff=xDPD"><span>Designing APIs</span></a><span> that require multiple round-trips for a single screen render creates a cost that is invisible in server logs but very real for users.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/what-mobile-first-api-design-taught?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/what-mobile-first-api-design-taught?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/what-mobile-first-api-design-taught?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2><strong><span>Why mobile-first APIs need a different design approach</span></strong></h2><p><a href="https://www.educative.io/courses/design-and-build-great-web-api?aff=xDPD"><span>Traditional API design</span></a><span> often assumes that clients can make multiple requests and assemble data locally. This assumption works well in environments where latency is low and bandwidth is abundant, but it breaks down quickly on mobile networks.</span></p><p><span>If a mobile screen requires data from five different endpoints, the user experience depends on the slowest request. Even if each request is individually fast, the cumulative latency creates a bottleneck that becomes noticeable to the user.</span></p><p><span>This is similar to how distributed systems behave under load. Each additional network hop introduces latency and increases the probability of failure, and these effects compound as requests traverse multiple services.</span></p><p><span>A mobile-first API design reduces the number of network calls required to render a screen, prioritizes predictable response times, and minimizes unnecessary data transfer.</span></p><h2><strong><span>Designing for coarse-grained endpoints</span></strong></h2><p><span>One of the first shifts in thinking is moving from fine-grained endpoints to coarse-grained ones. Instead of exposing multiple small endpoints that each return a fragment of data, mobile APIs often expose endpoints that return all the data required for a specific screen or interaction.</span></p><p><span>This approach reduces the number of round-trip required and ensures that the client receives a consistent snapshot of data. It also simplifies client logic because the app does not need to coordinate multiple asynchronous requests.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OsQK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OsQK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 424w, https://substackcdn.com/image/fetch/$s_!OsQK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 848w, https://substackcdn.com/image/fetch/$s_!OsQK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 1272w, https://substackcdn.com/image/fetch/$s_!OsQK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OsQK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png" width="1268" height="420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:420,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OsQK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 424w, https://substackcdn.com/image/fetch/$s_!OsQK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 848w, https://substackcdn.com/image/fetch/$s_!OsQK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 1272w, https://substackcdn.com/image/fetch/$s_!OsQK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b0e095-2fb2-4666-87c9-1901f1436c90_1268x420.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Coarse-grained APIs trade flexibility for performance, which is usually the right trade-off in mobile environments where latency dominates user experience.</span></p><h2><strong><span>Minimizing payload size without losing context</span></strong></h2><p><span>Reducing payload size is often treated as a straightforward optimization, but it is more nuanced than simply removing fields. The goal is to send only the data that is necessary for the current context while preserving enough information for the client to function independently.</span></p><p><span>Sending large payloads increases download time and consumes more bandwidth, which directly impacts performance on slower networks. However, sending too little data can force the client to make additional requests, negating the benefits of smaller payloads.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!53lG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!53lG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 424w, https://substackcdn.com/image/fetch/$s_!53lG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 848w, https://substackcdn.com/image/fetch/$s_!53lG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 1272w, https://substackcdn.com/image/fetch/$s_!53lG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!53lG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png" width="1274" height="492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:1274,&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_!53lG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 424w, https://substackcdn.com/image/fetch/$s_!53lG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 848w, https://substackcdn.com/image/fetch/$s_!53lG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 1272w, https://substackcdn.com/image/fetch/$s_!53lG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f687b0-ce30-4baa-8318-ca104b74ea88_1274x492.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Effective payload design is about balancing these trade-offs based on how the data is used in the application.</span></p><h2><strong><span>Handling unreliable networks</span></strong></h2><p><span>Mobile networks are inherently unreliable, and API design must account for this reality. Requests can fail due to timeouts, dropped connections, or transient errors that are outside the control of the backend.</span></p><p><span>An API designed for mobile clients should be idempotent wherever possible so that retries do not cause unintended side effects. This means that repeating the same request should produce the same result, even if the original request partially succeeded.</span></p><p><span>Error handling also needs to be explicit and informative. Generic error messages force the client to guess how to respond, which leads to inconsistent behavior across different parts of the application.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!elNw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!elNw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 424w, https://substackcdn.com/image/fetch/$s_!elNw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 848w, https://substackcdn.com/image/fetch/$s_!elNw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 1272w, https://substackcdn.com/image/fetch/$s_!elNw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!elNw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png" width="912" height="412" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:412,&quot;width&quot;:912,&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_!elNw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 424w, https://substackcdn.com/image/fetch/$s_!elNw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 848w, https://substackcdn.com/image/fetch/$s_!elNw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 1272w, https://substackcdn.com/image/fetch/$s_!elNw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a5f1da-4aa2-4ff8-b492-ed43e8bb5fa7_912x412.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>These practices ensure that the client can respond appropriately without introducing additional complexity.</span></p><h2><strong><span>Designing for offline-first behavior</span></strong></h2><p><span>Many mobile applications are expected to function even when the network is unavailable. This requirement changes how APIs are designed because the client must be able to operate independently for periods of time.</span></p><p><span>An offline-first approach treats the client as a source of truth for certain operations and synchronizes with the server when connectivity is restored. This requires APIs that support synchronization, conflict resolution, and incremental updates.</span></p><p><span>Instead of relying on immediate consistency, the system embraces eventual consistency, where changes are propagated asynchronously. This approach reduces the dependency on real-time communication and improves resilience.</span></p><h2><strong><span>Managing synchronization and conflict resolution</span></strong></h2><p><span>When clients operate offline, conflicts are inevitable. Two devices might update the same resource independently, leading to inconsistencies that need to be resolved.</span></p><p><span>API design must include mechanisms for detecting and resolving these conflicts. This often involves versioning resources, tracking changes, and defining rules for how conflicts are handled.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aArc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aArc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 424w, https://substackcdn.com/image/fetch/$s_!aArc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 848w, https://substackcdn.com/image/fetch/$s_!aArc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 1272w, https://substackcdn.com/image/fetch/$s_!aArc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aArc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png" width="918" height="414" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:414,&quot;width&quot;:918,&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_!aArc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 424w, https://substackcdn.com/image/fetch/$s_!aArc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 848w, https://substackcdn.com/image/fetch/$s_!aArc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 1272w, https://substackcdn.com/image/fetch/$s_!aArc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3980e161-5b4d-4dfb-aeb7-8caac40a8fea_918x414.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The choice of strategy depends on the nature of the data and the requirements of the application.</span></p><h2><strong><span>Reducing latency through batching and aggregation</span></strong></h2><p><span>Batching multiple operations into a single request can significantly reduce latency in mobile environments. Instead of sending individual requests for each action, the client groups them together and sends them as a single payload.</span></p><p><span>This approach reduces the overhead associated with network communication and improves efficiency. However, it also increases the complexity of request handling on the server.</span></p><p><span>Aggregation is a related concept where the server combines data from multiple sources into a single response. This is particularly useful for mobile applications where a single screen might depend on multiple backend services.</span></p><h2><strong><span>API versioning and backward compatibility</span></strong></h2><p><span>Mobile applications are not updated as frequently as web applications, which means that multiple versions of the client may be active at the same time. API design must account for this by maintaining backward compatibility.</span></p><p><span>Breaking changes in the API can lead to failures in older versions of the app, creating a fragmented user experience. Versioning strategies help manage this complexity by allowing multiple versions of the API to coexist.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4-g6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4-g6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 424w, https://substackcdn.com/image/fetch/$s_!4-g6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 848w, https://substackcdn.com/image/fetch/$s_!4-g6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 1272w, https://substackcdn.com/image/fetch/$s_!4-g6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4-g6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png" width="932" height="454" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10224881-331c-4b9f-bc0b-de25b5751846_932x454.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:454,&quot;width&quot;:932,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4-g6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 424w, https://substackcdn.com/image/fetch/$s_!4-g6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 848w, https://substackcdn.com/image/fetch/$s_!4-g6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 1272w, https://substackcdn.com/image/fetch/$s_!4-g6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10224881-331c-4b9f-bc0b-de25b5751846_932x454.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Each approach has its trade-offs, but the key requirement is maintaining stability for existing clients.</span></p><h2><strong><span>Security considerations in mobile APIs</span></strong></h2><p><span>Security in mobile APIs extends beyond authentication and authorization. Mobile applications are distributed, which means that the client environment cannot be fully trusted.</span></p><p><span>APIs must validate all inputs, enforce strict authentication mechanisms, and protect sensitive data both in transit and at rest. Token-based authentication is commonly used, but it must be implemented carefully to avoid vulnerabilities.</span></p><p><span>Rate limiting also plays a role in security by preventing abuse and protecting against denial-of-service attacks. It acts as a safeguard against unexpected spikes in traffic, whether they are malicious or accidental.</span></p><h2><strong><span>Observability and monitoring</span></strong></h2><p><span>Designing an API is only part of the process. Understanding how it behaves in </span><a href="https://www.educative.io/courses/grokking-the-product-architecture-interview?aff=xDPD"><span>production</span></a><span> is equally important.</span></p><p><span>Mobile-first APIs require detailed observability to track performance, error rates, and user behavior. Metrics should capture not just server-side performance but also client-side impact, such as perceived latency and failure rates.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eo9b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eo9b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 424w, https://substackcdn.com/image/fetch/$s_!eo9b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 848w, https://substackcdn.com/image/fetch/$s_!eo9b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 1272w, https://substackcdn.com/image/fetch/$s_!eo9b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eo9b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png" width="822" height="418" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:418,&quot;width&quot;:822,&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_!eo9b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 424w, https://substackcdn.com/image/fetch/$s_!eo9b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 848w, https://substackcdn.com/image/fetch/$s_!eo9b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 1272w, https://substackcdn.com/image/fetch/$s_!eo9b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26735064-5c75-4f86-8c5d-f656a8877ca1_822x418.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>These metrics provide the feedback needed to refine the API over time.</span></p><h2><strong><span>The role of caching in mobile API design</span></strong></h2><p><span>Caching is one of the most effective ways to improve performance in mobile applications. By storing frequently accessed data locally, the client can reduce the number of network requests and provide a faster user experience.</span></p><p><span>APIs can support caching by including appropriate headers that indicate how long data can be stored and when it should be refreshed. This requires careful consideration of data freshness and consistency.</span></p><p><span>Caching is not just a performance optimization. It is a fundamental part of mobile-first design because it reduces dependency on unreliable networks.</span></p><h2><strong><span>Bringing it all together</span></strong></h2><p><span>Designing an API for a mobile-first application requires a shift in perspective. Instead of optimizing for server-side efficiency, you optimize for user experience under unpredictable conditions.</span></p><p><span>This means reducing the number of network calls, minimizing payload sizes, handling unreliable networks gracefully, and supporting offline behavior. It also means designing for observability and continuously refining the system based on real-world usage.</span></p><p><span>The most important lesson is that mobile-first API design is not about applying a set of best practices. It is about understanding the constraints of the environment and making deliberate trade-offs that align with those constraints.</span></p><p><span>If you design with those constraints in mind, your API will not just work. It will behave predictably under real conditions, which is ultimately what users care about.</span></p>]]></content:encoded></item><item><title><![CDATA[The best API Designs I've studied and what they have in common]]></title><description><![CDATA[The API design patterns behind today's best platforms]]></description><link>https://engineeringenablement.substack.com/p/the-best-api-designs-ive-studied</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/the-best-api-designs-ive-studied</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Mon, 27 Jul 2026 09:15:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!d8ze!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I&#8217;ve reviewed APIs that looked elegant in documentation but became frustrating the moment you tried to use them in a real application. I&#8217;ve also worked with APIs that felt almost invisible because everything behaved exactly the way you expected, even when the underlying systems were complex and distributed across multiple services.</span></p><p><span>The difference between those two experiences is rarely about the technology stack or the scale of the system. It is almost always about design discipline and how well the API abstracts complexity without hiding important behavior. Real-world examples of well-designed APIs are valuable not because they are perfect, but because they demonstrate how thoughtful decisions translate into predictable behavior under real conditions.</span></p><p><span>When you analyze APIs that are widely adopted and consistently praised by developers, patterns start to emerge. These APIs are not just functional. They are intuitive, consistent, resilient under failure, and designed with a deep understanding of how clients actually use them.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>What defines a well-designed API in practice</span></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_!d8ze!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d8ze!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 424w, https://substackcdn.com/image/fetch/$s_!d8ze!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 848w, https://substackcdn.com/image/fetch/$s_!d8ze!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 1272w, https://substackcdn.com/image/fetch/$s_!d8ze!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d8ze!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png" width="1456" height="845" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ec91b76-e568-477a-9636-943266170a6b_1536x891.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:845,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d8ze!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 424w, https://substackcdn.com/image/fetch/$s_!d8ze!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 848w, https://substackcdn.com/image/fetch/$s_!d8ze!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 1272w, https://substackcdn.com/image/fetch/$s_!d8ze!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec91b76-e568-477a-9636-943266170a6b_1536x891.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Before looking at specific examples, it helps to establish what &#8220;well-designed&#8221; means in a practical sense. It is not just about clean endpoint naming or adherence to REST principles. It is about how the API behaves when integrated into real systems.</span></p><p><span>A </span><a href="https://www.educative.io/courses/grokking-the-product-architecture-interview/unpacking-api-design?aff=xDPD"><span>well-designed API</span></a><span> reduces the cognitive load on developers. It allows them to predict behavior without constantly referring to documentation, and it handles edge cases in a way that feels consistent rather than surprising. It also provides clear feedback when something goes wrong, which is critical for debugging and reliability.</span></p><p><span>Another defining characteristic is how the API behaves under stress. When traffic increases or failures occur, the API should degrade gracefully rather than collapse unpredictably. This aligns with broader </span><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>System Design</span></a><span> principles, where controlling failure modes is often more important than optimizing for ideal conditions.</span></p><h2><strong><span>Stripe API as a model of consistency and clarity</span></strong></h2><p><a href="https://www.educative.io/courses/integration-stripe-api?aff=xDPD"><span>Stripe&#8217;s API</span></a><span> is often cited as one of the best examples of API design, and for good reason. It demonstrates how consistency and clarity can significantly improve developer experience without sacrificing flexibility.</span></p><p><span>One of the most notable aspects of the Stripe API is its uniform resource structure. Almost every resource follows the same conventions for creation, retrieval, updating, and deletion. This consistency allows developers to learn the API quickly and apply that knowledge across different parts of the system.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W5zQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W5zQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 424w, https://substackcdn.com/image/fetch/$s_!W5zQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 848w, https://substackcdn.com/image/fetch/$s_!W5zQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 1272w, https://substackcdn.com/image/fetch/$s_!W5zQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W5zQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png" width="1266" height="528" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:528,&quot;width&quot;:1266,&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_!W5zQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 424w, https://substackcdn.com/image/fetch/$s_!W5zQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 848w, https://substackcdn.com/image/fetch/$s_!W5zQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 1272w, https://substackcdn.com/image/fetch/$s_!W5zQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9735ce3-c8df-4558-88e9-de61d3df3f23_1266x528.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Stripe also emphasizes idempotency, which is critical for financial operations. When a payment request is retried due to network issues, the system ensures that the operation is not executed multiple times. This behavior reflects an understanding of real-world failure scenarios rather than ideal conditions.</span></p><h2><strong><span>GitHub API and resource-oriented design</span></strong></h2><p><span>The GitHub API is another strong example of well-designed APIs, particularly in how it models resources and relationships between them. It follows REST principles closely but adapts them in ways that make sense for its domain.</span></p><p><span>Resources such as repositories, issues, and pull requests are clearly defined, and their relationships are intuitive. Developers can navigate between related resources using predictable patterns, which reduces the need for extensive documentation.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ou9b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ou9b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 424w, https://substackcdn.com/image/fetch/$s_!ou9b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 848w, https://substackcdn.com/image/fetch/$s_!ou9b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 1272w, https://substackcdn.com/image/fetch/$s_!ou9b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ou9b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png" width="1272" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1272,&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_!ou9b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 424w, https://substackcdn.com/image/fetch/$s_!ou9b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 848w, https://substackcdn.com/image/fetch/$s_!ou9b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 1272w, https://substackcdn.com/image/fetch/$s_!ou9b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe34a6087-198b-47b7-80b4-689d5c8e24f6_1272x490.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>GitHub&#8217;s use of webhooks is particularly noteworthy because it shifts the interaction model from request-driven to event-driven. Instead of repeatedly polling for updates, clients can react to events as they occur, which improves efficiency and reduces unnecessary load.</span></p><h2><strong><span>Twilio API and abstraction of complexity</span></strong></h2><p><span>Twilio&#8217;s API demonstrates how complex systems can be abstracted into simple interfaces. Sending an SMS message involves multiple underlying steps, including routing, carrier communication, and delivery confirmation, but the API reduces this complexity to a straightforward request.</span></p><p><span>This abstraction is not just about hiding complexity. It is about presenting a model that aligns with how developers think about the problem. Instead of exposing every detail, the API provides a clear and simple interface while handling the complexity internally.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Bpg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Bpg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 424w, https://substackcdn.com/image/fetch/$s_!_Bpg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 848w, https://substackcdn.com/image/fetch/$s_!_Bpg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 1272w, https://substackcdn.com/image/fetch/$s_!_Bpg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Bpg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png" width="1276" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:1276,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_Bpg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 424w, https://substackcdn.com/image/fetch/$s_!_Bpg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 848w, https://substackcdn.com/image/fetch/$s_!_Bpg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 1272w, https://substackcdn.com/image/fetch/$s_!_Bpg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a0fb80-927f-4668-84d2-387de40575d5_1276x500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Twilio&#8217;s approach highlights the importance of aligning API design with user intent rather than system implementation.</span></p><h2><strong><span>Google Maps API and performance optimization</span></strong></h2><p><span>The Google Maps API is a strong example of designing for performance and scalability. It handles large amounts of data and complex queries while maintaining responsiveness.</span></p><p><span>One of its key strengths is how it allows clients to specify exactly what data they need. This reduces payload size and improves performance, which is particularly important for mobile applications.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sMzj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sMzj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 424w, https://substackcdn.com/image/fetch/$s_!sMzj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 848w, https://substackcdn.com/image/fetch/$s_!sMzj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 1272w, https://substackcdn.com/image/fetch/$s_!sMzj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sMzj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png" width="1268" height="408" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:408,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sMzj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 424w, https://substackcdn.com/image/fetch/$s_!sMzj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 848w, https://substackcdn.com/image/fetch/$s_!sMzj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 1272w, https://substackcdn.com/image/fetch/$s_!sMzj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f5f9be-1696-4ead-bc78-4e9bce4194a3_1268x408.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The API is designed with an understanding of how data is used in real applications, which allows it to balance flexibility with performance.</span></p><h2><strong><span>Amazon S3 API and scalability through simplicity</span></strong></h2><p><span>Amazon S3&#8217;s API is deceptively simple, but it is designed to operate at massive scale. It provides a minimal set of operations for storing and retrieving objects, yet it supports a wide range of use cases.</span></p><p><span>The simplicity of the API is intentional because it reduces the surface area for errors and makes it easier to reason about behavior.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2O1k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2O1k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 424w, https://substackcdn.com/image/fetch/$s_!2O1k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 848w, https://substackcdn.com/image/fetch/$s_!2O1k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 1272w, https://substackcdn.com/image/fetch/$s_!2O1k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2O1k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png" width="1270" height="492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:1270,&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_!2O1k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 424w, https://substackcdn.com/image/fetch/$s_!2O1k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 848w, https://substackcdn.com/image/fetch/$s_!2O1k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 1272w, https://substackcdn.com/image/fetch/$s_!2O1k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32155eaf-03b8-4418-ae5d-50a015de28f4_1270x492.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>S3&#8217;s design shows that simplicity does not limit scalability. In many cases, it enables it.</span></p><h2><strong><span>Slack API and real-time interaction</span></strong></h2><p><span>The Slack API demonstrates how APIs can support real-time interaction through a combination of REST endpoints and event-driven mechanisms.</span></p><p><span>Instead of relying solely on request-response patterns, Slack integrates webhooks and event subscriptions to enable real-time updates.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HqcG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HqcG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 424w, https://substackcdn.com/image/fetch/$s_!HqcG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 848w, https://substackcdn.com/image/fetch/$s_!HqcG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 1272w, https://substackcdn.com/image/fetch/$s_!HqcG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HqcG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png" width="1062" height="448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4516e000-3056-4a81-a110-994e8969387d_1062x448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:448,&quot;width&quot;:1062,&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_!HqcG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 424w, https://substackcdn.com/image/fetch/$s_!HqcG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 848w, https://substackcdn.com/image/fetch/$s_!HqcG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 1272w, https://substackcdn.com/image/fetch/$s_!HqcG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4516e000-3056-4a81-a110-994e8969387d_1062x448.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This combination of patterns allows Slack to support complex interactions while maintaining a coherent API design.</span></p><h2><strong><span>Lessons from real-world APIs</span></strong></h2><p><span>When you compare these APIs, certain patterns become clear. They prioritize consistency, clarity, and predictability over theoretical elegance. They are designed with real-world usage in mind, which means they account for failures, latency, and varying client capabilities.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Jq_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Jq_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 424w, https://substackcdn.com/image/fetch/$s_!6Jq_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 848w, https://substackcdn.com/image/fetch/$s_!6Jq_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 1272w, https://substackcdn.com/image/fetch/$s_!6Jq_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Jq_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png" width="928" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:928,&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_!6Jq_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 424w, https://substackcdn.com/image/fetch/$s_!6Jq_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 848w, https://substackcdn.com/image/fetch/$s_!6Jq_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 1272w, https://substackcdn.com/image/fetch/$s_!6Jq_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83ad92e6-230a-4bbe-a38e-b2ccaf9aba10_928x450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>These principles are not independent. They reinforce each other, creating APIs that are both easy to use and robust under load.</span></p><h2><strong><span>Why good API design is rare</span></strong></h2><p><span>Despite these examples, well-designed APIs are not as common as they should be. This is partly because API design requires thinking beyond immediate functionality and considering long-term implications.</span></p><p><span>It also requires coordination between design and </span><a href="https://www.educative.io/courses/grokking-the-product-architecture-interview?aff=xDPD"><span>architecture</span></a><span>. An API that looks clean on the surface must be supported by an architecture that can deliver on its promises. Otherwise, the API becomes misleading, creating expectations that the system cannot meet.</span></p><h2><strong><span>Bringing it all together</span></strong></h2><p><span>Real-world examples of well-designed APIs demonstrate that good design is not about following a specific pattern or framework. It is about making deliberate decisions that align with how systems are used in practice.</span></p><p><span>These APIs succeed because they reduce complexity for developers while maintaining the flexibility and performance needed to operate at scale. They handle failures predictably, provide clear feedback, and evolve without breaking existing integrations.</span></p><p><span>If you study these examples closely, you start to see that good API design is less about innovation and more about discipline. It is about consistently applying principles that prioritize usability, reliability, and long-term maintainability.</span></p><p><span>And in practice, those qualities matter far more than any specific implementation detail.</span></p>]]></content:encoded></item><item><title><![CDATA[OpenAI SWE loop: How I'd prepare if I had an interview tomorrow]]></title><description><![CDATA[How I would prepare for every stage of the OpenAI SWE loop]]></description><link>https://engineeringenablement.substack.com/p/openai-swe-loop-how-id-prepare-if</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/openai-swe-loop-how-id-prepare-if</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Fri, 24 Jul 2026 05:19:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q70b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Whenever someone asks me about the OpenAI SWE loop, my advice is usually different from what I&#8217;d give for most Big Tech interviews.</span></p><p><span>Strong coding skills are still essential, but OpenAI isn&#8217;t simply evaluating whether you can implement an algorithm correctly. Throughout the interview loop, you&#8217;re expected to reason through unfamiliar problems, discuss engineering trade-offs, communicate clearly, and demonstrate the kind of curiosity that helps solve problems where there isn&#8217;t an established playbook. If you prepare only for coding interviews, you&#8217;ll likely miss many of the signals OpenAI is actually evaluating.</span></p><p><span>I&#8217;ve spoken with engineers who have gone through the process, reviewed interview experiences, and helped candidates prepare for AI-focused software engineering interviews. One pattern appears consistently: candidates who think like engineers tend to perform much better than candidates who prepare like competitive programmers.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>What the OpenAI SWE Loop Is Really Evaluating</span></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_!Q70b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q70b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 424w, https://substackcdn.com/image/fetch/$s_!Q70b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 848w, https://substackcdn.com/image/fetch/$s_!Q70b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 1272w, https://substackcdn.com/image/fetch/$s_!Q70b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q70b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png" width="1456" height="704" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:704,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q70b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 424w, https://substackcdn.com/image/fetch/$s_!Q70b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 848w, https://substackcdn.com/image/fetch/$s_!Q70b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 1272w, https://substackcdn.com/image/fetch/$s_!Q70b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2577dbd5-8fe9-446f-bac6-57f6f64135d8_1620x783.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One mistake I see repeatedly is candidates preparing for OpenAI exactly the same way they prepare for Meta or Google.</span></p><p><span>While algorithms remain an important part of the process, OpenAI interviewers are often interested in something broader. They want to understand how you approach ambiguity, how you reason through technical trade-offs, how quickly you learn unfamiliar concepts, and how effectively you communicate your thinking throughout a discussion.</span></p><p><span>It&#8217;s common for an interview to evolve beyond the original question. A coding exercise might turn into a conversation about scalability, reliability, API design, or how the solution would change if new constraints were introduced. Those discussions often reveal much more about your engineering ability than simply producing the correct implementation.</span></p><p><span>I find it helpful to think about the OpenAI SWE loop as a series of engineering conversations rather than isolated interview rounds.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0OPH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0OPH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 424w, https://substackcdn.com/image/fetch/$s_!0OPH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 848w, https://substackcdn.com/image/fetch/$s_!0OPH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 1272w, https://substackcdn.com/image/fetch/$s_!0OPH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0OPH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png" width="1268" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0OPH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 424w, https://substackcdn.com/image/fetch/$s_!0OPH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 848w, https://substackcdn.com/image/fetch/$s_!0OPH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 1272w, https://substackcdn.com/image/fetch/$s_!0OPH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588e89e2-2cc3-47e4-bbed-70662bac8485_1268x596.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Once you start viewing the interview through that lens, your preparation naturally becomes much more balanced.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/openai-swe-loop-how-id-prepare-if?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/openai-swe-loop-how-id-prepare-if?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/openai-swe-loop-how-id-prepare-if?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2><strong><span>Coding Still Forms the Foundation</span></strong></h2><p><span>Coding remains one of the strongest signals throughout the OpenAI SWE loop, but I don&#8217;t think solving hundreds of random interview questions is the best use of your time.</span></p><p><span>The strongest candidates usually understand algorithmic patterns rather than memorized solutions. More importantly, they explain their thinking before they start writing code. Interviewers want to understand how you analyze problems, evaluate alternatives, and adapt when requirements change.</span></p><p><span>When I review mock interviews, one habit consistently separates stronger candidates from average ones. Strong candidates rarely rush into implementation. They spend a few minutes clarifying the problem, discussing assumptions, comparing multiple approaches, and only then begin coding.</span></p><p><span>The topics I&#8217;d prioritize remain fairly consistent across software engineering interviews.</span></p><ul><li><p><span>Arrays and strings</span></p></li><li><p><span>Hash maps</span></p></li><li><p><span>Trees</span></p></li><li><p><span>Graphs</span></p></li><li><p><span>Binary search</span></p></li><li><p><span>Dynamic programming</span></p></li><li><p><span>Heaps</span></p></li><li><p><span>Recursion and backtracking</span></p></li></ul><p><span>These topics appear frequently because they represent common ways of solving engineering problems rather than interview tricks. Once you understand the underlying patterns, unfamiliar questions become significantly easier to approach.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cj2g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cj2g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 424w, https://substackcdn.com/image/fetch/$s_!cj2g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 848w, https://substackcdn.com/image/fetch/$s_!cj2g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 1272w, https://substackcdn.com/image/fetch/$s_!cj2g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cj2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png" width="1060" height="692" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:692,&quot;width&quot;:1060,&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_!cj2g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 424w, https://substackcdn.com/image/fetch/$s_!cj2g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 848w, https://substackcdn.com/image/fetch/$s_!cj2g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 1272w, https://substackcdn.com/image/fetch/$s_!cj2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09acf8c7-98dd-4da5-9dd3-bc0e1985279c_1060x692.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One habit I&#8217;d strongly recommend is solving every practice problem out loud. Explain your reasoning, justify your choices, discuss complexity, and test your implementation. That mirrors the actual interview much more closely than solving problems silently.</span></p><h2><strong><span>Don&#8217;t Practice Coding&#8211;Practice Interviews</span></strong></h2><p><span>There&#8217;s a subtle but important difference.</span></p><p><span>Many engineers practice coding in isolation. Real interviews are collaborative. Interviewers ask follow-up questions, challenge assumptions, introduce new constraints, and expect you to adapt your thinking as the discussion evolves.</span></p><p><span>Every practice session should follow a consistent structure.</span></p><ul><li><p><span>Clarify requirements before proposing a solution.</span></p></li><li><p><span>Discuss multiple approaches.</span></p></li><li><p><span>Explain why one approach is preferable.</span></p></li><li><p><span>Write clean, readable code.</span></p></li><li><p><span>Test the implementation with examples.</span></p></li><li><p><span>Discuss complexity and possible optimizations.</span></p></li></ul><p><span>These steps only add a few minutes to each problem, but they help develop the communication skills that interviewers evaluate throughout the OpenAI SWE loop.</span></p><h2><strong><span>System Design Is About Trade-Offs</span></strong></h2><p><span>For experienced software engineers, System Design usually becomes another important part of the interview process.</span></p><p><span>One misconception I see frequently is candidates trying to memorize complete architectures. That rarely works because every design discussion evolves differently depending on the interviewer and the requirements.</span></p><p><span>Instead, focus on understanding why architectural components exist and what trade-offs they introduce. Once those concepts become intuitive, designing new systems becomes much easier.</span></p><p><span>The topics I&#8217;d recommend prioritizing include:</span></p><ul><li><p><span>Distributed systems</span></p></li><li><p><span>Load balancing</span></p></li><li><p><span>Caching</span></p></li><li><p><span>Database design</span></p></li><li><p><span>Replication</span></p></li><li><p><span>Event-driven architecture</span></p></li><li><p><span>Message queues</span></p></li><li><p><span>Rate limiting</span></p></li><li><p><span>Monitoring</span></p></li><li><p><span>Fault tolerance</span></p></li></ul><p><span>Rather than studying each topic independently, think about how they work together inside production systems. A large-scale AI platform, for example, combines distributed storage, inference services, caching, monitoring, model deployment pipelines, and observability into a single architecture. Understanding those relationships is much more valuable than memorizing a reference diagram.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kpgz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kpgz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 424w, https://substackcdn.com/image/fetch/$s_!kpgz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 848w, https://substackcdn.com/image/fetch/$s_!kpgz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 1272w, https://substackcdn.com/image/fetch/$s_!kpgz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kpgz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png" width="946" height="636" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:946,&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_!kpgz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 424w, https://substackcdn.com/image/fetch/$s_!kpgz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 848w, https://substackcdn.com/image/fetch/$s_!kpgz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 1272w, https://substackcdn.com/image/fetch/$s_!kpgz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b5578a-b93d-4bc5-a480-2f3cbf3d5a05_946x636.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong><span>Curiosity Is a Technical Skill</span></strong></h2><p><span>One characteristic I consistently associate with strong OpenAI candidates is curiosity.</span></p><p><span>Interviewers often explore how you approach unfamiliar problems rather than staying entirely within technologies you&#8217;ve already mastered. They&#8217;re interested in how quickly you learn, how you reason through uncertainty, and whether you&#8217;re comfortable questioning your own assumptions.</span></p><p><span>During technical discussions, don&#8217;t be afraid to acknowledge uncertainty if you genuinely don&#8217;t know something. What matters far more is demonstrating how you would investigate the problem, validate assumptions, and iterate toward a solution.</span></p><p><span>That mindset often leads to much stronger engineering conversations than trying to sound certain about topics you haven&#8217;t actually worked with.</span></p><h2><strong><span>Behavioral Interviews Still Matter</span></strong></h2><p><span>Technical excellence alone rarely earns an offer.</span></p><p><span>Behavioral interviews throughout the OpenAI SWE loop focus on collaboration, ownership, communication, and engineering judgment. Interviewers want to understand how you&#8217;ve handled difficult technical decisions, worked through ambiguity, resolved disagreements, and learned from challenging projects.</span></p><p><span>When preparing, review projects that genuinely stretched your engineering ability instead of memorizing generic leadership stories.</span></p><p><span>The examples I usually recommend preparing involve:</span></p><ul><li><p><span>Leading technically challenging projects</span></p></li><li><p><span>Solving production incidents</span></p></li><li><p><span>Making architectural trade-offs</span></p></li><li><p><span>Collaborating across teams</span></p></li><li><p><span>Handling changing requirements</span></p></li><li><p><span>Learning from unsuccessful decisions</span></p></li></ul><p><span>The strongest stories explain not only what happened, but why you made certain decisions, what alternatives you considered, and what measurable outcomes resulted from your work.</span></p><h2><strong><span>The Resources I&#8217;d Recommend</span></strong></h2><p><span>One preparation mistake I see frequently is candidates jumping between dozens of different resources. A much better strategy is mastering a small collection of resources that complement each other instead of constantly searching for the next course or interview guide.</span></p><p><span>Here&#8217;s the preparation stack I&#8217;d recommend:</span></p><ul><li><p><strong><span>Educative</span></strong><span>: A great choice for structured learning. Courses like </span><em><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>Grokking the Modern System Design Interview</span></a></em><span> and </span><em><a href="https://www.educative.io/courses/grokking-coding-interview?aff=xDPD"><span>Grokking the Coding Interview Patterns</span></a></em><span> provide a logical progression that helps reinforce the patterns and frameworks commonly tested during software engineering interviews.</span></p></li><li><p><strong><a href="https://fenzo.ai/?ref=Ype6"><span>Fenzo.ai</span></a></strong><span>: An excellent companion for reviewing concepts, identifying knowledge gaps, generating interview questions, and practicing technical discussions. I find it especially useful when preparing to explain engineering decisions rather than simply recalling information.</span></p></li><li><p><strong><a href="https://www.mockinterviews.dev/"><span>Mock Interviews</span></a></strong><span>: Probably the closest thing to the real interview experience. Mock interviews help you improve communication, receive feedback on your reasoning, and become comfortable discussing technical trade-offs under realistic interview conditions.</span></p></li></ul><p><span>Used together, these resources create a balanced preparation strategy that covers coding, System Design, technical communication, and interview practice without overwhelming you with too many learning platforms.</span></p><h2><strong><span>Common Mistakes I See Candidates Make</span></strong></h2><p><span>After helping candidates prepare for software engineering interviews, I&#8217;ve noticed that the same mistakes appear over and over again. The good news is that most of them are easy to fix once you shift your preparation from memorization to genuine understanding.</span></p><h3><strong><span>Don&#8217;t Memorize Coding Solutions</span></strong></h3><p><span>One of the biggest mistakes candidates make is trying to memorize as many interview questions as possible. A much better approach is to learn the underlying algorithmic patterns so you can confidently solve unfamiliar problems instead of hoping you&#8217;ve seen the exact question before.</span></p><h3><strong><span>Stop Memorizing System Design Diagrams</span></strong></h3><p><span>System Design interviews aren&#8217;t about reproducing a reference architecture from memory. Interviewers want to understand how you reason through trade-offs, justify your design decisions, and adapt your architecture when requirements change.</span></p><h3><strong><span>Communication Is Part of the Interview</span></strong></h3><p><span>Many candidates practice coding silently and only explain their thinking during the actual interview. I recommend making communication part of every practice session by explaining your assumptions, discussing trade-offs, and walking through your solution as you build it.</span></p><h3><strong><span>Prepare for the Entire Interview Loop</span></strong></h3><p><span>Another common mistake is treating coding, System Design, and behavioral interviews as completely separate preparation tracks. The strongest candidates develop all three skills together because modern software engineering interviews frequently move between implementation details, architecture discussions, and engineering judgment within the same conversation.</span></p><h3><strong><span>Don&#8217;t Skip Mock Interviews</span></strong></h3><p><span>Mock interviews are one of the fastest ways to identify weaknesses in your preparation. They help you become comfortable solving problems under realistic interview conditions while improving your communication, confidence, and ability to respond to follow-up questions.</span></p><p><span>Another mistake I see is candidates trying to predict the exact interview questions they&#8217;ll be asked. The OpenAI SWE loop isn&#8217;t designed to reward memorization. It&#8217;s designed to evaluate how you think when you&#8217;re presented with unfamiliar engineering problems, so your preparation should focus on building strong fundamentals rather than collecting answers.</span></p><h2><strong><span>Final Thoughts</span></strong></h2><p><span>Whenever someone asks me how to prepare for the OpenAI SWE loop, I encourage them to stop thinking about it as a collection of coding interviews.</span></p><p><span>Strong candidates combine technical depth with clear communication, thoughtful engineering judgment, curiosity, and the ability to reason through ambiguity. Those qualities appear throughout every stage of the interview process, regardless of the specific questions you&#8217;re asked.</span></p><p><span>If you prepare with that mindset, you&#8217;ll not only improve your chances of performing well during the OpenAI SWE loop, but you&#8217;ll also develop the engineering habits that continue to pay dividends long after the interview is over.</span></p>]]></content:encoded></item><item><title><![CDATA[What you can expect from the OpenAI Software Engineer interview process ]]></title><description><![CDATA[A practical walkthrough of the OpenAI software engineer interview process and how to prepare for every stage]]></description><link>https://engineeringenablement.substack.com/p/what-you-can-expect-from-the-openai</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/what-you-can-expect-from-the-openai</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Thu, 23 Jul 2026 04:29:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qEH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Many engineers preparing for OpenAI assume the interview process revolves entirely around artificial intelligence, machine learning theory, or large language models. While understanding modern AI certainly helps, that assumption misses what the company is ultimately hiring for.</span></p><p><span>OpenAI builds production software that serves millions of users, powers large-scale inference systems, and evolves at an extraordinary pace, which means software engineers are expected to solve much broader engineering problems than simply writing model code.</span></p><p><span>The OpenAI software engineer interview process reflects that reality by evaluating programming ability, System Design, collaboration, engineering judgment, and the capacity to reason through unfamiliar technical challenges under changing requirements.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>What Makes the OpenAI Software Engineer Interview Process Different?</span></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_!qEH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qEH2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 424w, https://substackcdn.com/image/fetch/$s_!qEH2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 848w, https://substackcdn.com/image/fetch/$s_!qEH2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 1272w, https://substackcdn.com/image/fetch/$s_!qEH2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qEH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png" width="1456" height="569" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:569,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qEH2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 424w, https://substackcdn.com/image/fetch/$s_!qEH2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 848w, https://substackcdn.com/image/fetch/$s_!qEH2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 1272w, https://substackcdn.com/image/fetch/$s_!qEH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1f2b89-8ec7-4d00-a7de-9b9b1ff09f49_1625x635.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Many software engineering interviews separate </span><a href="https://www.educative.io/courses/grokking-coding-interview?aff=xDPD"><span>coding interviews</span></a><span>, architecture, and behavioral discussions into completely independent exercises. The OpenAI software engineer interview process often feels much more fluid because conversations naturally move between implementation details, scalability concerns, operational reliability, and engineering tradeoffs within the same interview.</span></p><p><span>Interviewers are rarely interested in whether you have memorized the perfect solution to a particular interview question. Instead, they want to understand how you think through complex engineering problems, communicate your assumptions, and improve your solution as new information becomes available. Engineers who explain their reasoning clearly usually perform better than candidates who immediately begin writing code without discussing the problem first.</span></p><h2><strong><span>Understanding the Typical Interview Process</span></strong></h2><p><span>Although the exact interview loop depends on the team and role, most candidates progress through several common stages before receiving a hiring decision. Infrastructure teams, product engineering groups, and applied AI teams naturally emphasize different technical skills, but the overall structure remains relatively consistent.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UfoW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UfoW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 424w, https://substackcdn.com/image/fetch/$s_!UfoW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 848w, https://substackcdn.com/image/fetch/$s_!UfoW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 1272w, https://substackcdn.com/image/fetch/$s_!UfoW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UfoW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png" width="1008" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2181da05-755f-4982-a914-7632fd79165a_1008x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:1008,&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_!UfoW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 424w, https://substackcdn.com/image/fetch/$s_!UfoW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 848w, https://substackcdn.com/image/fetch/$s_!UfoW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 1272w, https://substackcdn.com/image/fetch/$s_!UfoW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2181da05-755f-4982-a914-7632fd79165a_1008x520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One noticeable characteristic of the OpenAI software engineer interview process is that interviewers frequently build upon earlier discussions instead of treating every interview as an isolated evaluation. A coding discussion can evolve into a </span><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>System Design</span></a><span> conversation, while a project review may naturally expand into questions about production reliability or organizational decision-making.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/what-you-can-expect-from-the-openai?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/what-you-can-expect-from-the-openai?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/what-you-can-expect-from-the-openai?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h1><strong><span>Coding Interviews Focus on Practical Engineering</span></strong></h1><p><span>Candidates often spend months solving increasingly difficult algorithm questions, expecting every interview to resemble an advanced competitive programming contest. While strong algorithmic thinking remains essential, OpenAI generally appears more interested in whether candidates can write clean, maintainable software that adapts well as requirements evolve.</span></p><p><span>Interviewers commonly introduce new constraints after an initial solution has been implemented. Rather than ending the exercise once the program produces the correct output, they may ask how the implementation changes when memory becomes constrained, concurrency is introduced, or millions of users begin interacting with the service simultaneously.</span></p><h2><strong><span>What Coding Skills Should You Expect?</span></strong></h2><p><span>The coding portion of the OpenAI software engineer interview process typically evaluates core software engineering fundamentals rather than obscure algorithms that rarely appear in production systems.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-qS8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-qS8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 424w, https://substackcdn.com/image/fetch/$s_!-qS8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 848w, https://substackcdn.com/image/fetch/$s_!-qS8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 1272w, https://substackcdn.com/image/fetch/$s_!-qS8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-qS8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png" width="846" height="556" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/754a9f33-c119-413c-ad2b-597c961a4360_846x556.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:556,&quot;width&quot;:846,&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_!-qS8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 424w, https://substackcdn.com/image/fetch/$s_!-qS8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 848w, https://substackcdn.com/image/fetch/$s_!-qS8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 1272w, https://substackcdn.com/image/fetch/$s_!-qS8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754a9f33-c119-413c-ad2b-597c961a4360_846x556.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Strong candidates usually spend the first few minutes clarifying assumptions before touching the keyboard. Asking thoughtful questions demonstrates engineering maturity because production software rarely begins with perfectly defined requirements.</span></p><h1><strong><span>System Design Carries Significant Weight</span></strong></h1><p><span>The System Design interview remains one of the most important stages of the OpenAI software engineer interview process because engineers frequently build infrastructure that supports extremely large-scale AI applications. Interviewers want to understand not only whether your </span><a href="https://www.educative.io/courses/grokking-the-product-architecture-interview?aff=xDPD"><span>architecture</span></a><span> functions correctly but also whether you appreciate operational realities such as latency, observability, fault tolerance, deployment strategies, and cost optimization.</span></p><p><span>Candidates sometimes overcomplicate these interviews by attempting to include every modern technology they have encountered. Experienced engineers generally take the opposite approach by beginning with requirements, identifying constraints, and allowing the architecture to emerge naturally from those discussions.</span></p><h2><strong><span>Start With Requirements Before Architecture</span></strong></h2><p><span>One of the easiest ways to distinguish yourself during a System Design interview is by resisting the temptation to immediately draw boxes and arrows. Strong candidates first discuss expected traffic, latency requirements, consistency expectations, availability goals, storage patterns, and operational constraints before proposing specific technologies.</span></p><p><span>That conversation demonstrates that your architectural decisions are driven by engineering requirements rather than personal preferences or industry trends. Interviewers often care far more about your reasoning than whether you selected Kafka instead of RabbitMQ or PostgreSQL instead of DynamoDB.</span></p><h1><strong><span>AI Knowledge Matters, But It Is Rarely the Entire Interview</span></strong></h1><p><span>OpenAI naturally expects engineers to feel comfortable working in an AI-first environment, but software engineering interviews usually focus on building reliable systems around AI rather than asking candidates to derive transformer equations from memory.</span></p><p><span>Depending on the team, discussions may involve inference serving, prompt management, retrieval systems, evaluation pipelines, batching strategies, vector databases, or monitoring large-scale AI applications. Interviewers generally want to understand how software engineering principles apply to AI products rather than evaluating deep machine learning research expertise.</span></p><p><span>Candidates with previous experience building distributed systems often discover that many AI architectures rely upon familiar engineering concepts including APIs, caching, asynchronous processing, databases, load balancing, and observability.</span></p><h1><strong><span>Expect Deep Conversations About Previous Projects</span></strong></h1><p><span>One of the most valuable sections of the OpenAI software engineer interview process is the project deep dive because it provides interviewers with direct evidence of how you solve real engineering problems. Rather than discussing hypothetical scenarios, you are asked to explain systems you actually designed, implemented, maintained, or improved throughout your career.</span></p><p><span>Interviewers frequently explore architectural tradeoffs, technical constraints, debugging strategies, production incidents, scalability decisions, and lessons learned after deployment. Candidates who genuinely understand every aspect of their previous work usually perform much better than those who prepared only high-level project summaries.</span></p><h2><strong><span>Demonstrating Technical Ownership</span></strong></h2><p><span>Ownership extends beyond writing code. Interviewers often ask why a particular architectural decision was made, what alternatives were considered, how the team measured success, and what improvements you would implement today if you rebuilt the same system from scratch.</span></p><p><span>Those discussions allow interviewers to evaluate engineering judgment, decision-making, and technical leadership without relying exclusively on abstract interview questions.</span></p><h1><strong><span>Behavioral Interviews Focus on Engineering Judgment</span></strong></h1><p><span>Many candidates underestimate behavioral interviews because they assume technical ability alone determines hiring decisions. In reality, OpenAI places considerable emphasis on collaboration because building AI systems requires engineers to work closely with researchers, product managers, designers, infrastructure teams, and safety specialists.</span></p><p><span>Behavioral questions frequently explore situations involving technical disagreements, production incidents, difficult tradeoffs, ambiguous requirements, and rapidly changing priorities. Strong answers combine clear communication with thoughtful engineering reasoning rather than simply describing interpersonal experiences.</span></p><p><span>Interviewers also want to understand why you specifically want to join OpenAI. Generic enthusiasm for artificial intelligence rarely stands out because nearly every candidate shares that interest. More compelling answers connect your own engineering experience with the company&#8217;s mission of developing reliable and broadly useful AI systems.</span></p><h1><strong><span>Common Mistakes Candidates Make</span></strong></h1><p><span>Many otherwise strong engineers struggle during the OpenAI software engineer interview process because they optimize for solving problems instead of demonstrating engineering thoughtfulness. Rushing directly into implementation often prevents interviewers from seeing how candidates evaluate assumptions, identify tradeoffs, or adapt to changing requirements.</span></p><p><span>Another common mistake is treating System Design as an exercise in naming technologies. Experienced interviewers are generally much more interested in understanding why particular architectural decisions were made than hearing a list of popular infrastructure components. Simplicity, reliability, and operational clarity almost always outperform unnecessarily complicated architectures.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ENlm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ENlm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 424w, https://substackcdn.com/image/fetch/$s_!ENlm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 848w, https://substackcdn.com/image/fetch/$s_!ENlm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 1272w, https://substackcdn.com/image/fetch/$s_!ENlm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ENlm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png" width="1212" height="534" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adccc1bb-e41d-4106-af00-299725f49c94_1212x534.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:534,&quot;width&quot;:1212,&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_!ENlm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 424w, https://substackcdn.com/image/fetch/$s_!ENlm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 848w, https://substackcdn.com/image/fetch/$s_!ENlm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 1272w, https://substackcdn.com/image/fetch/$s_!ENlm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadccc1bb-e41d-4106-af00-299725f49c94_1212x534.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong><span>How I Would Prepare for the OpenAI Software Engineer Interview Process</span></strong></h1><p><span>If I were preparing today, I would avoid spending months exclusively solving difficult algorithm problems because that leaves significant gaps in interview readiness. Instead, I would divide preparation across programming fundamentals, distributed systems, production software architecture, behavioral storytelling, and AI infrastructure concepts.</span></p><p><span>I would also spend considerable time reviewing previous engineering projects because interviewers frequently discover more about a candidate during project discussions than during coding exercises. Being able to explain why you made architectural decisions, how systems evolved over time, and what you learned from production failures often creates a stronger impression than solving another advanced dynamic programming question.</span></p><p><span>Finally, I would practice communicating every technical decision aloud. Clear communication is not separate from technical ability during the OpenAI software engineer interview process. It is one of the primary ways interviewers evaluate how effectively you collaborate with other engineers when solving difficult production problems.</span></p><h1><strong><span>Final Thoughts</span></strong></h1><p><span>The OpenAI software engineer interview process evaluates much more than programming ability. Successful candidates demonstrate strong software engineering fundamentals while also showing thoughtful communication, sound architectural reasoning, practical System Design skills, and the ability to navigate ambiguity without losing sight of the underlying engineering problem.</span></p><p><span>If your preparation focuses equally on coding, distributed systems, previous engineering projects, behavioral discussions, and modern AI infrastructure, you will be preparing for the interview that OpenAI appears to conduct today rather than the interview many candidates mistakenly expect. Ultimately, the goal is not to impress interviewers with memorized answers but to demonstrate that you can build reliable software, make thoughtful engineering decisions, and contribute effectively to one of the fastest-moving engineering environments in the industry.</span></p>]]></content:encoded></item><item><title><![CDATA[Anthropic Software Engineer Interview Questions I'd Prepare for First in 2026]]></title><description><![CDATA[The coding, System Design, and behavioral questions that best reflect today's Anthropic engineering interviews]]></description><link>https://engineeringenablement.substack.com/p/anthropic-software-engineer-interview</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/anthropic-software-engineer-interview</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Wed, 22 Jul 2026 06:11:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Jopr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>If you are preparing for Anthropic, it is easy to assume that success depends on mastering increasingly difficult LeetCode problems or memorizing every detail of transformer architectures. Recent interview experiences suggest something different.</span></p><p><span>Anthropic certainly expects excellent software engineering fundamentals, but interviewers also place significant emphasis on engineering judgment, communication, System Design, and the ability to reason through ambiguous technical problems.</span></p><p><span>Instead of looking for candidates who can simply produce the correct answer, they want engineers who explain tradeoffs, ask thoughtful questions, and build reliable software under realistic constraints. That makes preparing for Anthropic software engineer interview questions different from preparing for many traditional big tech interviews.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>What Anthropic Is Really Looking For</span></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_!Jopr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jopr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 424w, https://substackcdn.com/image/fetch/$s_!Jopr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 848w, https://substackcdn.com/image/fetch/$s_!Jopr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 1272w, https://substackcdn.com/image/fetch/$s_!Jopr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jopr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1063215,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://engineeringenablement.substack.com/i/208018184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.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_!Jopr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 424w, https://substackcdn.com/image/fetch/$s_!Jopr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 848w, https://substackcdn.com/image/fetch/$s_!Jopr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 1272w, https://substackcdn.com/image/fetch/$s_!Jopr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcb6bd4f-ec21-4f7b-849e-444894379d40_1692x929.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><span>Although every engineering team has its own priorities, Anthropic interviews generally evaluate several dimensions throughout the hiring process instead of isolating coding from System Design or behavioral discussions. Strong programming ability remains essential, but interviewers also want to understand how you approach unfamiliar problems, collaborate with teammates, and make architectural decisions that balance simplicity, scalability, and reliability.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V8SW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V8SW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 424w, https://substackcdn.com/image/fetch/$s_!V8SW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 848w, https://substackcdn.com/image/fetch/$s_!V8SW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 1272w, https://substackcdn.com/image/fetch/$s_!V8SW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V8SW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png" width="842" height="458" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:458,&quot;width&quot;:842,&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_!V8SW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 424w, https://substackcdn.com/image/fetch/$s_!V8SW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 848w, https://substackcdn.com/image/fetch/$s_!V8SW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 1272w, https://substackcdn.com/image/fetch/$s_!V8SW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0db58e5-df76-4a6e-a62e-f43c41d3b475_842x458.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One theme appears consistently across candidate experiences. Rather than rewarding memorized solutions, Anthropic interviewers often extend problems with changing requirements, forcing candidates to adapt their thinking while clearly communicating every decision they make.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/anthropic-software-engineer-interview?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/anthropic-software-engineer-interview?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><h1><strong><span>Coding Interview Questions</span></strong></h1><h2><strong><span>1. Design an LRU Cache</span></strong></h2><p><span>This remains one of the most common software engineering </span><a href="https://www.educative.io/courses/grokking-coding-interview?aff=xDPD"><span>coding interview</span></a><span> questions because it combines data structures with practical software design. Interviewers are evaluating whether you understand hash maps, linked lists, time complexity, and clean API design rather than simply recalling a memorized implementation. Be prepared to discuss concurrency, memory limitations, and how your solution could evolve in production.</span></p><h2><strong><span>2. Build a Rate Limiter</span></strong></h2><p><span>Rate limiting appears frequently because modern AI systems must protect expensive inference infrastructure from abuse. Interviewers want to see whether you understand algorithms such as token buckets or sliding windows while also considering distributed deployments, multiple application servers, and consistency between instances instead of solving only the single-machine version.</span></p><h2><strong><span>3. Implement a Time-Based Key Value Store</span></strong></h2><p><span>Although this question initially looks like a straightforward data structure exercise, interviewers often introduce additional constraints around efficient lookups, ordering, and storage optimization. Strong candidates explain why they selected particular data structures before writing code and discuss how the implementation behaves as the dataset grows.</span></p><h2><strong><span>4. Parse and Validate Structured Input</span></strong></h2><p><span>Many engineering teams spend more time processing imperfect input than implementing complex algorithms. Questions involving JSON, logs, or structured text allow interviewers to evaluate clean code organization, validation, edge-case handling, and testing practices while avoiding artificial algorithm puzzles.</span></p><h2><strong><span>5. Build a Thread-Safe Queue</span></strong></h2><p><span>Concurrency becomes increasingly important as software systems scale. Interviewers may ask how multiple producers and consumers interact, what synchronization mechanisms you would use, and how race conditions or deadlocks could affect the implementation. Clear reasoning often matters as much as the final code itself.</span></p><h2><strong><span>6. Traverse a Grid or Graph</span></strong></h2><p><span>Graph traversal remains a fundamental interview topic because it evaluates algorithmic thinking without becoming unnecessarily obscure. Instead of focusing exclusively on whether you remember breadth-first search or depth-first search, interviewers often explore how your solution changes when constraints such as memory, performance, or changing graph structures are introduced.</span></p><h1><strong><span>System Design Interview Questions</span></strong></h1><h2><strong><span>7. Design a Prompt Management Platform</span></strong></h2><p><span>Prompt management has become an important part of production AI systems. </span><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>System Design interviews</span></a><span> want to understand how prompts are versioned, stored, audited, tested, and deployed safely across different applications while maintaining reliability and minimizing operational complexity.</span></p><h2><strong><span>8. Design an AI Chat Application</span></strong></h2><p><span>Although the interface appears simple, production chat systems involve authentication, conversation history, streaming responses, monitoring, rate limiting, caching, and fault tolerance. Strong candidates organize their discussion around requirements before introducing infrastructure rather than immediately naming technologies.</span></p><h2><strong><span>9. Design a Distributed Job Queue</span></strong></h2><p><span>Background processing powers everything from document analysis to model evaluation pipelines. Interviewers typically evaluate how producers and consumers communicate, how failures are handled, how duplicate work is avoided, and how the system scales under increasing workloads.</span></p><h2><strong><span>10. Design a Vector Search Service</span></strong></h2><p><span>Vector databases have become increasingly common in AI applications. Rather than expecting deep machine learning expertise, interviewers usually focus on indexing, latency, storage, retrieval, metadata filtering, and how the service integrates with the rest of a production architecture.</span></p><h2><strong><span>11. Design a Feature Flag Platform</span></strong></h2><p><span>Feature flags allow engineering teams to deploy safely while gradually rolling out new functionality. Interviewers want to understand caching strategies, configuration management, consistency requirements, monitoring, rollback mechanisms, and operational reliability rather than simply drawing architectural diagrams.</span></p><h1><strong><span>Behavioral and Project Questions</span></strong></h1><h2><strong><span>12. Tell Me About Your Most Challenging Engineering Project</span></strong></h2><p><span>This question often becomes one of the longest discussions in the interview because it reveals technical depth far better than prepared behavioral stories. Interviewers usually explore architectural decisions, production incidents, tradeoffs, debugging strategies, and lessons learned instead of accepting a high-level overview.</span></p><h2><strong><span>13. Describe a Technical Decision You Changed</span></strong></h2><p><span>Engineering involves revising assumptions when new information becomes available. Interviewers appreciate candidates who can explain why an original design changed, what evidence supported the new direction, and how they balanced technical quality with delivery timelines.</span></p><h2><strong><span>14. Describe a Production Incident You Helped Resolve</span></strong></h2><p><span>Reliable software inevitably encounters failures. Rather than looking for dramatic outage stories, interviewers want to understand your debugging process, communication during incidents, root-cause analysis, and the preventative improvements implemented after the issue was resolved.</span></p><h2><strong><span>15. Why Do You Want to Work at Anthropic?</span></strong></h2><p><span>This question evaluates much more than enthusiasm for artificial intelligence. Strong answers connect your engineering interests with Anthropic&#8217;s mission of building safe and reliable AI systems while demonstrating that you understand the company&#8217;s technical challenges instead of offering generic praise for its products.</span></p><h2><strong><span>How to Prepare More Effectively</span></strong></h2><p><span>Many candidates spend months solving increasingly difficult algorithm problems while neglecting the areas that ultimately determine interview performance. A more balanced preparation strategy includes coding practice, distributed systems, communication, and thoughtful discussion of previous engineering projects because Anthropic evaluates complete software engineers rather than algorithm specialists.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vVY3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vVY3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 424w, https://substackcdn.com/image/fetch/$s_!vVY3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 848w, https://substackcdn.com/image/fetch/$s_!vVY3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 1272w, https://substackcdn.com/image/fetch/$s_!vVY3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vVY3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png" width="902" height="496" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:496,&quot;width&quot;:902,&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_!vVY3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 424w, https://substackcdn.com/image/fetch/$s_!vVY3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 848w, https://substackcdn.com/image/fetch/$s_!vVY3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 1272w, https://substackcdn.com/image/fetch/$s_!vVY3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bf2005d-31f4-49ce-ad9d-f117ef6c3a7a_902x496.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One of the biggest differences between Anthropic and many traditional technology companies is that interviewers frequently introduce changing requirements throughout the interview. Instead of viewing those changes as obstacles, treat them as opportunities to demonstrate engineering judgment. Asking clarifying questions, discussing tradeoffs, and adapting your solution confidently usually creates a much stronger impression than immediately rushing toward implementation.</span></p><h2><strong><span>Final Thoughts</span></strong></h2><p><span>Preparing for Anthropic software engineer interview questions is ultimately about becoming a stronger engineer rather than memorizing a larger collection of interview problems. Coding ability remains essential, but successful candidates also demonstrate curiosity, sound architectural thinking, effective communication, and the ability to make thoughtful engineering decisions under uncertainty.</span></p><p><span>If you can comfortably discuss the fifteen questions covered here while explaining not only </span><strong><span>what</span></strong><span> solution you would build but also </span><strong><span>why</span></strong><span> you would build it that way, you will be preparing for the type of interview Anthropic increasingly appears to conduct. The goal is not simply to solve problems but to demonstrate that you can design, build, operate, and continuously improve production software in an AI-first engineering environment.</span></p>]]></content:encoded></item><item><title><![CDATA[How I would approach the Stripe System Design interview today]]></title><description><![CDATA[How to approach Stripe System Design interviews by thinking in APIs, payments, and reliability at a global scale]]></description><link>https://engineeringenablement.substack.com/p/how-i-would-approach-the-stripe-system</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/how-i-would-approach-the-stripe-system</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Tue, 21 Jul 2026 05:01:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!elcF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>If you approach a Stripe System Design interview with the mindset that you are simply designing another payment system, you will get part of the way there, but you will miss the defining layer that makes Stripe fundamentally different. Stripe is not just a payments company. It is an infrastructure company that exposes payments as programmable APIs, and that distinction changes how systems are designed, scaled, and reasoned about.</span></p><p><span>In a traditional payment system, the focus is primarily on correctness, consistency, and transaction safety. Stripe shares those constraints, but it adds another dimension that is just as critical: developer experience. Every system you design in this interview is not just consumed internally; it is consumed by thousands of external developers who depend on predictable APIs, clear semantics, and reliable behavior under failure.</span></p><p><span>This introduces a new kind of pressure on </span><a href="https://www.educative.io/courses/grokking-system-design-fundamentals?aff=xDPD"><span>System Design</span></a><span>. It is no longer enough for the system to be correct internally. It must also be understandable and usable externally. That means error handling, idempotency, and API consistency are not implementation details; they are part of the product itself.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>The nature of systems Stripe builds</span></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_!elcF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!elcF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!elcF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!elcF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!elcF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!elcF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!elcF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!elcF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!elcF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!elcF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d93c1-dd62-41f2-b182-97602d4e366e_1693x929.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>To understand what Stripe is evaluating in their </span><a href="https://www.educative.io/courses/grokking-the-system-design-interview?aff=xDPD"><span>System Design interview</span></a><span>, you need to understand the type of systems they operate. Stripe builds APIs that allow businesses to accept payments, manage subscriptions, handle payouts, and interact with financial infrastructure without needing to understand the underlying complexity.</span></p><p><span>These systems sit at the intersection of payments, distributed systems, and developer platforms. They must handle high volumes of transactions, integrate with external banking networks, and provide a clean abstraction to developers.</span></p><p><span>The table below captures how Stripe-style systems differ from general payment systems:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Eaj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Eaj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 424w, https://substackcdn.com/image/fetch/$s_!-Eaj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 848w, https://substackcdn.com/image/fetch/$s_!-Eaj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 1272w, https://substackcdn.com/image/fetch/$s_!-Eaj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Eaj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png" width="1276" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1276,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Eaj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 424w, https://substackcdn.com/image/fetch/$s_!-Eaj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 848w, https://substackcdn.com/image/fetch/$s_!-Eaj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 1272w, https://substackcdn.com/image/fetch/$s_!-Eaj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faac71f7c-f52a-499e-81a8-d3b80f7fa84b_1276x708.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This difference matters because the interview is not just testing whether you can design a payment system, but whether you can design a system that exposes payments safely and reliably to external users.</span></p><h2><strong><span>How Stripe frames System Design problems</span></strong></h2><p><span>Stripe System Design interviews often involve problems such as designing a payment API, a subscription billing system, or a webhook delivery system. These problems may sound familiar, but the depth lies in how you handle </span><a href="https://www.educative.io/courses/grokking-the-api-design-interview-crash-course?aff=xDPD"><span>API design</span></a><span>, reliability, and integration with external systems.</span></p><p><span>The interviewer is not just interested in your ability to process transactions, but in how you expose those transactions through APIs. This includes how you design endpoints, handle errors, and ensure that developers can interact with the system predictably.</span></p><p><span>A strong answer begins by defining both the internal workflow and the external interface. You want to understand how developers will use the system, what guarantees they expect, and how the system behaves under failure.</span></p><h2><strong><span>A representative problem: designing a payment API</span></strong></h2><p><span>Consider a scenario where you are asked to design an API that allows developers to process payments. At a high level, the system must accept payment requests, process transactions, and return results to the client.</span></p><p><span>The table below outlines the core components of such a system:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mXW3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mXW3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 424w, https://substackcdn.com/image/fetch/$s_!mXW3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 848w, https://substackcdn.com/image/fetch/$s_!mXW3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 1272w, https://substackcdn.com/image/fetch/$s_!mXW3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mXW3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png" width="1206" height="526" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:526,&quot;width&quot;:1206,&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_!mXW3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 424w, https://substackcdn.com/image/fetch/$s_!mXW3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 848w, https://substackcdn.com/image/fetch/$s_!mXW3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 1272w, https://substackcdn.com/image/fetch/$s_!mXW3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09d31d18-7d92-4524-ae5b-7e98ad635e1f_1206x526.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>At first glance, this architecture resembles a standard payment system, but the complexity increases when you consider how developers interact with it. Every API response, error message, and retry behavior becomes part of the contract.</span></p><h2><strong><span>API design as a first-class concern</span></strong></h2><p><span>One of the defining aspects of Stripe systems is that APIs are not just interfaces; they are products. This means that API design must be treated as a first-class concern.</span></p><p><span>For example, when a payment request fails, the system must provide a clear and consistent error message that allows developers to understand what went wrong. Ambiguous errors can lead to incorrect retries or failed integrations.</span></p><p><span>Similarly, API versioning becomes critical. As the system evolves, changes must be introduced in a way that does not break existing integrations. This requires careful planning and backward compatibility.</span></p><p><span>The challenge here is that API design decisions have long-term implications. Once an API is exposed, it becomes difficult to change without impacting users.</span></p><h2><strong><span>Idempotency and retry behavior</span></strong></h2><p><span>In a Stripe-style system, idempotency is not just an internal mechanism; it is exposed to developers as part of the API. Clients are expected to include idempotency keys in their requests to ensure that retries do not result in duplicate operations.</span></p><p><span>This is particularly important because network failures are common, and clients will often retry requests when they do not receive a response. Without idempotency, these retries could lead to duplicate charges.</span></p><p><span>Designing this layer requires careful consideration. The system must store idempotency keys, associate them with requests, and ensure that repeated requests return the same result. This introduces additional storage and lookup overhead, but it is essential for correctness.</span></p><h2><strong><span>Handling asynchronous workflows</span></strong></h2><p><span>Many operations in Stripe systems are not completed immediately. For example, a payment may require external authorization from a bank, which introduces delays and uncertainty.</span></p><p><span>To handle this, Stripe uses asynchronous workflows where the initial API request returns a status, and subsequent updates are communicated through webhooks. This allows the system to remain responsive while handling long-running operations.</span></p><p><span>The table below outlines the flow:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iSeU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iSeU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 424w, https://substackcdn.com/image/fetch/$s_!iSeU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 848w, https://substackcdn.com/image/fetch/$s_!iSeU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 1272w, https://substackcdn.com/image/fetch/$s_!iSeU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iSeU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png" width="1178" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:1178,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iSeU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 424w, https://substackcdn.com/image/fetch/$s_!iSeU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 848w, https://substackcdn.com/image/fetch/$s_!iSeU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 1272w, https://substackcdn.com/image/fetch/$s_!iSeU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee82ad9b-0963-49e0-b86c-a17b161ffa81_1178x450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This approach introduces complexity in state management and event delivery, but it provides a flexible and scalable way to handle asynchronous operations.</span></p><h2><strong><span>Reliability and failure handling</span></strong></h2><p><span>Reliability is a core requirement for Stripe systems because failures can directly impact financial transactions and developer integrations. The system must handle failures gracefully and provide clear feedback to clients.</span></p><p><span>One of the key challenges is dealing with partial failures. For example, a payment may be processed internally but fail to notify the client due to a network issue. In such cases, the system must ensure that the client can eventually retrieve the correct state.</span></p><p><span>The table below outlines common failure scenarios and strategies:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!08S9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!08S9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 424w, https://substackcdn.com/image/fetch/$s_!08S9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 848w, https://substackcdn.com/image/fetch/$s_!08S9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 1272w, https://substackcdn.com/image/fetch/$s_!08S9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!08S9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png" width="1232" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:1232,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!08S9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 424w, https://substackcdn.com/image/fetch/$s_!08S9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 848w, https://substackcdn.com/image/fetch/$s_!08S9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 1272w, https://substackcdn.com/image/fetch/$s_!08S9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141b4780-31f5-4b4b-8299-0bdb5bd6dc38_1232x444.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>What makes these scenarios challenging is that they often involve multiple systems. A robust design must ensure that failures in one part of the system do not lead to inconsistencies elsewhere.</span></p><h2><strong><span>Ledger and financial correctness</span></strong></h2><p><span>Like all payment systems, Stripe relies on a ledger to maintain financial correctness. The ledger records all transactions as immutable entries, providing a source of truth for the system.</span></p><p><span>This design ensures that every operation can be audited and verified. It also simplifies reconciliation, as the system can compare its internal state with external records.</span></p><p><span>However, maintaining a ledger at scale introduces challenges in terms of performance and storage. The system must be designed to handle high volumes of transactions while ensuring that queries remain efficient.</span></p><h2><strong><span>Scaling Stripe systems under real constraints</span></strong></h2><p><span>Scaling a Stripe system is not just about handling more requests; it is about handling them while maintaining correctness and API reliability. This introduces unique challenges that go beyond traditional scaling strategies.</span></p><p><span>The table below outlines common bottlenecks and strategies:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Fym!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Fym!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 424w, https://substackcdn.com/image/fetch/$s_!3Fym!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 848w, https://substackcdn.com/image/fetch/$s_!3Fym!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 1272w, https://substackcdn.com/image/fetch/$s_!3Fym!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Fym!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png" width="1274" height="488" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:488,&quot;width&quot;:1274,&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_!3Fym!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 424w, https://substackcdn.com/image/fetch/$s_!3Fym!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 848w, https://substackcdn.com/image/fetch/$s_!3Fym!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 1272w, https://substackcdn.com/image/fetch/$s_!3Fym!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd0f3f0-b36f-4d37-bbc8-4cf9f8888aff_1274x488.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Each of these strategies must be implemented carefully to avoid compromising correctness or developer experience.</span></p><h2><strong><span>Observability and developer trust</span></strong></h2><p><span>Observability in Stripe systems is not just about internal monitoring; it is about building trust with developers. Clients need to understand what is happening in the system and be able to debug issues effectively.</span></p><p><span>This requires providing detailed logs, clear error messages, and tools for tracking requests and events. It also requires maintaining consistent behavior across different parts of the system.</span></p><p><span>Without strong observability, developers may lose trust in the platform, which can have significant business implications.</span></p><h2><strong><span>Structuring your answer in the interview</span></strong></h2><p><span>When presenting your design, it is important to structure your explanation around both the internal workflow and the external API. Start by defining the requirements and constraints, then describe how the system processes requests and how it exposes results to clients.</span></p><p><span>Instead of jumping directly into a distributed architecture, build your design incrementally. Explain how each component addresses a specific challenge and how it interacts with the rest of the system.</span></p><p><span>This approach demonstrates a clear understanding of both System Design and API design.</span></p><h2><strong><span>What Stripe is really evaluating</span></strong></h2><p><span>At its core, the Stripe System Design interview evaluates your ability to design systems that are both technically sound and developer-friendly. It is testing whether you understand how to build systems that handle financial transactions reliably while exposing them through clean and predictable APIs.</span></p><p><span>The strongest candidates are those who can reason about trade-offs, justify their decisions, and consider both internal and external perspectives.</span></p><h2><strong><span>Final perspective</span></strong></h2><p><span>Designing systems for Stripe requires a shift in mindset from internal correctness to external reliability. It requires an understanding of how APIs are used, how failures are handled, and how systems behave under real-world conditions.</span></p><p><span>If you approach the interview with this perspective, you will find that the problem becomes more coherent. Instead of trying to design the most complex system, focus on designing a system that is reliable, predictable, and aligned with the needs of developers.</span></p>]]></content:encoded></item><item><title><![CDATA[How companies like OpenAI and Anthropic design their AI Systems]]></title><description><![CDATA[Inside the architecture behind today's most advanced AI systems]]></description><link>https://engineeringenablement.substack.com/p/how-companies-like-openai-and-anthropic</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/how-companies-like-openai-and-anthropic</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Mon, 20 Jul 2026 10:02:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FFcM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I have been in conversations where people tried to reverse-engineer how companies like OpenAI or Anthropic design their AI systems by looking at API documentation or blog posts, and the conclusions were often misleading because they focused on surface-level components such as models or endpoints rather than the underlying systems that make those models usable, reliable, and scalable under real-world conditions.</span></p><p><span>The reality is that these companies are not just building models but entire ecosystems around those models, where data pipelines, training infrastructure, inference systems, safety layers, and observability all interact in ways that are difficult to fully appreciate unless you think of them as large-scale distributed systems rather than standalone AI products.</span></p><p><span>If you approach their systems as &#8220;just better models,&#8221; you will miss the architectural decisions that actually define their performance and reliability, because what differentiates companies like </span><a href="https://www.educative.io/courses/building-with-openai?aff=xDPD"><span>OpenAI</span></a><span> and Anthropic is not only model capability but how those models are trained, deployed, constrained, and continuously improved through tightly integrated feedback loops.</span></p><p><span>Understanding how these systems are designed requires shifting your perspective from thinking about AI as a single component to viewing it as a layered system where each layer introduces constraints that must be carefully managed, especially at the scale these companies operate.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>The system is not the model</span></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_!FFcM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FFcM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!FFcM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!FFcM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!FFcM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FFcM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FFcM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!FFcM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!FFcM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!FFcM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d28a626-11fc-43fa-9b87-ab0bed976b06_1693x929.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One of the most important realizations when studying companies like OpenAI and Anthropic is that the model itself is only one part of a much larger system, and while it is the most visible component, it is not the only one that determines the system&#8217;s behavior.</span></p><p><span>A production</span><a href="https://www.educative.io/courses/agentic-ai-systems?aff=xDPD"><span> AI system</span></a><span> at this scale includes data ingestion pipelines, training infrastructure, evaluation frameworks, inference serving layers, safety and alignment mechanisms, and monitoring systems, all of which must work together seamlessly to deliver consistent performance.</span></p><p><span>The following table breaks down the major layers in a typical large-scale AI system and how they contribute to the overall architecture.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vcT5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vcT5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 424w, https://substackcdn.com/image/fetch/$s_!vcT5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 848w, https://substackcdn.com/image/fetch/$s_!vcT5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 1272w, https://substackcdn.com/image/fetch/$s_!vcT5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vcT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png" width="1210" height="626" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0067988e-ba09-49af-a464-b827adfdf006_1210x626.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:626,&quot;width&quot;:1210,&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_!vcT5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 424w, https://substackcdn.com/image/fetch/$s_!vcT5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 848w, https://substackcdn.com/image/fetch/$s_!vcT5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 1272w, https://substackcdn.com/image/fetch/$s_!vcT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0067988e-ba09-49af-a464-b827adfdf006_1210x626.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>What becomes clear is that the model is deeply intertwined with the rest of the </span><a href="https://www.educative.io/courses/grokking-system-design-fundamentals?aff=xDPD"><span>system</span></a><span>, which means that improvements in one layer often depend on changes in others, creating a complex web of dependencies that must be carefully managed.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/how-companies-like-openai-and-anthropic?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/how-companies-like-openai-and-anthropic?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><h2><strong><span>Training systems at scale</span></strong></h2><p><span>The training process for models developed by companies like OpenAI and Anthropic is one of the most resource-intensive aspects of their systems, involving massive datasets and distributed computing infrastructure that spans thousands of GPUs or specialized hardware accelerators.</span></p><p><span>What makes this particularly challenging is not just the scale of computation but the need to ensure consistency and efficiency across distributed systems, where synchronization, fault tolerance, and data throughput become critical factors.</span></p><p><span>Training pipelines are designed to handle continuous streams of data, often incorporating both pretraining datasets and fine-tuning data, which must be carefully curated to balance generalization and task-specific performance.</span></p><p><span>Unlike smaller-scale systems, where training may be a one-time process, these companies operate in a continuous training paradigm, where models are iteratively improved based on new data and feedback, which requires robust infrastructure for managing experiments, tracking performance, and deploying updates.</span></p><h2><strong><span>The role of alignment and safety systems</span></strong></h2><p><span>One of the defining characteristics of companies like OpenAI and Anthropic is their focus on alignment and safety, which goes beyond simple content filtering and involves designing systems that guide model behavior in complex and often ambiguous scenarios.</span></p><p><span>Anthropic, for example, has emphasized approaches such as Constitutional AI, where models are trained to follow a set of principles that guide their responses, while OpenAI has invested heavily in reinforcement learning from human feedback, which uses human evaluations to shape model behavior.</span></p><p><span>These approaches require sophisticated pipelines for collecting, labeling, and integrating feedback, which adds another layer of complexity to the system, because alignment is not a static property but an ongoing process that evolves as models and use cases change.</span></p><p><span>The table below compares some of the key alignment strategies used in large-scale AI systems.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OxC0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OxC0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 424w, https://substackcdn.com/image/fetch/$s_!OxC0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 848w, https://substackcdn.com/image/fetch/$s_!OxC0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 1272w, https://substackcdn.com/image/fetch/$s_!OxC0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OxC0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png" width="1272" height="530" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:530,&quot;width&quot;:1272,&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_!OxC0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 424w, https://substackcdn.com/image/fetch/$s_!OxC0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 848w, https://substackcdn.com/image/fetch/$s_!OxC0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 1272w, https://substackcdn.com/image/fetch/$s_!OxC0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf6bb5ce-6159-4d13-9359-a46905e5a91d_1272x530.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>What emerges from this comparison is that no single approach is sufficient on its own, which is why these companies combine multiple strategies to achieve more robust alignment.</span></p><h2><strong><span>Designing inference systems for real-world usage</span></strong></h2><p><span>Once a model is trained, the next challenge is serving it to users in a way that meets performance expectations, which involves designing inference systems that can handle high request volumes while maintaining low latency and high availability.</span></p><p><span>Inference systems at this scale are highly optimized, often using techniques such as batching, caching, and model quantization to improve efficiency, while also incorporating load balancing and fault tolerance mechanisms to ensure reliability.</span></p><p><span>One of the key challenges is managing the trade-off between latency and throughput, because optimizing for one often impacts the other, which requires careful tuning based on usage patterns and system constraints.</span></p><p><span>The following table outlines some of the key techniques used in inference systems and their impact on performance.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lXLD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lXLD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 424w, https://substackcdn.com/image/fetch/$s_!lXLD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 848w, https://substackcdn.com/image/fetch/$s_!lXLD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 1272w, https://substackcdn.com/image/fetch/$s_!lXLD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lXLD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png" width="1242" height="380" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:380,&quot;width&quot;:1242,&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_!lXLD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 424w, https://substackcdn.com/image/fetch/$s_!lXLD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 848w, https://substackcdn.com/image/fetch/$s_!lXLD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 1272w, https://substackcdn.com/image/fetch/$s_!lXLD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b21f3f9-2e8f-4620-8c57-a1ba86431ad2_1242x380.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>What becomes evident is that inference optimization is not about a single technique but about combining multiple strategies to achieve the desired balance between performance and cost.</span></p><h2><strong><span>Observability and debugging at scale</span></strong></h2><p><span>At the scale these companies operate, observability is not optional but essential, because understanding system behavior requires visibility into every layer of the architecture, from data pipelines to model outputs.</span></p><p><span>This involves collecting detailed metrics on latency, error rates, resource utilization, and user interactions, as well as implementing tracing systems that allow engineers to follow the path of a request through the system.</span></p><p><span>Debugging AI systems is particularly challenging because outputs are not deterministic, which means that identifying the root cause of issues often requires analyzing patterns rather than individual cases.</span></p><p><span>I have seen systems where the lack of proper observability made it difficult to distinguish between model-related issues and infrastructure-related problems, which significantly slowed down troubleshooting and improvement efforts.</span></p><h2><strong><span>Continuous improvement through feedback loops</span></strong></h2><p><span>One of the most important aspects of these systems is their ability to improve over time, which is achieved through feedback loops that collect data from user interactions, evaluate model performance, and feed that information back into the training process.</span></p><p><span>These feedback loops are designed to identify areas where the model performs poorly, such as incorrect or unsafe responses, and use that information to refine the model through additional training or fine-tuning.</span></p><p><span>This creates a cycle where the system becomes more robust and aligned with user needs over time, but it also requires careful management to ensure that feedback is accurate, representative, and effectively integrated into the training process.</span></p><h2><strong><span>Scaling systems responsibly</span></strong></h2><p><span>Scaling AI systems at this level involves not just increasing capacity but managing complexity, because as systems grow, they introduce new challenges related to coordination, consistency, and reliability.</span></p><p><span>This is similar to the challenges faced in distributed systems, where scaling often leads to increased failure modes and operational overhead, which must be addressed through careful design and robust infrastructure.</span></p><p><span>Companies like OpenAI and Anthropic approach scaling incrementally, focusing on understanding system behavior and addressing bottlenecks before expanding capacity, which helps maintain stability and performance.</span></p><h2><strong><span>Bringing it all together</span></strong></h2><p><span>Designing AI systems at the scale of OpenAI and Anthropic requires a holistic approach that considers every aspect of the system, from data and training to inference and safety, because each layer contributes to the overall behavior and performance.</span></p><p><span>The complexity of these systems comes not from any single component but from the interactions between them, which means that success depends on the ability to manage those interactions effectively while balancing competing constraints such as latency, cost, and accuracy.</span></p><p><span>If there is a consistent pattern across these companies, it is that they treat AI systems as evolving entities rather than static products, continuously refining and improving them based on real-world usage and feedback, which ultimately allows them to build systems that are both powerful and reliable at scale.</span></p>]]></content:encoded></item><item><title><![CDATA[How I'd design an ML pipeline for large-scale data today]]></title><description><![CDATA[The architecture patterns behind scalable ML pipelines]]></description><link>https://engineeringenablement.substack.com/p/how-id-design-an-ml-pipeline-for</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/how-id-design-an-ml-pipeline-for</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Fri, 17 Jul 2026 05:13:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3VeM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I&#8217;ve seen ML pipelines that looked perfectly reasonable at a small scale fall apart the moment data volume increased by an order of magnitude. Jobs that once ran in minutes started taking hours, feature generation became inconsistent across environments, and retraining cycles slowed down to the point where models were always learning from stale data.</span></p><p><span>The issue was not that the pipeline was incorrect. It was never designed with scale in mind. Large-scale ML pipelines behave very differently from small or medium-sized ones, and the assumptions that work early on often break under real data pressure.</span></p><p><span>Designing an ML pipeline for large-scale data is not just about adding distributed systems or using bigger clusters. It is about structuring the entire workflow so that it remains reliable, reproducible, and efficient as data grows. That includes how data is ingested, processed, transformed, stored, used for training, and eventually fed back into the system.</span></p><p><span>If you approach it as a sequence of independent steps, the system becomes fragile. If you approach it as a coordinated system with clear boundaries and responsibilities, it becomes scalable.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Start with the shape of the data, not the tools</span></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_!3VeM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3VeM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3VeM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3VeM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3VeM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3VeM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!3VeM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3VeM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3VeM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3VeM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7689f40-7524-4028-b443-f2a293ff02a7_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The first mistake people make when designing large-scale pipelines is starting with tools instead of understanding the data. They jump straight into choosing Spark, Flink, or some distributed framework without asking how data actually flows through the system.</span></p><p><span>At scale, the characteristics of your data matter more than the technology you use. You need to understand how much data is generated, how frequently it arrives, whether it is structured or unstructured, whether it needs to be processed in real time or can be handled in batches, and how it evolves over time.</span></p><p><span>For example, a pipeline designed for daily batch updates behaves very differently from one handling continuous event streams. A system processing billions of log events per day needs different storage and partitioning strategies than one working with periodic snapshots.</span></p><p><span>The pipeline design should emerge from these constraints. If you ignore them, you may build a system that works in theory but struggles in practice.</span></p><h2><strong><span>Define clear stages in the pipeline</span></strong></h2><p><span>A scalable </span><a href="https://www.educative.io/courses/machine-learning-system-design?aff=xDPD"><span>machine learning System Design</span></a><span> is easier to reason about when it is divided into well-defined stages. Each stage should have a clear responsibility and a clear contract with the next stage. This reduces coupling and makes it easier to scale individual parts of the system.</span></p><p><span>At a high level, most large-scale pipelines follow a similar structure. Data is ingested from multiple sources, stored in a raw format, transformed into structured datasets, converted into features, used for model training, and then deployed for serving. Feedback from serving systems is collected and fed back into the pipeline.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iH3U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iH3U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 424w, https://substackcdn.com/image/fetch/$s_!iH3U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 848w, https://substackcdn.com/image/fetch/$s_!iH3U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 1272w, https://substackcdn.com/image/fetch/$s_!iH3U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iH3U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png" width="1140" height="658" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:658,&quot;width&quot;:1140,&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_!iH3U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 424w, https://substackcdn.com/image/fetch/$s_!iH3U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 848w, https://substackcdn.com/image/fetch/$s_!iH3U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 1272w, https://substackcdn.com/image/fetch/$s_!iH3U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32a99704-ae07-4e2b-90d2-9f1a16ce4223_1140x658.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The key is not just defining these stages, but ensuring that each stage can scale independently. This prevents bottlenecks from forming as data volume increases.</span></p><h2><strong><span>Designing the data ingestion layer</span></strong></h2><p><span>At a large scale, data ingestion becomes one of the most critical parts of the pipeline. You are often dealing with high-throughput streams of events coming from multiple sources, such as user interactions, application logs, transactions, or external systems.</span></p><p><span>A common approach is to use a distributed messaging system like Kafka or a cloud-based equivalent. This allows producers to send data into topics, and consumers to process that data independently. The ingestion layer acts as a buffer between data producers and downstream systems.</span></p><p><span>The challenge here is not just handling volume, but ensuring data reliability and consistency. You need to handle duplicate events, out-of-order data, and schema changes. If the ingestion layer is not robust, downstream stages will inherit these issues.</span></p><p><span>Partitioning also becomes important at scale. Data should be partitioned in a way that allows parallel processing while maintaining logical grouping. Poor partitioning can lead to uneven workloads and performance bottlenecks.</span></p><h2><strong><span>Storage strategy for large-scale pipelines</span></strong></h2><p><span>Once data is ingested, it needs to be stored in a way that supports both processing and analysis. At scale, storage is not just about capacity. It is about access patterns, cost, and performance.</span></p><p><span>Most large-scale pipelines use a layered storage approach. Raw data is stored in a data lake in its original format. Processed data is stored in structured formats optimized for querying. Feature data may be stored separately for training and serving.</span></p><p><span>The choice of storage format also matters. Columnar formats like Parquet or ORC are often used because they are efficient for large-scale analytics. Partitioning by time or other relevant dimensions allows queries to scan only the data they need.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f7EK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f7EK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 424w, https://substackcdn.com/image/fetch/$s_!f7EK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 848w, https://substackcdn.com/image/fetch/$s_!f7EK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 1272w, https://substackcdn.com/image/fetch/$s_!f7EK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f7EK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png" width="1076" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:1076,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f7EK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 424w, https://substackcdn.com/image/fetch/$s_!f7EK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 848w, https://substackcdn.com/image/fetch/$s_!f7EK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 1272w, https://substackcdn.com/image/fetch/$s_!f7EK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c9a0680-f87a-48ef-bf5b-2d8137184b5e_1076x450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This layered approach allows the pipeline to scale while maintaining flexibility. You can reprocess data, update features, and retrain models without losing the original data.</span></p><h2><strong><span>Distributed data processing</span></strong></h2><p><span>Processing large-scale data requires distributed computation. Single-machine processing quickly becomes a bottleneck as data volume grows. Frameworks like Spark, Flink, or MapReduce are commonly used to handle this.</span></p><p><span>The key challenge in distributed processing is balancing parallelism with coordination. You want to process data in parallel to improve performance, but you also need to ensure that results are consistent and correct.</span></p><p><span>Data shuffling, joins, and aggregations are often the most expensive operations. Designing pipelines to minimize unnecessary data movement can significantly improve performance. This might involve pre-partitioning data, using efficient join strategies, or reducing the size of intermediate datasets.</span></p><p><span>Another important aspect is fault tolerance. At a large scale, failures are inevitable. The system should be able to recover from failures without losing data or requiring manual intervention.</span></p><h2><strong><span>Feature engineering at scale</span></strong></h2><p><span>Feature engineering becomes more complex as data grows. You are often dealing with a large number of features, each with different computation requirements and update frequencies.</span></p><p><span>At scale, feature engineering needs to be standardized. This is where feature stores become important. They allow features to be defined once and reused across training and serving systems, ensuring consistency.</span></p><p><span>Some features can be computed in batch, such as long-term aggregates or embeddings. Others need to be updated in near real time, such as recent user activity. The pipeline should support both types of features without duplicating logic.</span></p><p><span>Feature computation should also be incremental where possible. Instead of recomputing features from scratch, the system should update them based on new data. This reduces computation cost and improves efficiency.</span></p><h2><strong><span>Training pipelines for large datasets</span></strong></h2><p><span>Training models on large-scale data introduces its own challenges. You need to handle large datasets, manage compute resources efficiently, and ensure that training is reproducible.</span></p><p><span>Distributed training frameworks are often used to parallelize the training process. This can involve splitting data across multiple nodes or using specialized hardware like GPUs.</span></p><p><span>However, scaling training is not just about adding more compute. It is also about managing data efficiently. Loading large datasets into memory, shuffling data, and performing preprocessing steps can become bottlenecks.</span></p><p><span>Reproducibility is another critical concern. At scale, training pipelines involve many components, and small changes can lead to different results. Versioning data, features, and model configurations is essential for maintaining consistency.</span></p><h2><strong><span>Orchestration and workflow management</span></strong></h2><p><span>As pipelines grow in complexity, managing dependencies between different stages becomes challenging. Workflow orchestration tools like Airflow or Kubeflow are often used to manage these dependencies.</span></p><p><span>The orchestration layer ensures that tasks are executed in the correct order, handles retries in case of failures, and provides visibility into the pipeline&#8217;s state.</span></p><p><span>At scale, orchestration also needs to handle scheduling efficiently. Running too many jobs at once can overwhelm resources, while running too few can lead to delays. Balancing resource utilization is an important part of pipeline design.</span></p><h2><strong><span>Model deployment and serving integration</span></strong></h2><p><span>The pipeline does not end with training. Models need to be deployed and integrated into serving systems. This introduces new constraints related to latency, scalability, and reliability.</span></p><p><span>The pipeline should include mechanisms for validating models before deployment. This might involve offline evaluation, shadow testing, or A/B testing. Deployment should be gradual to minimize risk.</span></p><p><span>Integration with serving systems also requires consistency in feature computation. The features used during training must match those used during inference. This is why the pipeline and serving systems need to be tightly coordinated.</span></p><h2><strong><span>Feedback loops and continuous improvement</span></strong></h2><p><span>A large-scale </span><a href="https://www.educative.io/courses/grokking-the-machine-learning-interview?aff=xDPD"><span>machine learning</span></a><span> pipeline is not static. It evolves over time as new data is collected and models are updated. Feedback loops are essential for this process.</span></p><p><span>The pipeline should collect predictions and their outcomes, allowing the system to evaluate model performance continuously. This data can then be used for retraining and improving the model.</span></p><p><span>Handling feedback at scale introduces challenges such as delayed labels, data quality issues, and bias. The pipeline needs to account for these factors to ensure that retraining is effective.</span></p><h2><strong><span>Monitoring and observability</span></strong></h2><p><span>At scale, monitoring becomes critical. You need to track not just system performance, but also data quality and model behavior.</span></p><p><span>Monitoring should cover multiple aspects of the pipeline. Data pipelines should be monitored for delays, missing data, and anomalies. Training pipelines should be monitored for failures and performance metrics. Serving systems should be monitored for latency and errors.</span></p><p><span>Observability also includes logging and tracing. Being able to trace data through the pipeline helps in debugging issues and understanding system behavior.</span></p><h2><strong><span>Common pitfalls in large-scale ML pipelines</span></strong></h2><p><span>One of the most common mistakes is tightly coupling different stages of the pipeline. This makes it difficult to scale and maintain the system. Each stage should be independent and communicate through well-defined interfaces.</span></p><p><span>Another mistake is ignoring data quality. At a large scale, small data issues can have a significant impact. Validation and monitoring should be built into the pipeline.</span></p><p><span>Over-engineering is also a risk. Introducing unnecessary complexity can make the system harder to maintain. It is important to design for current needs while allowing for future growth.</span></p><p><span>Finally, many systems lack proper versioning. Without versioning, it becomes difficult to reproduce results or debug issues.</span></p><h2><strong><span>Final thoughts</span></strong></h2><p><span>Designing an ML pipeline for large-scale data is about more than handling volume. It is about building a system that remains reliable, efficient, and maintainable as data grows.</span></p><p><span>The key is to focus on structure and discipline. Define clear stages, ensure consistency, and design for scalability from the beginning. Balance batch and real-time processing, use distributed systems effectively, and maintain strong monitoring and feedback loops.</span></p><p><span>Most importantly, treat the pipeline as a system rather than a sequence of tasks. The interactions between stages are just as important as the stages themselves.</span></p><p><span>In ML System Design interviews, demonstrating this understanding shows that you can think beyond individual components and design systems that work in real-world conditions. And in practice, that is what makes the difference between pipelines that work temporarily and those that continue to work as data scales.</span></p>]]></content:encoded></item><item><title><![CDATA[How long does it really take to learn Machine Learning from scratch?]]></title><description><![CDATA[A realistic timeline based on how people actually learn ML]]></description><link>https://engineeringenablement.substack.com/p/how-long-does-it-really-take-to-learn</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/how-long-does-it-really-take-to-learn</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Thu, 16 Jul 2026 04:33:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Jzb2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>A while back, I had a conversation with an engineer who had just started exploring machine learning. After a few weeks of watching tutorials and experimenting with small datasets, they asked a question that sounds simple but is surprisingly difficult to answer with precision.</span></p><p><span>&#8220;How long does it actually take to learn machine learning from scratch?&#8221;</span></p><p><span>What they were really asking was not about time. They were asking about certainty. They wanted to know when the confusion would settle, when concepts would start to connect, and when they could feel confident applying machine learning in a real system rather than just following along with examples.</span></p><p><span>This is where most answers fall short. They reduce the question to timelines measured in months or years without addressing what &#8220;learning machine learning&#8221; actually involves. The challenge is not that machine learning takes a long time to learn. The challenge is that it is not a single skill with a clear endpoint.</span></p><p><span>Understanding how long it takes requires breaking down what you are actually trying to learn and how those pieces come together over time.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Why the timeline is harder to define than it seems</span></strong></h2><p><span>At first glance, it feels like this question should have a straightforward answer. Many fields in software engineering have relatively predictable learning curves. You can estimate how long it takes to become productive with a framework or a programming language based on the concepts involved and the level of abstraction.</span></p><p><a href="https://www.educative.io/courses/fundamentals-of-machine-learning-for-software-engineers?aff=xDPD"><span>Machine learning</span></a><span> does not fit neatly into that model. It is not a single layer of abstraction but a stack of interconnected ideas that span multiple domains. When someone starts from scratch, they are not only learning how to build models. They are also learning how data behaves, how optimization works, how uncertainty is handled, and how these systems operate in production environments.</span></p><p><span>This makes the timeline inherently variable. Two people starting at the same point may progress at very different rates depending on their background in programming, mathematics, and System Design. More importantly, they may define &#8220;learning machine learning&#8221; differently. For one person, it might mean training a model on a dataset. For another, it might mean deploying a system that reliably serves predictions under real-world constraints.</span></p><p><span>The difficulty is not in the time itself but in aligning expectations with what the learning process actually entails.</span></p><h2><strong><span>The illusion of quick progress</span></strong></h2><p><span>In the early stages, machine learning can feel deceptively accessible. With modern libraries and tools, it is possible to build and train a model with relatively little code. You can load a dataset, call a training function, and generate predictions within a short period of time.</span></p><p><span>This creates a sense of rapid progress. It feels like you are learning quickly because you are producing results. However, this phase often masks the underlying complexity of what is happening inside the model. Concepts such as feature representation, parameter tuning, and generalization remain hidden behind high-level abstractions.</span></p><p><span>As a result, many beginners reach a point where the surface-level understanding is no longer sufficient. When a model behaves unexpectedly or produces poor results, the lack of deeper intuition becomes apparent. This is where progress tends to slow down, not because the material becomes inherently harder, but because the learning shifts from usage to understanding.</span></p><p><span>The transition from running models to reasoning about them is one of the most significant phases in the learning timeline.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/how-long-does-it-really-take-to-learn?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/how-long-does-it-really-take-to-learn?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/how-long-does-it-really-take-to-learn?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2><strong><span>Breaking down the learning journey into stages</span></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_!Jzb2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jzb2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Jzb2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Jzb2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Jzb2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jzb2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Jzb2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Jzb2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Jzb2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Jzb2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc72648b-dd2a-4eba-b828-529d4524ddbf_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Rather than thinking in terms of a fixed timeline, it is more useful to think of learning machine learning as a progression through distinct stages. Each stage builds on the previous one, and the time spent in each stage depends on how deeply you engage with the concepts.</span></p><p><span>The first stage is familiarization. This is where you are exposed to the basic workflow of machine learning. You learn how to load data, train simple models, and evaluate results. At this stage, the focus is on understanding the overall process rather than the details of how models work internally.</span></p><p><span>As you move beyond this stage, the focus shifts toward building intuition. You start to explore why certain models perform better than others, how data quality affects outcomes, and how different features influence predictions. This requires engaging with concepts such as bias, variance, and overfitting, which are fundamental to understanding model behavior.</span></p><p><span>The next stage involves developing a deeper understanding of the underlying mechanics. This includes learning about optimization techniques, loss functions, and the mathematical structures that govern how models learn. While this stage introduces more technical complexity, it also provides the tools needed to reason about model performance and make informed decisions.</span></p><p><span>Finally, there is the stage where machine learning becomes part of System Design. At this point, the focus is not just on building models but on integrating them into larger systems. This involves considerations such as data pipelines, model deployment, monitoring, and scalability. The challenges here are less about learning new algorithms and more about applying machine learning effectively in real-world environments.</span></p><p><span>Each of these stages contributes to the overall learning timeline, and the transition between them is rarely linear.</span></p><h2><strong><span>The role of prior experience</span></strong></h2><p><span>One of the factors that significantly influences how long it takes to learn machine learning is prior experience. Someone with a strong background in programming may find it easier to implement models and work with libraries. Someone with a background in mathematics may find it easier to understand optimization and probability concepts.</span></p><p><span>However, prior experience can also introduce biases in how the field is approached. Engineers with strong programming skills may rely heavily on frameworks without developing a deep understanding of model behavior. Those with strong mathematical backgrounds may focus on theory without gaining practical experience in </span><a href="https://www.educative.io/courses/machine-learning-system-design?aff=xDPD"><span>building systems</span></a><span>.</span></p><p><span>Effective learning requires balancing these perspectives. Machine learning sits at the intersection of theory and practice, and progress depends on developing both in parallel.</span></p><h2><strong><span>Why the middle phase takes the longest</span></strong></h2><p><span>In many learning journeys, the initial phase is relatively quick, and the advanced phase is defined by specialization. The most challenging part is often the middle, where foundational knowledge must be connected into a coherent mental model.</span></p><p><span>In machine learning, this middle phase is where most of the time is spent. It involves moving from isolated concepts to an integrated understanding of how models, data, and systems interact. This requires not only learning new material but also revisiting and refining previous knowledge.</span></p><p><span>For example, understanding overfitting at a high level is different from recognizing it in a real dataset. Similarly, knowing how gradient descent works conceptually is different from tuning a model to converge efficiently in practice.</span></p><p><span>This phase is where learners develop the ability to diagnose problems, make trade-offs, and adapt to new challenges. It is also where the learning process can feel slow and uncertain, as progress is measured in depth of understanding rather than visible outputs.</span></p><h2><strong><span>Learning machine learning in the context of real systems</span></strong></h2><p><span>As you move toward applying machine learning in production, the nature of the learning process changes again. The focus shifts from individual models to the systems that support them.</span></p><p><span>In a production environment, machine learning is not an isolated component. It is part of a pipeline that includes data collection, preprocessing, model training, deployment, and monitoring. Each stage introduces its own set of challenges and constraints.</span></p><p><span>For example, data pipelines must handle inconsistencies and ensure that training data reflects real-world conditions. Models must operate within latency and resource constraints. Monitoring systems must detect performance degradation and trigger retraining when necessary.</span></p><p><span>Learning to navigate these challenges takes time because it requires understanding how different components interact and how decisions in one part of the system affect the overall behavior.</span></p><p><span>This stage often marks the transition from learning machine learning as a subject to practicing it as part of software engineering.</span></p><h2><strong><span>Estimating a realistic timeline</span></strong></h2><p><span>Given the complexity of the field, providing a single timeline is not particularly useful. However, it is possible to outline a general range based on typical learning paths.</span></p><p><span>For someone starting from scratch, it may take a few weeks to become familiar with basic workflows and tools. Within a few months, it is possible to build and train models with a reasonable level of confidence. However, reaching a point where you can reason about model behavior, diagnose issues, and make informed design decisions often takes significantly longer.</span></p><p><span>Developing production-level understanding, where machine learning is integrated into scalable and reliable systems, can take a year or more of consistent practice. This is not because the concepts are inherently difficult, but because they require exposure to real-world scenarios where trade-offs and constraints become apparent.</span></p><p><span>It is important to recognize that these timelines are not fixed. They depend on the depth of learning, the complexity of problems being tackled, and the amount of hands-on experience gained along the way.</span></p><h2><strong><span>Why the question is often misframed</span></strong></h2><p><span>The question of how long it takes to learn machine learning is often framed as a search for a clear endpoint. In reality, machine learning is a field that evolves continuously, both in terms of techniques and applications.</span></p><p><span>There is no point at which you can say you have fully learned machine learning. Instead, there are levels of proficiency that allow you to work effectively within certain contexts. As you encounter new problems, you continue to expand your understanding and adapt your approach.</span></p><p><span>This makes the learning process more dynamic than in fields with well-defined boundaries. It also means that progress should be measured in terms of capability rather than time.</span></p><h2><strong><span>A more useful way to think about the timeline</span></strong></h2><p><span>Instead of focusing on how long it takes, it is more useful to think about what you can do at different stages of the learning process.</span></p><p><span>In the early stages, the goal is to understand the workflow and build simple models. As you progress, the goal shifts toward developing intuition and the ability to reason about model behavior. Eventually, the focus becomes applying machine learning within larger systems and making decisions that balance performance, reliability, and scalability.</span></p><p><span>Each of these milestones represents a meaningful level of understanding, and reaching them depends on consistent practice and exposure to real problems.</span></p><h2><strong><span>Closing perspective</span></strong></h2><p><span>Learning machine learning from scratch is not defined by a fixed timeline. It is a progression through layers of understanding that build on each other over time. The process involves moving from surface-level familiarity to deep intuition and finally to practical application within real systems.</span></p><p><span>What determines how long it takes is not just the material itself but how you engage with it. Approaching machine learning as a system, rather than as a collection of isolated concepts, provides a clearer path to understanding and reduces the sense of complexity that often accompanies the field.</span></p><p><span>For most learners, the journey is measured not in how quickly they can build their first model, but in how effectively they can reason about and apply machine learning in the problems they care about.</span></p>]]></content:encoded></item><item><title><![CDATA[If you're learning Machine Learning, start with these algorithms]]></title><description><![CDATA[Understand how ML algorithms work instead of just memorizing them]]></description><link>https://engineeringenablement.substack.com/p/if-youre-learning-machine-learning</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/if-youre-learning-machine-learning</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Wed, 15 Jul 2026 06:21:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CJ4n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>A while back, I was reviewing a candidate during a machine learning interview. Their resume listed a long set of algorithms they had &#8220;learned,&#8221; ranging from linear regression to neural networks and even some advanced ensemble methods. On paper, it looked comprehensive. But when the discussion shifted toward how these algorithms actually behave in real systems, the answers became less clear.</span></p><p><span>At one point, I asked a simple question.</span></p><p><span>&#8220;If you had to choose between logistic regression and a tree-based model for a noisy dataset, how would you decide?&#8221;</span></p><p><span>The hesitation that followed was not about definitions. It was about understanding.</span></p><p><span>This is where most learners struggle. They can name algorithms, sometimes even implement them, but they do not yet see them as tools with specific behaviors, constraints, and trade-offs.</span></p><p><span>Understanding machine learning algorithms is not about memorizing a list. It is about recognizing patterns in how different approaches model data, how they fail, and where they fit within a system.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Why learning algorithms feels more complex than it should</span></strong></h2><p><span>When people start learning </span><a href="https://www.educative.io/courses/fundamentals-of-machine-learning-for-software-engineers?aff=xDPD"><span>machine learning</span></a><span>, they are often introduced to algorithms as separate topics. One chapter focuses on regression, another on classification, another on clustering. Each algorithm is presented with its own formula, its own assumptions, and its own examples.</span></p><p><span>This creates a fragmented view of the field.</span></p><p><span>It feels like there are dozens of unrelated techniques, each requiring its own mental model. The result is cognitive overload, where learners struggle to connect concepts across algorithms.</span></p><p><span>In practice, most algorithms fall into a smaller number of patterns. They differ in how they represent relationships, how they handle complexity, and how they respond to data.</span></p><p><span>Once you begin to see those patterns, the landscape becomes easier to navigate.</span></p><h2><strong><span>Linear models and the idea of simple relationships</span></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_!CJ4n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CJ4n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 424w, https://substackcdn.com/image/fetch/$s_!CJ4n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 848w, https://substackcdn.com/image/fetch/$s_!CJ4n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 1272w, https://substackcdn.com/image/fetch/$s_!CJ4n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CJ4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png" width="1456" height="889" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e11b6682-100b-4950-892f-9418178a2e02_1536x938.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:889,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CJ4n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 424w, https://substackcdn.com/image/fetch/$s_!CJ4n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 848w, https://substackcdn.com/image/fetch/$s_!CJ4n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 1272w, https://substackcdn.com/image/fetch/$s_!CJ4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b6682-100b-4950-892f-9418178a2e02_1536x938.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One of the first classes of algorithms most people encounter is linear models. These include linear regression for predicting continuous values and logistic regression for classification tasks.</span></p><p><span>At their core, these models assume that the relationship between inputs and outputs can be approximated as a weighted combination of features. Each feature contributes to the final prediction in a way that is proportional and additive.</span></p><p><span>This simplicity is both a strength and a limitation.</span></p><p><span>On one hand, linear models are easy to train, computationally efficient, and highly interpretable. You can inspect the weights and understand how each feature influences the prediction. This makes them useful in scenarios where explainability is important.</span></p><p><span>On the other hand, their ability to model complex relationships is limited. If the true relationship in the data is highly nonlinear, a linear model will struggle unless the features are carefully engineered to capture those nonlinearities.</span></p><p><span>In real </span><a href="https://www.educative.io/courses/machine-learning-system-design?aff=xDPD"><span>machine learning System Design</span></a><span>, linear models often serve as a baseline. They provide a quick way to establish whether a problem can be solved with simple assumptions before introducing more complex approaches.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/if-youre-learning-machine-learning?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/if-youre-learning-machine-learning?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/if-youre-learning-machine-learning?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2><strong><span>Decision trees and the shift toward conditional logic</span></strong></h2><p><span>Decision trees take a different approach to modeling data. Instead of assuming a linear relationship, they partition the data into regions based on feature values. Each split in the tree represents a decision that divides the dataset into smaller subsets.</span></p><p><span>This creates a model that resembles a set of conditional rules.</span></p><p><span>For example, a tree might split on whether a user&#8217;s activity exceeds a certain threshold, then further split based on another feature. Each path through the tree leads to a prediction.</span></p><p><span>This structure allows decision trees to capture nonlinear relationships without requiring explicit feature engineering.</span></p><p><span>However, this flexibility comes with trade-offs.</span></p><p><span>Decision trees are prone to overfitting, especially when they grow deep and capture noise in the training data. Small changes in the data can lead to very different tree structures, which makes them unstable.</span></p><p><span>In practice, trees are often used as building blocks for more robust methods rather than as standalone models.</span></p><h2><strong><span>Ensemble methods and the idea of combining weak models</span></strong></h2><p><span>One of the most important insights in machine learning is that combining multiple simple models can produce better results than relying on a single complex one.</span></p><p><span>Ensemble methods build on this idea.</span></p><p><span>Techniques like random forests and gradient boosting construct multiple decision trees and combine their outputs to produce a final prediction. Each tree contributes a part of the overall decision, and the aggregation helps reduce variance and improve generalization.</span></p><p><span>Random forests achieve this by training trees on different subsets of the data and averaging their predictions. This reduces the impact of any single tree overfitting to noise.</span></p><p><span>Gradient boosting takes a different approach. It builds trees sequentially, where each new tree focuses on correcting the errors made by the previous ones. This creates a model that progressively improves its performance by addressing its weaknesses.</span></p><p><span>These methods are widely used in practice because they provide strong performance across a variety of problems, especially when dealing with structured data.</span></p><p><span>However, they also introduce complexity in terms of training time and parameter tuning.</span></p><h2><strong><span>Support vector machines and the idea of margins</span></strong></h2><p><span>Support vector machines represent another class of algorithms that approach classification from a geometric perspective.</span></p><p><span>Instead of directly modeling probabilities or rules, they attempt to find a boundary that separates data points from different classes with the maximum possible margin. The margin represents the distance between the boundary and the nearest data points from each class.</span></p><p><span>This focus on margins helps improve generalization.</span></p><p><span>In cases where the data is not linearly separable, support vector machines can use kernel functions to transform the data into a higher-dimensional space where a linear separation becomes possible.</span></p><p><span>While this approach is mathematically elegant, it can become computationally expensive for large datasets. This has limited its use in some modern applications where scalability is a concern.</span></p><p><span>However, the underlying idea of maximizing separation between classes remains an important concept in understanding classification problems.</span></p><h2><strong><span>Clustering algorithms and learning without labels</span></strong></h2><p><span>Not all machine learning problems involve labeled data.</span></p><p><span>Clustering algorithms, such as k-means, address the problem of grouping data points based on similarity without predefined labels. The goal is to partition the dataset into clusters where points within the same cluster are more similar to each other than to those in other clusters.</span></p><p><span>K-means achieves this by iteratively assigning points to cluster centers and updating those centers based on the assigned points.</span></p><p><span>This process continues until the clusters stabilize.</span></p><p><span>Clustering is useful for exploratory analysis, where the structure of the data is not known in advance. It helps identify patterns, segments, and relationships that may not be immediately apparent.</span></p><p><span>However, clustering algorithms rely on assumptions about the shape and distribution of data. For example, k-means assumes that clusters are roughly spherical and evenly sized, which may not hold in all cases.</span></p><p><span>Understanding these assumptions is critical when applying clustering methods in practice.</span></p><h2><strong><span>Neural networks and representation learning</span></strong></h2><p><span>Neural networks introduce a different paradigm by focusing on representation learning.</span></p><p><span>Instead of relying on predefined features or simple partitions, neural networks learn hierarchical representations of data through multiple layers of transformations. Each layer extracts increasingly abstract features from the input.</span></p><p><span>This makes neural networks particularly effective for tasks involving unstructured data, such as images, text, and audio.</span></p><p><span>For example, in image recognition, early layers might detect edges and textures, while deeper layers identify shapes and objects.</span></p><p><span>This ability to learn features directly from raw data reduces the need for manual feature engineering, but it also introduces significant complexity.</span></p><p><span>Training neural networks requires large amounts of data and computational resources. It also involves tuning multiple parameters and dealing with issues such as vanishing gradients and overfitting.</span></p><p><span>Despite these challenges, neural networks have become a central component of modern machine learning systems.</span></p><h2><strong><span>Optimization algorithms and how models learn</span></strong></h2><p><span>While models define how data is represented, optimization algorithms define how models learn.</span></p><p><span>Gradient descent and its variants are the most commonly used optimization techniques. They work by iteratively adjusting model parameters to minimize a loss function, which measures the difference between predictions and actual outcomes.</span></p><p><span>The process involves computing gradients, which indicate how changes in parameters affect the loss. These gradients guide the direction of updates.</span></p><p><span>Different variants of gradient descent, such as stochastic gradient descent and adaptive methods like Adam, introduce variations in how updates are computed and applied.</span></p><p><span>Understanding optimization is important because it influences how quickly and effectively a model converges to a solution.</span></p><h2><strong><span>Choosing the right algorithm in practice</span></strong></h2><p><span>In real-world systems, the choice of algorithm is rarely about finding the most advanced method. It is about aligning the model with the characteristics of the data and the constraints of the system.</span></p><p><span>For structured data with well-defined features, tree-based methods and linear models often perform well. For unstructured data, neural networks are typically more effective. For exploratory analysis, clustering methods provide valuable insights.</span></p><p><span>The decision also depends on factors such as interpretability, computational resources, and latency requirements. For example, a model used in a real-time system must meet strict performance constraints, which may limit the choice of algorithms.</span></p><p><span>Understanding these trade-offs is more important than memorizing specific algorithms.</span></p><h2><strong><span>A more useful way to think about algorithms</span></strong></h2><p><span>Instead of viewing machine learning algorithms as isolated techniques, it is more useful to think of them as different ways of approximating relationships in data.</span></p><p><span>Each algorithm represents a hypothesis about how data behaves. Linear models assume additive relationships. Trees assume conditional partitions. Neural networks assume hierarchical representations.</span></p><p><span>These assumptions determine how the model learns and where it performs well. By focusing on these underlying patterns, you can develop a deeper understanding of how to apply algorithms effectively.</span></p><h2><strong><span>Closing perspective</span></strong></h2><p><span>The most common machine learning algorithms are not just a list of techniques to memorize. They are different approaches to solving the same fundamental problem: learning patterns from data.</span></p><p><span>Understanding them requires looking beyond their definitions and focusing on how they behave in practice, what assumptions they make, and how they interact with real-world systems.</span></p><p><span>The goal is not to know every algorithm, but to understand the principles that guide their use.</span></p><p><span>Because in the end, the difference between a beginner and an experienced practitioner is not how many algorithms they can name, but how well they can choose the right one for the problem at hand.</span></p>]]></content:encoded></item><item><title><![CDATA[The learning path I wish I had for Gen AI System Design]]></title><description><![CDATA[The learning roadmap I'd follow if I was starting with Gen AI System Design in 2026]]></description><link>https://engineeringenablement.substack.com/p/the-learning-path-i-wish-i-had-for</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/the-learning-path-i-wish-i-had-for</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Tue, 14 Jul 2026 05:57:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!H_Fa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>If you try to learn Gen AI System Design by randomly consuming content, you will quickly realize that most resources teach you how to use tools rather than how to think about systems, and that distinction becomes painfully obvious the moment you try to build something that needs to handle real users, real latency constraints, and real failure scenarios instead of just producing a demo that works in isolation.</span></p><p><span>The challenge in 2026 is not the lack of content but the abundance of it, because while there are countless tutorials, courses, and books available, only a small subset actually helps you understand how Gen AI systems behave under production conditions, which is ultimately what separates engineers who can experiment with models from those who can design scalable and reliable systems.</span></p><p><span>What follows is not just a list of resources but a structured way to approach learning Gen AI System Design, where each resource plays a specific role in building your understanding, from foundational system thinking to hands-on implementation and production-level insights.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Educative &#8211; </span><a href="https://www.educative.io/courses/generative-ai-system-design?aff=xDPD"><span>Grokking the Generative AI System Design</span></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_!H_Fa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H_Fa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 424w, https://substackcdn.com/image/fetch/$s_!H_Fa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 848w, https://substackcdn.com/image/fetch/$s_!H_Fa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 1272w, https://substackcdn.com/image/fetch/$s_!H_Fa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H_Fa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png" width="1456" height="496" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:496,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H_Fa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 424w, https://substackcdn.com/image/fetch/$s_!H_Fa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 848w, https://substackcdn.com/image/fetch/$s_!H_Fa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 1272w, https://substackcdn.com/image/fetch/$s_!H_Fa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e59ec-30d5-4984-beb4-a69dcd7ad58c_2048x698.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>If you only pick one resource to build your foundation for Gen AI System Design, this is the one that consistently delivers the most long-term value, not because it only teaches Gen AI, but because it also trains you to think in terms of system constraints, trade-offs, and scalability, which are the exact mental models you need when designing AI-driven systems.</span></p><p><span>What makes this resource particularly effective is that it forces you to reason about how systems evolve under load, how bottlenecks emerge, and how architectural decisions impact performance, which directly translates to Gen AI systems, where components like retrieval pipelines, model inference layers, and memory systems introduce similar challenges.</span></p><p><span>Unlike many Gen AI-focused courses that emphasize tools such as LangChain or prompt engineering techniques, this course also builds a deeper understanding of why certain architectures work and when to use them, which is critical when you move beyond simple applications and start dealing with real-world constraints such as latency budgets and scaling limits.</span></p><h2><strong><span>Generative AI with Large Language Models (DeepLearning.AI &amp; AWS)</span></strong></h2><p><span>This course is often one of the first structured introductions to Gen AI for many developers, and for good reason, because it provides a clear and accessible explanation of how large language models work and how they are integrated into applications.</span></p><p><span>What makes it valuable is not just the theoretical coverage of concepts like embeddings and transformers but the way it connects those concepts to practical use cases, which helps bridge the gap between understanding models and actually using them in applications.</span></p><p><span>However, it is important to approach this resource with the understanding that it focuses more on fundamentals than on full System Design, which means it works best when combined with resources that dive deeper into production challenges such as scaling, observability, and failure handling.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/the-learning-path-i-wish-i-had-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/the-learning-path-i-wish-i-had-for?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><h2><strong><span>AI Engineering by Chip Huyen</span></strong></h2><p><span>This is one of the few resources that treats AI as a systems problem rather than just a modeling problem, which makes it incredibly relevant for anyone serious about learning Gen AI System Design.</span></p><p><span>What sets this book apart is its focus on how AI systems behave in production, including how data pipelines are managed, how models degrade over time, and how feedback loops are used to improve system performance, which are aspects that are often ignored in beginner-level content but become critical in real-world applications.</span></p><p><span>Reading this shifts your perspective from thinking about models in isolation to understanding how they fit into larger systems, which is essential when designing Gen AI applications that need to operate reliably under changing conditions.</span></p><h2><strong><span>Generative AI with LangChain</span></strong></h2><p><span>If you want to move from theory to practice, this is one of the most hands-on resources available, especially because it focuses on building real Gen AI applications such as chatbots, agents, and retrieval-based systems.</span></p><p><span>What makes this resource particularly useful is that it exposes you to the orchestration layer of Gen AI systems, showing how different components, such as prompts, memory, and external tools, interact to produce meaningful outputs.</span></p><p><span>At the same time, it is important to recognize that frameworks like LangChain abstract away much of the underlying complexity, which means you need to complement this resource with more foundational learning to fully understand how the system behaves when things go wrong.</span></p><h2><strong><span>LLM Engineering Handbook</span></strong></h2><p><span>This resource stands out because it focuses specifically on the engineering challenges of working with large language models, including topics such as retrieval-augmented generation, evaluation strategies, and production deployment patterns.</span></p><p><span>What makes it particularly valuable is its emphasis on real-world trade-offs, such as balancing latency and accuracy, managing hallucinations, and optimizing system performance, which are central to Gen AI System Design but often overlooked in more academic resources.</span></p><p><span>It serves as a strong bridge between theoretical understanding and practical implementation, especially for engineers who are transitioning from experimentation to building production systems.</span></p><h2><strong><span>Build a Large Language Model from Scratch by Sebastian Raschka</span></strong></h2><p><span>While this resource is more focused on model development than System Design, it provides a level of depth that significantly enhances your understanding of how language models work internally, which in turn informs your system-level decisions.</span></p><p><span>Understanding concepts such as tokenization, attention mechanisms, and training dynamics can help you make more informed choices about model selection, prompt design, and performance optimization, especially when dealing with constraints like context windows and inference costs.</span></p><p><span>This is one of those resources that may not seem directly related to System Design at first, but the insights it provides can fundamentally change how you approach building Gen AI systems.</span></p><h2><strong><span>Generative AI on AWS</span></strong></h2><p><span>For engineers working in cloud environments, this resource offers a practical perspective on how Gen AI systems are built and deployed at scale, covering topics such as distributed training, inference pipelines, and cost optimization.</span></p><p><span>What makes it particularly useful is its focus on infrastructure, which is often the missing piece in many Gen AI learning paths, because understanding how systems run in production environments is essential for designing scalable and reliable applications.</span></p><p><span>While it is somewhat AWS-specific, the architectural patterns and concepts it covers are broadly applicable to other cloud platforms as well.</span></p><h2><strong><span>Generative Deep Learning by David Foster</span></strong></h2><p><span>This resource expands your understanding of generative models beyond text, covering areas such as image and multimodal generation, which are becoming increasingly important in modern Gen AI systems.</span></p><p><span>While it is not strictly focused on System Design, it provides valuable context for how generative models operate, which can influence how you design systems that incorporate multiple types of data and outputs.</span></p><p><span>It is particularly useful for developers who want to build more advanced applications that go beyond simple text-based interactions.</span></p><h2><strong><span>Comparing the best Gen AI System Design resources</span></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_!k9RJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k9RJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 424w, https://substackcdn.com/image/fetch/$s_!k9RJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 848w, https://substackcdn.com/image/fetch/$s_!k9RJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 1272w, https://substackcdn.com/image/fetch/$s_!k9RJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k9RJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png" width="1264" height="844" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:844,&quot;width&quot;:1264,&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_!k9RJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 424w, https://substackcdn.com/image/fetch/$s_!k9RJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 848w, https://substackcdn.com/image/fetch/$s_!k9RJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 1272w, https://substackcdn.com/image/fetch/$s_!k9RJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c4a1c67-7bfe-488d-8a16-4761f35c1689_1264x844.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>What becomes clear when you look at these resources together is that Gen AI System Design cannot be learned from a single source, because it sits at the intersection of multiple domains, including machine learning, distributed systems, and software engineering.</span></p><h2><strong>Some free resources to start learning Gen AI System Design today</strong></h2><p>If you&#8217;re not ready to invest in a course or book yet, there are several high-quality free resources that can help you build a solid foundation in Gen AI System Design. Rather than focusing on individual frameworks or prompt engineering tricks, these resources emphasize the architectural thinking required to build production-ready AI systems. Together, they cover everything from high-level system concepts and interview preparation to real-world pipeline design and scalable architectures.</p><ul><li><p><strong><a href="https://dev.to/fahimulhaq/generative-ai-system-design-3g2f">Generative AI System Design Guide</a> </strong></p></li><li><p><strong><a href="https://medium.com/@fahimulhaq/designing-genai-pipelines-that-survive-long-term-scale-db5b6c7d56dc">Designing GenAI Pipelines That Survive Long-Term Scale </a></strong></p></li><li><p><strong><a href="https://www.systemdesignhandbook.com/courses/generative-ai-system-design/">Generative AI System Design Free Course</a> </strong></p></li><li><p><strong><a href="https://www.systemdesignhandbook.com/guides/generative-ai-system-design-interview/">Generative AI System Design Interview Guide</a> </strong></p></li></ul><h2><strong><span>How to approach learning Gen AI System Design in 2026</span></strong></h2><p><span>The most effective way to use these resources is not to consume them in isolation but to combine them in a way that builds both conceptual understanding and practical experience, starting with foundational System Design concepts, then moving into Gen AI fundamentals, and finally applying that knowledge through hands-on projects and production-focused learning.</span></p><p><span>What matters most is not how many resources you go through but how well you internalize the principles they teach, because the goal is not to memorize tools or frameworks but to develop the ability to reason about systems, identify constraints, and make informed design decisions.</span></p><h2><strong><span>Bringing it all together</span></strong></h2><p><span>The best resources to learn Gen AI System Design in 2026 are the ones that help you think like a systems engineer rather than just a model user, because building real-world Gen AI applications requires a deep understanding of how different components interact and how systems behave under real conditions.</span></p><p><span>If there is one pattern that consistently emerges, it is that engineers who invest in System Design fundamentals early on are able to adapt more quickly to new tools and technologies, because they understand the underlying principles that remain constant even as the ecosystem evolves.</span></p><p><span>Choosing the right resources is less about finding the perfect course or book and more about building a learning path that balances theory, practice, and system-level thinking, which ultimately determines how effectively you can design and build Gen AI systems in the real world.</span></p>]]></content:encoded></item><item><title><![CDATA[What is a Feature Store in ML System Design? Here's the explanation I wish I had]]></title><description><![CDATA[The ML infrastructure component most beginners overlook]]></description><link>https://engineeringenablement.substack.com/p/what-is-a-feature-store-in-ml-system</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/what-is-a-feature-store-in-ml-system</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Mon, 13 Jul 2026 06:00:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_fyH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I remember a production incident where everything looked correct on the surface. The model had passed offline validation, the deployment pipeline had no issues, and latency metrics were within acceptable limits. Yet within a few days, the predictions started drifting in ways that didn&#8217;t align with anything we had seen during training. It took longer than it should have to realize the problem wasn&#8217;t the model at all. The features being served in production were not identical to the features used during training.</span></p><p><span>That realization changes how you think about </span><a href="https://www.educative.io/courses/machine-learning-system-design?aff=xDPD"><span>machine learning System Design</span></a><span>. Models get most of the attention, but features define what the model actually learns. If those features are inconsistent, delayed, or computed differently across environments, the model becomes unreliable regardless of how strong it looked during experimentation. This is exactly where a feature store becomes critical.</span></p><p><span>A feature store is not just a storage layer. It is a system that standardizes how features are defined, computed, stored, and served across the entire ML lifecycle. Its importance comes from solving one of the hardest problems in production ML systems, which is maintaining consistency between training and inference while operating at scale.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Understanding the role of a feature store in practice</span></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_!_fyH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_fyH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_fyH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_fyH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_fyH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_fyH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!_fyH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_fyH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_fyH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_fyH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc17ae1dc-2b0f-4fa9-b00b-f827d15624b9_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>At a high level, a feature store acts as a central repository and processing system for features. It allows teams to define feature transformations once and reuse them across training pipelines and real-time inference systems. This might sound straightforward, but in real systems, this solves a deeply complex coordination problem.</span></p><p><span>Without a feature store, feature engineering often becomes fragmented. Data scientists might write batch pipelines to generate training features using historical data, while engineers implement separate logic to compute those same features in production systems. Over time, these implementations diverge. Small differences in aggregation windows, missing value handling, or data filtering logic start to accumulate.</span></p><p><span>The result is that the model is trained on one version of reality and deployed into another. The system still runs, but predictions become less reliable. This kind of failure is subtle because it does not always show up immediately in system metrics. It reveals itself gradually through degraded business outcomes.</span></p><p><span>A feature store exists to prevent that divergence by acting as the single source of truth for feature definitions and transformations.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/what-is-a-feature-store-in-ml-system?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/what-is-a-feature-store-in-ml-system?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/what-is-a-feature-store-in-ml-system?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2><strong><span>The dual architecture: offline and online feature stores</span></strong></h2><p><span>One of the defining characteristics of a feature store is that it operates in two different environments at the same time. It supports both offline workflows for training and analysis, and online workflows for real-time inference. These environments have fundamentally different constraints, and designing for both is where most of the complexity lies.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PkWD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PkWD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 424w, https://substackcdn.com/image/fetch/$s_!PkWD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 848w, https://substackcdn.com/image/fetch/$s_!PkWD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 1272w, https://substackcdn.com/image/fetch/$s_!PkWD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PkWD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png" width="1270" height="638" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e054d754-271a-405e-9649-6fa92d232198_1270x638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:638,&quot;width&quot;:1270,&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_!PkWD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 424w, https://substackcdn.com/image/fetch/$s_!PkWD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 848w, https://substackcdn.com/image/fetch/$s_!PkWD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 1272w, https://substackcdn.com/image/fetch/$s_!PkWD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe054d754-271a-405e-9649-6fa92d232198_1270x638.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The offline store is typically built on top of data warehouses or data lakes, where large volumes of historical data can be processed efficiently. It is used to generate training datasets, perform backfills, and support experimentation. The online store, on the other hand, is optimized for low-latency access and is used during inference to fetch features quickly.</span></p><p><span>The challenge is not just building these two systems, but ensuring that they behave identically in terms of feature computation. If they drift apart, the system reintroduces the same inconsistency problem the feature store is supposed to solve.</span></p><h2><strong><span>Why feature stores matter more than most people realize</span></strong></h2><p><span>In theory, models define the intelligence of an ML system. In practice, features define the behavior. Most production issues in ML systems are not caused by model architecture choices. They are caused by issues in data pipelines, feature computation, and data consistency.</span></p><p><span>A simple model with well-engineered features often performs better in production than a complex model with inconsistent or poorly maintained features. This is because the model is only as good as the signals it receives. If those signals are noisy, stale, or incorrect, the model cannot compensate.</span></p><p><span>Feature stores address this by enforcing discipline around feature engineering. They ensure that features are computed consistently, validated properly, and made available in both training and serving contexts. This reduces the risk of silent failures and makes the system more predictable.</span></p><h2><strong><span>The problem of training-serving skew</span></strong></h2><p><span>One of the most important reasons feature stores exist is to prevent training-serving skew. This occurs when the features used during training differ from the features used during inference. The differences may be subtle, but they can significantly impact model performance.</span></p><p><span>Consider a fraud detection system that uses a feature representing the number of transactions a user has made in the last ten minutes. During training, this feature might be computed using a batch job that processes historical data. During inference, it might be computed using a streaming pipeline.</span></p><p><span>If the batch job accidentally includes future transactions when calculating this feature, the model learns from information that would not be available at prediction time. This leads to overly optimistic performance during training and poor performance in production.</span></p><p><span>A feature store helps prevent this by enforcing point-in-time correctness. It ensures that features are computed using only the data available at the time of prediction. This is a subtle but critical detail that separates experimental ML systems from production-ready ones.</span></p><h2><strong><span>Feature reuse and scaling across teams</span></strong></h2><p><span>As organizations adopt </span><a href="https://www.educative.io/courses/grokking-the-machine-learning-interview?aff=xDPD"><span>machine learning</span></a><span> more broadly, the number of features and models grows rapidly. Without a centralized system, teams often duplicate feature engineering efforts. Different teams may compute similar features in slightly different ways, leading to inconsistencies and inefficiencies.</span></p><p><span>A feature store enables feature reuse by allowing features to be defined once and shared across multiple models and teams. This not only reduces duplication but also improves consistency and accelerates development.</span></p><p><span>For example, user engagement features such as session duration, click frequency, or purchase history might be used by recommendation systems, fraud detection systems, and personalization engines. A feature store allows these features to be shared across use cases, ensuring that all models are built on the same foundation.</span></p><p><span>This becomes increasingly important as systems scale. Without a feature store, managing feature pipelines across multiple teams becomes chaotic. With a feature store, there is a structured approach to feature management.</span></p><h2><strong><span>Real-time feature computation and freshness</span></strong></h2><p><span>In many ML systems, especially those operating in real time, feature freshness plays a significant role in model performance. Some features can be computed offline and updated periodically, while others need to reflect the most recent user behavior.</span></p><p><span>A feature store supports this by combining batch and streaming feature computation. Offline pipelines generate long-term features such as historical aggregates or embeddings, while streaming pipelines update short-term features such as recent activity or session-level signals.</span></p><p><span>During inference, the system can combine these features to produce more accurate predictions. This hybrid approach allows the system to balance latency and accuracy effectively.</span></p><p><span>For example, a recommendation system might use precomputed user embeddings along with real-time session features to rank content. A fraud detection system might combine historical risk scores with real-time transaction patterns. The feature store provides a unified interface for accessing these features.</span></p><h2><strong><span>Feature stores and the ML lifecycle</span></strong></h2><p><span>Feature stores play a central role in the entire ML lifecycle. They are involved in data ingestion, feature computation, model training, model serving, and monitoring. This makes them a critical component of the overall system architecture.</span></p><p><span>During training, the feature store provides consistent and reproducible datasets. This ensures that models can be trained and evaluated reliably. During serving, it provides low-latency access to features needed for inference. During monitoring, it helps track feature distributions and detect drift.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hDTF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hDTF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 424w, https://substackcdn.com/image/fetch/$s_!hDTF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 848w, https://substackcdn.com/image/fetch/$s_!hDTF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 1272w, https://substackcdn.com/image/fetch/$s_!hDTF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hDTF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png" width="894" height="518" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:518,&quot;width&quot;:894,&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_!hDTF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 424w, https://substackcdn.com/image/fetch/$s_!hDTF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 848w, https://substackcdn.com/image/fetch/$s_!hDTF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 1272w, https://substackcdn.com/image/fetch/$s_!hDTF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe31505db-df97-4d12-946e-3d34e47ea0e9_894x518.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This integration ensures that features flow seamlessly through the system, reducing the risk of inconsistencies and improving overall reliability.</span></p><h2><strong><span>Challenges in designing and maintaining a feature store</span></strong></h2><p><span>While feature stores provide significant benefits, they are not trivial to build or maintain. One of the main challenges is ensuring consistency between offline and online systems. This requires careful coordination of feature definitions and transformation logic.</span></p><p><span>Another challenge is handling late-arriving data. In real-world systems, data does not always arrive in order. Events may be delayed or arrive out of sequence, which can affect feature computation. The feature store must handle these cases correctly to maintain accuracy.</span></p><p><span>Data quality is another major concern. If the input data is noisy or inconsistent, the feature store will propagate those issues to all downstream models. This makes data validation and monitoring essential components of the system.</span></p><p><span>Scaling the feature store is also challenging. As the number of features and models increases, the system must handle larger data volumes and higher query loads. This requires efficient storage, indexing, and caching strategies.</span></p><h2><strong><span>Where feature stores fit in ML System Design</span></strong></h2><p><span>In a typical ML system architecture, the feature store sits between data pipelines and model systems. Raw data flows into ingestion systems, where it is processed and transformed into features. These features are stored in the feature store and accessed by both training and serving systems.</span></p><p><span>This central position makes the feature store a critical integration point. It connects different parts of the system and ensures that they operate consistently.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0F4b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0F4b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 424w, https://substackcdn.com/image/fetch/$s_!0F4b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 848w, https://substackcdn.com/image/fetch/$s_!0F4b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 1272w, https://substackcdn.com/image/fetch/$s_!0F4b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0F4b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png" width="792" height="374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:792,&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_!0F4b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 424w, https://substackcdn.com/image/fetch/$s_!0F4b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 848w, https://substackcdn.com/image/fetch/$s_!0F4b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 1272w, https://substackcdn.com/image/fetch/$s_!0F4b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fc2739-1a36-4f27-bfd6-4c3ce509c04e_792x374.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This architecture ensures that features are managed centrally and used consistently across the system.</span></p><h2><strong><span>Why feature stores are essential for scalable ML systems</span></strong></h2><p><span>As ML systems grow in complexity, managing features becomes increasingly difficult. Without a feature store, feature pipelines become fragmented, and inconsistencies become more common. This makes the system harder to maintain and less reliable.</span></p><p><span>A feature store provides structure and discipline. It standardizes feature definitions, ensures consistency between training and serving, and supports both batch and real-time workflows. It also enables feature reuse, which reduces duplication and accelerates development.</span></p><p><span>Most importantly, it improves the reliability of the system. By ensuring that features are computed correctly and consistently, it reduces the risk of silent failures and makes the system more predictable.</span></p><h2><strong><span>Final thoughts</span></strong></h2><p><span>When you look at production ML systems, it becomes clear that models are only one part of the equation. The data and features that feed those models are equally, if not more, important. A feature store exists to bring order to that complexity.</span></p><p><span>It ensures that what you train is what you serve. It enables systems to scale without losing consistency. It allows teams to focus on improving models rather than rebuilding feature pipelines.</span></p><p><span>In ML System Design interviews, understanding feature stores is less about naming a component and more about understanding a core challenge in production systems. If you can explain why consistency, freshness, and reuse matter, and how a feature store addresses those challenges, you demonstrate that you are thinking at the system level.</span></p><p><span>That is ultimately what these interviews are designed to evaluate.</span></p>]]></content:encoded></item><item><title><![CDATA[After exploring countless Machine Learning resources, here's what I'd recommend]]></title><description><![CDATA[The learning path I wish I'd followed from the beginning]]></description><link>https://engineeringenablement.substack.com/p/after-exploring-countless-machine</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/after-exploring-countless-machine</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Fri, 10 Jul 2026 04:54:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!I5c1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>A few years ago, I was helping an engineer who had decided to transition into machine learning. They had already done what most people do at the start. They searched for &#8220;best resources to learn machine learning,&#8221; opened a dozen tabs, bookmarked courses, and started a few of them in parallel.</span></p><p><span>A couple of weeks later, they came back with a different problem.</span></p><p><span>&#8220;I&#8217;ve gone through so many resources, but I still don&#8217;t feel like I understand how machine learning actually works.&#8221;</span></p><p><span>That statement captures the real issue.</span></p><p><span>The problem is not the lack of resources.<br> The problem is that most resources are consumed without a system for learning.</span></p><p><span>Machine learning is one of the few domains where having access to the best content does not guarantee progress. What matters is how those resources map to the way machine learning systems actually work in practice.</span></p><p><span>Understanding the best resources in 2026 requires stepping back and asking a more fundamental question. Not &#8220;what are the most popular courses,&#8221; but &#8220;what kind of knowledge do you need to build and reason about machine learning systems.&#8221;</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h1><strong><span>Machine learning is a layered skill, and resources should reflect that</span></strong></h1><p><span>To evaluate resources effectively, it helps to think of </span><a href="https://www.educative.io/courses/grokking-the-machine-learning-interview?aff=xDPD"><span>machine learning</span></a><span> as a layered system rather than a single subject.</span></p><p><span>At the lowest level, there is the data layer, where raw inputs are collected, cleaned, and transformed into features. Above that is the modeling layer, where algorithms learn patterns from data. On top of that is the system layer, where models are deployed, monitored, and integrated into real-world applications.</span></p><p><span>Each layer requires a different type of resource.</span></p><p><span>Some resources focus on intuition and conceptual understanding. Others focus on implementation details. A smaller subset focuses on how machine learning behaves in production systems.</span></p><p><span>The mistake many learners make is staying within one layer for too long. They either remain at the conceptual level without building systems or they rely entirely on tools without understanding the underlying principles.</span></p><p><span>The most effective learning path moves across these layers in a structured way.</span></p><h1><strong><span>Foundational resources: building intuition before complexity</span></strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I5c1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I5c1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!I5c1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!I5c1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!I5c1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I5c1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!I5c1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!I5c1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!I5c1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!I5c1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff138f58-0f6d-4e2f-ba42-2541c8edfbcb_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The first category of resources that matter is those that build intuition. These are not necessarily the most technical resources, but they are critical because they shape how you think about machine learning problems.</span></p><p><span>In 2026, there is no shortage of high-quality introductory material. Platforms like Coursera, edX, and </span><a href="https://www.educative.io?aff=xDPD"><span>Educative</span></a><span> provide structured courses that introduce core concepts such as supervised learning, classification, regression, and evaluation metrics.</span></p><p><span>The value of these resources lies in their ability to provide a coherent narrative. They introduce concepts in a sequence that builds understanding gradually, which is particularly important for beginners who are encountering multiple abstractions at once.</span></p><p><span>However, these resources should not be treated as endpoints. Their purpose is to establish a mental model of how machine learning works, not to provide complete mastery. Spending too much time in this phase can create a false sense of progress without developing practical skills.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/after-exploring-countless-machine?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/after-exploring-countless-machine?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/after-exploring-countless-machine?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h1><strong><span>Mathematical resources: Understanding why models work</span></strong></h1><p><span>At some point, intuition needs to be supported by a deeper understanding of how models learn. This is where mathematical resources become important.</span></p><p><span>In 2026, there are several well-established texts and courses that focus on the mathematical foundations of machine learning. These include topics such as linear algebra, probability theory, and optimization. While these subjects can appear intimidating, they provide the language needed to describe model behavior and training dynamics.</span></p><p><span>The key is to approach these resources with context. Learning linear algebra in isolation can feel abstract, but understanding how vector operations influence model predictions makes the material more concrete.</span></p><p><span>The goal is not to become a mathematician, but to develop enough familiarity with these concepts to reason about models beyond surface-level behavior.</span></p><h1><strong><span>Practical resources: Moving from theory to implementation</span></strong></h1><p><span>Once a foundational understanding is in place, the next step is to build practical skills. This is where coding-focused resources become essential.</span></p><p><span>Platforms like Kaggle, GitHub repositories, and interactive learning platforms provide opportunities to work with real datasets and implement models. These resources expose you to the challenges of data preprocessing, feature engineering, and model evaluation.</span></p><p><span>Working with real data introduces variability that is often absent in structured courses. Datasets may be incomplete, noisy, or unbalanced, requiring you to make decisions about how to handle these issues.</span></p><p><span>This phase is critical because it bridges the gap between theoretical understanding and real-world application. It forces you to engage with the details of how models behave under different conditions.</span></p><h1><strong><span>System-level resources: Understanding machine learning in production</span></strong></h1><p><span>One of the most overlooked categories of resources is those that focus on machine learning as part of a larger system.</span></p><p><span>In production environments, machine learning models are not isolated components. They are part of pipelines that include data ingestion, feature storage, training infrastructure, deployment strategies, and monitoring systems.</span></p><p><span>Resources that cover these topics are often found in engineering blogs, </span><a href="https://www.educative.io/courses/machine-learning-system-design?aff=xDPD"><span>Machine Learning System Design courses</span></a><span>, and technical talks from companies that operate machine learning systems at scale.</span></p><p><span>These resources provide insights into issues such as model drift, latency constraints, scalability, and reliability. They also highlight the trade-offs involved in designing systems that integrate machine learning components.</span></p><p><span>For learners who want to move beyond experimentation, these resources are essential. They provide a realistic view of what it means to work with machine learning in a production setting.</span></p><h1><strong><span>The role of books in deepening understanding</span></strong></h1><p><span>Despite the abundance of online content, books remain one of the most effective resources for building a deep understanding.</span></p><p><span>Unlike tutorials, books are structured to provide comprehensive coverage of a subject. They often include detailed explanations, examples, and exercises that reinforce learning over time.</span></p><p><span>In the context of machine learning, books can serve as a reference point that ties together concepts encountered in different resources. They provide continuity and depth that is often missing in shorter content formats.</span></p><p><span>The challenge with books is that they require sustained attention and effort. However, this is also what makes them valuable. They encourage a level of engagement that is necessary for developing a deeper understanding of complex topics.</span></p><h1><strong><span>Why community and discussion matter more than ever</span></strong></h1><p><span>Learning machine learning in 2026 is not just about consuming content. It is also about engaging with a community of learners and practitioners.</span></p><p><span>Platforms such as Stack Overflow, Reddit, and specialized forums provide opportunities to ask questions, share insights, and learn from others&#8217; experiences. These interactions can clarify concepts that are difficult to understand in isolation.</span></p><p><span>More importantly, community engagement exposes you to different perspectives on how machine learning problems can be approached. This diversity of thought is valuable because it highlights the fact that there is often more than one way to solve a problem.</span></p><p><span>For beginners, participating in discussions can accelerate learning by providing immediate feedback and practical insights.</span></p><h1><strong><span>Choosing resources based on your current stage</span></strong></h1><p><span>One of the most important aspects of selecting resources is aligning them with your current stage of learning.</span></p><p><span>Beginners benefit from structured courses that provide a clear introduction to core concepts. As understanding grows, it becomes more important to engage with practical resources that involve building and experimenting with models.</span></p><p><span>At more advanced stages, resources that focus on System Design and production considerations become increasingly relevant. These resources provide insights into how machine learning is applied in real-world scenarios.</span></p><p><span>The key is to avoid jumping too far ahead or staying too long in one stage. Effective learning involves progressing through these stages in a way that builds both depth and breadth of understanding.</span></p><h1><strong><span>What makes a resource truly effective</span></strong></h1><p><span>Not all resources are equally effective, even if they cover the same topics. The best resources share certain characteristics that make them more valuable for learning.</span></p><p><span>They provide clear explanations that connect concepts to real-world applications. They encourage active engagement through exercises or projects. They are structured in a way that builds understanding progressively rather than presenting information in isolation.</span></p><p><span>Most importantly, they help you develop the ability to reason about machine learning systems rather than just replicate examples.</span></p><p><span>This ability to reason is what distinguishes effective learning from surface-level familiarity.</span></p><h1><strong><span>A more practical way to approach learning resources</span></strong></h1><p><span>Instead of trying to find the single best resource, it is more effective to think in terms of a resource stack.</span></p><p><span>This stack should include a combination of conceptual, practical, and system-level resources that complement each other. Each resource serves a specific purpose, and together they provide a more complete understanding of machine learning.</span></p><p><span>For example, a structured course can provide the foundation, a book can deepen understanding, practical projects can build skills, and System Design resources can provide context for real-world applications.</span></p><p><span>This approach ensures that learning is not limited to a single perspective but is reinforced across different dimensions.</span></p><h1><strong><span>Closing perspective</span></strong></h1><p><span>The question of the best resources to learn machine learning in 2026 is not about identifying a fixed list of courses or books. It is about understanding how different types of resources contribute to the learning process.</span></p><p><span>Machine learning is a layered discipline that requires both theoretical understanding and practical experience. The most effective resources are those that help you move between these layers and build a coherent mental model of how systems work.</span></p><p><span>Ultimately, the value of a resource is determined not by its popularity but by how well it supports your ability to think, reason, and build within the domain of machine learning.</span></p>]]></content:encoded></item><item><title><![CDATA[Why most ML models fail quietly after deployment]]></title><description><![CDATA[Keep ML models accurate long after deployment]]></description><link>https://engineeringenablement.substack.com/p/why-most-ml-models-fail-quietly-after</link><guid isPermaLink="false">https://engineeringenablement.substack.com/p/why-most-ml-models-fail-quietly-after</guid><dc:creator><![CDATA[Fahim ul Haq]]></dc:creator><pubDate>Thu, 09 Jul 2026 06:27:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C137!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>I&#8217;ve worked on systems where the model was considered &#8220;done&#8221; the moment it was deployed. The pipeline ran, predictions were being served, dashboards showed healthy latency, and everything looked stable. Then, a few weeks later, product metrics started slipping. Conversion dropped, engagement declined, or fraud losses quietly increased. Nothing in the system metrics looked broken, but something clearly was.</span></p><p><span>That gap is exactly what monitoring and maintenance in ML systems are meant to close.</span></p><p><span>Unlike traditional software, ML models don&#8217;t just fail in obvious ways like crashes or timeouts. They degrade. They drift. They silently become less useful as the world around them changes. Monitoring and maintaining an ML model in production is about catching that degradation early, understanding why it&#8217;s happening, and evolving the system so it continues to perform over time.</span></p><p><span>If you think of deployment as the end of the ML lifecycle, you will always be reacting too late. In reality, deployment is the beginning of a new phase where the system needs to be observed, adjusted, and continuously improved.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/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 Engineering Enablement! 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></p><h2><strong><span>Start by separating system health from model health</span></strong></h2><p><span>One of the most important mental models to build early is that a </span><a href="https://www.educative.io/courses/machine-learning-system-design?aff=xDPD"><span>machine learning System Design</span></a><span> has two different kinds of health. There is system health, which refers to infrastructure, latency, throughput, and availability. Then there is model health, which refers to prediction quality, calibration, and business impact.</span></p><p><span>These two can diverge completely.</span></p><p><span>A well-designed monitoring strategy treats these two dimensions separately while still connecting them when needed. You need dashboards for system metrics and separate dashboards for model behavior, and both need to be part of your operational awareness.</span></p><h2><strong><span>Understand what you are actually trying to monitor</span></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_!C137!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C137!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!C137!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!C137!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!C137!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C137!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.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;: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_!C137!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!C137!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!C137!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!C137!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F923daee2-3ecb-4b30-8d07-b775111fe464_1774x887.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Before you build monitoring, you need to define what success looks like for the model. That usually comes down to business metrics. A recommendation system might care about click-through rate or watch time. A fraud system might care about false positives and fraud loss. A search system might care about relevance or conversion.</span></p><p><span>The challenge is that these metrics are often delayed. You don&#8217;t immediately know whether a prediction was correct. That means you need to monitor proxy signals in addition to final outcomes.</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/why-most-ml-models-fail-quietly-after?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Engineering Enablement! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://engineeringenablement.substack.com/p/why-most-ml-models-fail-quietly-after?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://engineeringenablement.substack.com/p/why-most-ml-models-fail-quietly-after?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2><strong><span>Monitoring data is just as important as monitoring models</span></strong></h2><p><span>Most model failures begin with data changes. The distribution of input features shifts, new patterns emerge, or upstream systems change how data is generated. If you are not monitoring data, you are essentially blind to the earliest signs of trouble.</span></p><p><span>Data monitoring focuses on tracking feature distributions over time. You compare the current distribution of features with the distribution seen during training. Significant deviations can indicate data drift, which often leads to model degradation.</span></p><p><span>This can be as simple as tracking summary statistics like mean and variance, or more advanced measures like distribution divergence. The key is not the specific metric, but the ability to detect meaningful changes.</span></p><p><span>Data quality is another critical aspect. Missing values, corrupted records, and schema mismatches can all affect model performance. These issues often originate upstream and propagate through the pipeline.</span></p><p><span>A robust system treats data monitoring as a first-class concern, not an optional add-on.</span></p><h2><strong><span>Monitoring prediction behavior and model outputs</span></strong></h2><p><span>In addition to data, you need to monitor the model&#8217;s outputs. This includes prediction distributions, confidence scores, and any other signals produced by the model.</span></p><p><span>Changes in prediction behavior can indicate problems even when the input data looks stable. For example, if a model suddenly starts producing more extreme predictions or becomes less confident, it may be reacting to subtle changes in data or internal instability.</span></p><h2><strong><span>Connecting predictions to outcomes</span></strong></h2><p><span>One of the most important aspects of maintaining a </span><a href="https://www.educative.io/courses/grokking-the-machine-learning-interview?aff=xDPD"><span>machine learning</span></a><span> system is connecting predictions to outcomes. This is what allows you to evaluate model performance over time.</span></p><p><span>For every prediction, you need to log enough information to reconstruct what happened. This typically includes the input features, model version, prediction output, and any relevant context. When the outcome becomes available, it should be linked back to the original prediction.</span></p><p><span>This linkage enables continuous evaluation. You can compute metrics like accuracy, precision, or business KPIs on recent data rather than relying only on offline evaluation.</span></p><h2><strong><span>Detecting model drift before it becomes a problem</span></strong></h2><p><span>Model drift is one of the primary reasons why monitoring is necessary. It refers to the gradual degradation of model performance due to changes in data or underlying patterns.</span></p><p><span>There are different types of drift, and each requires different detection strategies.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8YkJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8YkJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 424w, https://substackcdn.com/image/fetch/$s_!8YkJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 848w, https://substackcdn.com/image/fetch/$s_!8YkJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 1272w, https://substackcdn.com/image/fetch/$s_!8YkJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8YkJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png" width="1268" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8YkJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 424w, https://substackcdn.com/image/fetch/$s_!8YkJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 848w, https://substackcdn.com/image/fetch/$s_!8YkJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 1272w, https://substackcdn.com/image/fetch/$s_!8YkJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd882892-c646-45c6-95c3-d8f2fc5267f0_1268x378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Detecting drift early requires combining multiple signals. Data drift might show up in feature distributions, while concept drift may only appear in performance metrics. Prediction drift can provide additional context.</span></p><p><span>The goal is not to eliminate drift, which is impossible, but to detect it early and respond appropriately.</span></p><h2><strong><span>Designing alerting systems that actually work</span></strong></h2><p><span>Monitoring is only useful if it leads to action. That means you need alerting systems that notify you when something important changes.</span></p><p><span>The challenge is balancing sensitivity and noise. If your alerts are too sensitive, you will get flooded with notifications and start ignoring them. If they are too coarse, you will miss important changes.</span></p><p><span>A good approach is to define thresholds based on historical behavior and adjust them over time. You can also combine multiple signals to reduce false positives. For example, an alert might trigger only when both feature drift and prediction drift exceed certain thresholds.</span></p><h2><strong><span>Maintaining models through retraining strategies</span></strong></h2><p><span>Monitoring tells you when something is wrong. Maintenance is about fixing it. The most common approach to maintaining models is retraining them with new data.</span></p><p><span>Retraining strategies vary depending on the system. Some models are retrained on a fixed schedule, such as daily or weekly. Others are retrained based on triggers, such as drift detection or performance degradation.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-OG9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-OG9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 424w, https://substackcdn.com/image/fetch/$s_!-OG9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 848w, https://substackcdn.com/image/fetch/$s_!-OG9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 1272w, https://substackcdn.com/image/fetch/$s_!-OG9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-OG9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png" width="1266" height="418" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:418,&quot;width&quot;:1266,&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_!-OG9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 424w, https://substackcdn.com/image/fetch/$s_!-OG9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 848w, https://substackcdn.com/image/fetch/$s_!-OG9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 1272w, https://substackcdn.com/image/fetch/$s_!-OG9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d887f6-238b-4d97-b004-23226c5b41ef_1266x418.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>In practice, many systems use a hybrid approach. They retrain regularly but also monitor for conditions that require immediate updates.</span></p><p><span>Retraining is not just about running the training pipeline again. It also involves validating the new model, comparing it with the current one, and deploying it safely.</span></p><h2><strong><span>Validating models before and after deployment</span></strong></h2><p><span>Maintenance is not complete without validation. Before deploying a new model, you need to ensure that it performs better than the current one. This usually involves offline evaluation using historical data.</span></p><p><span>However, offline evaluation has limitations. It may not reflect current conditions or capture real-world behavior. This is why many systems use techniques like shadow testing and A/B testing.</span></p><p><span>Shadow testing allows a new model to run alongside the current one without affecting users. A/B testing splits traffic between models and compares their performance in real time.</span></p><p><span>These techniques provide additional confidence that the new model will behave correctly in production.</span></p><h2><strong><span>Handling failures and designing fallback strategies</span></strong></h2><p><span>No matter how well you design your system, failures will happen. The feature store might become unavailable, the model server might fail, or the model itself might produce unreliable predictions.</span></p><p><span>A robust system includes fallback strategies for these scenarios. For example, a recommendation system might fall back to popular items if the model is unavailable. A fraud system might use rule-based checks as a backup.</span></p><p><span>The fallback strategy should align with business risk. In low-risk scenarios, degraded performance may be acceptable. In high-risk scenarios, conservative decisions may be necessary.</span></p><p><span>Designing these strategies in advance ensures that the system remains functional even when parts of it fail.</span></p><h2><strong><span>Observability and debugging in production</span></strong></h2><p><span>Monitoring tells you that something is wrong. Observability helps you understand why.</span></p><p><span>An observable system provides detailed logs, metrics, and traces that allow you to investigate issues. You should be able to trace a prediction back to the data, features, and model that produced it.</span></p><p><span>This requires structured logging and consistent identifiers. Each prediction should be associated with a request ID, model version, and feature set. This makes it easier to analyze patterns and identify root causes.</span></p><p><span>Debugging ML systems is often more complex than debugging traditional systems because the issues are not always deterministic. Observability is what makes this manageable.</span></p><h2><strong><span>Managing model versions and lifecycle</span></strong></h2><p><span>As models are updated, you need to manage multiple versions. This includes tracking which model is currently in production, which versions were deployed previously, and how each version performed.</span></p><p><span>Versioning is essential for reproducibility and debugging. If a model behaves unexpectedly, you need to know exactly which version is responsible and how it was trained.</span></p><p><span>Lifecycle management also includes deprecating old models and cleaning up unused artifacts. Over time, the number of models and experiments can grow significantly, and without proper management, this becomes difficult to maintain.</span></p><h2><strong><span>Scaling monitoring systems with data growth</span></strong></h2><p><span>As your system scales, monitoring itself becomes a large-scale problem. You are dealing with massive volumes of data, and collecting and processing all of it may not be feasible.</span></p><p><span>Sampling is often used to reduce the volume of data while still capturing meaningful patterns. Aggregation can also help by summarizing data into metrics that are easier to analyze.</span></p><p><span>The challenge is maintaining accuracy while reducing overhead. Monitoring systems need to be efficient, scalable, and reliable.</span></p><h2><strong><span>Bringing it all together</span></strong></h2><p><span>When you look at all these components together, monitoring and maintaining an ML model in production becomes a system in its own right.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XlW6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XlW6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 424w, https://substackcdn.com/image/fetch/$s_!XlW6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 848w, https://substackcdn.com/image/fetch/$s_!XlW6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 1272w, https://substackcdn.com/image/fetch/$s_!XlW6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XlW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png" width="828" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:828,&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_!XlW6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 424w, https://substackcdn.com/image/fetch/$s_!XlW6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 848w, https://substackcdn.com/image/fetch/$s_!XlW6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 1272w, https://substackcdn.com/image/fetch/$s_!XlW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff1785ec-3d78-4bcb-b4d7-c9074731ca97_828x622.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Each component plays a role in keeping the system healthy over time. The effectiveness of the system depends on how well these components work together.</span></p><h2><strong><span>Common mistakes in production ML monitoring</span></strong></h2><p><span>One of the most common mistakes is focusing only on system metrics and ignoring model behavior. This leads to situations where the system appears healthy, but the model is failing.</span></p><p><span>Another mistake is relying solely on offline evaluation. Without real-time monitoring, issues may go unnoticed until they impact business metrics.</span></p><p><span>Over-automating retraining is also risky. Automatically updating models without proper validation can introduce new problems.</span></p><p><span>Finally, many systems lack proper feedback loops, making it difficult to evaluate performance and detect drift.</span></p><h2><strong><span>Final thoughts</span></strong></h2><p><span>Monitoring and maintaining an ML model in production is not a one-time task. It is an ongoing process that requires continuous attention and iteration.</span></p><p><span>The key is to treat the model as part of a larger system. You need to monitor data, predictions, and outcomes. You need to detect drift, respond with retraining, and validate changes carefully. You need to design for failure and ensure that the system remains functional even when parts of it degrade.</span></p><p><span>In ML System Design interviews, explaining this process shows that you understand the dynamic nature of ML systems. It demonstrates that you are thinking beyond deployment and considering how systems behave over time.</span></p><p><span>And in practice, that is what makes the difference between systems that work temporarily and those that continue to work as the world changes around them.</span></p>]]></content:encoded></item></channel></rss>