<script data-pm-proxy="intercept"></script><?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[Software Architecture Weekly]]></title><description><![CDATA[Make better architecture decisions before they cost you six figures. Case studies from real work, trusted by 9,000+ engineers and CTOs.]]></description><link>https://softwarearchitectureweekly.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!P26H!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03070695-1940-4711-b43e-5f3bcc6437d6_165x165.png</url><title>Software Architecture Weekly</title><link>https://softwarearchitectureweekly.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 03 Sep 2026 18:11:50 GMT</lastBuildDate><atom:link href="/__u/softwarearchitectureweekly.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Vladimir Ivanov]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[softwarearchitectureweekly@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[softwarearchitectureweekly@substack.com]]></itunes:email><itunes:name><![CDATA[Architecture Weekly Newsletter]]></itunes:name></itunes:owner><itunes:author><![CDATA[Architecture Weekly Newsletter]]></itunes:author><googleplay:owner><![CDATA[softwarearchitectureweekly@substack.com]]></googleplay:owner><googleplay:email><![CDATA[softwarearchitectureweekly@substack.com]]></googleplay:email><googleplay:author><![CDATA[Architecture Weekly Newsletter]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Transition out of Serverless, DNS Cache Optimizations by Cloudflare, Software Factory at Uber and more in Architecture Weekly #202.]]></title><description><![CDATA[Also: DuckDB v2, Solving N+1 problem, Bucket Scanner to Context Engine, Local Models will not win, and Unified AI Agent architecture.]]></description><link>https://softwarearchitectureweekly.substack.com/p/transition-out-of-serverless-dns</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/transition-out-of-serverless-dns</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Mon, 31 Aug 2026 08:28:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1JPF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #202. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/softwarearchitectureweekly.substack.com/subscribe"><span>Subscribe now</span></a></p><h2></h2><h1><strong>Highlights</strong></h1><p>The first highlight is the content piece of myself on how Supplied transitioned from the pure Serverless to the more traditional setup with containers in ECS and PostgreSQL instead of DynamoDB. See the full journey inside.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;542be08b-0ea7-4239-aed8-ef3dd0c2c21f&quot;,&quot;caption&quot;:&quot;A new client came with 20,000 sellers to onboard and verify. That&#8217;s when we realised our DynamoDB setup had became our bottleneck.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Serverless Got Us to 50 Clients. Then It Became the Problem.&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:97861178,&quot;name&quot;:&quot;Architecture Weekly Newsletter&quot;,&quot;bio&quot;:&quot;CTO &amp; Solution architect. I show you the tradeoffs that blow up production and budgets, before they do. Real numbers, zero fluff.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!9syb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87d87d2-acfe-491d-a3b7-b76e43564806_600x600.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-08-17T08:02:01.118Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!zCZE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/serverless-got-us-to-50-clients-then&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:211300482,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2261093,&quot;publication_name&quot;:&quot;Software Architecture Weekly&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!P26H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03070695-1940-4711-b43e-5f3bcc6437d6_165x165.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>#casestudy</p><p></p><h2><a href="https://blog.cloudflare.com/dns-cache-memory-optimization-1111/">DNS Cache Memory Optimization</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Whoever tells you data structures don&#8217;t matter in the age of AI - ban them. Cloudflare manages to save hundreds of terabytes of memory across the glove doing small optimizations to the ways DNS cache records are stored with the knowledge of how Rust store data and dropping dns owners when they are identical. Brilliant engineering work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1JPF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 424w, /__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 848w, /__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1JPF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp" width="715" height="332" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:332,&quot;width&quot;:715,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;9.png&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="9.png" title="9.png" srcset="/__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 424w, /__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 848w, /__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!1JPF!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671bb283-9d49-4d8c-989c-b51e59623379_715x332.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#dns #performance</p><h2><a href="https://www.uber.com/us/en/blog/efficient-software-factory/">Efficient Software Factory at Uber</a> &#128119;&#8205;&#9794;&#65039;</h2><p>While everyone talks about making software factories, Uber actually does it. They dropped a banger of an article explaining the 4 levels of AI adoption in the company, cost structure, measurement approach and of course the results. Great job!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Dr6o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Dr6o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg" width="1456" height="718" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:718,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Scatter plot comparing cost per review and F1 score for 10 model configurations, highlighting Pareto frontier.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Scatter plot comparing cost per review and F1 score for 10 model configurations, highlighting Pareto frontier." title="Scatter plot comparing cost per review and F1 score for 10 model configurations, highlighting Pareto frontier." srcset="/__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Dr6o!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb37281e2-a3d5-445f-a47e-c431cca1afda_2280x1125.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #casestudy</p><h2></h2><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/transition-out-of-serverless-dns?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/transition-out-of-serverless-dns?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="/__u/softwarearchitectureweekly.substack.com/p/transition-out-of-serverless-dns?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h1><strong>Follow-Up</strong></h1><h2><strong><a href="https://www.infoq.com/news/2026/08/duckdb-v2-distributed/">DuckDB v2 - Distributed</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>At the core of this release is a native client/server mode powered by the <a href="https://www.infoq.com/news/2026/05/duckdb-quack-protocol/">quack protocol</a> extension and the new CONNECT SQL statement. Rather than requiring developers to embed the engine directly or rely on verbose query wrappers, any DuckDB instance can now run as a daemon and accept connections over the network. Users can attach a remote DuckDB endpoint or external relational engines like PostgreSQL and MySQL, routing queries directly with pushdown optimisations.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pKI8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 424w, /__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 848w, /__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pKI8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png" width="623" height="165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d860e73-167e-4378-8995-09b1473732c6_623x165.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:165,&quot;width&quot;:623,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27682,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/212962736?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 424w, /__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 848w, /__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pKI8!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d860e73-167e-4378-8995-09b1473732c6_623x165.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>#db </p><h2><strong><a href="https://acadia.engineering/blog/solving-the-1-plus-N-query-problem">Solving 1+N problem with Acadia</a> </strong>&#128119;&#8205;&#9794;&#65039; </h2><p>1+N problem(or better known as N+1 problem) as when you need to query an object with 1 query and then make a query for every subobject(because of Joins). There are different ways to help with it. Acadia is a new programming language and application platform for building database-backed web applications, created by Evan Czaplicki, the creator of Elm. And Acadia solves it by preventing the very code that could possibly cause the said problem. Details inside.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sJeO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 424w, /__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 848w, /__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sJeO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png" width="788" height="185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:185,&quot;width&quot;:788,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30640,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/212962736?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 424w, /__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 848w, /__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sJeO!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F932fc9f4-1b84-4611-aa80-bb60f3e33fb0_788x185.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>#orm</p><h2><strong><a href="https://www.wiz.io/blog/bucket-scanner-to-context-engine">Bucket Scanner to Context Engine</a>  &#128119;&#8205;&#9794;&#65039;</strong></h2><p>AI is no cryptocurrencies: you can imagine a dozen of valid use-cases thinking for 5 minutes. One of them is security scanning to classify the files for containing sensitive information and raising awareness. This is exactly what Wiz did for Data Protection Management. See how simple bucket scanner evolved into a security context engine.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!meY5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 424w, /__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 848w, /__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!meY5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp" width="1456" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 424w, /__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 848w, /__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!meY5!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34685e69-6cf3-470d-b21a-0f1b601369a8_3887x2157.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #security</p><h2><strong><a href="https://www.seangoedecke.com/local-models-will-not-win/?utm_source=techlead_insights">Local models will not win</a> &#127868;</strong></h2><p>I tried to see <a href="/__u/softwarearchitectureweekly.substack.com/p/can-local-llms-replace-claude-code">if local models are viable</a> for serious development. Spoiler: they are not. Sean Goedecke agrees: everybody tends to choose the most powerful model in their price range, and only datacenters have the corresponding capacity. Plus, they are well optimized for it. So local models will just not happen, forget it.</p><p>#ai </p><p></p><h2><strong><a href="https://aws.amazon.com/blogs/architecture/build-a-unified-ai-agent-architecture-with-dynamodb-and-bedrock/">Unified AI Agent architecture</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>Embeddings for the AI agents typically require a separate database, while production data sits somewhere else. But if your data is in DynamoDB you have an opportunity to unify the data storage for both production and embeddings data. AWS shares the architecture blueprint to build AI agents with Bedrock and DynamoDB. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!CbWk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CbWk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg" width="1456" height="655" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:655,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Architecture diagram showing a user query flowing to an Amazon Bedrock agent, which invokes action group Lambda functions that call the DynamoDB SearchVectors API and standard CRUD APIs, with DynamoDB Streams triggering an embedding pipeline Lambda that generates vectors with Amazon Titan Text Embeddings V2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Architecture diagram showing a user query flowing to an Amazon Bedrock agent, which invokes action group Lambda functions that call the DynamoDB SearchVectors API and standard CRUD APIs, with DynamoDB Streams triggering an embedding pipeline Lambda that generates vectors with Amazon Titan Text Embeddings V2" title="Architecture diagram showing a user query flowing to an Amazon Bedrock agent, which invokes action group Lambda functions that call the DynamoDB SearchVectors API and standard CRUD APIs, with DynamoDB Streams triggering an embedding pipeline Lambda that generates vectors with Amazon Titan Text Embeddings V2" srcset="/__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!CbWk!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f3b7268-67bd-481c-9873-4fbed2db6715_3128x1408.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#casestudy #aiagents</p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Serverless Got Us to 50 Clients. Then It Became the Problem.]]></title><description><![CDATA[From AWS Lambdas and DynamoDB to a single container in ECS backed by PostgreSQL.]]></description><link>https://softwarearchitectureweekly.substack.com/p/serverless-got-us-to-50-clients-then</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/serverless-got-us-to-50-clients-then</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Mon, 17 Aug 2026 08:02:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zCZE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A new client came with 20,000 sellers to onboard and verify. That&#8217;s when we realised our DynamoDB setup had became our bottleneck.</p><p>I founded Supplied AI 2 years ago using only Serverless components: Lambda as a backend, DynamoDB for the data storage, S3 as an object storage. SQS came naturally a year later.  Frankly speaking any stack works when you have one and a half clients with a very limited set of expectations. As we crossed 200,000 sellers data with 50+ clients while handful of them are mature enterprises, the requirements for scalability, performance and functionality shot up almost overnight.</p><p>In this article I will elaborate on:</p><ul><li><p>Our initial software architecture</p></li><li><p>The problems we faced during accommodating requirements of the new clients</p></li><li><p>A glance on the migration process</p></li><li><p>Our current architecture.</p></li></ul><p>Let&#8217;s go!</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1>Initial Approach</h1><p>At the point I co-founded Supplied I had plenty of experience running Java applications in webservers like Tomcat and WebSphere, overseeing the development of Go microservices on Kubernetes and doing some outsourcing staff with Lambdas on AWS. And one thing I knew for sure: premature complexity kills mercilessly. So I asked myself: </p><div class="callout-block" data-callout="true"><p>&#8220;What is the best way to start a technological solution in 2024 with the minimum infrastructure distraction?&#8221;    </p></div><p>And boy, the answer was not Kubernetes or WebSphere on EC2. It was indeed Serverless. Here&#8217;s my initial stack: </p><ul><li><p>A single Lambda for the backend with a Functional URL</p></li><li><p>DynamoDB with a handful of collections for data storage like customers and sellers</p></li><li><p>S3 for the  document storage.</p></li><li><p>Web app was a React application server right from another S3 bucket.</p><p></p></li></ul><p>And guess what? It was great! I could click through the entire infra in 10 minutes. Backend deployment? A shell script using aws cli. Web app deployment? A shell script using aws cli to zip the build folder and upload to the S3. That&#8217;s it! Simplicity is the king. </p><p>Once I needed to add a new, completely distinct functionality, the serverless way advised to just throw more isolated lambdas. Needed to upload files? Just make a Lambda! Need to generate reports? Separate lambda. Need to make PDF files for the sellers? You guessed. A separate lambda. </p><p>And it worked well - until it didn&#8217;t. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zCZE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 424w, /__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 848w, /__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zCZE!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png" width="1200" height="821.7032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:997,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&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;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 424w, /__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 848w, /__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zCZE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04af77a-00c8-48ca-9246-d60278a3700a_1636x1120.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>First caveats</h1><p>The clients came and the thing which began as a side project started to prove the market demand. And all hell broke loose. Here are the problems we had to face.</p><h2>Complexity</h2><p>Managing infrastructure and dependencies between increasing number of components rendered increasingly difficult. Why? </p><h3>Infrastructure</h3><p>Testing new features required a staging environment and with high number of moving parts it become cumbersome. We eventually solved by introducing Infrastructure-as-Code, <a href="/__u/softwarearchitectureweekly.substack.com/p/how-ai-transformed-our-infrastructure">which is covered in this article</a>. </p><h3>Data model synchronisation</h3><p>Several lambdas were working with the same set of collections in DynamoDB forcing us to synchronise data models between them. It meant either copy-pasting classes between different services or introducing shared libraries. You could say that this is what Lambda Layers were built for, but with layers you face a new problem.</p><h3>Deployment problems </h3><p>More lambdas, more layers - more deployments, and deployments could destabilise production due to mistakes in synchronisation. Here&#8217;s what happens: You make changes in two services because the new functionality require both changes. It needs an appropriate order of deployment of layers, then lambdas, then updating versions of layers in those lambdas. What does guarantee this order? Nothing. Occasionally we would break this order and make troubles for ourselves.</p><h2>Performance</h2><h3>Cold start timing</h3><p>We faced the Lambda cold start problem. </p><div class="callout-block" data-callout="true"><p>If asked any developer worked with Serverless what is the first problem they face, 10 out of 10 of them would say: &#8220;Cold start&#8221;.  </p></div><p>Our admin interface would take 15 seconds to load the first time. In the situation where multiple clients used the admin all the time, that would not be a problem; unfortunately it was not and still is not the case for us. We made several improvements like moving to Docker containers to leverage <a href="https://aws.amazon.com/blogs/compute/optimizing-lambda-functions-packaged-as-container-images/">AWS Lambda optimizations</a>. It improved the situation by roughly 40%, but didn&#8217;t solve the problem completely. We wanted the instant start. </p><h3>Tens of thousands seller per customer</h3><p>The majority of our customers had 200 to 500 sellers which data we had to manage. Then we got the first one with almost 3000 sellers. And then came the client with more than 20 000 sellers. While processing this kind of data is easy in any environment, we also had to display them quickly in the admin panel and more importantly sort them by reporting completeness. Because as the Company Admin, you really want to see the sellers who require the most attention now. This is the point we saw that DynamoDB simply does not have in-database sorting! We would have to load all the sellers for the company and sort them in-memory which had significant CPU and memory footprint while making the customer wait every time. That was not acceptable. </p><h3>Multi-collection transactions and locking</h3><p>With introduction of subscription and payments  we had to update the data consistently across several collections. We also had to introduce proper locking mechanism for the subscription status as Stripe sends over 4 events in non-guaranteed order to our webhook. DynamoDB does not serve something useful for that too.   </p><h2>Functionality</h2><p>Finally, with Lambdas you lose the interactivity: the statuses of the jobs do not update themselves - you need to make a poll on the frontend. And now with the introduction of Supplied Support AI Agent, you don&#8217;t get to stream the tokens because Lambdas are not built for it. In the end we ditched the lambdas all together.</p><h1>Migration process</h1><p>I&#8217;ve got plenty of experience  migrating between different solutions in Bolt and this experience became very useful during our migrations. </p><p></p>
      <p>
          <a href="/__u/softwarearchitectureweekly.substack.com/p/serverless-got-us-to-50-clients-then">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[SOC2 journey at Supplied, Interview with JBaruch, Splitting into Microservices and many more in Architecture Weekly #201.]]></title><description><![CDATA[Also today: Optimizing Prompt Cache, AWS EC2 Application Status Check , MicroVMs for throw-away jobs, Writing code was never the point and Meerkat: Cloudflare Consensus Solution.]]></description><link>https://softwarearchitectureweekly.substack.com/p/soc2-journey-at-supplied-interview</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/soc2-journey-at-supplied-interview</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Tue, 11 Aug 2026 15:09:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LOk_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #201. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p><strong>Declaration: no AI is used in this newsletter.</strong></p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/softwarearchitectureweekly.substack.com/subscribe"><span>Subscribe now</span></a></p><h1><strong>Highlights</strong></h1><h2><a href="/__u/softwarearchitectureweekly.substack.com/p/how-to-achieve-iso27001-and-soc2">What it takes to achieve SOC2?</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Recently Supplied AI achieved the SOC2 certification. It&#8217;s much harder than you would think: aside from technical security solutions, you need proper change management procedures, staff background checks and onboarding/offboarding procedures. Follow our journey in this post.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KaZ2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KaZ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png" width="1456" height="1040" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1040,&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="/__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.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>#security #certification</p><p></p><h2><a href="https://youtu.be/a_Kq18ufZzU">Faster Devs, Same Output</a></h2><p>With AI agents developers became extremely productive, but do software companies ship more features or improve quality significantly? Barely. I am talking with Baruch Sadogursky, AI Enthusiast on the reasons behind same output and ways to improve it.</p><div id="youtube2-a_Kq18ufZzU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;a_Kq18ufZzU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/a_Kq18ufZzU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>#video </p><h2><a href="https://milanjovanovic.tech/blog/should-you-split-that-into-microservices-ask-these-5-questions-first">Should You Split Into Microservices? </a> &#128119;&#8205;&#9794;&#65039;</h2><p>We recently merged all our microservices(we had a handful) in a monolith. If you consider moving in a back direction, you need to ask yourself at least 5 questions on dependencies, different NFRs for the system parts, teams blocking each other, data boundaries and independent failures.  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Xz8Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 424w, /__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 848w, /__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Xz8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png" width="1456" height="1051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1051,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two candidate services, each owning its database, with red cross-boundary queries between them: one service, cut in half&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two candidate services, each owning its database, with red cross-boundary queries between them: one service, cut in half" title="Two candidate services, each owning its database, with red cross-boundary queries between them: one service, cut in half" srcset="/__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 424w, /__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 848w, /__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Xz8Y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb6e7fd-791e-4f9b-a668-136a68aeb45e_1976x1426.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#microservices</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/soc2-journey-at-supplied-interview?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/soc2-journey-at-supplied-interview?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="/__u/softwarearchitectureweekly.substack.com/p/soc2-journey-at-supplied-interview?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h1><strong>Follow-Up</strong></h1><p></p><h2><a href="https://blog.alexewerlof.com/p/optimizing-prompt-cache">Optimizing Prompt Cache</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Prompt Caching is not mere saving the prompts. What you send to LLM consists of much more: System Instructions, Tools Descriptions, Conversation History and finally the prompt. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;id&quot;:87732486,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2713990-da82-481b-b579-01a7aaa5b85b_560x560.jpeg&quot;,&quot;uuid&quot;:&quot;4760ff4e-761d-446a-a476-cd99e2c67412&quot;}" data-component-name="MentionToDOM"></span> explains what your agents send to the LLM on every turn and how to optimize it for the sake of performance and cost-efficiency. Double kil!!</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:210324402,&quot;url&quot;:&quot;https://blog.alexewerlof.com/p/optimizing-prompt-cache&quot;,&quot;publication_id&quot;:1002265,&quot;embedding_publication_id&quot;:2261093,&quot;publication_name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_Ur2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png&quot;,&quot;title&quot;:&quot;Optimizing prompt cache&quot;,&quot;truncated_body_text&quot;:&quot;You probably know what prompt caching is (if not, there&#8217;s a quick intro) but what you may not know is the massive impact it has on cost per task (the token cost to do something).&quot;,&quot;date&quot;:&quot;2026-08-08T14:07:13.032Z&quot;,&quot;like_count&quot;:12,&quot;comment_count&quot;:1,&quot;bylines&quot;:[{&quot;id&quot;:87732486,&quot;name&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;handle&quot;:&quot;alexewerlof&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2713990-da82-481b-b579-01a7aaa5b85b_560x560.jpeg&quot;,&quot;bio&quot;:&quot;Writes about technical leadership, growth mindset, and system reliability engineering. Senior Staff Engineer, MSc Systems Engineering from KTH, Stockholmer, dad, amateur artist. Read more here: https://www.alexewerlof.com/who&quot;,&quot;profile_set_up_at&quot;:&quot;2022-07-14T22:27:32.130Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-10-11T17:24:45.190Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:947579,&quot;user_id&quot;:87732486,&quot;publication_id&quot;:1002265,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1002265,&quot;name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;subdomain&quot;:&quot;alexewerlof&quot;,&quot;custom_domain&quot;:&quot;blog.alexewerlof.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Technical Leadership, Reliability Engineering, Growth&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png&quot;,&quot;author_id&quot;:87732486,&quot;primary_user_id&quot;:87732486,&quot;theme_var_background_pop&quot;:&quot;#786CFF&quot;,&quot;created_at&quot;:&quot;2022-07-14T22:27:58.683Z&quot;,&quot;email_from_name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;copyright&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;founding_plan_name&quot;:&quot;VIP supporter&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd56dc7c-4b9f-43f2-99a1-ecc995284940_1200x256.png&quot;}},{&quot;id&quot;:8561877,&quot;user_id&quot;:87732486,&quot;publication_id&quot;:8361889,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:8361889,&quot;name&quot;:&quot;AI Reliability Engineering&quot;,&quot;subdomain&quot;:&quot;aireliabilityengineering&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;From the Author of Reliability Engineering Mindset but focused on AI systems and components.&quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2713990-da82-481b-b579-01a7aaa5b85b_560x560.jpeg&quot;,&quot;author_id&quot;:87732486,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2026-03-18T10:58:12.396Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;twitter_screen_name&quot;:&quot;alexewerlof&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://blog.alexewerlof.com/p/optimizing-prompt-cache?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web&amp;embedding_publication_id=2261093"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="/__u/substackcdn.com/image/fetch/$s_!_Ur2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png" loading="lazy"><span class="embedded-post-publication-name">Alex Ewerl&#246;f Notes</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Optimizing prompt cache</div></div><div class="embedded-post-body">You probably know what prompt caching is (if not, there&#8217;s a quick intro) but what you may not know is the massive impact it has on cost per task (the token cost to do something&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">24 days ago &#183; 12 likes &#183; 1 comment &#183; Alex Ewerl&#246;f</div></a></div><p>#ai #performance</p><h2><a href="https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-ec2-application-status-checks/">AWS EC2 Application Status Check</a> &#128119;&#8205;&#9794;&#65039;</h2><p>After decades of custom monitoring solutions, AWS introduced the every minute status check with HTTP probes. Auto Scaling groups can replace unhealthy instances based on this application status. Try it out and tell me in the comments how it improved your life!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!mwiT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 424w, /__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 848w, /__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!mwiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png" width="806" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:806,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55912,&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://softwarearchitectureweekly.substack.com/i/210720789?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 424w, /__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 848w, /__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mwiT!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba6fb04-7ddd-4614-83f6-acc7b00b3981_806x520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#ec2 #observability  </p><p></p><h2><a href="https://pubudu.dev/posts/scan-user-uploaded-files-using-microvm/">MicroVMs for throw-away jobs</a></h2><p>MicroVMs is a way to provide you a short-lived isolated execution environment. What are they best for? Right, security related tasks! How about running the virus scanning on docker images? </p><p>While I am personally skeptical on mere signature-check scans in general and ClamAV in particular, the idea of running high risk payloads in isolated envs is really appealling. Checkout how to leverage MicroVMs for it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ICKU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 424w, /__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 848w, /__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ICKU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png" width="1157" height="634" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:634,&quot;width&quot;:1157,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Scan user uploaded files using AWS Lambda MicroVM and ClamAV&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Scan user uploaded files using AWS Lambda MicroVM and ClamAV" title="Scan user uploaded files using AWS Lambda MicroVM and ClamAV" srcset="/__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 424w, /__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 848w, /__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ICKU!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a289d-6892-4c1f-9cdc-b355066b55da_1157x634.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#security #aws</p><p></p><h2><a href="https://www.linkedin.com/safety/go/?url=https%3A%2F%2Flnkd%2Ein%2Fd4h7CRVg&amp;urlhash=O27A&amp;mt=oW1Q_Rk4VArs5phw7xuf6ycKH2Dmfo9nkaJdFXukwYpSX5U5DKzYcas-6SirX7IYkjxd_VKAFvO02MzHSCFwpAC3zDMNwr_zrKgMAF8zopju4lqJOwXknakw&amp;isSdui=true">Writing code was never the point</a> &#127868;</h2><p><strong><a href="https://www.linkedin.com/in/lucamezzalira/"><span>Luca Mezzalira</span></a></strong><span> nails what we all think: When code is AI generated and disposable, what should we do? </span><br><br><span>However as always: abstraction level up, we now design agent harness and real systems instead of focusing on writing DTOs and generic controllers. Exciting times!</span><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!f5i_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 424w, /__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 848w, /__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!f5i_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Article content&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Article content" title="Article content" srcset="/__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 424w, /__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 848w, /__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!f5i_!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1d53e3-bc13-44a6-b53e-74def21b3b42_1488x838.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai</p><p></p><h2><a href="https://blog.cloudflare.com/meerkat-introduction/">Meerkat: Cloudflare Consensus Solution</a> &#129311;</h2><p>Following a good tradition finishing the newsletter with some kind of a paper, I am sharing an article from Cloudflare on their new Distributed Consensus Service called Meerkat based on the QuePaxa algorithm. Cloudflare aimed to replace leader&amp;timeouts relying Raft with the multi-write nodes while claiming strong consistency. How do they manage that? Find the answers in the article. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LOk_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 424w, /__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 848w, /__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LOk_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp" width="715" height="493" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:493,&quot;width&quot;:715,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 424w, /__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 848w, /__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!LOk_!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d93ac6b-a434-411e-afc7-88631e7304d6_715x493.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#distributedsystems</p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[SOC2 is harder than you think]]></title><description><![CDATA[Certification process, technical measures and policies to get your SOC2 stamp.]]></description><link>https://softwarearchitectureweekly.substack.com/p/how-to-achieve-iso27001-and-soc2</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/how-to-achieve-iso27001-and-soc2</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Tue, 04 Aug 2026 11:23:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KaZ2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KaZ2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KaZ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png" width="1456" height="1040" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1040,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2407432,&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://softwarearchitectureweekly.substack.com/i/208940056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KaZ2!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc33b6401-181f-43ad-bb48-e228db77b3a1_1484x1060.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><h2><strong>The recipe behind certification</strong></h2><p>The B2B company can achieve a certification by implementing proper security measures, establishing the best practices and policies and gathering evidence. One of the artefacts is the Penetration Testing report, meaning the company needs to hire a partner which is able to perform it and make an appropriate report. Hiring a partner also helps with the checklist on all the practices, policies and evidences. There is no short-cut to a certification though, but hard work pays off.</p><p>Once every piece of evidence is gathered, the external auditor goes through them and generate a compliance report which we can share with the clients then. But why going through such a hassle in the first place?  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!nl_8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 424w, /__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 848w, /__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nl_8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png" width="759" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef35470d-532f-4cae-8758-2fcd852aed88_759x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:759,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28884,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/208940056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 424w, /__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 848w, /__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nl_8!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef35470d-532f-4cae-8758-2fcd852aed88_759x520.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>Why SOC2 matters for a B2B tax platform</span></strong></h2><p>In B2C software, say a mobile application, the compliance required converges on a privacy policy, terms of service and age assessment. The corporate clients can&#8217;t be the more opposite than that, especially for Supplied AI, where we work with  Personal Identification Information(PII), tax IDs, bank account numbers, and identity documents for a DAC7 and 1099K reporting product. Our customers are platforms and marketplaces. Those customers face their own regulators. Before they sign a contract with us, their security teams need proof that we protect this data correctly. And even then the process takes weeks and months. And while the certificate proofs formal compliance, it does not close the deal by itself - the actual controls behind the certificate do.</p><p>Before I became a CTO at Supplied, I got a taste of certification during my time in Bolt while leading Billing team in the Commerce Department. I had to fill some forms and questionnaire, but boy, did I not realize the whole scale of getting the whole company certified.</p><p><span>This article walks through the main control areas that SOC2 and ISO27001 check. Each section names the control area, then shows the real system behind it.</span></p><h1><span>How the assessment happens</span></h1><p><span>Your verification partner runs a software solution which solve several issues during certification:</span></p><ol><li><p>Managing certifications</p></li><li><p>Finding gaps</p></li><li><p>Gathering evidence</p></li><li><p>Manage reviews&amp;approvals</p></li><li><p>Providing TODO lists</p></li><li><p>Handling evidence life-cycles</p></li></ol><p>However the biggest advantage of such a platform is the cloud integration: as we run AWS, our certification partner was granted the read-only access to our AWS organisations so the software could scan it and find the gaps. Imagine doing the same with on-prem resources ;) </p><p>But what the scanning is looking for? </p><h2><strong><span>Access control</span></strong></h2><p>First area of interest of the certification is access control: how our customers access their data and how this data is separated from other customers. Essentially, everyone wants to know that one client does not see the data of the other ones. The system can&#8217;t just rely on the 3rd party partner for authorisation and call it a day. Here&#8217;s how we do it at Supplied.</p><p><span>Supplied works with types of end users: suppliers(sellers) - think drivers, couriers, goods sellers, content creators; and administrators - members of staff of the marketplaces the suppliers operate on. We split those groups with audiences in Auth0: different applications, different keys, completely different permission models. </span></p><p><span>Admin-only endpoints carry an extra guard. The guard checks for the admin authentication strategy by name. A supplier token cannot reach these routes, even by mistake due to audience separation.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!gGRs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 424w, /__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 848w, /__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!gGRs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png" width="1016" height="1215" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1215,&quot;width&quot;:1016,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99158,&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://softwarearchitectureweekly.substack.com/i/208940056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 424w, /__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 848w, /__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gGRs!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37b20237-3292-4bee-84ce-819d28560c29_1016x1215.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>However separating people by a role is not enough; the admins should only have access to their own data, and nothing else. That&#8217;s why every request in the admin panel is scoped, so every database query for company data carries this scope. The system reads a company ID from the request context and applies it to the query. One company cannot read data that belongs to another company, as the query uses the company id from the authorization, not request parameters.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!5gcb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 424w, /__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 848w, /__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5gcb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png" width="1016" height="1215" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1215,&quot;width&quot;:1016,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97827,&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://softwarearchitectureweekly.substack.com/i/208940056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 424w, /__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 848w, /__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5gcb!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b9a5c-7197-4b3d-8c16-5633eca16ff6_1016x1215.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>Other problem is the malicious or accidentally incorrect input. We validate everything with built-in Nest.js mechanism, so input validation runs on every write automatically. The validation pipe keeps a list of allowed fields and rejects any request with fields outside that list. This stops a common class of data-tampering attempts before the request reaches business logic.</span></p><h2><strong><span>Encryption and key management</span></strong></h2><p>While access control secures the data within legitimate users, encryption is what makes the data safe against everybody else. In case of traffic interception, or database leakage any data should remain useless to the attacker. Here&#8217;s the set of security measures we take.</p><p><span>Our customers data is of outmost priority. Data at rest uses AES-256 across S3, RDS, and DynamoDB. Data in transit - the traffic between the frontend and backend - uses TLS. The database proxy requires TLS on every connection. The developers can not access the database without a VPN tunnel, which uses mutual TLS with its own certificate authority.</span></p><p><span>However encryption is not a silver bullet, but rather one of the many measures we leverage. The web applications(and we run 2 in production) are a subject to multiple different techniques like XSS, protocol downgrade attacks, and many others. Fighting them means sending a whole set of HTTP headers so that the customer&#8217;s browser can prevent undesired behaviour. </span></p><p><span>We add security headers in layers. The CDN edge sets a Content Security Policy, a Referrer Policy, a Strict-Transport-Security header, an X-Content-Type-Options header, and an X-Frame-Options header. </span></p><p><span>The application layer sets its own Content Security Policy too, with a per-request nonce. Two layers add a small amount of duplication. Two layers also mean that one misconfigured layer does not remove the protection completely.</span></p><p><span>Last, but not least: the access to the data storage and downstream systems. </span>meaning API keys, access tokens, connection strings etc. They should be never written anywhere in a plain text: how reckless would be storing these secrets in files or environment variables! Instead, we encrypt secrets with AWS KMS before any service uses them. </p><h2><strong><span>Change management and the software development lifecycle</span></strong></h2><p>The main principle of the secure change management: </p><div class="callout-block" data-callout="true"><p>Each change in the solution should be caused by a legitimate business need and have a clear trace. </p></div><p>Essentially, you need to ask a question <em>&#8220;Why this change happened?&#8221;</em> and <em>&#8220;Who made it?&#8221;. </em>That&#8217;s why there are no changes without a link to an issue in our Task Tracker system(we use Linear). But having tickets does not do the trick: the pipeline delivering changes is required too.</p><p>What to expect from a pipeline? A good one is: </p><ul><li><p>Predictable. Run on the same version, get same result</p></li><li><p>Secure. Avoid leaks, prevent supply chain attacks.</p></li><li><p>Helpful. Catch quality problems before it reaches any environment.</p></li></ul><p>To grant aforementioned properties, we configured out delivery pipeline in the following manner.</p><p><span>Every deploy pipeline uses short-lived cloud credentials. GitHub Actions requests a token through OpenID Connect at run time. No long-lived AWS key sits in any repository secret.</span></p><p><span>Every pull request runs through a merge gate. The gate runs lint checks and a full test suite. The integration tests run against a set of emulated storages we use.</span></p><p><span>Every container image gets scanned on push, before it reaches any environment. A vulnerable base image gets flagged at build time, not after deployment.</span></p><p><span>We have 2 environments: staging and production. The tickets reach staging and being thoroughly tested. Only then the changes are deployed to prod. </span></p><h2><strong><span>Monitoring and incident response</span></strong></h2><p>Once the code is on the production, the working phase begins. At this point <span>SOC2 asks a direct question: when something breaks, how does the team find out? What happens next? We answer with the set of monitoring tactics alongside measures applied for the identified gaps. </span></p><p><span>Our monitoring stack is classic, if not boring. CloudWatch for logs and alerts, Sentry for crash reporting, CloudTrail for audit. The team is monitoring the email alerts and reacts to urgent one ASAP; we configured Sentry for the Linear integration so independent of urgency we make a ticket in Linear right away to follow our change management policies.</span></p><p><span>But logic fixes is one story; real incidents is another. We had an incident when after one of the migrations we completely broke the Supplier App.  After getting the indication from Sentry we indeed delivered a hotfix, but the interesting part is indeed in the Post Mortem. </span></p><p><span>We follow the best practices regarding learning from our own mistakes: The incident owner filled in </span><a href="https://docs.google.com/document/d/1xpFm2H9SKo3EtCXl2k4HrjiECEk7zvulQ6AAZ9dmqkc/edit?tab=t.0"><span>the Post Mortem template</span></a><span>, and then we hold a meeting to analyze it, make the remediation measure to later implement them.</span></p><h2><strong><span>Vendor and third-party risk</span></strong></h2><p>Customers data does not flow only through our applications and data storages, it is processed by external downstream systems. The formal term for them is &#8220;Subprocessors&#8221;. Data Protection standards and legislations demand at least a disclosure on these lists; the ideal situation includes minimisation of data processed alongside data locality. Meaning? Don&#8217;t transfer data oversee, but if you do - make sure there is no sensitive info transferred. </p><p><span>Supplied connects to more than fifteen outside services. These include payment processors, crash reporting software, an email provider, tax authorities in multiple countries, identity verification providers, and indeed hosted LLMs for AI payloads. </span></p><p><span>Here are our principles: </span></p><ol><li><p><span>Use EU data residency to the maximum. Auth0 leverages EU tenants for both staging and production, EU-based models in AWS Bedrock, compute and storage resources are located in EU regions too.</span></p></li><li><p><span>Use minimum amount of information, avoid PII. Crash reporting software for example anonymise everything, customer emails are not included replaced by non-PII user ids, all the text on crash-associated screen recording is masked.</span></p></li><li><p><span>Be explicit about your subprocessors. </span></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PBmE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 424w, /__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 848w, /__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PBmE!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png" width="1200" height="135.16483516483515" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:164,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:48707,&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://softwarearchitectureweekly.substack.com/i/208940056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 424w, /__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 848w, /__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PBmE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cb0e961-4043-4649-8d79-c47a372ff81e_3002x338.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p><span>Not to mention, the clients ask about subprocessors and data locality every second time, so having this in order is essential. </span></p><h2>Policies and Trainings</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zc83!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 424w, /__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 848w, /__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zc83!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png" width="1456" height="802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:802,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83379,&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://softwarearchitectureweekly.substack.com/i/208940056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 424w, /__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 848w, /__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zc83!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffdf7db0-2300-44c7-81f3-eb27ffdd3fb8_1600x881.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>Reading the article so far you could have thought that certification is about technical measures, it is definitely not true. The organization should adopt several dozens of policies on hiring(onboarding and offboarding), access controls, communication, security trainings, backups, data retention and other aspects of software business. </p><p>Templates help to draft the policies, but real work is filling them in and proving they are actually in place instead of dead documents. </p><p>Consider the policy of running background checks: the organization should provide the proof, that criminal records were actually checked for the employees, their education suits the role and the employees have the skills corresponding to their roles. </p><p>The same affects the board meeting policies: it&#8217;s not sufficient to state the board should gather at least once a months; a proof of scheduled meetings and written meeting minutes are required. Thanks tech gods, we have automated summary nowadays.  </p><div><hr></div><h2>Final Steps</h2><p>Once the security measures are complete, evidence gathered and the pen-test conducted(with the gaps closed), it&#8217;s time to get an external auditor going through evidence. In our case our certification partner ordered this audit on our behalf and shared all the findings. Then you just wait for 2-3 weeks and get your SOC2 report.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Tfiw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 424w, /__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 848w, /__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Tfiw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png" width="998" height="847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63c91893-6818-4f87-85c4-962c24999009_998x847.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:847,&quot;width&quot;:998,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133062,&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://softwarearchitectureweekly.substack.com/i/208940056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 424w, /__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 848w, /__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Tfiw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c91893-6818-4f87-85c4-962c24999009_998x847.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I hope you can pass your certification as well. If you need a contact of the certification partner, leave a comment down below, I will refer your company. </p><h2>Our Offering</h2><p>Running a digital marketplace? Struggling with supplier onboarding and DAC7 reporting? Nervous about safety of the sellers data? Checkout <a href="https://getsupplied.ai">Supplied AI</a> - compliance infrastructure for Digital Marketplace. Get compliant in no time!  </p><p></p>]]></content:encoded></item><item><title><![CDATA[Can Local LLMs replace Claude Code? Personal Experience and Fine Tuning.]]></title><description><![CDATA[Comparison of the open-source models running on the dedicated hardware for solving coding tasks.]]></description><link>https://softwarearchitectureweekly.substack.com/p/can-local-llms-replace-claude-code</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/can-local-llms-replace-claude-code</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Thu, 23 Jul 2026 10:39:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9jtp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!9jtp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!9jtp!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2074781,&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://softwarearchitectureweekly.substack.com/i/207926042?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9jtp!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb97cebe0-3b9e-42d4-abdd-3715550656a6_1672x941.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>The limits on Claude Code, Codex and Antigravity keep shrinking with more and more powerful models consuming weekly limits in 3 prompts. The rise in prices for inference is imminent as the unit economy just does not converge. I decided to see if I can run a viable alternative on my own hardware with open-source models. See what I managed to achieve in this post filled with nothing but personal experience. </p><h2>The First Purchase Attempt</h2><p>My younger self was exciting of building everything from scratch; the grown up man looks for efficiency. The first idea I came up was to buy a Mac Studio with 64GB of RAM. This is a custom build - a subject to ordering and waiting for a couple of months. By the date of delivery I dropped the dealer a call and figured out they forgot to order it, offered no apology and suggested to wait for &#8220;5-6 months&#8221;. Apparently, the price for the memory spiked again and they were forcing me to take the money back and disappear, which I did. I ordered an AMD based PC instead which arrived in 3 weeks. Check out the <a href="https://youtube.com/shorts/xcbmp1p06jM">LLM Machine Unboxing</a>. The whole setup ended up with a cost of  &#8364;4250.</p><h2>The Machine</h2><p>I nicknamed it <strong>beast</strong>, because it is supposed to be an Inference Beast. Under the hood: an AMD Ryzen 9 9950X3D, an AMD Radeon AI PRO R9700 with 32GB of VRAM, running Arch Linux (Omarchy). The 32GB card is the whole story here &#8212; it's the single number that constrains almost every decision in this post. Everything I did for the next week was, in one way or another, a negotiation with those 32 gigabytes. </p><p>For the inference engine I landed on <strong>llama.cpp</strong>'s <code>llama-server</code>, running as a systemd service, GPU-accelerated through <strong>Vulkan</strong>. Multiple guides across the Internet recommends AMD's own ROCm/HIP stack to run AI workloads on this hardware, but after couple of experiments I found Vulkan backend (specifically the RADV driver) 2 times more performant on this card. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!reYK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 424w, /__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 848w, /__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 1272w, /__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!reYK!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png" width="1200" height="792.2651933701658" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:956,&quot;width&quot;:1448,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1723996,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/207926042?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4427a2f3-2623-481c-b624-d5684122ebd6_956x1529.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 424w, /__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 848w, /__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 1272w, /__u/substackcdn.com/image/fetch/$s_!reYK!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf48c38-c368-40bf-9d81-06f206502a39_1448x956.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>You'll Need A Bridge</h2><p>Claude Code speaks Anthropic's Messages API. <code>llama-server</code> speaks an OpenAI-compatible chat-completions API. These are not the same shape of JSON, and nothing translates between them for free.</p><p>So I generated a translator: a small Node.js proxy that sits between Claude Code and <code>llama-server</code>, translating requests and responses in both directions - streaming Server-Sent Events, tool-call and tool-result mapping, the works. It runs as its own systemd service.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!f0Qd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 424w, /__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 848w, /__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 1272w, /__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!f0Qd!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png" width="1200" height="314.83516483516485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:382,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:194541,&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://softwarearchitectureweekly.substack.com/i/207926042?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 424w, /__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 848w, /__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 1272w, /__u/substackcdn.com/image/fetch/$s_!f0Qd!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e5e81f-9e79-4602-8fa7-e0de493a9f3f_2962x778.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>This proxy turned out to be the source of some of the real bugs. More on that shortly.</p><p>UPD: llama-server <a href="https://github.com/ggml-org/llama.cpp/tree/master/tools/server#anthropic-compatible-api-endpoints">supports</a> Anthropic API.</p><h2>A Crash Course in Quantization</h2><p>The Large Language Models are indeed large: they are so big your generic 5090 won&#8217;t be able to host a performant one in memory. The solution? Let&#8217;s compact the parameters of the said LLM into smaller bit size, so that instead of 16 bit per parameter we would have 3, 4 or 8. That&#8217;s call <strong>quantization</strong>.</p><p>For a 35-billion-parameter model, it takes roughly 70GB just to store the numbers. My card has 32GB total. The model simply does not fit into VRAM. And if it does not fit into VRAM, it needs to be offloaded to RAM and eventually to, god forbid, SSD.   </p><p>Quantization is the fix: you round those 16-bit numbers down to something smaller - 8 bits, 6 bits, 4 bits - and store <em>that</em> instead. You lose a little precision. In exchange, the model shrinks dramatically and runs faster, because there's simply less data to move around. The whole game is figuring out how much precision you can throw away before the model gets noticeably dumber.</p><p>The naming scheme on the files you'll download (<code>Q4_K_M</code>, <code>Q5_K_M</code>, <code>Q6_K</code>) decodes like this:</p><ul><li><p>The number (`Q4`, `Q5`, `Q6`) is roughly how many bits are used per weight, on average.</p></li><li><p>`K` means "k-quant" &#8212; a smarter scheme that doesn't quantize every layer equally. Some layers matter more to output quality than others, so k-quants spend more bits where it counts and fewer where it doesn't.</p></li><li><p>`M` (or `S`/`L`) is a size variant within that quant level &#8212; a further knob on the same precision-vs-size tradeoff.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yYxw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 424w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 848w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yYxw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png" width="680" height="486" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:486,&quot;width&quot;:680,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 424w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 848w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There's also a newer variant I used, from <strong>Unsloth</strong>, called a <strong>Dynamic quant</strong> ("UD" in the filename). Instead of applying one blanket rule per layer <em>type</em>, it analyzes the actual model and picks precision per layer more surgically &#8212; the pitch is meaningfully better quality at the same file size, and in practice it's what I reached for by default.</p><p>The problem with compressing weight is losing intelligence. The smaller you go, the more the model's reasoning quality erodes. I was hoping the model would be slow, but smart enough to fix at least simple bugs, but I&#8217;ll get to what I got instead.</p><p>If you would like a visual guide for quantization, here&#8217;s <a href="https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization?hide_intro_popup=true">the article</a> which does a great job.</p><h2>The Model Rotation</h2><p>Over about a week I ran through four distinct configurations:</p><ol><li><p><strong>Qwen3-8B, Q4_K_M (~5GB)</strong>. That was just a test out for the setup. It ran instantly and was, unsurprisingly, too small to do real engineering work.</p></li><li><p><strong>Qwen3.6-35B-A3B, Q4_K_M (~22GB)</strong>. This is a Mixture-of-Experts model &#8212; 35B parameters total, but only about 3B "active" per token, which is why a "35B" model runs at a speed you'd expect from something much smaller. This became my long-term baseline.</p></li><li><p><strong>Ornith-1.0-35B, Q5_K_M (~25GB).</strong> Frankly I got this model recommended in one of the twitter threads. On paper, this should have been a straight upgrade.</p></li><li><p>Back to<strong> Qwen3.6-35B-A3B</strong>, this time at Q6_K (~29GB)** &#8212; after Ornith's benchmark scores turned out to have nothing to do with how it behaved in my actual harness. I'll get to why.</p></li></ol><p>That last jump, from Q4<em>K</em>M to Q6<em>K, is a good illustration of the VRAM negotiation: at Q6</em>K the model weights alone occupy 29.3GB out of 32GB. That leaves a sliver of the card for everything else inference needs (the KV cache, i.e. the model's working memory for the current conversation) - a constraint that comes back to bite me later in this post.</p><h2>Building the Autonomous Pipeline</h2><p>My ideal picture was to make a list of bugs and improvements in a task tracker(we use Linear), point the pipeline at it and wait for the pull requests to land. Here&#8217;s how I imagine the harness would work on the beast machine:  </p><ol><li><p>Reads tickets assigned to me in my ticket tracker.</p></li><li><p>Checks whether a ticket is actually ready to work (clear problem, acceptance criteria, no open questions) &#8212; and if not, asks a clarifying question as a comment and stops.</p></li><li><p>Drafts a design and posts it as a comment, then **stops and waits for approval.** This is a hard rule, not a suggestion &#8212; the pipeline is not allowed to talk itself into skipping this step, no matter how "obvious" the fix looks.</p></li><li><p>Once approved, implements the change in an isolated git worktree, verifies it (build/lint/tests), and opens a draft pull request.</p></li><li><p>Watches open PRs for review feedback &#8212; from a human, or from an automated reviewer &#8212; and reacts to it.</p></li></ol><p>It should run unattended, once an hour, off a systemd timer. All of its progress is tracked in a small state file, so a run that gets interrupted can pick back up where it left off.</p><p>That's the design. Now here's where it actually fell over.</p><h2>Where It Fell On Its Face</h2><p><strong>Ornith simply didn't show up.</strong> Despite the leaderboard scores, one triggered run against Ornith produced a clean, zero-error exit and a grand total of one line in the log: <em>"I'm ready to help! What would you like to work on?"</em> No ticket read, no tool call, nothing. The backend logs were completely healthy &#8212; this wasn't a crash, the model just never engaged with its own instructions. Rolling back to Qwen3.6-35B-A3B and re-running the identical trigger worked correctly on the first try. Benchmark leaderboards, it turns out, tell you almost nothing about whether a model will actually follow a long, detailed operating manual.</p><p><strong>The silent empty-turn bug.</strong> This one was the scariest, because it produced <em>no error at all</em>. <code>llama-server</code> streams a model's reasoning as a separate field (<code>reasoning_content</code>), distinct from its actual visible output (<code>content</code>). My proxy only ever read the second one. So on a turn where the model burned its entire response on internal reasoning and produced zero real output, the proxy still emitted a syntactically valid, totally empty "the assistant is done" message. Claude Code has no way to tell "finished normally" apart from "finished having done nothing" &#8212; it just exits cleanly. My first real test run vanished this way: no commit, no comment, no state update, no error anywhere. I only caught it by noticing the ticket simply hadn't moved.</p>
      <p>
          <a href="/__u/softwarearchitectureweekly.substack.com/p/can-local-llms-replace-claude-code">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The State of Streaming to Apache Iceberg, Billions of Products for Agentic Commerce, On-prem DBaaS and more in Architecture Weekly #200.]]></title><description><![CDATA[Also: Running a self-hosted LLM, Claude Code Sandbox on iPad, A Visual Guide to Quantization, Reduce Logging Costs and Clickhouse winning Observability wars.]]></description><link>https://softwarearchitectureweekly.substack.com/p/the-state-of-streaming-to-apache</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/the-state-of-streaming-to-apache</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Tue, 21 Jul 2026 16:36:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yYxw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #200. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/softwarearchitectureweekly.substack.com/subscribe"><span>Subscribe now</span></a></p><h2></h2><h1><strong>Highlights</strong></h1><h2><a href="/__u/amdatalakehouse.substack.com/p/the-state-of-streaming-to-apache"><span>The State of Streaming to Apache Iceberg in July 2026: Every Path, Its Latency, and What to Do When Seconds Are Not Fast Enough</span></a><span> &#128104;&#8205;&#128188;</span></h2><p><span>In mid-2026, teams no longer ask, &#8220;Should we use Iceberg?&#8221; They ask, &#8220;How current can our Iceberg tables be?&#8221;. And this is where the main tradeoff relies dictating your data architecture and tools to go with. From tuned Flink to Kafka connect latency numbers varies from 30 seconds to 15 minutes. How to choose? Well, Alex Merced explains in his piece.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OocW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OocW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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="/__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OocW!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ef58b5-39ae-4ed5-bf5b-2379685a8a0d_1672x941.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>#db #distributed #architecture #softwareengineering</span></p><h2><a href="https://shopify.engineering/catalog-clustering"><span>Clustering Billions of Products for Agentic Commerce with Catalog API</span></a><span> &#129299;</span></h2><p>Shopify Catalog groups billions of listings without a common schema. It first matches products inside each store, then connects them across stores with a Universal Product Identifier (UPI). LLMs assign a structured label to every product. This enables consistent grouping, high precision, and better recall. AI searches based on Catalog data convert twice as often as searches based on scraped data. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!EYZ4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 424w, /__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 848w, /__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 1272w, /__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!EYZ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png" width="1456" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Precision vs recall failure&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Precision vs recall failure" title="Precision vs recall failure" srcset="/__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 424w, /__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 848w, /__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 1272w, /__u/substackcdn.com/image/fetch/$s_!EYZ4!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18923e7c-a653-4210-86fb-b3cc4d21b0ff_1999x1171.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#ai #architecture #softwareengineering #engineering</span></p><p></p><h2><a href="https://www.cncf.io/blog/2026/07/15/on-prem-dbaas-in-2026-platforms-standards-and-gaps/"><span>On-prem DBaaS in 2026: Platforms, standards, and gaps</span></a><span> &#128104;&#8205;&#128188;</span></h2><p><span>On-premises database provisioning in 2026 splits into two camps that rarely interoperate: developer-operated models built on Kubernetes operators (CloudNativePG, Vitess) and platform-team models backed by Crossplane or internal IDP tooling that abstract the infra layer. The critical gap is the absence of any widely adopted standard connecting database lifecycle management to the internal developer portal &#8212; leaving teams to rebuild equivalent abstractions repeatedly with incompatible APIs and operational assumptions. Until a common binding layer emerges, the tradeoff is real: tight operator integration with manual self-service wiring, or platform abstraction that substitutes cloud lock-in with a home-grown one. #db #architecture #devops #cloud</span></p><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/the-state-of-streaming-to-apache?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/the-state-of-streaming-to-apache?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="/__u/softwarearchitectureweekly.substack.com/p/the-state-of-streaming-to-apache?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h1><strong>Follow-Up</strong></h1><p></p><h2><a href="https://www.cncf.io/blog/2026/07/16/running-a-self-hosted-llm-in-kubernetes-with-vllm/">Running a self-hosted LLM in Kubernetes with vLLM</a> &#128104;&#8205;&#128188;</h2><p>With the rise of cost for the LLMs and the privacy concerns more and more enterprises opt to run local models(and I am experimenting with them myself). Grab a guy how to setup an open-source LLM with Kubernetes!  </p><p>#llm #cloud #devops #architecture</p><p></p><h2><a href="https://edjgeek.com/blog/claude-code-sandbox-for-ipad/">Claude Code Sandbox for iPad</a> &#128104;&#8205;&#128188;</h2><p>On the other handside you might want to launch some coding or research jobs from your handheld device - like an iPhone or an iPad. Edjgeek offers a solution: a MicroVM spawing once you open a special web page, mounting a home directory from S3 and doing the work you need. Of course, you need to throw in some security measures too! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!8Z2T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 424w, /__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 848w, /__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!8Z2T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg" width="1456" height="1143" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1143,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Architecture: browser to Cognito to API Gateway to per-user MicroVM with an S3 Files home&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Architecture: browser to Cognito to API Gateway to per-user MicroVM with an S3 Files home" title="Architecture: browser to Cognito to API Gateway to per-user MicroVM with an S3 Files home" srcset="/__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 424w, /__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 848w, /__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!8Z2T!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a4b0e47-9499-463b-8341-6f888a3b1e85_1075x844.svg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#cloud #ai</p><p></p><h2><a href="https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization?hide_intro_popup=true">A Visual Guide to Quantization</a>  &#129311;</h2><p>The Large Language Models are indeed large: they are so big your generic 5090 won&#8217;t be able to host a performant one in memory. The solution? Let&#8217;s compact the parameters of the said LLM into smaller bit size, so that instead of 32 bit per parameter we would have 3, 4 or 8. That&#8217;s call quantization. How does that work? Well, grab a great visual guide! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yYxw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 424w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 848w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yYxw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png" width="680" height="486" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:486,&quot;width&quot;:680,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 424w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 848w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yYxw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9d17077-d9af-4b37-9b9b-57ef9aaa1ca9_680x486.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#llm</p><p></p><h2><a href="https://michaelscodingspot.com/reduce-logging-costs/">Reduce Logging Costs</a> &#127868;</h2><p>When your solution landscape grows, the amout of logs compounds into hundreds of gygabytes or terabytes monthly. At a certain scale it hits the cloud bill significantly and it makes sense to start optimizing the cost. The first 2 strategies are obvious: sampling and tiered storage, but there are 3 more which you will find in the article By Michael Shpilt. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JmeZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JmeZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg" width="800" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;5 Strategies to Reduce Logging Costs&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="5 Strategies to Reduce Logging Costs" title="5 Strategies to Reduce Logging Costs" srcset="/__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!JmeZ!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68eb74ef-fa79-4e65-ad72-2371b85fce93_800x437.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>  #observability #cost #cloud</p><p></p><h2><a href="https://charity.wtf/p/have-you-heard-clickhouse-is-winning">Clickhouse is winning the observability wars!</a> &#127868;</h2><p>Observability 2.0 is about structured logs and you know what&#8217;s the ideal storage for them is? Clickhouse! You don&#8217;t need to trust myself, trust Charity Majors - the CTO of Honeycomb, an observability platform. Clickhouse is efficient, open-source, scalable storage and a hope for observability. Details by Charity inside. </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:205702034,&quot;url&quot;:&quot;https://charity.wtf/p/have-you-heard-clickhouse-is-winning&quot;,&quot;publication_id&quot;:2935724,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;charity.wtf&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Tg4H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fc089-9e91-4a15-85cc-5da3fca53eed_1280x1280.png&quot;,&quot;title&quot;:&quot;Have you heard? Clickhouse is winning the observability wars!&quot;,&quot;truncated_body_text&quot;:&quot;We interrupt our regularly scheduled series of posts on AI norms and values to bring you this incredible piece from Mat Duggan, &#8220;Why Clickhouse Is Winning the Observability Wars,&#8221; which you should go read right now. Go! I&#8217;ll wait.&quot;,&quot;date&quot;:&quot;2026-07-08T23:35:39.529Z&quot;,&quot;like_count&quot;:28,&quot;comment_count&quot;:4,&quot;bylines&quot;:[{&quot;id&quot;:32306597,&quot;name&quot;:&quot;Charity Majors&quot;,&quot;handle&quot;:&quot;charitydotwtf&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!EAp-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a54851-0549-41da-b041-3cfc959ec0ba_3088x2316.jpeg&quot;,&quot;bio&quot;:&quot;cofounder and CTO of honeycomb.io; pioneered modern observability. co-author of O'Reilly books \&quot;Database Reliability Engineering\&quot; and \&quot;Observability Engineering\&quot;, now wrapping up the 2nd ed. loves free software, free speech, and peaty single malts.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-11-24T22:50:45.155Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-08-30T02:09:51.674Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:2985119,&quot;user_id&quot;:32306597,&quot;publication_id&quot;:2935724,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:2935724,&quot;name&quot;:&quot;charity.wtf&quot;,&quot;subdomain&quot;:&quot;charitydotwtf&quot;,&quot;custom_domain&quot;:&quot;charity.wtf&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;observability, tech advice, honeycomb.io, etc&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/194fc089-9e91-4a15-85cc-5da3fca53eed_1280x1280.png&quot;,&quot;author_id&quot;:32306597,&quot;primary_user_id&quot;:32306597,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2024-08-26T05:48:54.313Z&quot;,&quot;email_from_name&quot;:&quot;Charity Majors&quot;,&quot;copyright&quot;:&quot;Charity Majors&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;profile&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:5,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:5,&quot;accent_colors&quot;:null},&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://charity.wtf/p/have-you-heard-clickhouse-is-winning?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="/__u/substackcdn.com/image/fetch/$s_!Tg4H!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fc089-9e91-4a15-85cc-5da3fca53eed_1280x1280.png" loading="lazy"><span class="embedded-post-publication-name">charity.wtf</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Have you heard? Clickhouse is winning the observability wars!</div></div><div class="embedded-post-body">We interrupt our regularly scheduled series of posts on AI norms and values to bring you this incredible piece from Mat Duggan, &#8220;Why Clickhouse Is Winning the Observability Wars,&#8221; which you should go read right now. Go! I&#8217;ll wait&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 months ago &#183; 28 likes &#183; 4 comments &#183; Charity Majors</div></a></div><p></p><p>#observability</p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Capturing Value Out of Technical Conferences]]></title><description><![CDATA[And it's far from listening to talks.]]></description><link>https://softwarearchitectureweekly.substack.com/p/capturing-value-out-of-technical</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/capturing-value-out-of-technical</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Thu, 02 Jul 2026 05:55:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aA1r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!aA1r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!aA1r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg&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;:4666646,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/204164470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!aA1r!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff710a874-03f2-4704-acef-aaffd212cf40_6000x4000.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Why people attend conferences? Is it insightful talks? Maybe looking for a new job? Free snacks? The answer is yes - to all of it. But do people get the best value out of expensive tickets? Absolutely not. Here&#8217;s the guide on getting the most of any professional conference you attend. Save it for the next one.   </p><p>I&#8217;ve been going to the conferences since the beginning of my career and promptly became a speaker as well. Fast forward several years, I was organizing technical conferences myself ending up as a content director of the biggest technical mobile conference called Mobius in Moscow a decade ago. </p><p>In this post I cover how conferences work, what are the strategies for using conferences for getting a promotion, changing a work place and expanding your network for a long game. </p><p><em>TL;DR: understand your goal of visiting the conferences, study the program, find relevant speakers and companies, network as much as possible.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pYr2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 424w, /__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 848w, /__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pYr2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:877,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3083232,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/204164470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 424w, /__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 848w, /__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pYr2!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc690d6e8-4f37-4887-b536-76f9264295d3_2504x1508.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Authors of multi-year App Store #1 Photo App Ben Sandofsky and Sebastiaan de With as Keynote speakers at Mobius 2019. </figcaption></figure></div><p></p><h1>How conferences work</h1><p>The majority of the conferences including even small meetups work in the same mode. It requires 4 parts to be successful: organisers, speakers, sponsors and attendees.</p><p>The organisers obviously want to have to a financially successful event. The conference budget consists of sold tickets and sponsor&#8217;s packages. The sponsor packages include the booths, promotional materials, banners etc. The sponsors are looking to make an HR Brand mostly, showing how advanced they are technologically and how fun and beneficial it is to work for them. Companies rarely search for clients at tech conferences, mostly talent. </p><p>However the sponsors are only willing to pay the sponsorship if they are sure enough they can get some value from it. And the value comes from the attendees. So conference organisers need to attract the attendees to the conference to make the whole even work. </p><p>The strategy here is straightforward: invite well-known speakers with new, insightful talks. An ideal speaker should have a track of well-given talks previously, bring a fascinating topic and be able to deliver it in an engaging manner. There is a separate topic on how to invite speakers to your conference in the first place, but that&#8217;s off topic for today.</p><p>Anyway, here&#8217;s how the circle completes: the conference invites speakers, attendees come to listen to speakers, sponsors pay to get access to attendees.      </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lDht!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 424w, /__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 848w, /__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lDht!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png" width="1456" height="1519" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1519,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2721185,&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://softwarearchitectureweekly.substack.com/i/204164470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 424w, /__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 848w, /__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lDht!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F162469e6-d577-4e32-9def-d98f981705cc_1457x1520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Me at Droidcon Berlin &#8216;19</figcaption></figure></div><h1>The Attendees Strategies</h1><p>Indeed you as an attendee may just buy a ticket, come to a venue and listen to a bunch of talks which happen on the conference, not to mentioning grabbing an included lunch and some free merch and call it a day. Anyway, your ticket is probably paid by the company, you also get a day or two off work, what else to desire? </p><p>But I argue that would be a waste of time, money and potential. The best value is extracted not out of talks. </p><p><mark data-color="#b599f1" style="background-color: rgb(181, 153, 241); color: rgb(0, 0, 0);"><span data-color="#ffffff" style="color: rgb(255, 255, 255);">For God&#8217;s Sake, the talks will be recorded - you can rewatch them any time later, although few actually does. </span></mark></p><p>Here&#8217;s the flip: the talks are mere a quarter of value you should be getting out of the conference. But then what to do instead? Well, it depends on your short term and long term goals. So, first step is to understand why you attend this conference in the first place besides free snacks. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>Accelerating the promotion</h2><p>The careers are built with promotions followed by achievements. If you goal is to rise up the corporate ladder, you would really like to get some experience from people who already done this from the companies similar to yours or at least with the problems similar to the problems of your company. So your strategy should reaching out to the people who can help you with that. And the obvious tactic to pick in this strategy is doing your homework. Don&#8217;t read the conference program on the opening day. Do this instead.</p><p>Every conference will publish it&#8217;s schedule, it&#8217;s speaker line up and list of partners and sponsors. This is your primary input. Study it well: write down the companies which are similar to yours and find if there are speakers from there. If so - great! Mark the talks from those people in your agenda. Some conferences will provide you with an app where you can bookmarks talks; if there is none, make the records in your calendar. Make sure to attend those talks and listen to the talks carefully - omit scrolling YouTube shorts during the talk. Instead, make notes. Write down 3 to 5 questions about those talks, because when the speaker goes into Q&amp;A, you want to become the first person to ask a question. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yzO9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 424w, /__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 848w, /__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yzO9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png" width="1304" height="1317" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1317,&quot;width&quot;:1304,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:639621,&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://softwarearchitectureweekly.substack.com/i/204164470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 424w, /__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 848w, /__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yzO9!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff454dfa2-5ccd-48d2-96fa-f30a46ad32b6_1304x1317.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Some speakers of Copengagen&#8217; GOTO Conference 2026 </figcaption></figure></div><p></p><p>You probably wonder why it&#8217;s important: practice shows that the audience is not ready to ask questions right away and it creates an awkward silence. And man, the worst feeling of the speaker is when there are no questions after the talk. Save them, be their hero. Ask a question. Don&#8217;t know what to ask? Go with the templates like these: </p><ul><li><p>What would you do differently knowing those problems in advance? </p></li><li><p>What was your biggest learning during solving this problem? </p></li><li><p>What would you recommend to the developers in the similar situations? </p></li></ul><p>The main point is to make the speaker feel good to prepare for your phase 2. What is phase 2? Well, after the talk the speaker stays for several minutes to answer the individual questions. This is your moment - you approach them and ask for the advice. Be explicit about your intention to learn from them and get to know how to get promoted. The best case scenario you will get to know the promotion mechanics. The worst case - well, you get a contact who could refer you in case you decide to change the workplace.</p><p>Talking about a good conference to attend, Packs runs a virtual architecture summit with Lead Engineers, Directors and Data Scientists from Amazon, Google, Splunk Netflix and other companies:</p><h1><strong>Software Architecture in the Age of AI</strong></h1><p><em><strong>ARC: Software Architecture in the Age of AI</strong> is a two-day virtual summit for CTOs, software architects, engineering leaders, and senior engineers exploring how AI is reshaping modern software systems.</em></p><p><em>Hear from industry leaders including <strong>Dr. Ali Arsanjani (Director, Google Applied AI)</strong>, <strong>David Ping (Head of Solutions Architecture, AWS)</strong>, <strong>Juan Bustos (Lead GenAI Partner Engineer, Google)</strong>, <strong>Chi Wang (Google DeepMind)</strong>, and other experts from leading technology organizations.</em></p><p><em>Sessions will cover AI governance, agentic systems, reliable AI architectures, engineering leadership, inference at scale, and practical strategies for designing, deploying, and operating production-ready AI systems.</em></p><p><em>Whether you&#8217;re defining your organization&#8217;s AI strategy or modernizing existing software platforms, ARC offers practical insights from practitioners building enterprise AI today.</em></p><p><em>You can sign up using the following link: <a href="https://www.eventbrite.co.uk/e/arc-2026-software-architecture-in-the-age-of-ai-tickets-1991591030384?aff=SAnl">ARC 2026</a></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!l-gI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 424w, /__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 848w, /__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 1272w, /__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!l-gI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:580237,&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://softwarearchitectureweekly.substack.com/i/204164470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 424w, /__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 848w, /__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 1272w, /__u/substackcdn.com/image/fetch/$s_!l-gI!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1b103-9381-4fc1-82b8-79dd9afc43f5_1920x1079.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>Changing Jobs</h2><p>Being promoted at your place is one story, looking for a new place is completely other. Good news is there is plenty of people for whom helping you is in their best interest. </p><p>Remember the sponsors of conferences? Their goal is to HIRE YOU. Literally the Talent Acquisition specialists will be on booths there gathering contacts. But again, you need to do your homework first.  </p><p>Similar to previous point you should write down the companies that you intend to get an interview for. Once you&#8217;re at the venue, reach out to people from those companies -some will be probably at booths, others will be speakers, 3rd one will be the attendees. Try to talk to the maximum amount of people and make the most meaningful conversations with each of them. How to do that though? </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ARMm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 424w, /__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 848w, /__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ARMm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png" width="1456" height="963" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:963,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8362016,&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://softwarearchitectureweekly.substack.com/i/204164470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 424w, /__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 848w, /__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ARMm!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4a508e7-cf1c-44b9-a413-5eedfca9cbe2_2742x1814.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Talking about API Gateways at DevClub.ee</figcaption></figure></div><p></p><p>Talking to Engineers: figure out the company culture. Find out how do they work on features, how they prioritize things, how the releases happen, if the post mortem are run. Now in the AI era, ask for the AI-approach. Is it token-maxxing or a sane strategy. Don&#8217;t forget to ask about the particular team, manager name, their style and overall mood at the team. </p><p>Talking to Talent Acquisition: figure out the hiring process. How many interviews before offer, how do they happen, who make the decision, how the promotions happen, how learning is managed in the company etc. </p><p>Try to make a good first impression, but don&#8217;t try hard.  Do have a solid reason why you&#8217;re changing a workplace. Good reasons include lack of development, layoffs. Bad reasons? Don&#8217;t ever blame the management, nobody likes complainers. </p><p>Your end goal is to get to your first interview. Ideally you would like to get a referal - in such case you increase the chances to actually get into the process.  </p><h2>General Networking</h2><p>Believe it or not, your career is a long-term game. You never now what you would like to do in a couple of years. So the idea here is to extend your perspective on the industry and find out what is happening around. </p><p>Use the talk breaks for wondering around and talking to people. I realize that software developers are typically shy and a bit afraid of initiating a conversation. Here&#8217;s an algorithm to stop worrying: </p><ol><li><p>Grab a glass of water, but don&#8217;t have more than a few sips there</p></li><li><p>Approach a person you&#8217;re interested in(may be it&#8217;s a lead developer in an interesting company)</p></li><li><p>Tell them &#8220;Hello, I am &lt;Your Name&gt;, I am an engineer at &lt;Company&gt;. What do you do?&#8221;.</p></li><li><p>Now you have a conversation!</p></li><li><p>Once you want to end the conversation, end the water and say you need a refill</p></li><li><p>Repeat</p></li></ol><p>Grab people&#8217;s contacts, add them to your contact list, mark them with notes why you though the person was interesting.</p><p>Some time later you might want to invite them to a meetup. Maybe you would ask for a referal. Who knows? Play the long game.</p><h1>On Online Conferences</h1><p>Online conferences are pretty common nowadays especially after the pandemic. Unfortunately you don&#8217;t get a physical presense, but that does not mean you can not network there too. What you&#8217;re looking for is the networking breaks. Some conferences call them Random coffees, where you&#8217;re randomly matched with a person, some have just breakout rooms, others have different formats. But make sure to attend those calls. </p><p>You would also probably get invited to Slack, Telegram or a platform where the online conference happens. Study what communication option the platform offers and follow the approaches mentioned above: DM people! But don&#8217;t DM people with just asks: offer something instead. Make a conversation interesting for them too. Offer to share your experience with the technology at your company, share an insight you got, offer to tell something valuable. Don&#8217;t make a conversation one-sided. </p><p>If you read up to this point, don&#8217;t forget to leave a like and share the post!</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/capturing-value-out-of-technical?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/capturing-value-out-of-technical?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="/__u/softwarearchitectureweekly.substack.com/p/capturing-value-out-of-technical?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h1>Thanks to Patrons!</h1><p><span>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on </span><a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a><span>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</span></p>]]></content:encoded></item><item><title><![CDATA[Durable Postgres, Hedged Requests, Scaled MCP Adoption and more in Architecture Weekly #199]]></title><description><![CDATA[Durable Functions in Postgres, hedged requests, LLM inference disaggregation, enterprise MCP, Shopify's Quick, AI for PRD Review, Reliable Agentic Systems and YAGNI costs]]></description><link>https://softwarearchitectureweekly.substack.com/p/durable-postgres-hedged-requests</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/durable-postgres-hedged-requests</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Mon, 29 Jun 2026 07:14:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xBNU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #199. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with complexity: &#129299; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/softwarearchitectureweekly.substack.com/subscribe"><span>Subscribe now</span></a></p><h1><strong>Highlights</strong></h1><h2><a href="https://techcommunity.microsoft.com/blog/adforpostgresql/introducing-durable-functions-in-postgresql/4526821">Introducing Durable Functions in PostgreSQL</a> &#129299;</h2><p>Postgres will happily store your data, run your queries, and scale with you for years. But the moment you need to do more with that data, such as running multi-step transformation, scheduling nightly rollups, generating embeddings or waiting on an approval, you hit a wall. Postgres has no built-in way to run long-lived, fault-tolerant work. Microsoft's pg_durable makes PostgreSQL an orchestration engine: workflows are defined as graphs of SQL steps, each checkpointed after execution, so database crashes and restarts resume from the last completed step with no external state reconstruction. The architecture details inside!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xBNU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png 424w, /__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png 848w, /__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xBNU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png" width="997" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:997,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191091,&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://softwarearchitectureweekly.substack.com/i/201953380?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png 424w, /__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png 848w, /__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xBNU!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e09bba-1c3b-4cbb-be20-7f3e51da04a4_997x563.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>#db #architecture #engineering #softwareengineering</p><h2><a href="https://www.infoq.com/articles/adaptive-hedged-requests-p99-latency/">Stragglers, Not Failures: How Adaptive Hedged Requests Reduce p99 Latency by 74 Percent</a> &#129299;</h2><p>In fan-out microservice architectures, the dominant cause of high p99 latency is stragglers &#8212; slow-completing requests rather than failures &#8212; because one straggler in a fan-out blocks the entire composite response. While retries are a solution for failed requests, the stragglers require a parallel request if slow response is detected. Indeed new issues come with the solution, like write amplification, but if the goal is p99 optimized, raced requests are a way to go. The result is a 74% reduction in p99 latency with zero call-site configuration changes, with a reference implementation available as an open-source Go library.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!aEJ4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!aEJ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg" width="1234" height="1440" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1440,&quot;width&quot;:1234,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!aEJ4!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb976f23-e4f6-4509-b1a3-11eccbfb96ef_1234x1440.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#distributed #architecture #engineering #softwareengineering</p><h2><a href="https://kubex.ai/blog/the-inference-paradox-how-split-brain-llms-are-killing-your-gpu-roi/">The Inference Paradox: How Split-Brain LLMs Are Killing Your GPU ROI</a> &#129299;</h2><p>LLM inference has a structural hardware mismatch: the prefill phase is compute-bound (processing all input tokens in a single forward pass) while decode is memory-bandwidth-bound (reading the full KV cache to emit one token per step), so coupling both phases on the same GPU means each permanently starves the other. Kubex's enterprise audits surface average GPU utilization near 5% &#8212; monolithic vLLM serializes all prefill before decode can continue, and under high concurrency the delay compounds across every request in the batch. Disaggregating prefill and decode onto separate hardware-optimized node pools &#8212; as llm-d (now a CNCF sandbox project) implements on Kubernetes with prefix-cache-aware routing &#8212; yields 2&#8211;3x throughput at high concurrency by keeping the decode pool continuously active while the prefill pool handles bursts in parallel.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JzBE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 424w, /__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 848w, /__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JzBE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png" width="1316" height="953" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:953,&quot;width&quot;:1316,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 424w, /__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 848w, /__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JzBE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5853ce-13db-42a3-b409-8e6a95451b0d_1316x953.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #llm #engineering #cloud</p><h2><a href="https://blog.cloudflare.com/enterprise-mcp/">Scaling MCP Adoption: Cloudflare's Enterprise Reference Architecture</a> &#128104;&#8205;&#128188;</h2><p>MCP Servers bring a set of vulnerabilities like prompt injections and indeed supply chain attacks. Allowing the developers to make the MCP servers is a big security risk and Cloudflare tackes it at scale with MCP platform handled by a single platform team, which routes all inter-service calls through AI Gateway for per-user spend tracking and budget enforcement, and uses Cloudflare Access JWT as the OAuth provider. For platform teams standardizing on MCP at enterprise scale, this is a production-complete blueprint: remote hosting, cost controls, identity, audit logging, and progressive tool disclosure in one reference design.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1GCZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 424w, /__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 848w, /__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1GCZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png" width="979" height="401" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:401,&quot;width&quot;:979,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BLOG-3252 2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BLOG-3252 2" title="BLOG-3252 2" srcset="/__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 424w, /__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 848w, /__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1GCZ!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05d044d-b8dd-47b0-9bc2-5fabf1a05b2d_979x401.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#architecture #cloud #ai #engineering</p><h2><a href="https://shopify.engineering/quick">Quick: An Internal Hosting Platform for the AI Era</a> &#128104;&#8205;&#128188;</h2><p>Shopify's Quick started as the simplest possible internal hosting: HTML files in a GCS bucket, a wildcard NGINX config mapping <code>*.quick.shopify.io</code> to folder paths via GCS Fuse, and Google Identity-Aware Proxy ensuring every request is a verified Shopify employee. In under a year it hosts 50,000+ sites used by more than half the company &#8212; AI code generation created demand for internal hosting that outpaced every alternative tool. The architecture grew only when forced: an LLM proxy with server-side API keys, optional CloudSQL+Node.js backends, BigQuery data connectors, and WebSocket support, each added when multiple teams independently needed it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4OjM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4OjM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4OjM!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb90d12c-72d1-4345-a3c7-02ff91a5fa2f_1800x1013.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#engineering #devops #cloud #softwareengineering</p><h2><a href="https://www.uber.com/us/en/blog/first-pass-prd/">AI Is Moving up the Software Lifecycle: from Code Review to PRD Governance</a> &#128104;&#8205;&#128188;</h2><p>Code review was the easy part &#8212; Uber, DoorDash, and Cloudflare are now pushing AI review further left, into PRDs and design docs, before a single line of code exists. Uber runs a first-pass AI filter on product requirement documents while keeping engineers as final validators, and DoorDash&#8217;s internal code reviewer is explicitly tuned for fewer, higher-signal comments after teams complained about noisy automated feedback. In Bolt a good product document was stumbling features for weeks so reviewing Product Documents should be a great feature. See Uber&#8217;s experience in the article. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7Smt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7Smt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg" width="1456" height="758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:758,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Four-section summary of deliverables: Launch Readiness Rating (with statuses Ready, Ready with Caveats, Not Ready), six Dimension Scores (rated Looks Good or Needs Review), Detailed Findings &amp; Fixes (including replacement text and evidence), and Action Items (Critical Requirements and Optimizations).&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Four-section summary of deliverables: Launch Readiness Rating (with statuses Ready, Ready with Caveats, Not Ready), six Dimension Scores (rated Looks Good or Needs Review), Detailed Findings &amp; Fixes (including replacement text and evidence), and Action Items (Critical Requirements and Optimizations)." title="Four-section summary of deliverables: Launch Readiness Rating (with statuses Ready, Ready with Caveats, Not Ready), six Dimension Scores (rated Looks Good or Needs Review), Detailed Findings &amp; Fixes (including replacement text and evidence), and Action Items (Critical Requirements and Optimizations)." srcset="/__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!7Smt!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8b6c4b6-9d09-43f4-a284-088e740f4668_2168x1128.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #softwareengineering #engineering #quality</p><h2><a href="https://martinfowler.com/articles/reliable-llm-bayer.html">Building Reliable Agentic AI Systems</a> &#128104;&#8205;&#128188;</h2><p>Production-grade agentic AI hinges on two disciplines: context engineering (routing the right information to the right stage, not stuffing everything into one prompt) and harness engineering (controlled LangGraph orchestration with defined pause points, retries, and state persistence). Bayer&#8217;s PRINCE platform uses a hybrid RAG pipeline &#8212; semantic search weighted 0.7, keyword search 0.3 &#8212; reranking 20 initial chunks down to top 7, with Text-to-SQL capped at 50 records and 3 auto-correction attempts. Complementary reflection loops (process, data, and draft) catch trajectory drift, information gaps, and output completeness failures respectively. Daily live-traffic evaluation via RAGAS metrics closes the production feedback loop.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!x-S7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 424w, /__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 848w, /__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!x-S7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png" width="985" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:985,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:87936,&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://softwarearchitectureweekly.substack.com/i/201953380?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 424w, /__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 848w, /__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x-S7!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16796ec3-beae-41b4-a05b-f021a176ca24_985x498.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#llm #architecture #ai #softwareengineering</p><p></p><h2><a href="https://newsletter.kentbeck.com/p/the-cost-yagni-was-never-about?utm_source=post-email-title&amp;publication_id=256838&amp;post_id=203433161">The Cost YAGNI Was Never About</a> &#127868;</h2><p>Developers think that YAGNI - You Ain&#8217;t Gonna Need It - was a warning against overengineering for the imaginary use cases. And while the cost of writing code was obvious, the cost of maintaining a complex structure is still hidden in the plane sight. However, LLM being able to generate code almost for free surfaces this problem: YAGNI is not so much about code writing, it&#8217;s about designing for a wrong thing. Don&#8217;t listen to me, listen to Kent Beck.   </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:203433161,&quot;url&quot;:&quot;https://newsletter.kentbeck.com/p/the-cost-yagni-was-never-about&quot;,&quot;publication_id&quot;:256838,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Software Design: Tidy First?&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;The Cost YAGNI Was Never About&quot;,&quot;truncated_body_text&quot;:&quot;Here&#8217;s how I remember it&#8212;Chet Hendrickson came up to me in the middle of a project and said, &#8220;I could do this simplistic thing now but in 3 weeks that will be insufficient so since we&#8217;re going to need this more complicated thing I want to do it now.&#8221;&quot;,&quot;date&quot;:&quot;2026-06-25T12:59:56.177Z&quot;,&quot;like_count&quot;:129,&quot;comment_count&quot;:18,&quot;bylines&quot;:[{&quot;id&quot;:24333739,&quot;name&quot;:&quot;Kent Beck&quot;,&quot;handle&quot;:&quot;kentbeck&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F000da410-0ed6-4a25-80b1-6a46e964ae0b_242x242.jpeg&quot;,&quot;bio&quot;:&quot;Programmer, artist, coach coach, singer/guitarist, peripatetic. Learning to be me. Full-time content producer. Mailto:kentlbeck@gmail.com&quot;,&quot;profile_set_up_at&quot;:&quot;2021-04-20T15:03:12.374Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-03-09T14:46:10.113Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:226404,&quot;user_id&quot;:24333739,&quot;publication_id&quot;:256838,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:256838,&quot;name&quot;:&quot;Software Design: Tidy First?&quot;,&quot;subdomain&quot;:&quot;tidyfirst&quot;,&quot;custom_domain&quot;:&quot;newsletter.kentbeck.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Software design is an exercise in human relationships. So are all the other techniques we use to develop software. How can we geeks get better at technique as one way of getting better at relationships?&quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:24333739,&quot;primary_user_id&quot;:24333739,&quot;theme_var_background_pop&quot;:&quot;#FD5353&quot;,&quot;created_at&quot;:&quot;2021-01-07T21:22:19.269Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Kent Beck&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}},{&quot;id&quot;:199084,&quot;user_id&quot;:24333739,&quot;publication_id&quot;:285700,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:285700,&quot;name&quot;:&quot;Geek Incentives&quot;,&quot;subdomain&quot;:&quot;geekincentives&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Creating and maintaining incentives that help geeks do their best work&quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:24333739,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2021-02-13T15:28:41.577Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Kent Beck&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:null,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}},{&quot;id&quot;:718034,&quot;user_id&quot;:24333739,&quot;publication_id&quot;:780969,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:780969,&quot;name&quot;:&quot;Kent Beck Poker&quot;,&quot;subdomain&quot;:&quot;kentbeckpoker&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Watch as I learn to play poker, warts and all&quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:24333739,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#6C0095&quot;,&quot;created_at&quot;:&quot;2022-03-02T01:27:36.844Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Kent Beck&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:null,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}},{&quot;id&quot;:3026154,&quot;user_id&quot;:24333739,&quot;publication_id&quot;:2975268,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2975268,&quot;name&quot;:&quot;Leading Geeks with Purpose&quot;,&quot;subdomain&quot;:&quot;leadgeekswithpurpose&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Leading Geeks with Purpose: The Brass Ring Approach is a one-day workshop for non-technical executives who want to get the full returns from their technology investment.&quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F000da410-0ed6-4a25-80b1-6a46e964ae0b_242x242.jpeg&quot;,&quot;author_id&quot;:24333739,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2024-09-04T14:16:12.791Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Kent Beck&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}},{&quot;id&quot;:9137860,&quot;user_id&quot;:24333739,&quot;publication_id&quot;:8915297,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:8915297,&quot;name&quot;:&quot;Kent Says Fuck Parkinson's&quot;,&quot;subdomain&quot;:&quot;fparkinsons&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Having been recently diagnosed with Parkinson's, I'm here to think about how I'm going to deal &amp; cope. Whining, raging, cogitating, questioning. Never medical advice.&quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F000da410-0ed6-4a25-80b1-6a46e964ae0b_242x242.jpeg&quot;,&quot;author_id&quot;:24333739,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2026-05-04T15:46:51.255Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Kent Beck&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100,&quot;status&quot;:{&quot;bestsellerTier&quot;:100,&quot;subscriberTier&quot;:5,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:100},&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://newsletter.kentbeck.com/p/the-cost-yagni-was-never-about?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Software Design: Tidy First?</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The Cost YAGNI Was Never About</div></div><div class="embedded-post-body">Here&#8217;s how I remember it&#8212;Chet Hendrickson came up to me in the middle of a project and said, &#8220;I could do this simplistic thing now but in 3 weeks that will be insufficient so since we&#8217;re going to need this more complicated thing I want to do it now&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 months ago &#183; 129 likes &#183; 18 comments &#183; Kent Beck</div></a></div><p>#principles</p><p><span>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on </span><a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a><span>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</span></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/durable-postgres-hedged-requests?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/durable-postgres-hedged-requests?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="/__u/softwarearchitectureweekly.substack.com/p/durable-postgres-hedged-requests?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Building a Stripe App for Data Sync: How to Choose Your Integration Type]]></title><description><![CDATA[4 Options to integrate Stripe for data synchronization]]></description><link>https://softwarearchitectureweekly.substack.com/p/building-a-stripe-app-for-data-sync</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/building-a-stripe-app-for-data-sync</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Tue, 02 Jun 2026 19:15:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xVL-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We built a Stripe App for <a href="https://getsupplied.ai">Supplied</a>, a DAC7 tax reporting platform for EU marketplace operators. The integration took six weeks, went through three architectural U-turns, and produced a 282-line UI that got deleted wholesale. The root cause wasn&#8217;t poor execution &#8212; it was choosing the wrong integration type upfront and not understanding the design constraints that choice carries.</p><p>This article is a practical guide to choosing the right Stripe integration for read-only data access, understanding what building a Stripe App actually entails, and avoiding the specific traps we fell into.</p><div><hr></div><h2><strong>Four Ways to Read Data from a Stripe Account</strong></h2><p>Before you write a line of code, you need to pick your integration model. There are four meaningfully different approaches, and they&#8217;re not interchangeable.</p><h3><strong>Option 1: User-Generated Restricted API Key</strong></h3><p>The merchant creates a restricted API key in their Stripe Dashboard (Developers &#8594; API keys &#8594; Create restricted key), selects the read-only permissions your app needs, and pastes it into your product.</p><p><strong>When it works:</strong> Internal tooling, low merchant count, you control onboarding.</p><p><strong>Why it breaks at scale:</strong> Fully manual. No programmatic rotation. If the key leaks, the merchant has to notice and revoke it themselves. For a public SaaS with hundreds of clients, the support burden alone makes it impractical.</p><h3><strong>Option 2: Stripe Connect (Platform Model)</strong></h3><p>In Stripe Connect, merchants are <em>connected accounts</em> on your platform. You process payments on their behalf and can read their data using your platform key with a <code>Stripe-Account</code> header.</p><p><strong>When it works:</strong> You&#8217;re building a marketplace or platform that already processes payments through Stripe. The merchants signed up through you, not directly with Stripe.</p><p><strong>Why it doesn&#8217;t work here:</strong> This is a deep structural commitment &#8212; merchants have to onboard through your Stripe platform, putting you in the payment flow. If your product is downstream of Stripe (you&#8217;re reading data it already holds, not facilitating payments), Connect is the wrong model. You&#8217;re acquiring platform-level authority when all you need is read access.</p><h3><strong>Option 3: Stripe Connect OAuth (Standalone)</strong></h3><p>Standard OAuth: you redirect the merchant to <code>connect.stripe.com/oauth/authorize</code>, they grant access, Stripe redirects back with a code, you exchange it for an access token scoped to that account.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!iwDc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 424w, /__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 848w, /__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!iwDc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png" width="1270" height="781" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7799a27-3072-4877-98c4-b530f539362f_1270x781.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:781,&quot;width&quot;:1270,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78048,&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://softwarearchitectureweekly.substack.com/i/198968119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 424w, /__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 848w, /__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iwDc!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7799a27-3072-4877-98c4-b530f539362f_1270x781.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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><strong>When it works:</strong> You want programmatic, per-account read access, you&#8217;re not building a Stripe App, and you want a standard OAuth UX rooted in your own web app.</p><p><strong>Why consider the App instead:</strong> The merchant has to leave their Stripe Dashboard to connect. If your customers live in Stripe daily, a Stripe App removes that friction. If most of your customers come from outside Stripe, standalone OAuth is simpler to build and requires no App Marketplace review. However this approach bears a significant downside: you can&#8217;t be found on the Marketplace either removing a marketing channel.</p><h3><strong>Option 4: Stripe App</strong></h3><p>Stripe Apps can embed your product inside the Stripe Dashboard. The merchant installs the app from the marketplace (or a direct link), and a panel appears in their sidebar - but not necessarily. Stripe Apps can leverage UI - this is exactly the panel we mentioned. But there might be a UI-less apps, which are backend-only. Anyway, there are two sub-types that matter for data access.</p><p><strong>4a &#8212; App with Restricted Key (</strong><code>stripe_api_access_type: "restricted"</code><strong>)</strong></p><p>You declare permissions in <code>stripe-app.json</code>. Stripe automatically provisions a per-install restricted key with exactly those scopes. No OAuth token exchange, no refresh logic &#8212; you read the key from the app context and call Stripe&#8217;s API directly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ESgT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 424w, /__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 848w, /__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ESgT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png" width="1270" height="781" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:781,&quot;width&quot;:1270,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77450,&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://softwarearchitectureweekly.substack.com/i/198968119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 424w, /__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 848w, /__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ESgT!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8401e7d2-5f84-401d-bf3b-259ad193081a_1270x781.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>Simplest token model. The ceiling: restricted keys are scoped strictly to your declared permissions. If you need the token to outlast a session or call Stripe&#8217;s API from a scheduled backend job, the automatic key won&#8217;t work.</p><p><strong>4b &#8212; App with Connect OAuth (</strong><code>stripe_api_access_type: "oauth"</code><strong>)</strong></p><p>During install, the merchant goes through the standard Stripe Connect OAuth flow. You get a full access token and refresh token per account &#8212; identical to Option 3, but the entry point is the Stripe App install rather than a button in your web app.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!R6eR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 424w, /__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 848w, /__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 1272w, /__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!R6eR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png" width="1456" height="1274" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1274,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:231612,&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://softwarearchitectureweekly.substack.com/i/198968119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 424w, /__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 848w, /__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 1272w, /__u/substackcdn.com/image/fetch/$s_!R6eR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d77872a-4f42-4840-b1b2-d9cb62f16d83_1870x1636.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>More token management work, but full flexibility. You store, refresh, and encrypt the token yourself. This is what we ended up building.</p><div><hr></div><h2><strong>How to Choose</strong></h2><p><strong>By data access need:</strong></p><ul><li><p>Small number of accounts, internal tooling, willing to ask users to generate a key &#8594; <strong>restricted API key</strong></p></li><li><p>Already a Stripe Connect platform processing payments on behalf of merchants &#8594; <strong>Stripe Connect platform model</strong></p></li><li><p>Want OAuth-based access, most customers come from outside Stripe &#8594; <strong>standalone Connect OAuth</strong></p></li><li><p>Customers live in Stripe daily, install UX matters for conversion &#8594; <strong>Stripe App</strong></p></li></ul><p><strong>If you&#8217;re building a Stripe App:</strong></p><ul><li><p>Want simplest token model, no refresh logic, permissions declared upfront &#8594; <strong>App + restricted key</strong></p></li><li><p>Need long-lived tokens, schedule-based backend API calls, full flexibility &#8594; <strong>App + Connect OAuth</strong></p></li><li><p>Core workflow happens inside the Stripe Dashboard &#8594; <strong>UI Extension (visible panel)</strong></p></li><li><p>The app is a one-time connection step, your product lives elsewhere &#8594; <strong>backend-only (</strong><code>extensions: null</code><strong>)</strong></p></li></ul><div><hr></div><h2><strong>If You Build a Stripe App: UI Extension vs. Backend-Only</strong></h2><p>A Stripe App can have a visible UI &#8212; a React panel rendered inside the Stripe Dashboard &#8212; or no UI at all, with only OAuth and webhooks.</p><p><strong>UI Extension</strong> means your app renders inside Stripe&#8217;s iframe using their proprietary SDK (<code>@stripe/ui-extension-sdk</code>). The sandbox is strict: no cookies, no <code>localStorage</code>, no arbitrary external fetch calls. Requests to your backend must go through <code>fetchStripeSignature()</code>, which signs the request so you can verify it server-side. State doesn&#8217;t persist across page loads.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xVL-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 424w, /__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 848w, /__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xVL-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png" width="1456" height="867" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:867,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Build a Stripe App | Stripe&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Build a Stripe App | Stripe" title="Build a Stripe App | Stripe" srcset="/__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 424w, /__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 848w, /__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xVL-!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7d6b403-f154-4c9b-ba06-a6c3963c4b6c_1620x965.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Intercom Stripe App UI.</figcaption></figure></div><p><strong>Backend-only</strong> means <code>"extensions": null</code> in <code>stripe-app.json</code>. The app exists only as an OAuth grant mechanism and webhook receiver. The merchant installs it, completes the OAuth flow, and returns to their normal Stripe workflow. Your product&#8217;s UI lives in your own web app.</p><p>We started with a UI Extension and ended with backend-only. The UI felt valuable &#8212; connection status, sync history, a disconnect button, all without leaving Stripe. But it was built on Auth0 login happening inside the sandboxed iframe, which required a popup, clean popup closure, and state surviving an OAuth round-trip inside a sandbox. Every piece of that is fragile. We deleted 282 lines of TypeScript on the same day we simplified the OAuth architecture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MTvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 424w, /__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 848w, /__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MTvK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png" width="1456" height="894" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:894,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:498776,&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://softwarearchitectureweekly.substack.com/i/198968119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 424w, /__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 848w, /__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MTvK!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa99ffb76-3b1f-4ec1-9499-e1b954321bd9_2838x1742.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pressing &#8220;Install from Stripe&#8221; opens the Marketplace.</figcaption></figure></div><p><strong>When a UI Extension is worth it:</strong> The app&#8217;s core workflow happens in Stripe. The panel provides value <em>while the user is working in the Dashboard</em>, not just during setup.</p><p><strong>When backend-only is the right call:</strong> The app is a data pipeline &#8212; Stripe is the source, your product is the destination. The install flow is a one-time event. Once connected, the user has no reason to return to Stripe to interact with your product.</p><div><hr></div><p></p><h2><strong>What We Built and What Went Wrong</strong></h2><p>We&#8217;re a DAC7 tax reporting platform. Marketplace operators on Stripe must report seller earnings data to EU tax authorities annually. The Stripe App lets them connect their Stripe account to our reporting pipeline without leaving the Dashboard. We only needed to <em>read</em> &#8212; invoices, customers, payments, transfers &#8212; never write.</p><p>We ruled out:</p><ul><li><p><strong>Restricted API key</strong> &#8212; implemented before the app, feels clunky and not exactly trustworthy</p></li><li><p><strong>Stripe Connect platform</strong> &#8212; we&#8217;re downstream of Stripe, not a payment processor</p></li><li><p><strong>Standalone Connect OAuth</strong> &#8212; our customers are Stripe-native; the App install UX matters</p></li></ul><p>We chose the Stripe App with Connect OAuth. Here&#8217;s how the architecture evolved.</p>
      <p>
          <a href="/__u/softwarearchitectureweekly.substack.com/p/building-a-stripe-app-for-data-sync">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[ScyllaDB Clusters at Discord, Zero Trust for AI Agents, CloudFlare Data Platform and many more in Architecture Weekly #198]]></title><description><![CDATA[Also Better Experiments with LLM Evals, Securing Private Video Content, Migrating Data Ingestion Systems at Meta Scale and How Linear is so fast.]]></description><link>https://softwarearchitectureweekly.substack.com/p/scylladb-clusters-at-discord-zero</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/scylladb-clusters-at-discord-zero</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Mon, 01 Jun 2026 07:24:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-4dR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #198. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/softwarearchitectureweekly.substack.com/subscribe"><span>Subscribe now</span></a></p><h1><strong>Highlights</strong></h1><h2><a href="https://discord.com/blog/how-discord-automates-scylladb-clusters-at-scale">How Discord Automates ScyllaDB Clusters at Scale</a> &#128119;&#8205;&#9794;&#65039;</h2><p>A small infrastructure team operating 20+ ScyllaDB clusters with nearly 500 nodes cannot afford purely manual runbooks for cluster-wide operations. Discord&#8217;s Scylla Control Plane (SCP) encodes operations &#8212; rolling OS upgrades, cluster expansion, shadow cluster provisioning, node recovery &#8212; as YAML-defined workflows with explicit retry counts, parallelism controls, and abort-on-failure semantics; idempotency is a hard requirement for every task so that any retry is safe. Shadow clusters &#8212; temporary production replicas receiving real traffic &#8212; let the team validate new ScyllaDB versions before they touch live data; SCP automates the full shadow cluster lifecycle, cutting what once required more than a day of continuous engineer attention to largely unattended runs. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-4dR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png 424w, /__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png 848w, /__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-4dR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png" width="1456" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Wumpus climbing a staircase of developer-icon blocks. &quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Wumpus climbing a staircase of developer-icon blocks. " title="Wumpus climbing a staircase of developer-icon blocks. " srcset="/__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png 424w, /__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png 848w, /__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-4dR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F483f5ed1-95ce-441c-b713-1d230a603d37_3750x1500.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>#db #distributed #architecture #engineering</p><h2><a href="https://cdn.prod.website-files.com/6889473510b50328dbb70ae6/6a1611a04085d7cd3dadc924_Claude-eBook-Zero-Trust-for-AI-Agents-05182026.pdf">Zero Trust for AI Agents</a> &#127868;</h2><p>Each new technology bears security risks and the agentic systems is no exception. Both common vulnerabilities like supply chain attacks and excessive permissions stay; new ones like direct and indirect prompt injection, RAG poisoning and others comes. Follow the Antropic guide on applying Zero Trust to your agentic systems.</p><p>#security #ai</p><h2><a href="https://blog.cloudflare.com/our-unified-data-platform/">How we built Cloudflare&#8217;s data platform and an AI agent on top of it</a> &#128104;&#8205;&#128188;</h2><p>An analyst working at Cloudflare and asking themselves &#8220;How many domains that signed up today are in the Top 100 by traffic?&#8221; finds it difficult to answer searching for various systems, consolidating data and preparing a query. Cloudflare built  a data lakehouse entirely on Cloudflare&#8217;s own stack &#8212; Apache Trino as the query engine joins Postgres, ClickHouse, and Iceberg-on-R2 tables in a single SQL statement without intermediate materialization, with Workers handling compute and Workflows handling orchestration. Skipper, the AI agent sitting on top, routes through Anthropic Claude models treated as commodity APIs.  Nice case study from Cloudflare! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!h5IE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 424w, /__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 848w, /__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 1272w, /__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!h5IE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png" width="1456" height="927" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:927,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 424w, /__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 848w, /__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 1272w, /__u/substackcdn.com/image/fetch/$s_!h5IE!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d1aa17b-dfd6-456e-8045-bfac0be0dbed_1999x1273.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#architecture #cloud #ai #engineering</p><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/scylladb-clusters-at-discord-zero?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/scylladb-clusters-at-discord-zero?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="/__u/softwarearchitectureweekly.substack.com/p/scylladb-clusters-at-discord-zero?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h1><strong>Follow-Up</strong></h1><h2><a href="https://engineering.atspotify.com/2026/5/better-experiments-with-llm-evals-a-funnel-not-a-fork">Better Experiments with LLM Evals &#8212; A Funnel, Not a Fork</a> &#128104;&#8205;&#128188;</h2><p>Code Generation, Leads Classification, Content Writing&#8230; LLM can be useful in A/B testing! At Spotify, only 12% of A/B tests produce a shipped positive result and teams roll back 42% of launched experiments before they fully ship, which means evaluation effort spent on experiments that shouldn&#8217;t run at all is the biggest waste in the pipeline. The fix is positioning LLM evals as a funnel upstream of experiments: automated judges score relevance, coherence, and quality across large candidate sets, catching trust-breaking content or regressions that make a treatment unworthy of a full test, while experiments remain the authority on whether actual user outcomes moved. Follow Spotify&#8217;s post for details. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!cZ0u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 424w, /__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 848w, /__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 1272w, /__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!cZ0u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png" width="1456" height="452" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:452,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;verify-validate-calibrate-experiments&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="verify-validate-calibrate-experiments" title="verify-validate-calibrate-experiments" srcset="/__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 424w, /__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 848w, /__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 1272w, /__u/substackcdn.com/image/fetch/$s_!cZ0u!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9324ff30-5bba-4362-8266-ba0024d0d9ac_1999x621.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #softwareengineering #engineering #quality</p><h2><a href="https://engineering.fb.com/2026/05/12/data-infrastructure/migrating-data-ingestion-systems-at-meta-scale/">Migrating Data Ingestion Systems at Meta Scale</a> &#128104;&#8205;&#128188;</h2><p>Big migrations are scary and effortful. Imagine one with the biggest MySQL deployment in the world like at Meta&#8217;s data ingestion system.</p><p>The team ran both legacy and new systems in a shadow testing mode, diffing outputs for correctness so individual pipelines could be validated and migrated independently; partition-level metadata flags automatically halted new delta landings and forced merges with known-good partitions whenever a partition was flagged as bad, bounding data quality risk during the transition. </p><p>At @boltapp we followed the same shadow testing approach during our migration from MySQL to TitaniumDB.  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!aVms!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 424w, /__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 848w, /__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 1272w, /__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!aVms!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png" width="1406" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:1406,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 424w, /__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 848w, /__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 1272w, /__u/substackcdn.com/image/fetch/$s_!aVms!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff48684-3dd1-4cb3-b53c-0cf12a9a327b_1406x550.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#db #architecture #distributed #engineering</p><p></p><h2><a href="https://www.studyfromexperts.com/blogs/securing-private-video-content-with-cloudfront-signed-urls-and-serverless-on-aws/">Securing Private Video Content</a> &#128104;&#8205;&#128188;</h2><p>Sharing a video via YouTube is easy with it&#8217;s visibility settings and paid walls. But if you&#8217;re running your own video platform like in a learning platform? Lee Gilmore showcases how to use AWS Lambda, CloudFront, S3 and Secrets manager to manage the access to video content reliably in a serverless environment. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!WkDa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 424w, /__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 848w, /__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 1272w, /__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!WkDa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png" width="1456" height="837" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:837,&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="/__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 424w, /__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 848w, /__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 1272w, /__u/substackcdn.com/image/fetch/$s_!WkDa!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7604bfcc-d546-44a4-a0c1-4d57a305393f_1850x1063.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#casestudy #serverless </p><h2><a href="https://github.blog/engineering/architecture-optimization/from-latency-to-instant-modernizing-github-issues-navigation-performance/">From Latency to Instant: Modernizing GitHub Issues Navigation Performance</a> &#128104;&#8205;&#128188;</h2><p>At the start of 2026, only 2% of GitHub Issues page views completed in under 200ms &#8212; a meaningful gap against local-first tools that set the modern expectation for instant navigation. The fix layers a client-side cache backed by IndexedDB with a &#8220;preheating&#8221; strategy: a service worker proactively walks high-intent issue references and pre-warms cache entries just before a user navigates, hitting the network only on misses, which keeps the approach both fast and cheap. Rendering from local cache first and revalidating in the background pushed 35% of issue views under 200ms; the team is now investing in an edge delivery layer closer to users and backend rewrites optimized explicitly for low-latency delivery. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!J32C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 424w, /__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 848w, /__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 1272w, /__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!J32C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png" width="1024" height="443" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:443,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Architectural diagram showing the client cache layer.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Architectural diagram showing the client cache layer." title="Architectural diagram showing the client cache layer." srcset="/__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 424w, /__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 848w, /__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 1272w, /__u/substackcdn.com/image/fetch/$s_!J32C!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e286a1a-ba5d-4712-aef1-d7f916a36a2e_1024x443.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#architecture #softwareengineering #engineering #quality</p><h2><a href="https://performance.dev/how-is-linear-so-fast-a-technical-breakdown">How Linear is so fast?</a> &#128104;&#8205;&#128188;</h2><p>We started with Linear at Supplied AI right away due to it&#8217;s rich intergration capabilities, but more importantly - it was and still is fast. Apparently, the secret lies not in the fat DB hosts or extensive caching. It&#8217;s optimizing the web bundle, making optimistic right into local db and syncing it later, preloading, rendering before authentication and multiple other optimizations. Find all the details in the article by Dennis Brotzky.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZcSB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZcSB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg" width="893" height="502" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:893,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How's Linear so fast? A technical breakdown&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How's Linear so fast? A technical breakdown" title="How's Linear so fast? A technical breakdown" srcset="/__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ZcSB!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff511af6-4c63-444b-bfc6-1c285ab52cad_893x502.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#casestudy #performance</p><p></p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[RAG in Production, Temporal Primer, Structured Prompt Driven Development and more in Architecture Weekly #197]]></title><description><![CDATA[5 Ways to make CDC with Postgres, What&#8217;s Easy, What&#8217;s Hard Now, Replacing Redis with MySQL, Valkey 9.1 and Your AI wants to nuke your database.]]></description><link>https://softwarearchitectureweekly.substack.com/p/rag-in-production-temporal-primer</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/rag-in-production-temporal-primer</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Thu, 21 May 2026 08:43:08 GMT</pubDate><enclosure url="https://martinfowler.com/articles/structured-prompt-driven/spdd-reason-canvas.svg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #197. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/softwarearchitectureweekly.substack.com/subscribe"><span>Subscribe now</span></a></p><p></p><h2><strong>Business Oriented System Design Course</strong></h2><p>Wanna learn how to design systems which truly impact business and get promoted? <a href="https://vvsevolodovich.dev/business-oriented-system-design-course/">Sign up for Business Oriented System Design Course</a>: starts 8th of June. Begin the year with learning crucial skills and advance your career! 100+ engineers from Bolt, Booking.com, Semrush, TripleTen etc. who completed the course and brought their architecture skills to a new level.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2t0y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2t0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1958581,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/184322266?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.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><h1><strong>Highlights</strong></h1><h2><a href="https://arpitbhayani.me/blogs/rag-production">RAG in Production</a><strong> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>We faced the problem of choosing data sources for our AI Agents and obviously we started weighing retriaval augamented generation. And it looks like RAG is surprisingly complex: tokenization process, committing to the model, reindexing cost and many more. Grab a great article on the topic.</p><p>#rag #ai </p><h2><a href="https://arpitbhayani.me/blogs/temporal-primer">Temporal Primer &#8212; Building Long-Running Systems</a>  &#127868;</h2><p>Temporal is a durable execution engine that records every workflow event &#8212; activity scheduled, timer fired, signal arrived &#8212; as an immutable entry in an event history persisted to Cassandra, PostgreSQL, or MySQL, then replays that history on worker restart so a process survives network partitions and VM reboots without any custom state management code. Workflow code must be strictly deterministic (no random values, no wall-clock reads, no direct I/O); all side effects live in Activities, which carry independent retry policies. For agentic systems that chain dozens of tool calls over minutes or hours, this durability model solves exactly the failure class that cron + queue + DB hacks break under. </p><p>#distributed #architecture #softwareengineering #llm</p><h2><a href="https://martinfowler.com/articles/structured-prompt-driven/">Structured prompt driven development</a><strong><a href="https://martinfowler.com/articles/structured-prompt-driven/"> &#128119;&#8205;&#9794;&#65039;</a></strong></h2><p>Everybody who hasn&#8217;t spent last 2 years in a cave came up with their own way of working in the AI for software development era. Thoughtworks is no exception. Their core idea is prompt should become a first class citizen, just like code: be saved, versioned and reviewed. Based on this idea they develop the structured prompt process and tools and show how to implement a feature with it. To my taste the approach is a bit naive because creating holistic, full and correct test cases is much more complicated than &#8220;make me test cases, avoid duplicates&#8221; like it is shown in the article, but interest approach anyway.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4GfW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 424w, /__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 848w, /__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4GfW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png" width="683" height="382" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:382,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36737,&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://softwarearchitectureweekly.substack.com/i/197970748?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 424w, /__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 848w, /__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4GfW!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489b6cd9-7833-4fdf-85d2-8205a8960bb0_683x382.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!N_mC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 424w, /__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 848w, /__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!N_mC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg" width="1456" height="672" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de0039b3-d5af-494b-b4d2-bae3d5d6056b.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:672,&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="/__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 424w, /__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 848w, /__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!N_mC!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0039b3-d5af-494b-b4d2-bae3d5d6056b.svg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#softwaredevelopment</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/rag-in-production-temporal-primer?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/rag-in-production-temporal-primer?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="/__u/softwarearchitectureweekly.substack.com/p/rag-in-production-temporal-primer?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h1><strong>Follow-Up</strong></h1><h2><a href="https://www.ssp.sh/brain/change-data-capture-cdc/">5 Ways to make CDC with Postgres</a></h2><p>Short article not only on the CDC blueprint from Pinterest, but also mentioning 5 different ways of how Change Data Capture can be implemented in PostgreSQL. I knew only half of them! </p><p>#db #cdc</p><p></p><h2><a href="https://brooker.co.za/blog/2026/05/18/whats-easy-whats-hard.html">What&#8217;s Easy Now? What&#8217;s Hard Now? &#128104;&#8205;&#128188;</a></h2><p>AI coding agents are fundamentally feedback loops built around LLMs, and the quality of available feedback determines where they succeed or fail. Tasks with fast, clear, objective feedback &#8212; like building a UI &#8212; are much easier for agents than tasks where feedback is delayed, silent, or subjective: writing concurrent code (where bugs manifest as silent data corruption at runtime), or making architecture decisions (where feedback is inherently contextual and often never arrives). Brooker frames this as the most important axis for evaluating agent capability, whether the problem domain supports tight feedback loops.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LGpV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 424w, /__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 848w, /__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LGpV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png" width="1334" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1334,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 424w, /__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 848w, /__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LGpV!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94dcb04d-117e-41a0-bff5-4c96fd001540_1334x808.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #softwareengineering #engineering #llm</p><p></p><h2><a href="https://shopify.engineering/scaling-inventory-reservations">We replaced Redis with MySQL for inventory reservations&#8212;and it scaled</a> &#128104;&#8205;&#128188;</h2><p>Shopify replaced a Redis-backed inventory reservation system with MySQL by switching from a single quantity-per-item counter to one row per sellable unit, using MySQL 8&#8217;s `SKIP LOCKED` to eliminate row-level contention without waiting. The old Redis model had no atomicity across the reserve and claim steps &#8212; payment could succeed while inventory went unclaimed &#8212; and had no multi-location awareness; the new MySQL design fixes both with ACID guarantees in a single database transaction. A bounded pool capped at 1,000 rows per item/location pair keeps write paths narrow. Under peak Black Friday 2025 traffic ($5.1M in sales per minute), writer CPU stayed under 50% and reader CPU under 16%, with headroom to spare. #db #architecture #softwareengineering <code>engineering</code></p><h2><a href="https://valkey.io/blog/valkey-9-1-delivers-improvements-in-security-performance-and-more/">Valkey 9.1 delivers improvements in security, performance, and more</a> &#128104;&#8205;&#128188;</h2><p>Valkey 9.1 cuts per-key memory usage by up to 10% for common workloads &#8212; up to 20% for strings under 128 bytes and 10% for sorted sets via skiplist optimizations &#8212; with no reconfiguration required. A redesigned I/O threading model improves throughput by up to 17%, and a new database-level ACL system enables fine-grained multi-tenant isolation within a single instance. The headline addition is Valkey Search 1.2, which folds full-text search, tag filtering, numeric lookup, and AI-native vector search directly into the same system as the cache &#8212; eliminating the need to run a separate search platform alongside it. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!eNrA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 424w, /__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 848w, /__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!eNrA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Redis to MySQL for inventory&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Redis to MySQL for inventory" title="Redis to MySQL for inventory" srcset="/__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 424w, /__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 848w, /__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!eNrA!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5cbb39f-aa3d-4191-9b6b-bbb03b26d1c1_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#db #distributed #softwareengineering #cloud</p><h2><a href="https://blog.railway.com/p/your-ai-wants-to-nuke-your-database">Your AI wants to nuke your database</a><strong> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>AI deleting your production database is not a nightmare anymore: it&#8217;s a reality which happened to PocketOS running their systems on Railway. To be fair to the latter company, they learned from the incident and implemented 48 hour window for soft deletion and backups for backups. Learn the full story in the article.</p><p>#ai #resilience</p><p></p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Why Github actions suck big time, The CTO's Entropy War, Redis Cluster and more in Architecture Weekly #196]]></title><description><![CDATA[Also in the issue: Compromised Axios, Practical Lessons From the Claude Code Leak, Every query gets a receipt, A decade of Docker containers, Why fakes beat mocks and testcontainers.]]></description><link>https://softwarearchitectureweekly.substack.com/p/why-github-actions-suck-big-time</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/why-github-actions-suck-big-time</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Wed, 15 Apr 2026 13:52:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rGY4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #196. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><h2><strong>Business Oriented System Design Course</strong></h2><p>Wanna learn how to design systems which truly impact business and get promoted? <a href="https://vvsevolodovich.dev/business-oriented-system-design-course/">Sign up for Business Oriented System Design Course</a>: starts 5th of May. Begin the year with learning crucial skills and advance your career! 100+ engineers from Bolt, Booking.com, Semrush, TripleTen etc. who completed the course and brought their architecture skills to a new level.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2t0y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2t0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1958581,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/184322266?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.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><h1>Highlights</h1><h2><a href="https://brandur.org/redis-cluster">Redis Cluster</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Redis is single-threaded and despite that, can handle hundred of thousands requests per second while guaranteeing atomicity. This is enough for the majority of systems, but not for Stripe. They moved from a single hot node to a 10-nodes cluster and told everyone how Redis cluster operates in this well-written article.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JMDu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 424w, /__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 848w, /__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JMDu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png" width="883" height="506" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:506,&quot;width&quot;:883,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Errors subsiding after a transition to Redis Cluster.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Errors subsiding after a transition to Redis Cluster." title="Errors subsiding after a transition to Redis Cluster." srcset="/__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 424w, /__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 848w, /__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JMDu!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4798179-92d4-4a9b-a17b-ce4d8aece3a9_883x506.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#redis #performance </p><h2><a href="https://www.iankduncan.com/engineering/2026-02-05-github-actions-killing-your-team">Why GitHub Actions suck big time</a> &#128119;&#8205;&#9794;&#65039;</h2><p>At Supplied we&#8217;re using GitHub Actions, and it is mostly fine... until it does not. Slow builds, tricky YAML, awful log explorer and the (un)availability start to bite altogether. Apparently, we&#8217;re not the only one experiencing the troubles. Ian Duncan digs into each issues and actually suggest couple of alternatives. </p><p>#ci</p><h2><a href="https://ctosub.com/p/the-ctos-entropy-war">The CTO&#8217;s Entropy War</a> &#127868; </h2><p>First of all, the code writing was never a bottleneck: product understanding, architecture, quality control was. Second, AI will generate the code but why the engineer has not reviewed it? How it passed the peer review with such grave architecture problems? Those are my questions to the article, but it is good anyway: whatever entropy you have in your codebase, the AI will only amplify, not solve them.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193604786,&quot;url&quot;:&quot;https://ctosub.com/p/the-ctos-entropy-war&quot;,&quot;publication_id&quot;:1951306,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;The CTO Substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!guvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35d5f5a-b7e3-455f-9f2e-40b9ea50b408_1280x1280.png&quot;,&quot;title&quot;:&quot;The CTO&#8217;s Entropy War&quot;,&quot;truncated_body_text&quot;:&quot;I&#8217;m standing behind Marcus, one of my best engineers, watching him demo a feature he built in forty minutes using Claude Code. A reporting dashboard. Clean layout. Responsive. Tests passing. He&#8217;s beaming.&quot;,&quot;date&quot;:&quot;2026-04-09T03:37:40.286Z&quot;,&quot;like_count&quot;:10,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:68109583,&quot;name&quot;:&quot;Etienne de Bruin&quot;,&quot;handle&quot;:&quot;etdebruin&quot;,&quot;previous_name&quot;:&quot;Etienne&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fff04f9-c067-4678-baa8-9832f9f9b76d_1228x1228.jpeg&quot;,&quot;bio&quot;:&quot;Founder of 7CTOs | Creator of CTO Levels&#8482; | CTO Coach at EXE&quot;,&quot;profile_set_up_at&quot;:&quot;2023-09-14T18:41:45.497Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-09-14T23:51:06.292Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1942681,&quot;user_id&quot;:68109583,&quot;publication_id&quot;:1951306,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1951306,&quot;name&quot;:&quot;The CTO Substack&quot;,&quot;subdomain&quot;:&quot;7ctos&quot;,&quot;custom_domain&quot;:&quot;ctosub.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Built by a CTO, Etienne de Bruin. For those CTOs still in love with the craft. This weekly email is for tech leaders navigating complexity, AI disruption, and the loneliness of the seat.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e35d5f5a-b7e3-455f-9f2e-40b9ea50b408_1280x1280.png&quot;,&quot;author_id&quot;:68109583,&quot;primary_user_id&quot;:68109583,&quot;theme_var_background_pop&quot;:&quot;#786CFF&quot;,&quot;created_at&quot;:&quot;2023-09-14T18:42:01.955Z&quot;,&quot;email_from_name&quot;:&quot;The CTO Substack&quot;,&quot;copyright&quot;:&quot;Etienne de Bruin&quot;,&quot;founding_plan_name&quot;:&quot;Founding CTOs&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}},{&quot;id&quot;:2595548,&quot;user_id&quot;:68109583,&quot;publication_id&quot;:2550488,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2550488,&quot;name&quot;:&quot;The CTO Podcast&quot;,&quot;subdomain&quot;:&quot;ctopodcast&quot;,&quot;custom_domain&quot;:&quot;www.ctopod.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;The CTO Podcast, hosted by Etienne de Bruin, explores challenges of Chief Technical Officers, offering insights on strategy, management, security, innovation, and more.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a12e3a4-e7b0-40f1-b236-56358b1c1f1e_207x207.png&quot;,&quot;author_id&quot;:169246866,&quot;primary_user_id&quot;:169246866,&quot;theme_var_background_pop&quot;:&quot;#FF6B00&quot;,&quot;created_at&quot;:&quot;2024-04-22T21:33:36.167Z&quot;,&quot;email_from_name&quot;:&quot;CTO Podcast &quot;,&quot;copyright&quot;:&quot;Etienne De Bruin&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;paused&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/325d8757-efff-4e3b-b797-b60088870d2f_410x93.png&quot;}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ctosub.com/p/the-ctos-entropy-war?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="/__u/substackcdn.com/image/fetch/$s_!guvi!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35d5f5a-b7e3-455f-9f2e-40b9ea50b408_1280x1280.png" loading="lazy"><span class="embedded-post-publication-name">The CTO Substack</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The CTO&#8217;s Entropy War</div></div><div class="embedded-post-body">I&#8217;m standing behind Marcus, one of my best engineers, watching him demo a feature he built in forty minutes using Claude Code. A reporting dashboard. Clean layout. Responsive. Tests passing. He&#8217;s beaming&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">5 months ago &#183; 10 likes &#183; 2 comments &#183; Etienne de Bruin</div></a></div><p>#ai #cto</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1>Follow-Up</h1><h2><a href="https://cloud.google.com/blog/topics/threat-intelligence/north-korea-threat-actor-targets-axios-npm-package/?ck_subscriber_id=3517984637">Compromised Axios</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Another week, another compromised npm package. Axios - the most popular js library for HTTP requests - got infected with a malicious dependency via&#8230; right, social engineering. Make sure to check out the infection signals and apply all the remediation and prevention steps from the article!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FyRm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 424w, /__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 848w, /__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FyRm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png" width="878" height="476" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f35a70d-9000-4290-99a9-8474c505d291_878x476.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:476,&quot;width&quot;:878,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58934,&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://softwarearchitectureweekly.substack.com/i/192709895?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 424w, /__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 848w, /__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FyRm!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f35a70d-9000-4290-99a9-8474c505d291_878x476.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#security </p><h2><a href="https://generativeprogrammer.com/p/practical-lessons-from-the-claude">Practical Lessons From the Claude Code Leak</a> &#127868;</h2><p>While Axios was compromised on purpose, the Claude Code sources leaked accidentally as source maps during the update publishing. A great chance to learn from it though to get best practices on Claude.MD, multi-agent orchestration, permissions and many more. </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193081510,&quot;url&quot;:&quot;https://generativeprogrammer.com/p/practical-lessons-from-the-claude&quot;,&quot;publication_id&quot;:3411919,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Generative Programmer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TXD9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0826fe93-5348-44e0-9ae7-bbf6feb0c62c_364x364.png&quot;,&quot;title&quot;:&quot;Practical Lessons From the Claude Code Leak&quot;,&quot;truncated_body_text&quot;:&quot;On March 31, 2026, security researcher Chaofan Shou posted (more than 34 million views) that Claude Code&#8217;s entire source had leaked through a sourcemap left in Anthropic&#8217;s public npm package. Roughly 500,000 lines of TypeScript across about 1,900 files. Not the model or weights, but the harness around them: system prompts, tool routing, memory, permissi&#8230;&quot;,&quot;date&quot;:&quot;2026-04-03T16:26:12.312Z&quot;,&quot;like_count&quot;:11,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:9946347,&quot;name&quot;:&quot;Bilgin Ibryam&quot;,&quot;handle&quot;:&quot;bibryam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c06ab670-8069-4596-85b1-44eec6e6b4ad_400x400.jpeg&quot;,&quot;bio&quot;:&quot;I organize what I learn about AI and software into patterns, landscapes, and frameworks developers can use. Co-author of Kubernetes Patterns. Currently writing Prompt Patterns.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-11-14T12:21:45.163Z&quot;,&quot;reader_installed_at&quot;:null,&quot;publicationUsers&quot;:[{&quot;id&quot;:3476812,&quot;user_id&quot;:9946347,&quot;publication_id&quot;:3411919,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:3411919,&quot;name&quot;:&quot;The Generative Programmer&quot;,&quot;subdomain&quot;:&quot;generativeprogrammer&quot;,&quot;custom_domain&quot;:&quot;generativeprogrammer.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;A developer-focused digest revealing how generative AI is transforming coding, architecture, and product development.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0826fe93-5348-44e0-9ae7-bbf6feb0c62c_364x364.png&quot;,&quot;author_id&quot;:9946347,&quot;primary_user_id&quot;:9946347,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2024-11-25T10:07:24.115Z&quot;,&quot;email_from_name&quot;:&quot;Bilgin Ibryam from The Generative Programmer&quot;,&quot;copyright&quot;:&quot;Bilgin Ibryam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac7de705-24c8-4760-ad47-7e218caa662d_1344x258.png&quot;}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://generativeprogrammer.com/p/practical-lessons-from-the-claude?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="/__u/substackcdn.com/image/fetch/$s_!TXD9!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0826fe93-5348-44e0-9ae7-bbf6feb0c62c_364x364.png" loading="lazy"><span class="embedded-post-publication-name">The Generative Programmer</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Practical Lessons From the Claude Code Leak</div></div><div class="embedded-post-body">On March 31, 2026, security researcher Chaofan Shou posted (more than 34 million views) that Claude Code&#8217;s entire source had leaked through a sourcemap left in Anthropic&#8217;s public npm package. Roughly 500,000 lines of TypeScript across about 1,900 files. Not the model or weights, but the harness around them: system prompts, tool routing, memory, permissi&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">5 months ago &#183; 11 likes &#183; Bilgin Ibryam</div></a></div><p>#security #ai</p><h2><a href="https://theconsensus.dev/p/2026/03/20/every-query-gets-a-receipt.html">Every query gets a receipt</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Everyone knows that running an sql SELECT query results with a list of rows, but only few is conscious that  &#8220;31337 rows affected&#8221; is part of the same response too. While scaling the system especially with exposed external API accessing your DB, it&#8217;s important to understand how costly each query becomes and there is a nice trick to use this standard part of sql response to report on consumed DB resources. Find out how exactly here. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!oFyI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 424w, /__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 848w, /__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!oFyI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png" width="626" height="177" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:177,&quot;width&quot;:626,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22255,&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://softwarearchitectureweekly.substack.com/i/192709895?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 424w, /__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 848w, /__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oFyI!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ad7f26c-b93d-44ea-8506-10032befedaa_626x177.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p>#db</p><h2><a href="https://cacm.acm.org/research/a-decade-of-docker-containers/">A decade of Docker containers</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Docker containers fuel modern software development from small companies to large enterprises, from tiny Docker Compose instances to large Kubernetes Clusters. This article explains the need for the containers, shows the components of Docker and discusses the Docker application in the age of AI. Looong read indeed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rGY4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rGY4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg" width="1456" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&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="/__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!rGY4!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac67b244-7da1-4fc2-8411-1f9408d7140c_11394x7516.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#docker </p><h2><a href="https://pierrezemb.fr/posts/why-fakes-beat-mocks-and-testcontainers/">Why fakes beat mocks and testcontainers</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Mocks and Testcontainers are the two tools most developers reach for. Both have fundamental limitations. Testcontainers are binary failing to provide partial failure modes, and mocks test implementation rather than results. Fakes fix both issues: they are the in-memory implementations which allow to test results, while providing partial failures. Grab the best practice guide!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KWbR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 424w, /__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 848w, /__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KWbR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png" width="1219" height="283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:1219,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41515,&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://softwarearchitectureweekly.substack.com/i/192709895?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 424w, /__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 848w, /__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KWbR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b6b14-6619-457b-a4df-cba595784e11_1219x283.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p>#qa #tests #testcontainers</p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!  </p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/why-github-actions-suck-big-time?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/why-github-actions-suck-big-time?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="/__u/softwarearchitectureweekly.substack.com/p/why-github-actions-suck-big-time?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Evals in Skill-Creator, Context Anchoring, BCrypt vs Argon2 and more in Architecture Weekly #195.]]></title><description><![CDATA[Why Software Engineering Jobs are surging, Database Transactions, Monolith on EC2 instance, Break Paxos.]]></description><link>https://softwarearchitectureweekly.substack.com/p/evals-in-skill-creator-context-anchoring</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/evals-in-skill-creator-context-anchoring</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Mon, 23 Mar 2026 13:28:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!w9tn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #195. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1>Highlights</h1><h2><a href="https://tessl.io/blog/anthropic-brings-evals-to-skill-creator-heres-why-thats-a-big-deal/">Evals in Skill-Creator</a> &#128119;&#8205;&#9794;&#65039;</h2><p>People created over half a million Claude Code skills, but do they improve the claude performance? Actually, developer-written context files improved agent task completion by just 4% on average, while LLM-generated ones actually made performance worse by 3%, and both increased costs by over 20%. The solution is to evaluate the skill. Antropic shipped exactly that - find more in the Tessl&#8217;s blog.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_EVu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png 424w, /__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png 848w, /__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_EVu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png" width="1456" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot 2026-03-04 at 15.35.32.png&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot 2026-03-04 at 15.35.32.png" title="Screenshot 2026-03-04 at 15.35.32.png" srcset="/__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png 424w, /__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png 848w, /__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_EVu!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2b9b192-9f4b-44d7-ae49-da8ec327d54e_1704x749.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>#ai</p><h2><a href="https://martinfowler.com/articles/reduce-friction-ai/context-anchoring.html">Context Anchoring</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Context anchoring is the practice of externalizing the reasoning, decisions, and intent behind work (e.g., into commits or shared documents) so AI systems can maintain continuity across sessions and avoid losing critical context. By turning context into a persistent, queryable artifact rather than ephemeral chat history, it reduces drift, improves collaboration with AI, and enables more reliable long-running development workflows. See more in Martin Fowler&#8217;s blog.</p><p>#ai </p><h2><a href="https://pilcrowonpaper.com/blog/14">Bcrypt vs Argon2: What&#8217;s better?</a> &#129311;</h2><p>If you control which algorightm you use for hashing password and haven&#8217;t made the choice yet, this article will be handy. It benchmarks the resource consumption and cost of cracking a password hashed with both bcrypt and argon2 on CPU and GPUs from the CPU time and memory perspective. Grab a bunch of tables!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Sb9p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 424w, /__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 848w, /__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Sb9p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png" width="816" height="372" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:372,&quot;width&quot;:816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42483,&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://softwarearchitectureweekly.substack.com/i/191842359?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 424w, /__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 848w, /__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Sb9p!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76e89b35-722a-4ff0-885c-a236443bbd3c_816x372.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#security #encryption</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/evals-in-skill-creator-context-anchoring?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/evals-in-skill-creator-context-anchoring?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="/__u/softwarearchitectureweekly.substack.com/p/evals-in-skill-creator-context-anchoring?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h1>Follow-Up</h1><h2><a href="https://planetscale.com/blog/database-transactions">Database Transactions</a> &#128119;&#8205;&#9794;&#65039;</h2><p>A great breakdown of database transactions: commits, rollbacks, consistent reads, isolation levels, multiversion control in PostgreSQL. Perfect structure to learn as a beginner, great refresher for experienced developers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!w9tn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 424w, /__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 848w, /__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 1272w, /__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!w9tn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png" width="748" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:748,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99658,&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://softwarearchitectureweekly.substack.com/i/191842359?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 424w, /__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 848w, /__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 1272w, /__u/substackcdn.com/image/fetch/$s_!w9tn!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd3a39b-4fce-4663-a661-e0642a82cbd7_748x378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#db</p><h2><a href="https://x.com/brankopetric00/status/2035669433130070064">The monolith on a Single EC2 instance</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Every architecture decision is a trade-off. And while we tell everybody to go back to the monolith, it is worth remembering not to put everything in one basket. Grab a list of considerations of what can go wrong with a solution on a single EC2 instance.</p><p>#architecture</p><h2><a href="https://stackoverflow.blog/2026/02/09/why-demand-for-code-is-infinite-how-ai-creates-more-developer-jobs/">Why software engineering jobs are surging</a> &#127868;</h2><p>AI is a platform shift (like the internet or cloud) that expands what can be built, causing an explosion in software demand rather than reducing it, so more code&#8212;and thus more developers&#8212;are needed. Instead of replacing developers, AI changes their role toward higher-level tasks (architecture, orchestration, innovation), creating new jobs and increasing the overall demand for specialized human-written software.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SRps!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SRps!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Article hero image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Article hero image" title="Article hero image" srcset="/__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!SRps!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f01d45-db9d-48b7-9e02-d462c6107e8e_1560x820.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai </p><h2><a href="https://muratbuffalo.blogspot.com/2026/03/break-paxos.html">Break Paxos</a> &#127868;</h2><p>Consensus protocols are boring, but what if we can make them fun? Murat Demirbas vibecoded a game where your task is to break Paxos sync for 3 nodes by killing and slowing them down. I tried it and it was actually fun!  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!K0U9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 424w, /__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 848w, /__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 1272w, /__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!K0U9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png" width="639" height="507" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:507,&quot;width&quot;:639,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 424w, /__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 848w, /__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 1272w, /__u/substackcdn.com/image/fetch/$s_!K0U9!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff968473-bd8e-47e4-bc88-f4319a0f8b2d_639x507.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#distributedsystems</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p>]]></content:encoded></item><item><title><![CDATA[The CTOs New Engineering Ladder, AI Firewall, AI Agent Blueprint and more in Architecture Weekly #194. ]]></title><description><![CDATA[Also in the issue: a Need for Resilience, Chaos Engineering at Monday.com, Software Testing Strategies in 2026, AWS Lambda Manage Instance example and The Serial Safety Net]]></description><link>https://softwarearchitectureweekly.substack.com/p/the-ctos-new-engineering-ladder-ai</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/the-ctos-new-engineering-ladder-ai</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Mon, 16 Mar 2026 15:11:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TCrg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p>Architecture Weekly Issue #194. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><h1>Highlights</h1><h2><a href="https://ctosub.com/p/the-ctos-new-engineering-ladder?hide_intro_popup=true">The CTO&#8217;s New Engineering Ladder</a> &#127868;</h2><p>Traditional corporate ladders for Engineers looked like Intern-Junior-Middle-Senior-Principle-Distinguish and hinged on ability to delivery changes and make impact. However, anyone can ship now with Cursor and Claude Code. That forces technical leaders into rethinking the career. Take an idea from Etienne de Bruin. </p><p>P.S. I am a bit doubtful. In Supplied we have just Product Engineers. But we are tiny yet. </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:190742189,&quot;url&quot;:&quot;https://ctosub.com/p/the-ctos-new-engineering-ladder&quot;,&quot;publication_id&quot;:1951306,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;The CTO Substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!guvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35d5f5a-b7e3-455f-9f2e-40b9ea50b408_1280x1280.png&quot;,&quot;title&quot;:&quot;The CTO&#8217;s New Engineering Ladder&quot;,&quot;truncated_body_text&quot;:&quot;I&#8217;m sitting across from a senior engineer named Priya on a Tuesday afternoon. Eight years in the industry. Runs the platform team. Every company I&#8217;ve ever worked in would have called her a senior engineer without hesitation. I&#8217;m doing a routine level review and I ask her, as casually as I can, &#8220;What does senior actually mean on your team right now?&#8221;&quot;,&quot;date&quot;:&quot;2026-03-12T17:26:25.015Z&quot;,&quot;like_count&quot;:11,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:68109583,&quot;name&quot;:&quot;Etienne de Bruin&quot;,&quot;handle&quot;:&quot;etdebruin&quot;,&quot;previous_name&quot;:&quot;Etienne&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fff04f9-c067-4678-baa8-9832f9f9b76d_1228x1228.jpeg&quot;,&quot;bio&quot;:&quot;Founder of 7CTOs | Creator of CTO Levels&#8482; | CTO Coach at EXE&quot;,&quot;profile_set_up_at&quot;:&quot;2023-09-14T18:41:45.497Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-09-14T23:51:06.292Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1942681,&quot;user_id&quot;:68109583,&quot;publication_id&quot;:1951306,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1951306,&quot;name&quot;:&quot;The CTO Substack&quot;,&quot;subdomain&quot;:&quot;7ctos&quot;,&quot;custom_domain&quot;:&quot;ctosub.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Built by a CTO, Etienne de Bruin. For those CTOs still in love with the craft. This weekly email is for tech leaders navigating complexity, AI disruption, and the loneliness of the seat.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e35d5f5a-b7e3-455f-9f2e-40b9ea50b408_1280x1280.png&quot;,&quot;author_id&quot;:68109583,&quot;primary_user_id&quot;:68109583,&quot;theme_var_background_pop&quot;:&quot;#786CFF&quot;,&quot;created_at&quot;:&quot;2023-09-14T18:42:01.955Z&quot;,&quot;email_from_name&quot;:&quot;The CTO Substack&quot;,&quot;copyright&quot;:&quot;Etienne de Bruin&quot;,&quot;founding_plan_name&quot;:&quot;Founding CTOs&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}},{&quot;id&quot;:2595548,&quot;user_id&quot;:68109583,&quot;publication_id&quot;:2550488,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2550488,&quot;name&quot;:&quot;The CTO Podcast&quot;,&quot;subdomain&quot;:&quot;ctopodcast&quot;,&quot;custom_domain&quot;:&quot;www.ctopod.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;The CTO Podcast, hosted by Etienne de Bruin, explores challenges of Chief Technical Officers, offering insights on strategy, management, security, innovation, and more.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a12e3a4-e7b0-40f1-b236-56358b1c1f1e_207x207.png&quot;,&quot;author_id&quot;:169246866,&quot;primary_user_id&quot;:169246866,&quot;theme_var_background_pop&quot;:&quot;#FF6B00&quot;,&quot;created_at&quot;:&quot;2024-04-22T21:33:36.167Z&quot;,&quot;email_from_name&quot;:&quot;CTO Podcast &quot;,&quot;copyright&quot;:&quot;Etienne De Bruin&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;paused&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/325d8757-efff-4e3b-b797-b60088870d2f_410x93.png&quot;}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ctosub.com/p/the-ctos-new-engineering-ladder?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="/__u/substackcdn.com/image/fetch/$s_!guvi!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35d5f5a-b7e3-455f-9f2e-40b9ea50b408_1280x1280.png"><span class="embedded-post-publication-name">The CTO Substack</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The CTO&#8217;s New Engineering Ladder</div></div><div class="embedded-post-body">I&#8217;m sitting across from a senior engineer named Priya on a Tuesday afternoon. Eight years in the industry. Runs the platform team. Every company I&#8217;ve ever worked in would have called her a senior engineer without hesitation. I&#8217;m doing a routine level review and I ask her, as casually as I can, &#8220;What does senior actually mean on your team right now&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">6 months ago &#183; 11 likes &#183; Etienne de Bruin</div></a></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Au8G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png 424w, /__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png 848w, /__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Au8G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png" width="1232" height="928" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:928,&quot;width&quot;:1232,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png 424w, /__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png 848w, /__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Au8G!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2457b2e-d342-41ec-ba23-cbb1becd0c23_1232x928.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>#management</p><h2><a href="https://blog.alexewerlof.com/p/ai-firewall">AI firewall</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Remember  courtcase when a person won against a Canadian airline which AI chat bot offered a discount which didn&#8217;t exist in reality. The problem is not a mere hallucination, but a reason to rethink what any AI solution does in your system. AI Firewall is an idea to  sanitize and evaluate the customer input that ends up in an LLM. Alex Ewerl&#246;f nails the topic.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:191072453,&quot;url&quot;:&quot;https://blog.alexewerlof.com/p/ai-firewall&quot;,&quot;publication_id&quot;:1002265,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_Ur2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png&quot;,&quot;title&quot;:&quot;AI firewall&quot;,&quot;truncated_body_text&quot;:&quot;We&#8217;ve seen many ridiculous AI incidents over the past few years:&quot;,&quot;date&quot;:&quot;2026-03-15T23:51:29.027Z&quot;,&quot;like_count&quot;:7,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:87732486,&quot;name&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;handle&quot;:&quot;alexewerlof&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2713990-da82-481b-b579-01a7aaa5b85b_560x560.jpeg&quot;,&quot;bio&quot;:&quot;Writes about technical leadership, growth mindset, and system reliability engineering. Senior Staff Engineer, MSc Systems Engineering from KTH, Stockholmer, dad, amateur artist. Read more here: https://www.alexewerlof.com/who&quot;,&quot;profile_set_up_at&quot;:&quot;2022-07-14T22:27:32.130Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-10-11T17:24:45.190Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:947579,&quot;user_id&quot;:87732486,&quot;publication_id&quot;:1002265,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1002265,&quot;name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;subdomain&quot;:&quot;alexewerlof&quot;,&quot;custom_domain&quot;:&quot;blog.alexewerlof.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Technical Leadership, Reliability Engineering, Growth&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png&quot;,&quot;author_id&quot;:87732486,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#786CFF&quot;,&quot;created_at&quot;:&quot;2022-07-14T22:27:58.683Z&quot;,&quot;email_from_name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;copyright&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;founding_plan_name&quot;:&quot;VIP supporter&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd56dc7c-4b9f-43f2-99a1-ecc995284940_1200x256.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;alexewerlof&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://blog.alexewerlof.com/p/ai-firewall?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="/__u/substackcdn.com/image/fetch/$s_!_Ur2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png" loading="lazy"><span class="embedded-post-publication-name">Alex Ewerl&#246;f Notes</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">AI firewall</div></div><div class="embedded-post-body">We&#8217;ve seen many ridiculous AI incidents over the past few years&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">6 months ago &#183; 7 likes &#183; Alex Ewerl&#246;f</div></a></div><p>#ai #llm</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!v-DD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 424w, /__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 848w, /__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 1272w, /__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!v-DD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png" width="778" height="963" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:963,&quot;width&quot;:778,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 424w, /__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 848w, /__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 1272w, /__u/substackcdn.com/image/fetch/$s_!v-DD!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbae9fb98-aa66-4f30-8002-7c9b4741eb65_778x963.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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><a href="/__u/softwarearchitectureweekly.substack.com/p/the-ai-agent-blueprint">The AI Agent Blueprint</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Talking about AI - what&#8217;s the difference between an AI-driven workflow and an AI Agent? What constitutes the AI agent itself? Find in my own article!</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5d719f36-0203-4249-af33-feb08c999c39&quot;,&quot;caption&quot;:&quot;Key Idea&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The AI Agent Blueprint&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:97861178,&quot;name&quot;:&quot;Architecture Weekly Newsletter&quot;,&quot;bio&quot;:&quot;10 articles, books or videos on Software Architecture and System Design every week &quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!9syb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87d87d2-acfe-491d-a3b7-b76e43564806_600x600.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-08T11:10:49.294Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!vDNF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/the-ai-agent-blueprint&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:189861591,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:18,&quot;comment_count&quot;:1,&quot;publication_id&quot;:2261093,&quot;publication_name&quot;:&quot;Software Architecture Weekly&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!P26H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03070695-1940-4711-b43e-5f3bcc6437d6_165x165.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>#ai </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1>Follow-Up</h1><h2><a href="https://www.ufried.com/blog/in_search_of_resilience/">A need for Resilience</a> &#127868;</h2><p>Here&#8217;s another side of the coin: AI amplifies your company culture. It does not solve problems, it amplififes both good and bad traits. Typically, the companies would use AI to increase speed(Supplied is no exception), and with greater speed comes worse resilience. Think trees: the one grows the fastest, falls first under a storm. Don&#8217;t listen to me, better read what Uwe Friedrichson thinks about it.</p><p>#resilience</p><h2><a href="https://testcollab.com/blog/software-testing-strategies?utm_source=chatgpt.com">Software Testing Strategies in 2026</a> &#127868;</h2><p>The software development changed a lot with AI Assistants and Coding Agents, the the buzz is everywhere. What is talked about less frequent, it&#8217;s the Testing Strategies and how it changed with AI. Starting with the foundations, this article covers the decisions trees on what and when to automate and touches on how AI contributes to testing strategies nowadays. Would be nice though to get some sort of insights into tooling and practical approaches too. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rrdC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 424w, /__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 848w, /__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rrdC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png" width="451" height="673" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e01d5870-69f0-42c6-856a-7264bf246b41_451x673.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:673,&quot;width&quot;:451,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Seven-step process for building a testing strategy, from defining scope to reviewing and iterating&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Seven-step process for building a testing strategy, from defining scope to reviewing and iterating" title="Seven-step process for building a testing strategy, from defining scope to reviewing and iterating" srcset="/__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 424w, /__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 848w, /__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rrdC!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d5870-69f0-42c6-856a-7264bf246b41_451x673.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#testing #qa</p><h2><a href="https://engineering.monday.com/chaos-engineering-practices-to-increase-confidence-and-reliability/">Chaos Engineering at Monday.com</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Chaos Engineering is a string tactic to ensure the reliability of your system. Monday.com shares their adoption of <strong>Chaos-Mesh </strong>for Kubernetes to simulate various failures and see the consequences. </p><p>#resilience #chaosengineering</p><p></p><h2><a href="https://muratbuffalo.blogspot.com/2026/03/the-serial-safety-net-efficient.html">The Serial Safety Net</a> &#129311;</h2><p>Having Serializable Isolation Level leads to significant performance hit in databases. This problem led researches to introduce The Serial Safety net which tracks the dependencies between transactions and ensures either that it&#8217;s safe to commit both, or prevents one from doing so. Murat Demirbas made a nice overview. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!TCrg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 424w, /__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 848w, /__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!TCrg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png" width="718" height="482" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:482,&quot;width&quot;:718,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 424w, /__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 848w, /__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TCrg!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5697bdca-1737-477c-ac46-3fe504ab8594_718x482.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#db </p><h2><a href="https://www.sls.guru/blog/lambda-managed-instances-for-steady-workloads">Lambda Managed Instances for Steady Workloads</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Some time ago AWS announced you can pick and reserve EC2 instances for your AWS Lambda getting best of serverless and serverfull worlds. The example of the practical use case and reference architecture you will find in this blog post.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!UGCA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 424w, /__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 848w, /__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 1272w, /__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!UGCA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png" width="1296" height="221" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:221,&quot;width&quot;:1296,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Architecture flow diagram: a web/mobile client sends telemetry to an Ingestion API (API Gateway), which queues the data in an Ingestion Queue (SQS). A Process Lambda running on Managed Instances consumes the queue and processes events in batches&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Architecture flow diagram: a web/mobile client sends telemetry to an Ingestion API (API Gateway), which queues the data in an Ingestion Queue (SQS). A Process Lambda running on Managed Instances consumes the queue and processes events in batches" title="Architecture flow diagram: a web/mobile client sends telemetry to an Ingestion API (API Gateway), which queues the data in an Ingestion Queue (SQS). A Process Lambda running on Managed Instances consumes the queue and processes events in batches" srcset="/__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 424w, /__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 848w, /__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 1272w, /__u/substackcdn.com/image/fetch/$s_!UGCA!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F998e213f-4fc3-4f57-8e8a-3fa5f5a7c8f0_1296x221.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>#serverlesss</p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/the-ctos-new-engineering-ladder-ai?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/the-ctos-new-engineering-ladder-ai?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="/__u/softwarearchitectureweekly.substack.com/p/the-ctos-new-engineering-ladder-ai?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[The AI Agent Blueprint]]></title><description><![CDATA[What's the difference between an LLM-powered workflow and AI Agent? What is the agent architecture? Let's figure out together.]]></description><link>https://softwarearchitectureweekly.substack.com/p/the-ai-agent-blueprint</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/the-ai-agent-blueprint</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Sun, 08 Mar 2026 11:10:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vDNF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Key Idea</h2><p>Traditional software follows predefined paths: the frontend makes an HTTP Request, the backend queries the database, transforms the result into JSON format and yields a response. Any variation is handled by if-else or switch statements. </p><p>The problems like evaluating if a Jira ticket has enough information for creating test cases may hardly be solved with if-else statements. Sounds more like a job for an LLM. </p><p>People build UiPath, Zapier or n8n workflows where the flow is predefined, but one or several steps are using LLMs. For the Jira ticket example, we can build one like this: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-c-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png 424w, /__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png 848w, /__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-c-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png" width="280" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26240,&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://softwarearchitectureweekly.substack.com/i/189861591?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png 424w, /__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png 848w, /__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-c-K!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dc64e27-6bd6-4db6-ae27-785fd467076a_280x588.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>This is not an agent: this is a workflow. We just solve one step of it with an LLM. The LLM is not in the control. However, LLMs are powerful:  they can generate texts, write code, analyse Jira tickets, summarise meeting transcripts. They can also make decisions. What if we grant them the power to decide what to do?</p><p>Here&#8217;s the key idea: </p><p><em><strong>Let&#8217;s ask an LLM what step to take. LLM will tell us what tool to call, and what parameters to pass to this tool. Our job is to call the tool, feed the result back and ask what step to take next.</strong></em></p><p>Now let&#8217;s dig into the details. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>System Prompt</h2><p>Every agent begins with a system prompt. The purpose of the prompt is to tell the agent what it is supposed to do. This is where you provide an agent role, the end results, guidelines and tools. If your agent was an employee, system prompt is the job instruction. For example(shortened and simplified):</p><p>&#8220;You&#8217;re  a senior technical writer. Create technical documentation for our software product and generate appropriate diagrams. Make sure the diagrams are clear and comprehensible. The technical documentation should include architecture decisions, API contracts and addressed non-functional requirements&#8221;.</p><p>Typically this is your AGENTS.md/CLAUDE.md file or any other file that you pass to an agentic framework; more on them later. </p><p>The real system prompts though are typically much longer and elaborate; they should include not only the end results, but also the available tools, references to subagents, guidelines and guardrails. Talking about tools: why we need them and what they are?     </p><h2>Tools</h2><p>A majority of software solutions exchange data with a database, read and write files, call APIs and take other actions in external world. In AI Agents these capabilities are implemented as tools: dedicated instruments to perform a certain job.  Formally we can define a tool as the following set: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XAKo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 424w, /__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 848w, /__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XAKo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png" width="1234" height="642" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:642,&quot;width&quot;:1234,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74240,&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://softwarearchitectureweekly.substack.com/i/189861591?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 424w, /__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 848w, /__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XAKo!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22aa18d1-9315-483d-9a45-ea37f7af0fb3_1234x642.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>Let&#8217;s imagine we want to query Jira Issue Tracker for the content of a certain ticket. First, we need to create a script which sends an API request to Jira. Then we need to understand what parameters we pass into the script, and what we get back. That&#8217;s schema. And finally the tool should have a name and description to be useful for our LLM. </p><p>We can add more tools: like connection to code storage or a knowledge base. For example, we might want our LLM to read Notion pages to learn more about the product. </p><p>But how the LLM is going to know about the tool in the first place? Right, we need to tell LLM about available tools in system prompt. Here&#8217;s how it looks like: </p><p><code>### Your tools</code></p><p><code>&#8216;read_tickets&#8217; | Queries Jira for a ticket&#8217;s title, description and comments by id </code></p><p><code>&#8216;notion&#8217; | Queries Notion Knowledge Base for the additional product information. </code></p><p></p><p>If you&#8217;re building your AI Agent using Claude Code, there is no need to specify the contract strictly, however it&#8217;s still beneficial for efficiency. </p><p><em>Here&#8217;s a profound difference between an AI powered workflow and an agent: now LLM controls what to call and when instead of us. Rather than making the LLM a tool, we make LLM think which tools to call.</em></p><p>Of course, direct API integration is not the only way to add tools to LLMs. You likely heard of MCP - Model Context Protocol. It is even more convenient, because if a tool exposes an MCP Server, it becomes a matter only of configuration and authentication. Notion for example, exposes one. <a href="https://developers.notion.com/guides/mcp/mcp">Here&#8217;s how to add it</a>.</p><h2>State</h2><p>LLMs themselves are mere token predictors, thus they got neither memory, nor state. So our agent should solve the problem of providing both. Consider state: as the LLM does not know if the ticket was already queried, it will query it again which makes no sense. Here&#8217;s how it&#8217;s solved in AI Agents.</p><p>First we define what state we need: in our case it should indeed have the ticket id, the ticket content, content of relevant notion pages, etc. A JSON object will work just fine: </p><p><code>class QAAgentState(TypedDict):</code></p><p><code>ticket_id: str</code></p><p><code>ticket_data: dict</code></p><p><code>user_decision: str | None # &#8220;replace&#8221; | &#8220;supplement&#8221; | &#8220;skip&#8221;</code></p><p><code>notion_queries: List[str]</code></p><p><code>notion_search_results: List[dict]</code></p><p><code>notion_pages: List[dict]</code></p><p><code>user_feedback: str | None</code></p><p>What happens to state? Our AI Agent will update the state after every LLM interaction and will pass this state to an LLM together with the system prompt. Then LLM will know at what step it is because again: LLM is stateless itself. </p><h2>Memory</h2><p>AI agents maintain <strong>Short-Term Memory (STM)</strong> for the current conversation and <strong>Long-Term Memory (LTM)</strong> for persistent knowledge. STM functions like human working memory: temporary, conversation-bound, and used for immediate reasoning. It typically includes the conversation history, tool outputs, system prompts, working state, file diffs, and injected artifacts.</p><p>Agent frameworks construct prompts by combining these elements with the latest user message. Tools such as <strong>LangChain Checkpointer</strong> store conversation state using a key-value store tied to a <code>thread_id</code>. However, context windows are limited, even in modern models with up to ~1M tokens, so conversations must sometimes be summarized or compressed.</p><p>Important insights discovered during interactions&#8212;such as recurring mistakes or learned preferences&#8212;should be saved to Long-Term Memory. Systems like <strong>Claude Code</strong> persist this memory in files (e.g., <code>project_memory.md</code>, <code>decisions.md</code>) or dedicated memory folders that the agent reads at session start. Frameworks like <strong>LangGraph</strong> implement persistent memory using Stores (e.g., PostgreSQL, MongoDB) and Namespaces for organizing data.</p><p>In practice, STM keeps the agent coherent within a session, while LTM preserves important knowledge across sessions. Together they enable AI agents to behave consistently and improve over time.</p><h2>Agent Loop</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!vDNF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 424w, /__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 848w, /__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!vDNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png" width="1456" height="951" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:951,&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="/__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 424w, /__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 848w, /__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vDNF!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c2b0454-5572-46bf-8b39-122b9c95bbca_1500x980.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>How it all works together? Any AI agent operates the loop: </p><ol><li><p>take the system prompt, add the state and memory</p></li><li><p>send a request to LLM</p></li><li><p>parse a response</p></li><li><p>if this is final output, finish work</p></li><li><p>otherwise, determine which tool to call</p></li><li><p>Call the tool</p></li><li><p>Update the state and memory</p></li><li><p>Start from Step 1</p><p></p></li></ol><p> That&#8217;s the whole blueprint. However, as any software systems, it requires cross-cutting concerns to be addressed.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/the-ai-agent-blueprint?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/the-ai-agent-blueprint?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="/__u/softwarearchitectureweekly.substack.com/p/the-ai-agent-blueprint?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h3>Observability</h3><p>Proper introspection is a must for any system. Let&#8217;s see how to add observability to see what our agent is doing under the hood.</p><p>Modern systems rely on OpenTelemetry and AI Agents are no exception. Each agentic solution, be it Claude Code or LangGraph, OpenAI SDK or others support OTEL for sending traces, tool calls, LLM calls, costs, timings and other signals. </p><p>Configuring the agent can be as easy as providing the required environment variables if using a dedicated observability solution like LangSmith. Find the setup instructions there. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!YQSm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 424w, /__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 848w, /__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 1272w, /__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!YQSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:795,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:300893,&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://softwarearchitectureweekly.substack.com/i/189861591?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 424w, /__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 848w, /__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 1272w, /__u/substackcdn.com/image/fetch/$s_!YQSm!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c2a5fa-8221-482a-9932-7d3d175719cc_2342x1278.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Guardrails</h3><p>Traditional software is hard to operate well, and AI agents are no easier. To the integration and logic problems we add cost considerations, tools overusage, infinite loops problems and many more. Thus we need guardrails to solve them.</p><p>Guardrails typically operate at several layers. <strong>Input guardrails</strong> validate or sanitize user prompts to block prompt injections, malicious instructions, or sensitive data requests. <strong>Output guardrails</strong> inspect the model&#8217;s response before it is returned, filtering hallucinations, toxic content, policy violations, or unsafe instructions. <strong>Tool guardrails</strong> restrict how the agent can call external tools or APIs&#8212;for example enforcing schemas, permission checks, rate limits, and argument validation.</p><p>In agent frameworks such as <strong>LangChain</strong>, <strong>LangGraph</strong>, or <strong>OpenAI Agents SDK</strong>, guardrails are often implemented using middleware, structured output validation (e.g., JSON schema, Pydantic models), and policy engines. Some systems also add <strong>runtime monitoring</strong> and <strong>human-in-the-loop checkpoints</strong> for critical actions.</p><p>In practice, guardrails combine <strong>prompt policies, validation logic, security checks, and monitoring</strong> to ensure the agent remains reliable, safe, and aligned with application constraints.</p><h3>Evaluation Harness</h3><p>Traditional software quality relies on unit, integration, and end-to-end tests &#8212; all of them deterministic. AI agents are not. The same input can produce different outputs on different runs, which makes classical test assertions fragile. That doesn&#8217;t mean evaluation is impossible; it just requires a different toolkit.</p><p><strong>Manual</strong> <strong>review</strong> is the baseline: run the agent against a set of representative inputs and inspect the outputs by hand. It&#8217;s slow, but it builds intuition and is the right starting point before you invest in automation.</p><p><strong>LLM-as-judge</strong> scales manual review. You write an evaluation prompt describing what &#8220;good output&#8221; looks like, then feed the agent&#8217;s response to a second LLM and ask it to score or explain the result. This works well for subjective quality criteria &#8212; correctness, tone, completeness &#8212; that are hard to encode as assertions.</p><p><strong>Deterministic</strong> <strong>assertions</strong> cover what you <em>can</em> pin down: does the agent call the right tools? Does the output contain required fields? Does it stay within token budget? These are your regression tests &#8212; fast, cheap, and automatable with any standard test runner.</p><p><strong>Observability</strong> <strong>as</strong> <strong>a</strong> <strong>signal</strong> closes the loop in production. Tracking tool call frequency, latency, cost per run, and error rates over time surfaces regressions that no pre-deployment test would catch.</p><p>In practice, you layer all four: manual review to bootstrap a golden dataset, deterministic assertions for known-good behavior, LLM-as-judge for open-ended quality, and observability for production drift. Frameworks like <strong>LangSmith</strong>, <strong>Braintrust</strong>, and <strong>PromptFoo</strong> provide ready-made infrastructure for running and tracking these evaluations at scale.</p><h2>Summary</h2><p>An AI agent is not magic &#8212; it is a loop. An LLM decides what to do next; the execution environment carries out the decision, updates state, and feeds the result back. Repeat until done.</p><p>The components covered here &#8212; system prompt, tools, state, memory, observability, guardrails, and evaluation &#8212; are not optional extras. Each one addresses a failure mode that will surface in production. Skip the system prompt and the agent has no purpose. Skip guardrails and it will run up your API bill in an infinite loop. Skip evaluation and you won&#8217;t know when it breaks.</p><p>The good news: you don&#8217;t have to build this from scratch. Frameworks like <strong>LangGraph</strong>, <strong>OpenAI</strong> <strong>Agents</strong> <strong>SDK</strong>, and <strong>Claude</strong> <strong>Code</strong> handle the scaffolding. Your job is to define the goal, design the tools, and put guardrails around the things that matter.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Harness Engineering by OpenAI, Supabase Outage, CDC Approaches and Best Practices and more in Architecture Weekly #193]]></title><description><![CDATA[Also: Database Federation at Uber, Heartbits in Distributed Systems, The new AI-driven SDLC and All Agentic Architectures.]]></description><link>https://softwarearchitectureweekly.substack.com/p/harness-engineering-by-openai-supabase</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/harness-engineering-by-openai-supabase</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Thu, 26 Feb 2026 15:41:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7uPR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #193. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1>Highlights</h1><h2><strong><a href="https://openai.com/index/harness-engineering/">Harness Engineering</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>OpenAI built a software writing 1 million lines of code, from which exactly 0 was manually written - it was done by Codex agents instead. However, engineers are needed to navigate the development, construct context, write relevant rules and enforce the guardrails. The article shows how software development changed in just 3 months and how strict rules, well-defined architecture, API contracts and feedback loops are not simply important - they are necessary. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7uPR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 424w, /__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 848w, /__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7uPR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg" width="802" height="469" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:469,&quot;width&quot;:802,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diagram titled &#8220;Giving Codex a full observability stack in local dev.&#8221; An app sends logs, metrics, and traces to Vector, which fans out data to an observability stack containing Victoria Logs, Metrics, and Traces, each queried via LogQL, PromQL, or TraceQL APIs. Codex uses these signals to query, correlate, and reason, then implements fixes in the codebase, restarts the app, re-runs workloads, tests UI journeys, and repeats in a feedback loop.&quot;,&quot;title&quot;:&quot;Diagram titled &#8220;Giving Codex a full observability stack in local dev.&#8221; An app sends logs, metrics, and traces to Vector, which fans out data to an observability stack containing Victoria Logs, Metrics, and Traces, each queried via LogQL, PromQL, or TraceQL APIs. Codex uses these signals to query, correlate, and reason, then implements fixes in the codebase, restarts the app, re-runs workloads, tests UI journeys, and repeats in a feedback loop.&quot;,&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="Diagram titled &#8220;Giving Codex a full observability stack in local dev.&#8221; An app sends logs, metrics, and traces to Vector, which fans out data to an observability stack containing Victoria Logs, Metrics, and Traces, each queried via LogQL, PromQL, or TraceQL APIs. Codex uses these signals to query, correlate, and reason, then implements fixes in the codebase, restarts the app, re-runs workloads, tests UI journeys, and repeats in a feedback loop." title="Diagram titled &#8220;Giving Codex a full observability stack in local dev.&#8221; An app sends logs, metrics, and traces to Vector, which fans out data to an observability stack containing Victoria Logs, Metrics, and Traces, each queried via LogQL, PromQL, or TraceQL APIs. Codex uses these signals to query, correlate, and reason, then implements fixes in the codebase, restarts the app, re-runs workloads, tests UI journeys, and repeats in a feedback loop." srcset="/__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 424w, /__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 848w, /__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!7uPR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a904127-da63-4c7f-bd46-04e65223be8e_802x469.svg 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>#ai #softwareengineering #architecture</p><h2><strong><a href="https://supabase.com/blog/supabase-incident-on-february-12-2026">Supabase Incident on February 12, 2026</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>A deployment of a new internal monitoring service inadvertently toggled AWS VPC Block Public Access to &#8220;block-bidirectional&#8221; across the entire us-east-2 region, killing all internet gateway traffic for 3 hours and 42 minutes. Resolution dragged on because the networking change wasn&#8217;t surfaced quickly in audit logs, pre-production environments didn&#8217;t include us-east-2, and the right infrastructure teams weren&#8217;t escalated to early. Supabase&#8217;s remediation plan: isolate non-customer services in separate AWS accounts, add external connectivity monitoring, enforce production/pre-production region parity, and overhaul escalation and customer communication protocols. Pretty surprising they didn&#8217;t use different AWS account in the first place!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!T1t5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 424w, /__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 848w, /__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 1272w, /__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!T1t5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png" width="1225" height="627" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:627,&quot;width&quot;:1225,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;ALB request counts in us-east-2 dropped to zero during the incident.&quot;,&quot;title&quot;:&quot;ALB request counts in us-east-2 dropped to zero during the incident.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="ALB request counts in us-east-2 dropped to zero during the incident." title="ALB request counts in us-east-2 dropped to zero during the incident." srcset="/__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 424w, /__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 848w, /__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 1272w, /__u/substackcdn.com/image/fetch/$s_!T1t5!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2d96834-e9e7-413c-89f1-37db7a31b83a_1225x627.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#devops #cloud #engineering</p><h2><a href="https://www.redpanda.com/guides/fundamentals-of-data-engineering-cdc-change-data-capture">CDC Approaches and Best Practices</a> &#128119;&#8205;&#9794;&#65039;</h2><p>Ensuring the data in downstream systems like analytical databases and business intelligence platforms remain consistent with the central transactional database is critical for making quick and accurate business decisions. Change Data Capture - CDC - is an approach to making it happen. Redpanda got a nice article from their &#8220;Fundamentals of Data Engineering&#8221; series with the design references, push and pull implementations and best practices for CDC.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!uwiT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 424w, /__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 848w, /__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!uwiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp" width="1456" height="589" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:589,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;High-level CDC architecture&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="High-level CDC architecture" title="High-level CDC architecture" srcset="/__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 424w, /__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 848w, /__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!uwiT!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F171a8524-7bfa-4aa5-b28b-9049fa00d9a4_1600x647.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#dataengineering #cdc</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/harness-engineering-by-openai-supabase?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/harness-engineering-by-openai-supabase?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="/__u/softwarearchitectureweekly.substack.com/p/harness-engineering-by-openai-supabase?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p></p><h1>Follow-Up</h1><h2><strong><a href="https://www.uber.com/en-EE/blog/database-federation/">Database Federation: Decentralized and ACL-Compliant Hive&#8482; Databases</a> &#129311;</strong></h2><p>Uber&#8217;s Delivery business ran a monolithic Hive database holding 16,000 datasets and 10 petabytes of data &#8212; a single failure domain causing cascading outages and overly permissive cross-team access. Their migration uses pointer manipulation rather than data duplication: a Bootstrap Migrator handles the initial copy with checksum verification, a real-time Apache Flink synchronizer drives 10 concurrent Piper pipelines for ongoing changes, and a Batch Synchronizer runs every 2 hours as a consistency backstop. The result: zero-downtime migration across thousands of datasets, 7 million HMS sync operations, and 1+ petabyte of redundant storage eliminated &#8212; plus granular ACL enforcement that was impossible in the monolith. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Af1y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 424w, /__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 848w, /__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Af1y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png" width="1024" height="724" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Featured image for Database Federation: Decentralized and ACL-Compliant Hive&#8482; Databases&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Featured image for Database Federation: Decentralized and ACL-Compliant Hive&#8482; Databases" title="Featured image for Database Federation: Decentralized and ACL-Compliant Hive&#8482; Databases" srcset="/__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 424w, /__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 848w, /__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Af1y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a745fe1-046f-4bd9-9a2d-1a6da0a0a99e_1024x724.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#architecture #distributed #db #migration</p><h2><strong><a href="https://arpitbhayani.me/blogs/heartbeats-in-distributed-systems/">Heartbeats in Distributed Systems</a> &#129311;</strong></h2><p>Heartbeats are the primitive that separates a slow node from a dead one &#8212; and the parameters matter more than most engineers realize. Kubernetes uses 10-second kubelet intervals with 40-second timeouts; etcd uses 100ms Raft heartbeats; the rule of thumb is that timeouts should be at least 10x the round-trip time to absorb network variance. Beyond naive ping-based detection, the article covers the Phi Accrual Detector (continuous suspicion scores instead of binary alive/dead) and gossip protocols that distribute failure detection across all nodes, eliminating centralized bottlenecks. </p><p>#distributed #architecture</p><h2><strong><a href="https://circleci.com/blog/ai-sdlc/">The new AI-driven SDLC</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>AI compresses planning from weeks to minutes and parallelizes development, but the bottleneck shifts to code review &#8212; humans can&#8217;t keep pace with AI-generated changeset volume. CircleCI identifies three friction points: infrastructure that must validate contextual fit at machine speed, review processes that don&#8217;t scale, and an identity shift for engineers from execution to judgment. Their recommendations: connect AI tools to pipeline data via MCP, redesign review workflows with automation and fast-path approvals for large changesets, and reframe senior engineering roles around architecture and strategic oversight. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!spa0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 424w, /__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 848w, /__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!spa0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp" width="1003" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1003,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AI SDLC&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AI SDLC" title="AI SDLC" srcset="/__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 424w, /__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 848w, /__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!spa0!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74a8f456-63ae-4e12-898e-aa5b59f54990_1003x559.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #devops #softwareengineering</p><h2><strong><a href="https://github.com/FareedKhan-dev/all-agentic-architectures">All Agentic Architectures</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>A practical catalog of 17+ AI agent design patterns implemented with LangChain and LangGraph, organized into five progressive stages. Coverage spans foundational patterns (ReAct, Planning, Reflection, Tool Use), multi-agent collaboration (Meta-Controller routing, Blackboard shared memory, Ensemble methods), advanced memory and reasoning (Tree of Thoughts, graph-based world models), safety mechanisms (Plan-Execute-Verify, dry-run approval, simulator-based risk assessment), and self-improvement loops. The repository includes LLM-as-a-Judge evaluation patterns for measuring agent performance &#8212; making it more than a pattern catalog. </p><p>#ai #llm #architecture</p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p>]]></content:encoded></item><item><title><![CDATA[How to Sell a Technology to Your CTO ]]></title><description><![CDATA[Without Getting Laughed Out of the Room]]></description><link>https://softwarearchitectureweekly.substack.com/p/how-to-sell-a-technology-to-your</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/how-to-sell-a-technology-to-your</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Wed, 11 Feb 2026 15:41:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r0qZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Your favorite framework won&#8217;t save you. A spreadsheet might.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!r0qZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!r0qZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg" width="1456" height="1167" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1167,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:166395,&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;:&quot;https://softwarearchitectureweekly.substack.com/i/187633059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!r0qZ!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4357116-a569-4082-8ca9-8cd7d2f5644e_1524x1222.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>I&#8217;ve been a solution architect for years. My job was picking technologies for clients and then convincing directors and VPs of Engineering that my choice isn&#8217;t insane. I&#8217;ve failed at this. I&#8217;ve also succeeded. The difference was never the technology &#8212; it was always the pitch.</p><p>Here&#8217;s the uncomfortable truth most engineers never learn: <strong>CTOs don&#8217;t care about your technology. They care about their problems.</strong> And their problems are measured in dollars, headcount, and quarters &#8212; not in developer experience or elegant APIs.</p><h2><strong>What Your CTO Actually Thinks About</strong></h2><p>Forget the tech radar for a second. A CTO is a manager first and an engineer second (if at all). Their daily anxiety revolves around five things:</p><ol><li><p><strong>Will this product succeed?</strong> &#8212; Does the technology help users solve real problems, or is it resume-driven development?</p></li><li><p><strong>Can I explain this to the CEO?</strong> &#8212; The CFO doesn&#8217;t know what Kubernetes is. The CTO has to translate your architectural decisions into plain business language. Every. Single. Board meeting.</p></li><li><p><strong>Can we launch new products with this?</strong> &#8212; Companies grow. A technology that only solves today&#8217;s problem is a liability tomorrow.</p></li><li><p><strong>Can I hire for this?</strong> &#8212; Brilliant tech with zero talent pool is a dead end. Your CTO is thinking about the next 10 job postings, not your benchmark results.</p></li><li><p><strong>Does this make the team faster?</strong> &#8212; Tooling, libraries, CI/CD, monitoring &#8212; the whole ecosystem matters. A fast language with no ecosystem is a slow language in practice.</p></li></ol><p>If your pitch doesn&#8217;t address at least three of these, you&#8217;ve already lost.</p><h2><strong>The Pitch: Four Rules That Actually Work</strong></h2><p></p><h3><strong>Rule 1: Tell a Story, Not a Spec Sheet</strong></h3><p>Nobody was ever persuaded by a bullet list of features. Structure your pitch as a narrative:</p><blockquote><p><em>&#8220;Our mobile team ships two apps &#8212; iOS and Android. We have 7 engineers. We ship roughly the same features on both platforms, 3 weeks apart. That delay costs us users. Here&#8217;s how we fix it.&#8221;</em></p></blockquote><p><strong>Problem &#8594; Solution &#8594; Prize.</strong> That&#8217;s it. The prize is always time or money saved. Everything else is decoration.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dOtF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 424w, /__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 848w, /__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dOtF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75870,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/187633059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 424w, /__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 848w, /__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dOtF!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4186bf53-8c2f-41e5-99c2-ce9a38cb719c_1500x844.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Rule 2: Translate Developer-Speak into CTO-Speak</strong></h3><p>Check this out:</p><p><strong>What You Say</strong>                                                                           <strong>What the CTO Hears</strong> </p><p>Short feedback loop                                                                                Faster velocity </p><p>Cross-platform                                                                                              Lower cost </p><p>Type safety                                                                        Fewer production incidents </p><p>Great DX                                                          Nothing. This means nothing to them</p><p><strong>All arguments must be denominated in time and money.</strong> If you can&#8217;t convert a benefit into one of those two currencies, leave it out. It&#8217;s noise.</p><h3><strong>Rule 3: Show Alternatives</strong></h3><p>Walk in with one option, and the first question will be: <em>&#8220;What else did you consider?&#8221;</em></p><p>Walk in with three options &#8212; with honest tradeoffs for each &#8212; and you look like someone who did their homework. Because you did.</p><h3><strong>Rule 4: Show the Downsides (Before They Find Them)</strong></h3><p>Nothing destroys credibility faster than pretending a technology is perfect. Every technology has warts. Name them. Rank them. Explain how you&#8217;d mitigate each one.</p><p>This isn&#8217;t weakness &#8212; it&#8217;s the strongest signal of competence you can send.</p><h2><strong>The Math: A Simple Framework for ROI</strong></h2><p>Here&#8217;s where most engineers stop and most successful pitches start. You need a spreadsheet, not a slide deck.</p><h3><strong>The Variables</strong></h3><ul><li><p><strong>CC</strong> (Current Cost) &#8212; What you spend today: salaries + licenses. This is your OPEX baseline.</p></li><li><p><strong>NC</strong> (New Cost) &#8212; Same calculation for the proposed technology. Ideally lower.</p></li><li><p><strong>MC</strong> (Migration Cost) &#8212; The one-time CAPEX to transition. Be honest here; underestimating this is the #1 way pitches die post-approval.</p></li><li><p><strong>NO</strong> (New Opportunities) &#8212; Revenue from things the new tech enables that the old tech simply can&#8217;t do.</p></li><li><p><strong>RC</strong> (Risk Cost) &#8212; For each risk: <code>probability &#215; mitigation cost</code>. Sum them up.</p></li></ul><h3><strong>The Formula</strong></h3><pre><code><code>(CC - NC) + NO - (RC + MC) &gt; 0
</code></code></pre><p>That&#8217;s it. If this number is positive, you have a business case. If it&#8217;s not, you either need better numbers or a different technology.</p><h3><strong>The Velocity Check</strong></h3><pre><code><code>Cost per feature (new) &lt; Cost per feature (old)
</code></code></pre><p>Or equivalently: same team, more output. If you can&#8217;t demonstrate this, the migration is a lateral move at best.</p><h2><strong>Putting It Together: Flutter vs. Native</strong></h2><p>Let&#8217;s make this concrete. A team builds iOS and Android apps with Swift and Kotlin. Someone wants to switch to Flutter.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!R5by!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!R5by!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg&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;:100438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/187633059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!R5by!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99643999-6cce-4dd5-bcf4-ed56aa569e79_2000x1000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Current State</strong></h3><p>| Role | Count | Cost |</p><p>| Android developers | 2 | $200k |</p><p>| iOS developers | 2 | $200k |</p><p>| Mobile lead | 1 | $100k |</p><p>| QA engineers | 2 | $200k |</p><p><strong>Total</strong>:  7  | $700k/year</p><h3><strong>Proposed State (Flutter)</strong></h3><p>| Role | Count | Cost |</p><p>| Flutter developers | 2 | $200k |</p><p>| Mobile lead | 1 | $100k |</p><p>| QA engineers | 2 | $200k |</p><p>| <strong>Total</strong> | <strong>5</strong> | <strong>$500k/year</strong> |</p><p><strong>Annual savings: $200k.</strong></p><h3><strong>The CTO Translation Table</strong></h3><p>Developer Thinks | CTO Hears | Verdict </p><p>Hot reload = fast iteration | Higher velocity | &#9989;</p><p>Single codebase | 30% cost reduction | &#9989; </p><p>Fewer platform bugs | Better user retention | &#9989; </p><p>Dart is... interesting | Hiring risk | &#9888;&#65039; </p><p>Young ecosystem | Missing tools | &#9888;&#65039; </p><p>Moving fast | Migration risk | &#9888;&#65039; </p><h3><strong>New Opportunities</strong></h3><p>Flutter runs on web and desktop. That&#8217;s new user channels the native stack simply couldn&#8217;t reach. Estimated value: <strong>$200k/year.</strong></p><h3><strong>Risks</strong></h3><p>| Risk | Probability | Mitigation Cost | Exposure </p><p>| Missing critical libraries | 20% | $100k | $20k </p><p>| No security scanning tools | 20% | $100k | $20k </p><p>| Can&#8217;t hire senior Flutter devs | 20% | $100k | $20k </p><p>| Unexpected technical blockers | 20% | $100k | $20k </p><p><strong>Total exposure:</strong> <strong>$80k</strong> </p><h3><strong>Migration Cost</strong></h3><p>Two developers + one QA, three months of transition: <strong>$300k.</strong></p><h3><strong>The Final Number</strong></h3><pre><code><code>($700k - $500k) + $200k - ($300k + $80k) = $20k
</code></code></pre><p>Profitable in year one. And in year two? The migration cost is gone, and you&#8217;re looking at <strong>$320k annual net benefit.</strong></p><p>That&#8217;s not a technology pitch. That&#8217;s a business case.</p><h2><strong>Before You Walk In</strong></h2><p><strong>Find an ally.</strong> One colleague who believes in the idea gives you social proof. A solo pitch is an opinion; a supported pitch is a movement.</p><p><strong>Practice the story.</strong> Dry-run it with someone who&#8217;ll push back. If your pitch survives a skeptic, it&#8217;ll survive the CTO.</p><p><strong>Show enthusiasm &#8212; but earned enthusiasm.</strong> If you&#8217;ve done the math, run the PoC, and mapped the risks, your confidence isn&#8217;t arrogance. It&#8217;s preparation.</p><p><strong>Be ready for &#8220;no.&#8221;</strong> Sometimes the timing is wrong, the budget isn&#8217;t there, or the risk appetite is low. A well-constructed pitch that gets rejected today becomes the reference document when priorities shift next quarter.</p><div><hr></div><h2><strong>The Bottom Line</strong></h2><p>Engineers love to debate technologies on technical merits. CTOs make decisions on business merits. The gap between these two conversations is where most good ideas go to die.</p><p><strong>Bridge that gap with numbers, honesty, and a story worth telling.</strong> The technology sells itself once you&#8217;ve proven it solves a business problem &#8212; not a developer problem.</p><h2><strong>Business Oriented System Design Course</strong></h2><p>Wanna learn how to design systems which truly impact business and get promoted? <a href="https://vvsevolodovich.dev/business-oriented-system-design-course/">Sign up for Business Oriented System Design Course</a>: starts 5th of May. Begin the year with learning crucial skills and advance your career! 100+ engineers from Bolt, Booking.com, Semrush, TripleTen etc. who completed the course and brought their architecture skills to a new level.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2t0y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2t0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&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="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>]]></content:encoded></item><item><title><![CDATA[The Great Software Quality Collapse, Unconventional PostgreSQL Optimizations, Explicit Architecture and more in Architecture Weekly #192.]]></title><description><![CDATA[Modernizing MySQL with TiDB at Bolt, a Spreadsheet Engine from Scratch, Without Benchmarking LLMs, You&#8217;re Overpaying and Marc Brooker's take on the current position of Software Engineering.]]></description><link>https://softwarearchitectureweekly.substack.com/p/the-great-software-quality-collapse</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/the-great-software-quality-collapse</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Mon, 09 Feb 2026 13:25:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kxmV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #192. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><h2><strong>Business Oriented System Design Course</strong></h2><p>Wanna learn how to design systems which truly impact business and get promoted? <a href="https://vvsevolodovich.dev/business-oriented-system-design-course/">Sign up for Business Oriented System Design Course</a>: starts 5th of May. Begin the year with learning crucial skills and advance your career! 100+ engineers from Bolt, Booking.com, Semrush, TripleTen etc. who completed the course and brought their architecture skills to a new level.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2t0y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2t0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1958581,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/184322266?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.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><h1><strong>Highlights</strong></h1><h2><strong><a href="https://techtrenches.dev/p/the-great-software-quality-collapse">The Great Software Quality Collapse</a> &#129311;</strong></h2><p>Software quality has been degrading for years &#8212; and it&#8217;s not just an AI problem. Apple Calculator leaking 32GB of RAM, CrowdStrike crashing 8.5 million machines due to missing bounds checking, Teams consuming 100% CPU. The industry is spending $364 billion on infrastructure to compensate for engineering failures instead of fixing root causes. The AI-generated code era with its 322% more security vulnerabilities only accelerates the trend. What we are all going to do about? </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!kxmV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 424w, /__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 848w, /__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!kxmV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 424w, /__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 848w, /__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kxmV!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0d8995-727a-4824-b49d-898c60fa8c25_1600x1200.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#softwareengineering #quality</p><h2><strong><a href="https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/">Explicit Architecture: DDD, Hexagonal, Onion, Clean, CQRS &#8212; How I Put It All Together</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>A comprehensive synthesis of major architectural patterns into one coherent model. Instead of treating Ports &amp; Adapters, Onion Architecture, DDD, and CQRS as separate concepts, the author combines them into three fundamental blocks: User Interface, Application Core, and Infrastructure &#8212; with all dependencies pointing inwards.Try out the &#8220;package by component&#8221; approach organizing code by business domains rather than technical layers is especially practical. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!CWv3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 424w, /__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 848w, /__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CWv3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png" width="1100" height="752" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/daef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:752,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;010 - Explicit Architecture.svg&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="010 - Explicit Architecture.svg" title="010 - Explicit Architecture.svg" srcset="/__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 424w, /__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 848w, /__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CWv3!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaef1c07-41d0-404d-8dd3-be253b399f69_1100x752.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#architecture #ddd</p><h2><strong><a href="https://hakibenita.com/postgresql-unconventional-optimizations">Unconventional PostgreSQL Optimizations</a> &#129311;</strong></h2><p>Three creative PostgreSQL optimization techniques beyond the usual indexing advice. Constraint exclusion to skip full table scans when query conditions contradict check constraints. Function-based indexes reducing index size from 214MB to 66MB through deduplication. Hash indexes for uniqueness enforcement on large text columns consuming 5x less space than B-tree alternatives. Strategic use of PostgreSQL&#8217;s lesser-known features can dramatically change performance characteristics. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-xIp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 424w, /__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 848w, /__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-xIp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png" width="1456" height="525" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:525,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:137313,&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://softwarearchitectureweekly.substack.com/i/187385413?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 424w, /__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 848w, /__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-xIp!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac0d8479-916b-4ff0-8d21-21aedf97a5a4_1664x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#postgresql #db</p><h2><strong><a href="https://martinelli.ch/why-spec-driven-development-can-be-iterative-incremental-and-agile/">Why Spec-Driven Development Can Be Iterative, Incremental and Agile</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>Spec-driven development is not waterfall. The author argues it iterates on <em>understanding</em> rather than solely on code &#8212; short, focused, Markdown-based specifications stored in version control and treated as living documents. Without clear specs, developers guess and AI confidently generates the wrong code. The system grows use case by use case, and the time invested in writing a clear spec is saved multiple times during implementation. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!AQqR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!AQqR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg" width="1279" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1279,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!AQqR!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eec7510-971e-4281-95c2-bf4644561de0_1279x853.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#development #agile</p><h1>Follow-Up</h1><h2><strong><a href="https://www.pingcap.com/case-study/bolt-modernizing-mysql-tidb-scale-thousands-microservices-aws/">Bolt: Modernizing MySQL with TiDB to Scale Thousands of Microservices on AWS</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>I was fortunate enough to witness the migration from MySQL to TiDB at Bolt myself. Sevearl years ago we hit severe scaling limits with MySQL at 100 million users &#8212; adding a column to a 1TB table took a week. After working with Vitess for a while, we migrated to TiDB for its MySQL wire compatibility, horizontal scalability, and strong consistency via Raft. The results: 3:1 data compression ratio (3TB MySQL to 1TB TiDB), 35,000 queries per second, and seven clusters supporting core business services. The migration went smooth well too - each team migrated at their own pace and we completed the whole migration in like a year.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!kVaP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 424w, /__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 848w, /__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!kVaP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png" width="380" height="160" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8ad1003-7948-433f-9f18-55a8359fae69_380x160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:160,&quot;width&quot;:380,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bolt&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bolt" title="Bolt" srcset="/__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 424w, /__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 848w, /__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kVaP!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8ad1003-7948-433f-9f18-55a8359fae69_380x160.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>#db #migration #aws</p><h2><strong><a href="https://medium.grid.is/we-built-a-spreadsheet-engine-from-scratch-heres-what-we-learned-e4800ab9edf1">We Built a Spreadsheet Engine from Scratch &#8212; Here&#8217;s What We Learned</a> &#129311;</strong></h2><p>GRID built one of the most sophisticated spreadsheet engines that runs entirely in the browser. The complexity is staggering: Excel has 510 functions, Google Sheets 494, and together there are 600+ unique operations to implement. A spreadsheet is essentially a program where users declare relationships in a 2D grid, and the engine must maintain deep dependency graphs with thousands of relationships. Their engine covers 398 functions handling 99%+ of real-world spreadsheets. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!92N9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 424w, /__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 848w, /__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 1272w, /__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!92N9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png" width="638" height="571" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:571,&quot;width&quot;:638,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 424w, /__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 848w, /__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 1272w, /__u/substackcdn.com/image/fetch/$s_!92N9!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cdc4ac-c7cd-420f-9aac-b28844b347ee_638x571.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#architecture #engineering</p><h2><strong><a href="https://karllorey.com/posts/without-benchmarking-llms-youre-overpaying">Without Benchmarking LLMs, You&#8217;re Overpaying</a> &#128119;&#8205;&#9794;&#65039;</strong></h2><p>Generic LLM benchmarks like GPQA or MMLU don&#8217;t predict performance on your specific task. The author benchmarked actual customer support prompts across 100+ models via OpenRouter and found cheaper alternatives delivering comparable quality &#8212; cutting costs by 80% and saving over $1,000 monthly. The key: collect real examples, define expected outputs, and score results using LLM-as-judge rather than trusting marketing leaderboards. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!3fe6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 424w, /__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 848w, /__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!3fe6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png" width="1012" height="388" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/791601ae-537d-4e40-b99d-440411e96249_1012x388.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:388,&quot;width&quot;:1012,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;pareto frontier&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="pareto frontier" title="pareto frontier" srcset="/__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 424w, /__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 848w, /__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3fe6!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791601ae-537d-4e40-b99d-440411e96249_1012x388.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#ai #llm</p><h2><strong><a href="https://brooker.co.za/blog/2026/02/07/you-are-here.html">You Are Here</a> &#129311;</strong></h2><p>Marc Brooker argues that AI has drastically reduced the cost of writing code, but building reliable end-to-end systems remains hard. He frames it through Amdahl&#8217;s Law: massive speedups in one area yield diminishing returns unless other bottlenecks are addressed.(sounds familiar to the Theory of Constraint, right?) The real opportunity lies not in clinging to traditional programming (the analog electronics mistake) but in leveraging AI tools to solve previously intractable integration and system design problems. Software&#8217;s first era has ended. </p><p>#softwareengineering #ai</p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p>]]></content:encoded></item><item><title><![CDATA[Enterprise-grade data source integration at Supplied AI]]></title><description><![CDATA[Our clients use a wide range of systems from wide-known systems like Salesforce to niche CRMs like Booking Experts and AFAS to mere MySQL databases. Find out our journey of connection 700+ sources.]]></description><link>https://softwarearchitectureweekly.substack.com/p/enterprise-grade-data-source-integration</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/enterprise-grade-data-source-integration</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Wed, 04 Feb 2026 19:00:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!64iq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Why</h1><p>Building compliance infrastructure starts with one thing above all else: making data ingestion easy. When we first launched, the only way to get data into our system was by uploading a CSV file. Since then, we&#8217;ve come a long way. Today, our clients can seamlessly connect to more than 700 data sources including Stripe, Google Sheets, Salesforce, cloud-hosted managed databases, AFAS, Booking Experts, XLSX uploads, and many more. How did we get there? That&#8217;s what this post is about.</p><h1>Initial Attempt</h1><p>Stripe became the first system to connect to. Our client used it to process payouts to their suppliers(no surprise!), so naturally Stripe was a perfect source of truth for DAC7 reports we create for our customers.</p><p>Stripe allows 2 forms of integrations: via an API Key and OAuth authorization for the approved Stripe applications. We are yet to become one, so we chose the API Key approach. Stripe has the root public/private key pair - which you&#8217;re not expected to share with anybody. However, Stripe has a feature of <a href="https://dashboard.stripe.com/apikeys">restricted API keys</a>: you can create a read-only key with an access to certain Stripe collections like invoices, payouts, accounts and other ones you deem necessary. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0w2C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 424w, /__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 848w, /__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0w2C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png" width="614" height="491" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:491,&quot;width&quot;:614,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56759,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 424w, /__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 848w, /__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0w2C!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab64b96-4679-48a6-99f6-e85089e3c1e1_614x491.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Stripe Key input dialog in Supplied.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!CaoX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 424w, /__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 848w, /__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CaoX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png" width="1280" height="982" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:982,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109708,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 424w, /__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 848w, /__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CaoX!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf208d25-c8e1-4636-b87b-9b5cf291df34_1280x982.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Stripe interface to configure the Stripe Key. </figcaption></figure></div><p>It is indeed important to discuss how to store those keys securely, this is discussed later. </p><p>The API integration seems to be pretty straightforward: initialise a Stripe object with the obtained restricted key and call the appropriate API:</p><pre><code>// query invoices from Stripe
(s: Stripe) =&gt; params =&gt; s.invoices.list(params)</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Rx4R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Rx4R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png" width="744" height="449" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:449,&quot;width&quot;:744,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18438,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rx4R!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a58fbb5-8ff0-4a65-97ad-5a8d5afc75d8_744x449.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Straightforward scheme of querying Stripe data</figcaption></figure></div><p></p><h2>Background Jobs</h2><p>This works perfectly for small accounts with less than a hundred of entities, because Stripe limits the query to exactly 100 records. That means 2 things: first, the query should not request more than that, so querying all relevant invoices should be done in chunks; second, such approach will take minutes for a typical customer with tens of thousands of records. So we need to apply several mechanics at once: </p><ol><li><p>Introduce parallelisation. It should not be a high number of parallel request, otherwise you will be rate limited. </p></li><li><p>Limit the time span to query. In order to make a report for a single year, you don&#8217;t need to query the whole history from the beginning.</p></li><li><p>The querying should not happen on the main request, so we moved the data import off to a job queue. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!wSGk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 424w, /__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 848w, /__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!wSGk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png" width="692" height="203.402799377916" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1286,&quot;resizeWidth&quot;:692,&quot;bytes&quot;:27557,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 424w, /__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 848w, /__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wSGk!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb59e1a49-adb9-40ca-a5f7-a3222ba89917_1286x378.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">New data import scheme.</figcaption></figure></div></li></ol><p>While the original scheme could be just fire request and wait for the response, the scheme with the background job requires a proper support in the database following the status of the job: started, in progress, failure, succeeded. We store this in the special table in DynamoDB and use it to provide appropriate UI.</p><p>We also implemented an integration with Google Sheets in the same manner. Although the implementation approach is the same, the Google Sheets import requires picking up what sheets to import from a file, which provide a convenient UI for. </p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!W-aq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 424w, /__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 848w, /__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 1272w, /__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!W-aq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png" width="710" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc423512-bc83-438e-9a02-615e41777474_710x429.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:429,&quot;width&quot;:710,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58174,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 424w, /__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 848w, /__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 1272w, /__u/substackcdn.com/image/fetch/$s_!W-aq!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc423512-bc83-438e-9a02-615e41777474_710x429.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The dialog to import data from a Google Sheet with a particular Sheet picker.</figcaption></figure></div><p> </p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/enterprise-grade-data-source-integration?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/enterprise-grade-data-source-integration?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="/__u/softwarearchitectureweekly.substack.com/p/enterprise-grade-data-source-integration?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Scaling Integrations</h2><p>Our customer&#8217;s software is not limited to Stripe and Google Sheets. In real world our customers use a variety of Databases, ERP Systems(like Salesforce), Accounting Software, CRM Solutions(like Hubspot and Booking Experts) and bespoke software systems like AFAS.</p><p>One way to work with them is building the integrations one-by-one slowly increasing the number of integrations. This approach though does not scale well: it consumes the valuable time for building an integration. That&#8217;s why we started looking at solutions which would unlock the most popular connections right away. </p><p>Aside from several companies which focus on these integrations, we concluded that the best possible option for us is using Fivetran.  </p><p>Fivetran is data movement platform which allows to ingest data from 700 different system types into a handful of destinations like Snowflake, S3 and others. While Fivetran solves the connection problem, we still had to integrate it into our import subsystem. Let&#8217;s find out what we did exactly.</p><h2>Connections, Connectors and Destinations</h2><p>Fivetran operates with two important entities: Connectors(also known as Connections) and Destinations. </p><p>The Connection is ultimately the configured data source. Let&#8217;s say you want to connect to a MySQL database in the AWS Cloud. You will need a connection host, port, username and password. The Database Admin should also whitelist the connection IPs so it can be established(do you allow anybody to connect to your DB? yeah, exactly, you don&#8217;t). Those are the parameters of the connection which should be provided while establishing the connection. Luckily, Fivetran provides a convenient wizard to do that with any connection.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!K7b8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 424w, /__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 848w, /__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 1272w, /__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!K7b8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png" width="970" height="1387" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1387,&quot;width&quot;:970,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130201,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 424w, /__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 848w, /__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 1272w, /__u/substackcdn.com/image/fetch/$s_!K7b8!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3b32c6-195d-4b71-be2d-a304c5cf4a29_970x1387.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Connection interface for Amazon RDS for MariaDB</figcaption></figure></div><p></p><p>Fivetran will then establish it&#8217;s own connection once the parameters are provided. We don&#8217;t store those parameters anywhere in Supplied system - luckily we don&#8217;t need to. We only require knowing our own Fivetran credentials, which are safely stored in AWS Secrets Manager. </p><p>And here&#8217;s where it gets interesting: Fivetran will let us know that the connection was established - but there is no data synced yet! </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>The required part for a synchronisation is the Destination: where the data goes. Fivetran supports S3 bucket as a destination, but it uses parquet files for that. However, we use parquet data for merged data, not the originally imported one. In order to have it uniformly, we want to translate it once the import is completed. The way we solve it, we wait for Fivetran to call our web hook to indicate the import is completed. With this call we trigger moving the data from an S3 bucket made as a Fivetran destination into the our common Data S3 bucket. Find the schema below:</p><p></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!64iq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 424w, /__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 848w, /__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 1272w, /__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!64iq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png" width="1456" height="961" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:961,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139107,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 424w, /__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 848w, /__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 1272w, /__u/substackcdn.com/image/fetch/$s_!64iq!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e35f01-a218-4308-aaa5-8171e9f8825f_1558x1028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Principal communication schema of Fivetran-based import.</figcaption></figure></div><p></p><p>Using Fivetran we can seamlessly connect to 700+ sources like Salesforce, SAP, Facebook, Paypal and hundreds of others. However, even Fivetran does not have all: for example we built a custom integration with AFAS and Booking Experts, but those integrations are pretty similar to Stripe with the difference that we don&#8217;t store a key, but rather using OAuth flow and store temporary access_token/refresh_token. Even using temporary credentials, we still want to store them securely. </p><h2>Storing Credentials Securely</h2><p>Storing the access tokens in the plain text in DynamoDB is not secure, despite having the built-in encryption at rest of the db itself - because the developers still can access those tokens. That&#8217;s why we use the security-in-depth approach: we secure every layer we can, and our customers value this truly. So how the data is protected in the end? </p><p>Let&#8217;s take a Booking Experts(BEX) example integration. In order to import data from the BEX itself you need to create an application at their marketplace. Each application has a list of used permissions - and our app use only a dozen of read-only permissions to access owners, invoices, rentable objects and other required data for reports like DAC7. The application is also being installed to a particular BEX account, so it can only access the data of said account. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sTCj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 424w, /__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 848w, /__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sTCj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png" width="1311" height="413" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:413,&quot;width&quot;:1311,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36053,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 424w, /__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 848w, /__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sTCj!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e6f877-5d90-4365-b1c8-2665248e2da3_1311x413.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>So the app will only access the data of authorized accounts, and only according to granted permissions. The next level or protection is going with the OAuth, so the app&#8217;s client id and client secret are used to exchange the authorization code for the access_token and refresh_token. The access_token is short-lived and will expire within hours, after which we renew it using the refresh_token. And even those tokens should not be saved in the plain text. That&#8217;s why we encrypt them using a key, which we store in the AWS Key Management Services for maximum protection. So even in an event of an attacker accessing the database itself, they won&#8217;t be able to use whatever client keys are saved. Here&#8217;s the example from AWS themselves: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Y9uw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 424w, /__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 848w, /__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Y9uw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png" width="965" height="982" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:982,&quot;width&quot;:965,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201414,&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://softwarearchitectureweekly.substack.com/i/186489558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 424w, /__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 848w, /__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Y9uw!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd795b8bf-ad63-4c84-bc76-ea0c00c70fc4_965x982.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>Summary</h2><p>Supplied provides the Enterprise-level data sources integration connecting to hundreds of source systems in the secure manner. The design of the system also allowing to connect any additional connections if there is an API available in a scalable, performant and secure manner. </p><p>If you liked this article, press this like button, it helps understanding what kind of content is interesting.</p><p>Have a question? Leave a comment down below!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/enterprise-grade-data-source-integration/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/softwarearchitectureweekly.substack.com/p/enterprise-grade-data-source-integration/comments"><span>Leave a comment</span></a></p><p>  </p><p></p>]]></content:encoded></item><item><title><![CDATA[Scaling Postgres at OpenAI, Building Effective AI Agents, The rise of industrial software and more in Architecture Weekly #191]]></title><description><![CDATA[Also: Holistic Engineering for organic problem solving, Distributed Cache Invalidation with Redis and HybridCache, Operational Maturity is a must now, Foundation vs Instruct vs Thinking Models.]]></description><link>https://softwarearchitectureweekly.substack.com/p/scaling-postgres-at-openai-building</link><guid isPermaLink="false">https://softwarearchitectureweekly.substack.com/p/scaling-postgres-at-openai-building</guid><dc:creator><![CDATA[Architecture Weekly Newsletter]]></dc:creator><pubDate>Tue, 27 Jan 2026 16:33:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4XS-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Architecture Weekly Issue #191. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with com<strong>p</strong>lexity: &#129311; means hardcore, &#128119;&#8205;&#9794;&#65039; is technically applicable right away, &#127868; - is an introduction to the topic or an overview. Available in <a href="https://t.me/architectureweekly">telegram</a> as well.</p><p>Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><h2><strong>Business Oriented System Design Course</strong></h2><p>Wanna learn how to design systems which truly impact business and get promoted? <a href="https://vvsevolodovich.dev/business-oriented-system-design-course/">Sign up for Business Oriented System Design Course</a>: starts 4th of February. Begin the year with learning crucial skills and advance your career! 100+ engineers from Bolt, Booking.com, Semrush, TripleTen etc. who completed the course and brought their architecture skills to a new level.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2t0y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2t0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1958581,&quot;alt&quot;:&quot;&quot;,&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://softwarearchitectureweekly.substack.com/i/184322266?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2t0y!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9177221d-ab27-4d0e-841c-7c268d49a9f7_2679x1189.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><h1><strong>Highlights</strong></h1><h2><a href="https://openai.com/index/scaling-postgresql/">Scaling Postgres at OpenAI</a> &#128119;&#8205;&#9794;&#65039;</h2><p>OpenAI has 800 million customers across the globe. Surprisingly enough they manage to run it with a single master HA PostgreSQL setup offloading the read queries as much as possible to read replicas and having a hot standby for primary in case of a failure for fast recovery. More in their article.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4XS-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 424w, /__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 848w, /__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4XS-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg" width="596" height="387" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:387,&quot;width&quot;:596,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Scaling load diagram&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Scaling load diagram" title="Scaling load diagram" srcset="/__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 424w, /__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 848w, /__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!4XS-!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d4a4be-e365-4d51-a695-57ca2b7a2b6a_596x387.svg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#db #scalability #performance</p><p></p><h2><a href="https://www.anthropic.com/engineering/building-effective-agents">Building effective AI Agents</a> &#128119;&#8205;&#9794;&#65039;</h2><p>AI Agents shows the biggest shift in the software development: instead of having a solid, predefined execution flow you let LLM decide what to do. However before building agents, you still need to master AI-driven workflow, where the flow is still predefined, but the program becomes more powerful due to the usage of LLM processing. Grab a manual from Antropic themselves to learn it!</p><p>#llm </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sRPG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 424w, /__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 848w, /__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sRPG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp" width="1456" height="606" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:606,&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="/__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 424w, /__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 848w, /__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!sRPG!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F312f0afc-41fa-4708-b623-405cbccaa7c4_2401x1000.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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><a href="https://chrisloy.dev/post/2025/12/30/the-rise-of-industrial-software">The rise of industrial software</a> &#127868;</h2><p>The industrialization allowed to craft goods(including growing food) in greater volume than before due to decreased cost and thus increased demand. The same happens with software: as the code is not required to be written manually anymore, the demand for software will blow up. Follow the article on future economics of software development.  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-jRz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 424w, /__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 848w, /__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-jRz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg" width="1523" height="868" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:868,&quot;width&quot;:1523,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Might human written software become little more than a boutique industry?&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Might human written software become little more than a boutique industry?" title="Might human written software become little more than a boutique industry?" srcset="/__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 424w, /__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 848w, /__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!-jRz!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1a3ce6-7df0-486e-8acf-196ef5548481_1523x868.svg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/scaling-postgres-at-openai-building?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 Software Architecture Weekly! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.substack.com/p/scaling-postgres-at-openai-building?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="/__u/softwarearchitectureweekly.substack.com/p/scaling-postgres-at-openai-building?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h1><strong>Follow Up</strong></h1><h2><a href="https://www.infoq.com/articles/holistic-engineering-organic-problem-solving-complex-systems/">Holistic Engineering for organic problem solving</a> &#127868;</h2><p>The biggest issues in the sofware development don&#8217;t come from technical complexity: they come from the external forces like business trends, internal factors like organization design and other attributes. Go through the insightful infoq article on the topic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!iZ_N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!iZ_N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg" width="960" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:960,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!iZ_N!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf066a9d-d093-4f76-8dba-a1d5e65140f8_960x540.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#softwaredevelopment</p><p></p><h2><a href="https://www.milanjovanovic.tech/blog/solving-the-distributed-cache-invalidation-problem-with-redis-and-hybridcache">Distributed Cache Invalidation with Redis and HybridCache</a></h2><p>In-memory cache is nice, but what about a case when you have several instances of the application? Apparently, it can become quite tricky to solve. Fortunately, Redis has some mechanism which can help with it. To get to know which exactly, open the article.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!E-u7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 424w, /__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 848w, /__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 1272w, /__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!E-u7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png" width="1456" height="1053" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1053,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A sequence diagram showing cache invalidation messages being published and received by multiple servers.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A sequence diagram showing cache invalidation messages being published and received by multiple servers." title="A sequence diagram showing cache invalidation messages being published and received by multiple servers." srcset="/__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 424w, /__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 848w, /__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 1272w, /__u/substackcdn.com/image/fetch/$s_!E-u7!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e29081-ceac-4823-a6d6-15174b6c667f_1873x1354.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="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>#performance #consistency</p><h2><a href="https://www.linkedin.com/pulse/from-visibility-control-why-operational-maturity-now-andrew-mallaband-mxqoe/">Operational Maturity is a must now</a></h2><p>2025 marks a borderline where observability ceases to be a technical concern to become a necessity for business to trust the underlying system and to have explainability in it. Andrew Mallaband elaborates on the issue.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!mHNX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_webp, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!mHNX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg" width="1280" height="719" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:719,&quot;width&quot;:1280,&quot;resizeWidth&quot;: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="/__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_424, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_848, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_1272, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!mHNX!, /__u/softwarearchitectureweekly.substack.com/w_1456, /__u/softwarearchitectureweekly.substack.com/c_limit, /__u/softwarearchitectureweekly.substack.com/f_auto, /__u/softwarearchitectureweekly.substack.com/q_auto:good, /__u/softwarearchitectureweekly.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bbcafb-6686-47e9-aca9-60b798a5e9e7_1280x719.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>#o11y #observability</p><p></p><h2><a href="https://blog.alexewerlof.com/p/base-models-vs-instruct-models">Foundation vs Instruct vs Thinking Models</a></h2><p>AI space evolves fast, but it is important to understand the difference in the models which can be used for AI-driven applications. Alex Ewerl&#246;f wrote a short note on the difference between foundation, instruct and thinking models. Grab a read!</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:183186329,&quot;url&quot;:&quot;https://blog.alexewerlof.com/p/base-models-vs-instruct-models&quot;,&quot;publication_id&quot;:1002265,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_Ur2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png&quot;,&quot;title&quot;:&quot;Foundation vs. Instruct vs. Thinking Models&quot;,&quot;truncated_body_text&quot;:&quot;If you are an engineering leader exploring LLMs, you have likely encountered a confusing naming convention on HuggingFace. You see Llama-3-8b (the Base model) and Llama-3-8b-Instruct.&quot;,&quot;date&quot;:&quot;2025-12-24T07:07:00.000Z&quot;,&quot;like_count&quot;:10,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:87732486,&quot;name&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;handle&quot;:&quot;alexewerlof&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2713990-da82-481b-b579-01a7aaa5b85b_560x560.jpeg&quot;,&quot;bio&quot;:&quot;Writes about technical leadership, growth mindset, and system reliability engineering. Senior Staff Engineer, MSc Systems Engineering from KTH, Stockholmer, dad, amateur artist. Read more here: https://www.alexewerlof.com/who&quot;,&quot;profile_set_up_at&quot;:&quot;2022-07-14T22:27:32.130Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-10-11T17:24:45.190Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:947579,&quot;user_id&quot;:87732486,&quot;publication_id&quot;:1002265,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1002265,&quot;name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;subdomain&quot;:&quot;alexewerlof&quot;,&quot;custom_domain&quot;:&quot;blog.alexewerlof.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Technical Leadership, Reliability Engineering, Growth&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png&quot;,&quot;author_id&quot;:87732486,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#786CFF&quot;,&quot;created_at&quot;:&quot;2022-07-14T22:27:58.683Z&quot;,&quot;email_from_name&quot;:&quot;Alex Ewerl&#246;f Notes&quot;,&quot;copyright&quot;:&quot;Alex Ewerl&#246;f&quot;,&quot;founding_plan_name&quot;:&quot;VIP supporter&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;alexewerlof&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://blog.alexewerlof.com/p/base-models-vs-instruct-models?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="/__u/substackcdn.com/image/fetch/$s_!_Ur2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c58cb07-9341-402b-bcdb-9fa767c2cdac_500x500.png" loading="lazy"><span class="embedded-post-publication-name">Alex Ewerl&#246;f Notes</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Foundation vs. Instruct vs. Thinking Models</div></div><div class="embedded-post-body">If you are an engineering leader exploring LLMs, you have likely encountered a confusing naming convention on HuggingFace. You see Llama-3-8b (the Base model) and Llama-3-8b-Instruct&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">8 months ago &#183; 10 likes &#183; Alex Ewerl&#246;f</div></a></div><p>#ai</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://softwarearchitectureweekly.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">Software Architecture Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>Big thanks to Nikita, Constantin, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria, Dzmitry, Mikhail, Nikita, Dmytro, Denis and Mikhail for supporting the newsletter on <a href="https://blog.vvsevolodovich.dev/r/8de768c3?m=2a16feed-d9de-43b4-8807-779b58dc1202">Patreon</a>! Alternatively, you can upgrade to the paid version and get access to the premium only posts!</p>]]></content:encoded></item></channel></rss>