<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Data Letter]]></title><description><![CDATA[The Data Letter prevents data disasters that end careers. Built from a decade fixing Fortune 500 systems: PII exposures, cost explosions, pipeline failures, broken models. Weekly toolkits for data practitioners and leaders. Get the free Audit Kit.]]></description><link>https://www.thedataletter.com</link><image><url>https://substackcdn.com/image/fetch/$s_!q9bB!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87106c62-c084-4b01-b694-ac5d6a824442_500x500.png</url><title>The Data Letter</title><link>https://www.thedataletter.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 15 Apr 2026 17:12:01 GMT</lastBuildDate><atom:link href="https://www.thedataletter.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Hodman Murad]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[hodmanmurad@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[hodmanmurad@substack.com]]></itunes:email><itunes:name><![CDATA[Hodman Murad]]></itunes:name></itunes:owner><itunes:author><![CDATA[Hodman Murad]]></itunes:author><googleplay:owner><![CDATA[hodmanmurad@substack.com]]></googleplay:owner><googleplay:email><![CDATA[hodmanmurad@substack.com]]></googleplay:email><googleplay:author><![CDATA[Hodman Murad]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[IT Keeps Blocking Database Access. Here’s the Strategy That Gets It Approved.]]></title><description><![CDATA[Stop Getting Locked Out of Your Data. Here&#8217;s How to Get Approved.]]></description><link>https://www.thedataletter.com/p/it-keeps-blocking-database-access</link><guid isPermaLink="false">https://www.thedataletter.com/p/it-keeps-blocking-database-access</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 12 Apr 2026 20:12:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2ba1d15d-db99-4ff7-9ae0-a5f24d522273_1408x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Seven years of consulting will teach you something fast: the company hired us to solve their data problems, but IT didn&#8217;t always get the memo. I&#8217;d walk into an engagement with a clear mandate, and spend the first two weeks in a standoff with an IT department that had every reason to say no and almost no incentive to say yes.</p><p>I learned early that winning that standoff had nothing to do with being right. It had everything to do with speaking the right language. IT is optimizing for zero-surprise bills and zero data leaks. If you want access, you have to make their job easier, not harder. This article is the playbook I refined over seven years of doing exactly that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7YLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7YLI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!7YLI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!7YLI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!7YLI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7YLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7YLI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!7YLI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!7YLI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!7YLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c3e145a-6a53-4ba9-a586-1e54d8d19628_1408x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>IT Always Defaults to No</strong></h2><p>Before you write a request that gets approved, understand why no is the default. It&#8217;s risk aversion driven by three factors: compliance, cost, and liability.</p><p><strong>Cloud cost exposure.</strong> A single analyst running <code>SELECT * FROM large_table</code> on a dashboard can double a cloud data warehouse bill overnight. A virtual warehouse consumes Snowflake credits while it runs. Credit limits don&#8217;t cut off spending instantly. When a threshold is reached, the assigned warehouse may continue running for a period before it is suspended, consuming additional credits in the process. This is true even when the most aggressive suspension setting is used.  IT&#8217;s budget is on the line, and even well-intentioned queries can cause cost spikes when analysts don&#8217;t understand consumption-based pricing.</p><p><strong>Identity and Access Management attack surface.</strong> Every additional person with a direct database connection string is a potential entry point. Unauthorized disclosure of credentials is among the leading causes of data incidents across enterprise environments. The principle of least privilege, which governs how IT controls access, means database access should be granted only to the degree necessary to accomplish a specific task. Access is meant to be the exception, not the baseline.</p><p><strong>Liability and regulatory exposure.</strong> If you export sensitive data to an unencrypted Excel file on your laptop and that laptop goes missing, regulators can fine the company. Cybersecurity frameworks treat the loss of control over sensitive data as one of the most serious risks a company can face, and often one that must be disclosed. Storing sensitive data on laptops in unencrypted Excel files, without any record of who accessed it or when, is exactly the kind of control failure that creates regulatory and legal exposure. Excel sprawl creates audit nightmares that governed database access prevents.</p><p><strong>What read-only access means to IT.</strong> Analysts say read-only and think &#8216;I can&#8217;t delete rows.&#8217; IT hears read-only and thinks about all the things that become possible with that access: pulling down the entire customer database, running queries so heavy they slow down core business systems, or viewing compensation data and confidential deal information without authorization.</p><p><strong>When to accept no versus push back.</strong> Accept no if IT offers a curated view, reporting replica, or sandbox environment. These signal a mature data organization that balances security with analyst access. If IT&#8217;s proposed alternative is to manually pull data into Excel, push back. Spreadsheets saved on local computers with no access controls, no version history, and no audit trail are a far bigger security and compliance problem than a governed database connection. That conversation needs to go up the chain.</p><div><hr></div><p>If I&#8217;ve gotten your attention so far, what follows is the part that took seven years to learn. The templates, the compliance documentation, the risk mitigation proposals, the escalation scripts, and the three case studies that show how this all plays out. It&#8217;s all below. </p>
      <p>
          <a href="https://www.thedataletter.com/p/it-keeps-blocking-database-access">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[5 BigQuery Features That Changed How I Write SQL]]></title><description><![CDATA[Modern BigQuery SQL Features for Senior Engineers]]></description><link>https://www.thedataletter.com/p/5-bigquery-features-that-changed</link><guid isPermaLink="false">https://www.thedataletter.com/p/5-bigquery-features-that-changed</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 05 Apr 2026 16:16:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e27f52ea-4802-413d-8974-cf89c20a9e11_1408x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Happy Sunday! I hope you&#8217;ve all been well! I haven&#8217;t been keeping up with The Data Letter as much as I should have these past few weeks because I&#8217;ve been busy building and launching the beta for Asaura AI. For those of you who are new here, Asaura AI is a tool designed to help people who struggle with the high energy cost of starting a task. ADHD brains. Neurodivergent brains. Just plain tired brains. It&#8217;s built to give you a simple entry point so you can stop negotiating with yourself and just move.</p><p>The beta is finally ready for macOS and Linux, and I&#8217;d love for you to test the architecture. If you&#8217;ve ever felt paralyzed by a project that felt too big, your feedback is exactly what I need to refine the system. You can try it out and share your experience through our survey at the links below. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://asauraai.com/beta&quot;,&quot;text&quot;:&quot;DOWNLOAD THE ASAURA AI BETA&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://asauraai.com/beta"><span>DOWNLOAD THE ASAURA AI BETA</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://forms.gle/UgTmgHd1RBCiGzmZ6&quot;,&quot;text&quot;:&quot;TAKE THE ANONYMOUS USER SURVEY&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://forms.gle/UgTmgHd1RBCiGzmZ6"><span>TAKE THE ANONYMOUS USER SURVEY</span></a></p><p>I&#8217;ve been documenting the build over a 100 Days of Building AI video marathon. You can check that out on Substack notes or LinkedIn. <a href="https://substack.com/@hodmanmurad/note/c-238611411?utm_source=notes-share-action&amp;r=7b8hg">Today is Day 91</a>. </p><p>I&#8217;ve also been writing technical deep dives about the Asaura AI  build on my other Substack, <a href="https://betweenthinkingdoing.substack.com/p/the-seven-invisible-forces-that-sabotage">Between Thinking and Doing</a>. Feel free to subscribe to that as well, or <a href="https://www.linkedin.com/in/hodmanmurad/">connect with me on LinkedIn</a>. </p><p>Now that the main build is stable, I&#8217;ve got the space to get back into the rhythm of writing here every week. </p><div><hr></div><p>Today&#8217;s article covers BigQuery features I've found myself teaching constantly over the past year. I share at least three of these with every data team I meet. These features solve problems people have worked around for years.</p><p>Part of what makes them so useful is that SQL has a structural quirk that we all know too well: you write clauses in a fixed order that doesn&#8217;t match the order they actually execute. BigQuery&#8217;s GoogleSQL dialect has been shipping fixes for this. The five features below are the ones I keep coming back to. </p>
      <p>
          <a href="https://www.thedataletter.com/p/5-bigquery-features-that-changed">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Prompt Engineering.]]></title><description><![CDATA[Treating LLM Prompts as Software Assets]]></description><link>https://www.thedataletter.com/p/prompt-engineering</link><guid isPermaLink="false">https://www.thedataletter.com/p/prompt-engineering</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 22 Mar 2026 15:26:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c0756479-4fc4-4798-94a8-54a1230c48d7_1408x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ad-hoc prompting has a shelf life. It works fine when one person owns a single prompt and checks it regularly. It breaks down when three engineers are touching the same prompt string in different files, nobody&#8217;s tracking what changed, and malformed outputs are the first sign that something went wrong. At that point, the prompting is the least of your concerns. What&#8217;s missing is basic software management.</p><div><hr></div><h3><strong>Why Ad-Hoc Prompting Breaks at Scale</strong></h3><p>Ad-hoc prompting works fine for prototypes. You&#8217;re iterating fast, the model&#8217;s responses are good enough, and the cost is trivial. When a prompt is serving real users under real SLAs with real billing attached, the economics look very different from a prototype.</p><p>A prompt is a dependency, just like a library version or a database schema. When it changes, outputs change. When outputs change, downstream parsers, classifiers, and user interfaces can break. <a href="https://www.getmaxim.ai/articles/prompt-versioning-best-practices-for-ai-engineering-teams/">Teams that don&#8217;t version control prompts</a> lose institutional knowledge, can&#8217;t reproduce bugs, and have no rollback path.</p><p>The compounding factor is model updates. When using AI via third-party APIs, the LLMs behind those APIs can unexpectedly change. Like traditional ML models, LLMs can be refreshed or tuned without a significant version bump, <a href="https://reintech.io/blog/implement-prompt-versioning-management-production">meaning the model&#8217;s performance on your set of prompts can change without any notice</a>. Without a versioning system, you can&#8217;t determine whether a degradation came from a prompt change or a model change, and that ambiguity is expensive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p3-6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p3-6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!p3-6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!p3-6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!p3-6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p3-6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p3-6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!p3-6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!p3-6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!p3-6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30337d5e-a240-4eeb-95ad-547cf0506abb_1408x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3><strong>Prompts Drift Like Code</strong></h3><p>Software engineers have spent decades building systems to manage code drift: version control, branching strategies, code review, CI/CD. Prompts need the same discipline, and most teams apply almost none of it.</p><p>There&#8217;s an unavoidable tension between keeping prompts close to the code v<a href="https://launchdarkly.com/blog/prompt-versioning-and-management/">ersus an environment that non-technical stakeholders can access</a>.<a href="https://launchdarkly.com/blog/prompt-versioning-and-management/"> </a>Leaving it unresolved gets more expensive as the team grows.</p><p>Prompt management tools from observability platforms like Arize, Braintrust, and LangSmith offer Git-like version control for prompts and allow rollback if changes reduce quality, but tools alone won&#8217;t help if the discipline isn&#8217;t there. Prompt management tools are inherently limiting because they can&#8217;t easily execute your application&#8217;s code. Even when they can, there&#8217;s often significant indirection involved, making it difficult to test prompts with your system&#8217;s full capabilities, including tools, RAG, and agents. Keeping prompts in the same repository as application code, with the same review gates, removes that indirection.</p><p>A prompt change is a logic change. It controls what your system does and how it responds, and it deserves the same review process as any other change to your codebase. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Testing Prompts vs. Testing Code</strong></h3><p>Testing code is relatively well understood. You write unit tests, integration tests, and end-to-end tests. Give a traditional function the same input twice, and you&#8217;ll get the same output twice, which makes it straightforward to write tests that check for exact results.</p><p>Prompt engineering is about conditioning a probabilistic model to generate a desired output. <a href="https://dev.to/kuldeep_paul/mastering-prompt-versioning-best-practices-for-scalable-llm-development-2mgm">Each additional instruction or piece of context</a> steers the model&#8217;s generation in a particular direction.<a href="https://dev.to/kuldeep_paul/mastering-prompt-versioning-best-practices-for-scalable-llm-development-2mgm"> </a>That probabilistic nature means you can&#8217;t assert exact outputs. Instead of checking for an exact answer, you check whether the response has the right shape: whether it&#8217;s valid JSON, whether the label the model chose is one you&#8217;d accept, and whether the thing it extracted actually appeared in the source text.</p><p>Structured evaluations tell you whether a prompt change made things better or worse before it reaches users. Without them, you&#8217;re iterating on feel, which works fine until something goes wrong in a way you didn&#8217;t anticipate and can&#8217;t reproduce.</p><p>Eyeballing is useful as a final check, <a href="https://dextralabs.com/blog/prompt-engineering-for-llm/">but it doesn&#8217;t hold up at volume or across teams</a>.</p><div><hr></div><h3><strong>When Prompt Engineering Pays Off (and When It Doesn&#8217;t)</strong></h3><p>Before committing engineering resources to a prompt infrastructure, it&#8217;s worth being honest about ROI.</p><p>Prompt engineering pays off when a model&#8217;s output goes directly into another system without a human reviewing it first, when the same prompt runs thousands of times a day, when each call carries a meaningful cost, or when output quality has a direct and measurable effect on what users experience. Without reliable evaluation, you can&#8217;t iterate, and without iteration, you can&#8217;t improve. Projects stall here more than anywhere else in the LLM lifecycle.</p><p>For tasks reviewed by humans before use, or where call volume is low enough that failures surface quickly, a lightweight log of prompt versions in a shared document may be sufficient. For anything in the first category, treating prompts as software assets is worth the investment.</p><div><hr></div><p>In the next section, we get into the practical architecture: how to structure and version prompts, how to run A/B tests without exposing users to untested changes, how to build a test suite that runs automatically when a prompt changes, how to organise a prompt library across a growing team, how to track cost at the prompt level, how to detect when a deployed prompt starts degrading, and two failure patterns that illustrate what happens when these systems aren&#8217;t in place. </p>
      <p>
          <a href="https://www.thedataletter.com/p/prompt-engineering">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[LLM Inference Costs]]></title><description><![CDATA[The 60-80% Problem Nobody Talks About]]></description><link>https://www.thedataletter.com/p/llm-inference-costs</link><guid isPermaLink="false">https://www.thedataletter.com/p/llm-inference-costs</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 08 Mar 2026 10:02:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/49b3f0fa-66f3-44d1-8990-5a1a5b3acea9_1424x752.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Training a model costs between $2K and $50K. You pay it once and move on. Inference is different. Every time your model responds to a user, you&#8217;re billed again. There&#8217;s no finish line.</p><p>Inference doesn&#8217;t work like that. Inference is a subscription you didn&#8217;t fully price. Once a model hits production, inference consistently accounts for 60-80% of <a href="https://aipmbriefs.substack.com/p/why-llm-inference-costs-more-than">total LLM operational spend across a 12-month horizon</a>. For teams shipping to real users at scale, <a href="https://introl.com/blog/inference-unit-economics-true-cost-per-million-tokens-guide">that number trends toward the high end</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oVG1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oVG1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!oVG1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!oVG1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!oVG1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oVG1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aaad430c-fbeb-411f-88fa-f57dc66a4a08_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;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oVG1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!oVG1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!oVG1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!oVG1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaad430c-fbeb-411f-88fa-f57dc66a4a08_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A team that spends $5K on training will often<a href="https://aipmbriefs.substack.com/p/why-llm-inference-costs-more-than"> spend $40K-$50K running that model in year one</a>. This happens consistently across production teams.</p><div><hr></div><h2><strong>Inference Costs Catch Production Teams Off Guard</strong></h2><p>Training has a natural end state. You&#8217;re optimizing toward a metric, you hit it, and spending stops. Inference has no finish line. Every user request is a billing event, and billing events compound.</p><p>Three mechanisms drive the bulk of that spend:</p><p><strong>KV cache memory consumption.</strong> When your model reads a prompt, it saves a record of every word it processes so it doesn&#8217;t have to re-read them for each new word it generates. <a href="https://developer.nvidia.com/blog/accelerate-large-scale-llm-inference-and-kv-cache-offload-with-cpu-gpu-memory-sharing/">That saved record is called the KV cache, and it sits in GPU memory</a>. The longer the prompt, <a href="https://medium.com/@plienhar/llm-inference-series-4-kv-caching-a-deeper-look-4ba9a77746c8">the more memory it occupies</a>. For long prompts, <a href="https://arxiv.org/abs/2309.06180">40-60% of your GPU&#8217;s available memory can go to KV cache alone</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rJcr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rJcr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!rJcr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!rJcr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!rJcr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rJcr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98b95166-fe60-42e5-9692-02899fb0df67_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;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rJcr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!rJcr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!rJcr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!rJcr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98b95166-fe60-42e5-9692-02899fb0df67_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Idle GPU time.</strong> <a href="https://developer.nvidia.com/blog/llm-inference-benchmarking-how-much-does-your-llm-inference-cost/">The GPUs powering your model rent for $2-$8/hour</a>, whether they&#8217;re processing requests or sitting idle. User traffic isn&#8217;t steady; it spikes during business hours and drops overnight, but you can&#8217;t spin up a new GPU instantly. Bringing one online takes between one and three minutes, which is too slow to respond to a traffic spike. So teams keep extra GPUs running at all times just in case, and pay for them around the clock.</p><p><strong>Per-token economics.</strong> Every word sent to the model and every word it sends back costs money. Tokens are just the unit the model uses to measure text, roughly three-quarters of a word each. What teams often miss is how quickly prompt length adds up. A request that includes 2,000 words of retrieved documents, a 500-word system instruction, and a 200-word question costs three to four times as much as a tightly written 700-word equivalent. Bloated instructions, uncompressed retrieved text, and redundant examples all push costs up faster than usage alone would.</p><div><hr></div><h2><strong>Standard Optimizations Don&#8217;t Finish the Job</strong></h2><p>The first instinct is usually to optimize at the model level: quantize to INT8, swap to a smaller model, apply distillation. These are legitimate tools, but they&#8217;re not a complete strategy.</p><p>Quantization can yield significant savings on its own (<a href="https://aimultiple.com/llm-quantization">up to 50% at INT8 and higher at INT4</a>), but model-routing or batching-only approaches typically plateau at 20-30%, and even quantization&#8217;s gains erode if retrieval context and serving efficiency aren&#8217;t addressed alongside it. Smaller models help when the workload is simple, but they degrade on complex instructions. Teams frequently apply one of these levers in isolation, see diminishing returns, and assume they&#8217;ve hit a ceiling.</p><p>They haven&#8217;t. The ceiling is generally much higher.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aEGA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aEGA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 424w, https://substackcdn.com/image/fetch/$s_!aEGA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 848w, https://substackcdn.com/image/fetch/$s_!aEGA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!aEGA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aEGA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aEGA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 424w, https://substackcdn.com/image/fetch/$s_!aEGA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 848w, https://substackcdn.com/image/fetch/$s_!aEGA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!aEGA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21dab47f-3d4e-4a22-9a83-92fa0e1c1269_2032x1062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Inference cost reduction isn&#8217;t a one-dimensional problem. It spans caching strategy, batching behavior, model selection, serving architecture, and hardware configuration simultaneously. Pulling a single lever and treating it as a complete solution is why teams frequently plateau at 20-30% savings with most optimization approaches, whereas a systematic approach can achieve 60-70%.</p><div><hr></div><h2><strong>How to Know Which Lever to Pull First</strong></h2><p>The rest of this article walks through five specific optimization levers and the signals that tell you which to prioritize for your workload type.</p><p>I also cover a full case study from my most recent client: they were spending $50K/year on inference, and we reduced that to $15K without affecting model quality. Every tradeoff gets named.</p><h1><strong>LLM Inference Optimization: Cutting Costs by 70% Without Sacrificing Quality</strong></h1><p><em><strong>This content is for paid subscribers. If you&#8217;re reading this and haven&#8217;t upgraded yet, you can do so below.</strong> </em></p>
      <p>
          <a href="https://www.thedataletter.com/p/llm-inference-costs">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Your Dashboard Looks Great and Changes Nothing]]></title><description><![CDATA[Most dashboards get opened once and ignored for every decision that matters.]]></description><link>https://www.thedataletter.com/p/your-dashboard-looks-great-and-changes</link><guid isPermaLink="false">https://www.thedataletter.com/p/your-dashboard-looks-great-and-changes</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 01 Mar 2026 10:01:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2b610533-a220-4ede-87f9-7f84aed7b4fc_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most dashboards get opened once and ignored for every decision that matters. Here&#8217;s how to tell if yours is one of them.</p><p>This problem is everywhere. Data teams build beautiful visualizations that stakeholders glance at once, nod appreciatively, then ignore for every decision that matters. You see the same confession across analytics forums, Slack channels, and team retrospectives. The analytics industry has mastered the art of building. We&#8217;ve failed at measuring whether it changes anything.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6fi-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6fi-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!6fi-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!6fi-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!6fi-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6fi-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6fi-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!6fi-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!6fi-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!6fi-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c611d2-bf73-4680-9793-a2bcd4d66e63_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Welcome back to The Data Letter! Here are some recent articles you may have missed:</h3><ul><li><p><strong><a href="https://www.thedataletter.com/p/from-manual-export-to-automated-pipeline">From Manual Export to Automated Pipeline: A Practical Playbook</a></strong></p></li><li><p><a href="https://www.thedataletter.com/p/llm-fine-tuning-on-a-budget">LLM Fine-Tuning on a Budget</a></p></li><li><p><a href="https://www.thedataletter.com/p/deepseek-for-data-analysis">Deepseek for Data Analysis</a> </p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>Vanity Metrics vs Decision Velocity</strong></h2><p>There&#8217;s a difference between dashboards that look right and dashboards that change behavior. Most teams optimize for the first. They measure views, shares, and executive compliments. These are vanity metrics dressed up as success signals.</p><p>What matters is decision velocity: how quickly can someone move from seeing data to taking action? If your stakeholder opens your dashboard, scrolls through twelve trend lines, then schedules a meeting to &#8216;discuss next steps,&#8217; you&#8217;ve built decoration, not infrastructure. </p><div><hr></div><p>Back to diagnosing the problem&#8230;</p><h2><strong>Kill This Dashboard Test</strong></h2><p>Here's how you diagnose it. Ask your stakeholders these questions:</p><ol><li><p><strong>What decision did you make because of this dashboard in the last two weeks?</strong></p></li></ol><p>If they pause or pivot to talking about how useful it &#8216;could be,&#8217; you&#8217;re watching theater.</p><ol start="2"><li><p><strong>If I removed this chart tomorrow, what would break?</strong></p></li></ol><p>If nothing breaks, nothing mattered.</p><ol start="3"><li><p><strong>When this metric moves, what do you do differently?</strong></p></li></ol><p>If they can&#8217;t name a specific action, the metric is decorative.</p><p>Signs you&#8217;re building something nobody uses:</p><ul><li><p>Stakeholders request more charts instead of fewer</p></li><li><p>They want &#8216;visibility&#8217; but can&#8217;t define what changes when they have it</p></li><li><p>They complement your color palette more than your insight clarity</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lk2P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lk2P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!lk2P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!lk2P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!lk2P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lk2P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a899e593-3557-4623-8a27-b5d6e50c6b79_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;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lk2P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!lk2P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!lk2P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!lk2P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa899e593-3557-4623-8a27-b5d6e50c6b79_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Building for Impact, Not Applause</strong></h2><p>Start with the decision, not the data. Before you touch Tableau, ask: &#8216;What&#8217;s the one thing this person needs to do differently?&#8217; Then build backward from that action.</p><p>Strip everything else. Your stakeholder doesn&#8217;t need context, trends, and breakdowns. They need the number that triggers the action, and they need it unmissable.</p><p>Make the action as easy as the view. If someone sees &#8216;conversion rate dropped 12%&#8217; and then opens Jira to create a ticket, you&#8217;ve failed. The button to create that ticket should be right there.</p><p>Test by removing features, not adding them. Show version A with ten charts. Show version B with two. Measure which one changes behavior faster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0kHY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0kHY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!0kHY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!0kHY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!0kHY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0kHY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0kHY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!0kHY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!0kHY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!0kHY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8a1ee2-d368-4ecd-98e2-bd5d5a1fb111_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>How to Build Dashboards That Drive Action</strong></h2><p>Ask yourself whether what you&#8217;re building will change anything.</p><p>Close the dashboard and watch what happens. If nobody&#8217;s behavior shifts, if no tickets get created, if no priorities change, you&#8217;ve answered your own question. Strip out everything that doesn&#8217;t trigger an action. Give stakeholders fewer charts and clearer next steps. Measure whether anyone does something different after seeing your work, not whether they say they like it.</p><p>Next up: a decision-first framework for building dashboards that stakeholders use to take action, complete with templates and a stakeholder questionnaire. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.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">The Data Letter 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>]]></content:encoded></item><item><title><![CDATA[From Manual Export to Automated Pipeline: A Practical Playbook]]></title><description><![CDATA[Two working automation patterns that require no database access, no paid tools, and no IT approval]]></description><link>https://www.thedataletter.com/p/from-manual-export-to-automated-pipeline</link><guid isPermaLink="false">https://www.thedataletter.com/p/from-manual-export-to-automated-pipeline</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Thu, 26 Feb 2026 10:01:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/336b3c1d-d652-475d-9f42-ab049d204b67_1340x684.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most data professionals have at least one workflow that should have been automated years ago. A weekly email with an attachment that gets manually copied somewhere. A folder of CSV exports that gets combined by hand every Monday. Work that doesn&#8217;t require judgment, just repetition, and repetition is exactly what code is for.</p><p>The first pattern uses Google Apps Script to automatically pull CSV attachments from Gmail and load them into a Google Sheet. The second uses Python and pandas to consolidate multiple CSV exports into a single clean output file on a schedule. Both have been tested and work.</p><p>The methods are practical enough for analysts automating their first workflow and straightforward enough for engineers who want a low-overhead solution they can hand off to a less technical teammate. Each section includes the code, setup instructions, and scheduling guidance.</p><p>All three files referenced in this article (both scripts and one sample CSV) are available in a secret gist for paid subscribers. The link is at the end.</p><div><hr></div>
      <p>
          <a href="https://www.thedataletter.com/p/from-manual-export-to-automated-pipeline">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Trapped in the Export Loop]]></title><description><![CDATA[So, you&#8217;re a human data pipeline.]]></description><link>https://www.thedataletter.com/p/trapped-in-the-export-loop</link><guid isPermaLink="false">https://www.thedataletter.com/p/trapped-in-the-export-loop</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 22 Feb 2026 10:41:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4f120fac-9475-470a-802c-9073cb45899e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You were hired to analyze data. What you actually do is move it. You click export, rename the file, drop it into a shared folder, and email the link. Then you do it again tomorrow. And the day after. At that point, the job title and the job description have fully parted ways.</p><p>This is the analyst-as-middleware problem, and it&#8217;s more common than most organizations admit. Someone with Python skills and SQL fluency spends their days downloading CSVs and managing attachment threads. No queries. No transformations. No insight generation. Just scheduled, manual data transport dressed up with an analytical job title.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kf5H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kf5H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 424w, https://substackcdn.com/image/fetch/$s_!kf5H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 848w, https://substackcdn.com/image/fetch/$s_!kf5H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 1272w, https://substackcdn.com/image/fetch/$s_!kf5H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kf5H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png" width="1340" height="892" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:892,&quot;width&quot;:1340,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kf5H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 424w, https://substackcdn.com/image/fetch/$s_!kf5H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 848w, https://substackcdn.com/image/fetch/$s_!kf5H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 1272w, https://substackcdn.com/image/fetch/$s_!kf5H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa916a3bb-4310-4a08-8025-ebefbaeb5113_1340x892.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Why Organizations Create Data Dead Ends</strong></h2><p>This doesn&#8217;t happen because companies are malicious. It happens because systems calcify. IT locks down database access for security reasons that made sense in 2011 and never got revisited. Legacy platforms don&#8217;t expose APIs or connect cleanly to modern tooling. Business units developed their own manual workflows years ago, and &#8216;how we&#8217;ve always done it&#8217; carries more institutional weight than efficiency ever could.</p><p>The result is an informal architecture built from browser downloads, shared drives, and email attachments. Staying sharp is possible without system access. What it requires is intentional practice with the materials you already have. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>How Skill Atrophy Happens to Good Analysts</strong></h2><p>The cognitive cost isn&#8217;t obvious at first. You&#8217;re still technically working with data, but there&#8217;s a meaningful difference between analyzing data and transporting it.</p><p>When your job doesn&#8217;t require you to write queries, you stop writing them. Python loops you wrote from memory are starting to require documentation lookups. SQL syntax blurs at the edges. The joins you knew cold become joins you have to think about. Skills erode in proportion to how rarely they&#8217;re exercised, and manual export workflows exercise almost none of the skills that define analytical competence.</p><p>Six months in, you&#8217;re slower. A year in, you&#8217;re rusty. Two years in, you may start to believe the rusty version is the real one.</p><div><hr></div><p>If your daily work has drifted away from the technical side, the previous issue is worth your time. <a href="https://www.thedataletter.com/p/llm-fine-tuning-on-a-budget">LLM Fine-Tuning on a Budget</a> walks through dataset preparation, how LoRA works, and how to evaluate a model when you don&#8217;t have labeled test data. It&#8217;s structured, technical, and built for people who want to stay capable.</p><div><hr></div><h2><strong>Red Flags That Confirm You&#8217;re Trapped in Manual Export Work</strong></h2><p>Watch for these patterns in your own workflow. Your browser history is dominated by downloads, report portals, and file transfers. Shared drives function as your team&#8217;s data architecture, with folders named by date and maintained by convention rather than design. Email is your ETL pipeline, literally, attachments moving data between people because systems won&#8217;t talk to each other. You haven&#8217;t written a query against a live database in months. Your &#8216;analysis&#8217; begins after someone else pulls the data and ends before anyone asks how it was prepared.</p><p>If more than two of those describe your week, you&#8217;re not doing data analysis. You&#8217;re doing data custody.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3I8T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3I8T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 424w, https://substackcdn.com/image/fetch/$s_!3I8T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 848w, https://substackcdn.com/image/fetch/$s_!3I8T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 1272w, https://substackcdn.com/image/fetch/$s_!3I8T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3I8T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png" width="1354" height="522" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:522,&quot;width&quot;:1354,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3I8T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 424w, https://substackcdn.com/image/fetch/$s_!3I8T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 848w, https://substackcdn.com/image/fetch/$s_!3I8T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 1272w, https://substackcdn.com/image/fetch/$s_!3I8T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ff0bdd2-6f0a-4469-b529-be1a1818c661_1354x522.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>How to Preserve Your Skills Without Changing Your Job</strong></h2><p>Getting out of this situation runs through your relationship with the data you already handle, not through a job search.</p><p>Local sandboxing means running every export you receive through a script before you manually touch it. Parse it with Python. Load it into a local database. Write the query that answers the question, even if you&#8217;re just going to paste the answer into a report anyway. The analysis muscle stays active because you&#8217;re actually using it.</p><p>Shadow analysis means building things no one asked for. You have the data. Model something. Build a dataset that answers a question your team hasn&#8217;t thought to ask yet. Don&#8217;t send it anywhere. Just build it. The practice is the point.</p><p>Document the waste. Track, in hours, how much time you spend manually transporting data each week. This isn&#8217;t venting. It&#8217;s evidence. Quantified inefficiency is the clearest argument for change. </p><div><hr></div><h2><strong>Turning Manual Exports into Automated Pipelines</strong></h2><p>Getting out of this situation runs through your relationship with the data you already handle, not through a job search. Escaping manual export workflows doesn&#8217;t always mean landing somewhere better. More often, it means automating the situation you&#8217;re already in.</p><p>&#8216;Automation Playbook for Trapped Analysts&#8217; gets into that next. Specific tools and workflows. No direct database access required. Just the CSV in your inbox and a decision to stop moving it by hand.</p><p>Happy Sunday! See you next week.</p><div><hr></div><p>Paid subscribers get the full archive. That includes the vector database implementation guide covering Pinecone, Weaviate, and Chroma, with cost formulas and query optimization patterns; the advanced model drift detection guide with diagnostic workflows and threshold tuning; and the fine-tuning issue guide with dataset templates and a cost-tracking spreadsheet. The Automation Playbook for Trapped Analysts will be paid. If automating your way out of manual export work is relevant to you, it&#8217;s worth being there for it. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[LLM Fine-Tuning on a Budget]]></title><description><![CDATA[Dataset templates, cost strategies, and a conceptual walkthrough for teams without enterprise budgets]]></description><link>https://www.thedataletter.com/p/llm-fine-tuning-on-a-budget</link><guid isPermaLink="false">https://www.thedataletter.com/p/llm-fine-tuning-on-a-budget</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Fri, 20 Feb 2026 12:19:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fc509d26-0f1b-4805-ade6-6e6cd8d3abf4_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most fine-tuning problems start before training begins. You&#8217;ll waste time and money if your dataset&#8217;s messy, your cost tracking&#8217;s nonexistent, or you don&#8217;t understand the mechanics of how fine-tuning works.</p><p>This guide gives you the preparation toolkit needed for successful fine-tuning. You&#8217;ll get dataset format examples, an explanation of how LoRA works, platform research to compare your options, a cost tracking spreadsheet template, and evaluation methods for models without labeled test data. This guide focuses on preparation and planning rather than training code. The planning infrastructure covered here determines whether your fine-tuning project succeeds or wastes resources. </p>
      <p>
          <a href="https://www.thedataletter.com/p/llm-fine-tuning-on-a-budget">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Choosing Between Fine-Tuning, RAG, and Prompt Engineering: A $10K Decision Guide]]></title><description><![CDATA[Three questions to ask before building your LLM solution]]></description><link>https://www.thedataletter.com/p/choosing-between-fine-tuning-rag</link><guid isPermaLink="false">https://www.thedataletter.com/p/choosing-between-fine-tuning-rag</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 15 Feb 2026 11:48:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2ef4cfad-68d5-459c-bfcf-cccf764631bf_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Before you spin up training runs or build retrieval pipelines, answer these three questions. Most teams can&#8217;t, which is why they end up with overengineered solutions that underperform simpler alternatives.</p><p>Choosing between prompt engineering, RAG, and fine-tuning means matching your requirements to the right level of investment. Get this wrong, and you&#8217;ll spend weeks building something you could&#8217;ve solved in an afternoon.</p><p>Let&#8217;s fix that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X-Kn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X-Kn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!X-Kn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!X-Kn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!X-Kn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X-Kn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X-Kn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!X-Kn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!X-Kn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!X-Kn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa429523e-c5eb-438d-a8db-dd3a80f6d060_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>3-Layer Stack: What You&#8217;re Actually Choosing Between</strong></h2><p><strong>Prompt engineering</strong> means crafting better instructions for a base model. You&#8217;re working entirely at the inference level, modifying inputs to get better outputs. The model stays the same, and you&#8217;re not pulling in external data.</p><p><strong>RAG (Retrieval-Augmented Generation)</strong> adds a knowledge layer. You&#8217;re pulling relevant context from your documents or databases and injecting it into prompts at runtime. The model stays unchanged, but now it has access to your specific information.</p><p><strong>Fine-tuning</strong> means retraining the model itself on your data. You&#8217;re modifying the model&#8217;s weights to specialize its behavior, teaching it patterns, formats, or domain knowledge that weren&#8217;t emphasized in the base training. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Three Questions That Determine Your Approach</strong></h2><p><strong>Does the model already know how to do this task? </strong>If you&#8217;re asking GPT-5 to write marketing copy or summarize documents, the base capability exists, even if you need to refine the outputs through better prompts. Begin with prompt engineering to dial in the style and format. If you&#8217;re asking it to generate outputs in a proprietary format or follow domain-specific conventions it&#8217;s never seen, you might need fine-tuning.</p><p><strong>Does the task require knowledge the model doesn&#8217;t have?</strong> When you need the LLM to reference your internal documentation, product specifications, or company policies, that&#8217;s a RAG problem. The model can reason about information, but it can&#8217;t memorize your entire knowledge base. Don&#8217;t fine-tune when you just need to feed in context.</p><p><strong>Is consistent behavior across thousands of examples more important than flexibility? </strong>Fine-tuning shines when you need the model to reliably produce outputs in a specific style, follow particular reasoning patterns, or handle specialized scenarios that would require increasingly complex prompts. If you&#8217;re solving one-off tasks or experimenting with different approaches, the rigidity of a fine-tuned model works against you.</p><div><hr></div><p>This week&#8217;s paid article:</p><p><a href="https://www.thedataletter.com/p/deepseek-for-data-analysis">A senior data scientist&#8217;s framework for using DeepSeek effectively, including three workflow patterns for messy CSVs, slow SQL, and legacy code.</a> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;UPGRADE&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>UPGRADE</span></a></p><div><hr></div><p>Once you&#8217;ve answered these questions, consider the cost implications of each approach.</p><h2><strong>Cost Comparison at a Glance</strong></h2><p>Prompt engineering costs you time upfront, but keeps inference costs standard. You&#8217;re paying for the experimentation phase, not the deployment.</p><p>RAG adds infrastructure overhead. You need vector databases, embedding models, and retrieval logic. Your per-query cost increases because you&#8217;re making multiple API calls and processing additional tokens.</p><p>Fine-tuning flips the cost structure. High upfront investment in compute, data preparation, and evaluation. Lower per-query costs if you&#8217;re using a smaller model, higher costs if you&#8217;re fine-tuning large models and still using them at scale.</p><div><hr></div><h2><strong>Use Case Examples</strong></h2><p>Here&#8217;s how these questions play out in real projects:</p><ol><li><p>You&#8217;re building a customer support chatbot that needs to reference your FAQ documents and troubleshooting guides. That&#8217;s RAG. The model can already reason with the information you provide. RAG lets you surface the right documents at query time.</p></li><li><p>You&#8217;re generating SQL queries from natural language, and your database schema uses unconventional naming patterns that confuse base models. That&#8217;s a fine-tuning candidate. You want the model to internalize your specific patterns.</p></li><li><p>You&#8217;re summarizing meeting transcripts in a specific format with particular sections and bullet styles. Start with prompt engineering. Most models can follow formatting instructions if you&#8217;re clear enough. Only escalate to fine-tuning if prompt complexity becomes unmanageable.</p></li><li><p>You&#8217;re extracting structured data from unstructured medical notes, where the model needs to understand clinical abbreviations and context-dependent terminology. This might need fine-tuning if your domain vocabulary differs significantly from what&#8217;s in the training data. </p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p></li></ol><h2><strong>&#8216;Is This Overkill?&#8217; Checklist</strong></h2><p>Before you commit to RAG or fine-tuning, run through these checks:</p><ul><li><p><strong>Can you solve this with 10 examples in your prompt instead of 10,000 examples in a training set?</strong> (If yes, you don&#8217;t need fine-tuning.)</p></li><li><p><strong>Does your use case actually require real-time access to changing information? (If yes, RAG.</strong> (If no, maybe just better prompts.)</p></li><li><p><strong>Will you be running this model hundreds of thousands of times?</strong> (If no, the cost optimization from fine-tuning probably doesn&#8217;t matter.)</p></li><li><p><strong>Do you have clean, representative training data that teaches the model something it doesn&#8217;t know?</strong> (If no, don&#8217;t fine-tune.)</p></li><li><p><strong>Can you describe your desired behavior in words? </strong>(If yes, try prompt engineering first.) </p><div><hr></div></li></ul><h2><strong>Bottom Line</strong></h2><p>Most teams skip straight to the expensive solution because it feels more sophisticated. But prompt engineering handles more use cases than people expect, RAG solves the knowledge problem without model changes, and fine-tuning should be your last resort, not your first instinct.</p><p>Start simple, escalate when you have evidence that simpler approaches won&#8217;t work.</p><div><hr></div><p><em>This Wednesday, for paid subscribers, I&#8217;m sharing a complete fine-tuning guide, including dataset preparation templates, a conceptual LoRA walkthrough, platform research comparisons, and a cost-tracking spreadsheet you can adapt for your own projects.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Become A Paid Subscriber&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Become A Paid Subscriber</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[DeepSeek for Data Analysis]]></title><description><![CDATA[Prompts, Validation, and When to Just Type]]></description><link>https://www.thedataletter.com/p/deepseek-for-data-analysis</link><guid isPermaLink="false">https://www.thedataletter.com/p/deepseek-for-data-analysis</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Thu, 12 Feb 2026 10:02:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e4bf00f5-a32e-4fa6-8951-2cdf84c0f600_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>A decision framework and three reusable workflows</strong></p></blockquote><p>I don&#8217;t use ChatGPT for my data work. For public datasets and personal projects, like the examples in this article, I use DeepSeek.com. It has a 1 million token context window, it&#8217;s free, and it supports complex reasoning without losing track during a multi-table join.</p><p>When I&#8217;m working with sensitive data (which is often the case for my work), I run DeepSeek models locally using Ollama + Continue.dev. The local versions support 128k tokens. 128k tokens sounds abstract, but in practice, it means I can paste the entire schema of a 50-table data warehouse and still have room to ask follow-up questions. I&#8217;ve never hit the limit during normal analysis.</p><p>This article gives you a decision framework for when to use DeepSeek and when to code manually, a quality control checklist for catching AI mistakes before they cost you hours, and reusable workflow patterns you can adapt to your own analysis tasks. You&#8217;ll walk away knowing exactly when to delegate work to an LLM and when to just type the damn code yourself.</p><h2><strong>Why DeepSeek? And Addressing Privacy Concerns</strong></h2><p>There are two camps. One group won&#8217;t touch DeepSeek because of data residency concerns. The other is excited about publicly available models that match or beat proprietary options on reasoning benchmarks. I&#8217;m in the latter camp for my work, unless a client I&#8217;m contracting with already has an enterprise account with OpenAI or Anthropic that they prefer I use (which happens most of the time).</p><p>My position is that DeepSeek.com is fine for public datasets and the kind of examples I&#8217;m sharing here. For sensitive work, the local setup I mentioned earlier is straightforward: install Ollama, pull the DeepSeek model, and point Continue.dev at your local instance. You get the reasoning power without sending anything to external servers.</p><p>This isn&#8217;t a setup guide, so I won&#8217;t walk through every step. The point is that local deployment is viable if privacy is important to your use case. For everything else, the web interface works perfectly well.</p><h2><strong>Decision Framework: When to Use DeepSeek vs. Coding Manually</strong></h2><p>DeepSeek handles tasks that require understanding context, reasoning through approaches, or generating code you&#8217;d need to look up anyway. You should code manually when the task is faster to type than to prompt, when you&#8217;re learning something new, or when you need absolute certainty.</p><p>Here&#8217;s how I decide:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xl2B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xl2B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 424w, https://substackcdn.com/image/fetch/$s_!Xl2B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 848w, https://substackcdn.com/image/fetch/$s_!Xl2B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 1272w, https://substackcdn.com/image/fetch/$s_!Xl2B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xl2B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png" width="1040" height="846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:846,&quot;width&quot;:1040,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xl2B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 424w, https://substackcdn.com/image/fetch/$s_!Xl2B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 848w, https://substackcdn.com/image/fetch/$s_!Xl2B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 1272w, https://substackcdn.com/image/fetch/$s_!Xl2B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e29870-3c07-4596-b6f3-baedbf261c0a_1040x846.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If the task requires understanding why something works or what approach to take, use DeepSeek. If you already know what to write, just type it.</p><p>Here&#8217;s how that plays out across three common scenarios: </p>
      <p>
          <a href="https://www.thedataletter.com/p/deepseek-for-data-analysis">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[“Stop Learning SQL and Python”]]></title><description><![CDATA[Why Senior Analysts Are Right (And Wrong)]]></description><link>https://www.thedataletter.com/p/stop-learning-sql-and-python</link><guid isPermaLink="false">https://www.thedataletter.com/p/stop-learning-sql-and-python</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 08 Feb 2026 09:02:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-2tg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><strong>AI has changed the game. The question now is: what are the new rules?</strong></h4><p>&#8220;I hate leet coding interviews.&#8221;</p><p>My friend, a senior analyst, told me that over coffee last month. Five years in, crushing it at her job, but dreading the thought of ever having to switch roles because of the interview gauntlet. And honestly? I get it. When you&#8217;re spending your days designing data strategies and managing stakeholders, being asked to write a flawless binary search on a whiteboard feels absurd. Especially when Copilot&#8217;s sitting right there in VS Code, ready to handle that instantly.</p><p>So yeah, the &#8220;stop learning SQL and Python&#8221; crowd has a point. Just not the one they think they&#8217;re making.</p><div><hr></div><p>&#128204; Quick note: This is a free article on concepts. Paid subscribers get implementation guides midweek, every week. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Upgrade&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Upgrade</span></a></p><div><hr></div><h3><strong>Why Everyone&#8217;s Fed Up</strong></h3><p>Two things are happening at once. First, as you get more senior, your job changes. You&#8217;re not writing queries all day anymore. You&#8217;re figuring out what questions to ask, which systems to build, and how to structure teams around data. Second, AI assistants have gotten really good at syntax. I don&#8217;t keep the exact parameters for window functions memorized anymore, and I don&#8217;t need to. That&#8217;s what documentation is for. GitHub Copilot does.</p><p>These tools aren&#8217;t the problem. Most interview processes are still stuck in 2015, testing whether you&#8217;ve memorized edge cases instead of whether you can actually solve problems. That&#8217;s what&#8217;s driving people up the wall.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-2tg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-2tg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 424w, https://substackcdn.com/image/fetch/$s_!-2tg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 848w, https://substackcdn.com/image/fetch/$s_!-2tg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 1272w, https://substackcdn.com/image/fetch/$s_!-2tg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-2tg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png" width="1358" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1358,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-2tg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 424w, https://substackcdn.com/image/fetch/$s_!-2tg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 848w, https://substackcdn.com/image/fetch/$s_!-2tg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 1272w, https://substackcdn.com/image/fetch/$s_!-2tg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52c6d0d-cf13-40e2-be96-675013a3e6d6_1358x874.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>But Here&#8217;s Where It Gets Tricky</strong></h3><p>There&#8217;s a huge difference between &#8220;I don&#8217;t need to memorize syntax&#8221; and &#8220;I don&#8217;t need to understand how this works.&#8221; Some people are conflating the two, and that&#8217;s dangerous.</p><p>AI is incredible at generating code. It&#8217;s also incredibly bad at knowing whether that code is right for your specific situation. I&#8217;ve watched Copilot suggest a JOIN that would absolutely wreck performance on our data model. If I didn&#8217;t understand what was happening under the hood, I&#8217;d have shipped it and spent the next week debugging production issues.</p><p>What hasn&#8217;t changed is that you still need to debug things. You still need to spot when something&#8217;s wrong. And if you&#8217;re senior, you&#8217;re definitely mentoring people and making architectural calls. You can&#8217;t do any of that without understanding the underlying concepts. The tool that writes the code might be new, but the requirement to know what good code looks like isn&#8217;t going anywhere.</p><div><hr></div><p><strong>&#128274; This Week&#8217;s Paid Guide</strong></p><p><strong><a href="https://www.thedataletter.com/p/implementation-blueprint-for-vector">A technical guide to building production RAG systems that covers vector database selection, AI embedding model costs, chunking strategies, and optimization patterns that control your LLM infrastructure spend.</a> </strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Upgrade&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Upgrade</span></a></p><div><hr></div><h3><strong>What Matters Now</strong></h3><p>So if mindless memorization of code snippets is out, what&#8217;s in? I think about it as four core things.</p><p><strong>First:</strong> problem framing. Can you take a messy stakeholder request and turn it into something concrete? That&#8217;s half the battle right there.</p><p><strong>Second:</strong> critical thinking. When your model spits out results, can you tell if they make sense? Can you reason about uncertainty, edge cases, and what might be missing?</p><p><strong>Third:</strong> working effectively with AI. Writing good prompts, integrating outputs, and knowing when to trust the suggestion and when to override it. This is a skill now.</p><p><strong>Fourth:</strong> technical judgment. Whether a human or an LLM wrote it, can you review the code and evaluate whether it&#8217;s efficient, maintainable, and correct? Can you explain why one approach is better than another?</p><p>These aren&#8217;t easier skills than syntax memorization. They&#8217;re harder, but they&#8217;re the ones that actually matter. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Where This Is Heading</strong></h3><p>The good news is that some teams are figuring this out. I&#8217;ve seen interviews shift from &#8220;write this algorithm from scratch&#8221; to &#8220;here&#8217;s an ambiguous business problem, walk me through how you&#8217;d approach it.&#8221; You can use whatever tools you want. The interviewer wants to see how you think, how you break down problems, and what trade-offs you consider.</p><p>That&#8217;s not a lower bar. It&#8217;s a higher one. It&#8217;s just measuring the right things.</p><p>And honestly, that&#8217;s the direction all of us need to be moving into, whether we&#8217;re hiring or getting hired. Let AI handle the mechanical stuff. That&#8217;s what it&#8217;s good at. Focus your energy on the conceptual work, the strategic thinking, the judgment calls. That&#8217;s where humans still have the advantage, and probably will for a while.</p><div><hr></div><p><strong>Here&#8217;s what paid subscribers got this past month:</strong></p><p><strong><a href="https://www.thedataletter.com/p/advanced-model-drift-detection">Advanced Model Drift Detection</a></strong> - A technical deep dive into statistical methods (PSI, Wasserstein, KL divergence) for catching data distribution shifts before they tank your models, plus a diagnostic framework that takes you from alert to root cause without manual investigation.</p><p><strong><a href="https://www.thedataletter.com/p/mlops-on-a-50-monthly-budget">MLOps on a $50 Monthly Budget</a></strong> - The complete architecture for running production ML inference at founder-friendly costs using serverless GPUs, DuckDB querying S3, and automated shutdown scripts that prevent runaway cloud bills.</p><p><strong><a href="https://www.thedataletter.com/p/ai-agent-starter-kit">AI Agent Starter Kit</a></strong> - Production-grade agent infrastructure with built-in cost tracking, compliance engines for EU AI Act/GDPR, and structured logging that makes debugging agents forensic analysis instead of guesswork.</p><p><strong><a href="https://www.thedataletter.com/p/diy-data-catalog-template">DIY Data Catalog Template</a></strong> - A working metadata management system you can test locally in under 2 hours, with validation scripts, tier-based governance, and a Google Sheets backend that proves the pattern before you invest in vendor platforms.</p><p><strong>Not a paid subscriber yet?</strong> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;UPGRADE NOW&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>UPGRADE NOW</span></a></p>]]></content:encoded></item><item><title><![CDATA[Implementation Blueprint for Vector Database: Pinecone vs Weaviate vs Chroma]]></title><description><![CDATA[Production RAG Systems]]></description><link>https://www.thedataletter.com/p/implementation-blueprint-for-vector</link><guid isPermaLink="false">https://www.thedataletter.com/p/implementation-blueprint-for-vector</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Thu, 05 Feb 2026 18:30:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/64d2299b-7c86-4781-8be4-9001adc735e2_6868x4808.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://substack.com/home/post/p-186482910">You&#8217;ve accepted that production RAG requires a vector database.</a> Now you&#8217;re facing implementation decisions with real cost implications: which vendor, which embedding model, how to chunk your documents, and how to control the budget. This guide provides the frameworks and decision matrices for production implementation decisions.</p>
      <p>
          <a href="https://www.thedataletter.com/p/implementation-blueprint-for-vector">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Vector Database Guide]]></title><description><![CDATA[Scalable Retrieval for Production RAG and LLM Systems]]></description><link>https://www.thedataletter.com/p/vector-database-guide</link><guid isPermaLink="false">https://www.thedataletter.com/p/vector-database-guide</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 01 Feb 2026 09:02:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5bd616ce-4f1d-4db9-8c8f-dc705673b128_6400x4000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Moving a RAG pipeline from a local notebook to a production environment introduces immediate infrastructure challenges. While a flat-file index <strong>can manage small datasets, it cannot handl</strong>e concurrent requests or the large document volumes required by a live application. </p><p>Vector databases provide the necessary architecture to maintain low-latency retrieval as your data scales, solving the engineering bottlenecks that cause simpler systems to fail under load. </p><div><hr></div><h4><strong>Vector Indexing for Semantic Retrieval</strong></h4><p>Production AI systems require a shift in how we handle data retrieval. While standard database operations rely on rigid filters and specific keys, AI applications depend on the relationship between concepts. A vector database specializes in these relationships by treating data points as coordinates in space rather than entries in a list. It serves as a high-performance engine for approximate nearest neighbor (ANN) search over dense vector embeddings, enabling the system to navigate concepts rather than keywords.</p><p>To put it simply, instead of scanning for matching words, the system organizes information based on how closely related the ideas are. It functions like a digital library that has already grouped similar topics together across an expansive 3D map. This allows the software to jump straight to the most relevant section and find the best answers instantly, rather than checking every single page one by one. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h4><strong>Retrieval Engine for Production RAG</strong></h4><p>In a live AI application, the speed and quality of the information the system finds are vital. If the search takes too long, the user waits. If it encounters incorrect information, the AI gives the wrong answer.</p><p>A vector database acts as a high-speed search engine, finding the most useful facts in a fraction of a second. By feeding the AI only the most relevant data, the system remains accurate while reducing the costs of running large models.</p><div><hr></div><h4><strong>Implementation Trade-offs: Build, Buy, or Hybrid</strong></h4><p>Choosing the right path depends on your team&#8217;s bandwidth and your project&#8217;s specific constraints.</p><p><strong>Managed Services (e.g., Pinecone)</strong></p><ul><li><p><strong>Pros:</strong> Zero ops overhead, fast integration for rapid deployment, and guaranteed availability via SLAs.</p></li><li><p><strong>Cons:</strong> Recurring monthly costs that scale with data volume, less control over underlying infrastructure, and potential data egress fees.</p></li></ul><p><strong>Cloud-Hosted Open Source (e.g., Weaviate Cloud)</strong></p><ul><li><p><strong>Pros:</strong> Flexibility of an open source core combined with managed scaling and often granular, usage-based pricing models.</p></li><li><p><strong>Cons:</strong> You still own some configuration logic, and you&#8217;re still paying a cloud premium.</p></li></ul><p><strong>Self-Hosted (e.g., pgvector, Milvus)</strong></p><ul><li><p><strong>Pros:</strong> Maximum architectural control, cost-effective at high volume, and integrates directly with existing data infrastructure (like PostgreSQL).</p></li><li><p><strong>Cons:</strong> Significant engineering burden for initial deployment, ongoing monitoring, and manual performance optimization.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><p><strong>Use these three questions to evaluate your current trajectory:</strong></p><ol><li><p>Is your project transitioning from a proof-of-concept to a deployed application with actual user traffic?</p></li><li><p>Does your retrieval latency or recall accuracy degrade when your document volume exceeds 10,000 chunks?</p></li><li><p>What&#8217;s your team&#8217;s higher priority: developer velocity or long-term infrastructure cost control?</p></li></ol><p>If you answered &#8216;yes&#8217; to the first two questions, you&#8217;ve reached the point where a dedicated vector database is a requirement. Your answer to the third question will dictate whether you should lean toward a managed service or a self-hosted solution.</p><div><hr></div><p>Vector databases are the industry standard for a specific engineering requirement: scalable similarity search in AI applications. By offloading the complexity of high-dimensional indexing to a dedicated system, you ensure your RAG pipelines remain responsive as your data grows.</p><p>Building these systems at scale involves nuanced architectural decisions that go far beyond basic implementation. For exclusive access to deep-dive technical reports and advanced strategies for engineering production AI, consider upgrading to a paid subscription to <strong>The Data Letter</strong>. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Upgrade to Paid&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Upgrade to Paid</span></a></p>]]></content:encoded></item><item><title><![CDATA[Advanced Model Drift Detection]]></title><description><![CDATA[Moving Beyond Scheduled Retraining]]></description><link>https://www.thedataletter.com/p/advanced-model-drift-detection</link><guid isPermaLink="false">https://www.thedataletter.com/p/advanced-model-drift-detection</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Thu, 29 Jan 2026 09:01:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/288eb9bf-ff5b-4e87-8667-66587d0569a7_1364x592.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Statistical methods, threshold tuning, and diagnostic workflows for production ML systems</strong></h2><p>Most production ML systems monitor drift by running statistical tests on a schedule, comparing recent data to a baseline, and triggering alerts when thresholds are crossed. This generates two problems: gradual, meaningful drift gets missed, while natural variance creates false alarms. Models can pass scheduled retrain validations with strong offline metrics while business outcomes quietly degrade because the monitoring approach lacks the sophistication to catch what matters.</p><p>Data scientists have access to sophisticated statistical methods for detecting distribution shifts. Most monitoring failures stem from applying these tools without understanding what they measure, when they&#8217;re appropriate, or how to tune them for specific systems. Teams often implement drift detection as a checkbox compliance task rather than a diagnostic system. They pick a metric (often PSI because it&#8217;s popular), set an arbitrary threshold (0.1 or 0.2 because that&#8217;s what a blog post suggested), and wait for alerts. When those alerts arrive, there&#8217;s no clear path from &#8220;PSI exceeded threshold&#8221; to &#8220;here&#8217;s what&#8217;s wrong and what to do about it.&#8221;</p><p>Effective production monitoring requires understanding what each statistical method actually measures, when it&#8217;s appropriate, and how to tune it for your specific system. More critically, it requires a diagnostic framework that takes you from an alert to a root cause without manual data spelunking every time. </p><div><hr></div><p>&#128075;&#127999;&#128075;&#127999;&#128075;&#127999; Welcome to all new TDL subscribers this week! Here are some recent popular articles you might be interested in as well: </p><p><a href="https://hodmanmurad.substack.com/p/mlops-on-a-50-monthly-budget">MLOps on a $50 Monthly Budget</a></p><p><a href="https://hodmanmurad.substack.com/p/data-catalog-implementation">Data Catalog Implementation</a></p><p><a href="https://hodmanmurad.substack.com/p/diy-data-catalog-template">DIY Data Catalog</a></p><p><a href="https://hodmanmurad.substack.com/p/production-hell-of-ai-agents">Production Hell of AI Agents</a></p><p><a href="https://hodmanmurad.substack.com/p/ai-agent-starter-kit">AI Agent Starter Kit</a> </p><p>Paid subscribers get full access to all technical deep dives, implementation guides, and operational playbooks. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Upgrade to Paid&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Upgrade to Paid</span></a></p><div><hr></div><p>Before you can diagnose drift effectively, you need to understand which statistical methods detect which types of changes.</p><h2><strong>Five Statistical Tools for Drift Detection</strong></h2><p>Think of drift detection methods as specialized instruments, each designed to answer a specific question about your data. Using the wrong tool or misinterpreting its output leads to either missed drift or alert fatigue.</p><p><strong>Population Stability Index (PSI) asks: </strong>Has the proportion of data falling into predefined buckets changed? It divides your feature values into categories (bins) and compares the proportions of data in each category between your baseline and current data. Think of it like dividing ages into ranges (18-25, 26-35, 36-45) and checking whether the percentages in each range have shifted. PSI is particularly useful for monitoring discrete or naturally bucketed features, such as credit score ranges or price tiers. Its strength is interpretability: you can immediately see which bins shifted. Its weakness is sensitivity to how you define those bins.</p><p><strong>Wasserstein Distance</strong> (also called Earth Mover&#8217;s Distance) asks: How much work would it take to reshape one distribution into another? It measures the minimum cost to transport probability mass from one distribution to match another. This makes it well-suited for continuous features where you care about the magnitude of shifts, not just their presence. A small Wasserstein distance indicates that the distributions are similar. A large one indicates they&#8217;ve moved apart. It handles heavy-tailed distributions better than variance-based metrics.</p><p><strong>Kullback-Leibler Divergence</strong> asks: How much information would I lose if I used my old distribution to model the new one? KL divergence quantifies the difference between two probability distributions by measuring how one distribution diverges from the other. The calculation works differently depending on which distribution you treat as the reference (KL(P||Q) &#8800; KL(Q||P)). It&#8217;s also highly sensitive to changes in rare events or edge cases. This sensitivity makes it powerful for detecting subtle shifts in uncommon scenarios, but creates problems when certain values appear in new data that never appeared in your baseline (the math breaks down when probabilities hit zero).</p><p><strong>Maximum Mean Discrepancy (MMD)</strong> asks: Do these two high-dimensional distributions differ in a statistically significant way? It compares distributions by transforming them into a special mathematical space (using a kernel function) and measuring how far apart they are in that transformed view. Think of it like comparing two cities not by their street layouts, but by converting each into a set of aggregate statistics (population density patterns, commercial vs. residential ratios) and comparing those. MMD works well for complex data types such as text embeddings, image representations, and other multi-dimensional features where simpler metrics struggle. It requires more computation but detects complex, multivariate shifts that single-variable methods miss.</p><p><strong>The Page-Hinkley Test asks: Has this metric started showing a consistent pattern of deviation from its typical level</strong>? Unlike previous methods that compare two static distributions, Page-Hinkley tracks a cumulative metric over time and signals a change point when it crosses a threshold. This makes it ideal for monitoring prediction metrics (like average predicted probability) where you want to detect the moment drift begins, not just that it occurred.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DI9Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DI9Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!DI9Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!DI9Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!DI9Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DI9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DI9Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!DI9Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!DI9Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!DI9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6062d48e-23bc-44c8-8a63-d23a2fe0beb9_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Tool selection is just the starting point. Operational challenges intensify when you need to set thresholds that separate meaningful changes from random fluctuations, and when an alert triggers but you can&#8217;t determine whether it indicates a data pipeline bug, legitimate distribution shift, or actual concept drift. Most drift detection implementations fail at these two points. </p>
      <p>
          <a href="https://www.thedataletter.com/p/advanced-model-drift-detection">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[MLOps on a $50 Monthly Budget]]></title><description><![CDATA[A Solo Founder&#8217;s Survival Guide]]></description><link>https://www.thedataletter.com/p/mlops-on-a-50-monthly-budget</link><guid isPermaLink="false">https://www.thedataletter.com/p/mlops-on-a-50-monthly-budget</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 25 Jan 2026 16:05:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/90eb32f9-475d-487c-b5c6-aa40d43bae48_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cloud bills surprise founders more than they should. A SageMaker endpoint running 24/7 costs $2,000 per month, whether it serves 3 requests or 3,000. An A100 instance left on over the weekend burns $800. Standard MLOps tutorials assume you have infrastructure budget to spare. Most solo founders don&#8217;t.</p><p>As a first time founder building my own product, I&#8217;m prioritizing cost control from day one. I&#8217;m determined to reach product-market fit without infrastructure costs consuming my runway. This article documents the stack I&#8217;m building (designed to start under $50 monthly and scale only when usage justifies the cost).</p><p>The alternative requires a different mental model. Orchestrate poverty, don&#8217;t provision wealth. Build systems that wake up on demand and sleep when idle. Design for right-sized compute, not always-on excess. Automate ruthlessly so frugality compounds without manual intervention. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Foundations of Frugal MLOps: Rethinking Defaults</strong></h2><p>Most MLOps tutorials push you toward the enterprise playbook (managed feature stores, always-on inference endpoints, dedicated GPU instances). This works when you have venture capital. For solo founders and indie hackers bootstrapping their way to revenue, these costs can consume months of runway before you serve a single paying customer.</p><p>Consider the typical quick start path. Spin up a SageMaker inference endpoint (<a href="https://aws.amazon.com/ec2/instance-types/g4/">starting at $0.526/hour for g4dn.xlarge with a T4 GPU</a>), provision a managed feature store, and maybe add DataDog for monitoring (<a href="https://www.vantage.sh/blog/datadog-vs-grafana-cost">starting at $15 per host monthly</a>). You&#8217;re immediately committed to $378+ monthly before serving a single prediction (one g4dn.xlarge instance running 24/7 at $0.526/hour = $379 monthly). Scale that across development, staging, and production environments, and you&#8217;re burning $500-1,000 monthly on infrastructure alone.</p><p>Treat compute as a scarce resource that must justify its existence every second. Default to stateless, ephemeral architecture. Embrace serverless patterns that bill you for actual usage, not provisioned capacity. Replace managed services with open-source tools running on minimal infrastructure.</p><p>The constraint forces better architecture while preserving runway until revenue justifies higher spending (stateless services, efficient batching, aggressive caching, and clear separation between hot and cold paths). </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Blueprint: A $50 Monthly MLOps Stack</strong></h2><p>Here&#8217;s the architecture designed for production ML inference at under $50 per month. </p>
      <p>
          <a href="https://www.thedataletter.com/p/mlops-on-a-50-monthly-budget">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI Infrastructure Engineering: Driving JPMorgan’s $2 Billion Return (Part 2)]]></title><description><![CDATA[MLOps and Data Architecture: Scaling 450 Production Models]]></description><link>https://www.thedataletter.com/p/ai-infrastructure-engineering-driving</link><guid isPermaLink="false">https://www.thedataletter.com/p/ai-infrastructure-engineering-driving</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Wed, 21 Jan 2026 15:25:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/41d62fbc-56d0-4018-b9be-7e1ba5648543_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>While headlines tout the transformative power of AI, sustainable value is engineered, not discovered. This deep dive into JPMorgan Chase's technical architecture reveals the operational foundations that turn algorithms into billions in annual return.</p><div><hr></div><p>A little about my guest today:</p><p><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;John Brewton&quot;,&quot;id&quot;:250536583,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!6MjO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d302f0-b038-41be-abb5-55b23b8582aa_1200x1198.jpeg&quot;,&quot;uuid&quot;:&quot;ef6e5d50-41bb-4526-98ab-d6179119ef6e&quot;}" data-component-name="MentionToDOM"></span> documents the history and future of operating companies at <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Operating by John Brewton&quot;,&quot;id&quot;:2417823,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:&quot;https://open.substack.com/pub/johnbrewton&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8178186-b7d3-4cb4-8aa1-c17369bd2128_600x600.png&quot;,&quot;uuid&quot;:&quot;72b242ac-c03c-40bb-a96e-f2f0cbf95e78&quot;}" data-component-name="MentionToDOM"></span>, where he examines how elite organizations build competitive advantage through operational excellence. A Harvard graduate who began his career as a PhD student in economics at the University of Chicago, John brings both academic rigor and practical experience to his analysis. Having sold his family&#8217;s B2B industrial distribution company in 2021 before founding 6A East Partners, a research and advisory firm exploring the fundamental question: What is the future of companies?</p><p>His writing spans <strong>Operating Economics</strong> (dissecting how companies like Amazon and, of course, JPMorgan build optimization engines), <strong>Operating History</strong> (connecting contemporary strategy to legends like Andy Grove and Alfred Sloan), and the <strong>AI Upskilling Playbook</strong> (research backed frameworks for career resilience in the AI era). With popular pieces like <a href="https://www.operatingbyjohnbrewton.com/p/the-ai-skills-crisis-isnt-what-you">The AI Skills Crisis Isn&#8217;t What You Think</a> and <a href="https://www.operatingbyjohnbrewton.com/p/operating-economics-building-antifragile">Operating Economics: Building Antifragile Companies</a>, John has built a community of operators, founders, and builders seeking to understand not just what companies do, but how they actually work.</p><p>He helps business owners, founders, and investors optimize their operations, translating insights from Fortune 500 transformations into actionable frameworks for companies at any scale. John creates content daily (despite the occasional protests from his beloved wife, Fabiola) and still cringes at his early LinkedIn posts.</p><div><hr></div><p><a href="https://www.operatingbyjohnbrewton.com/p/operating-leaders-how-jp-morgan-chase">Part 1 examined JPMorgan&#8217;s financial performance and strategic decisions</a> from 2021-2026: $2 billion in annual AI investment generating $2 billion in returns, 450 production models scaling to 1,000 by year-end, and a workforce transformation that included a 10% reduction in operations staff. </p><div><hr></div><blockquote><p>JPMorgan Chase generates $2 billion in annual business value from artificial intelligence by treating model deployment as an industrial engineering challenge. While most organizations prioritize algorithms or talent, JPMorgan focuses on the operational plumbing required to scale.</p></blockquote><p>Success derives from data pipelines processing $10 trillion in daily transactions with zero downtime tolerance, feature stores eliminating training-serving skew across 450 production models, and deployment infrastructure pushing updates to 250,000 employees every eight weeks while maintaining regulatory compliance across 120 jurisdictions.</p><p>JPMorgan&#8217;s AI returns reflect a decade of data engineering that preceded the current AI wave. While competitors scrambled to hire data scientists after ChatGPT&#8217;s November 2022 launch, JPMorgan already operated 400+ production use cases spanning fraud detection, credit decisioning, and algorithmic trading. The bank employs<a href="https://www.jpmorganchase.com/content/dam/jpmc/jpmorgan-chase-and-co/investor-relations/documents/events/2023/jpmc-investor-day-2023/JPM-Investor-Day-2023-Final-Transcript_Global-Technology.pdf"> 900 data scientists, 600 ML engineers, and a 200-person AI research team</a>. This infrastructure provides a structural advantage that most enterprises cannot replicate, regardless of budget.</p><p>This article examines the technical systems generating those returns. These include cloud migration architecture moving petabytes off mainframes, ML lifecycle management serving 1,700 AI specialists, LLM gateway processing millions of employee queries, and real-time fraud detection operating at millisecond latency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LRxf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LRxf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!LRxf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!LRxf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!LRxf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LRxf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LRxf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!LRxf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!LRxf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!LRxf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1270e9d-8a92-4421-992b-3847d791b6e2_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Cloud Migration Strategy: High-Volume Data Systems Transformation</strong></h2><p>JPMorgan processes nearly $10 trillion in payments daily across 120 currencies. Moving that volume from mainframe systems to cloud infrastructure presents technical challenges most engineers never encounter: dual-write architectures maintaining consistency across legacy and modern systems, schema translation for decades-old data models, and testing strategies that verify correctness without access to production traffic patterns.</p><p>The bank increased cloud application deployment from 38% in 2022 to 65% by 2025, with approximately 80% now running on modern infrastructure. That three-year timeline reflects the actual complexity of financial systems migration, not the &#8220;lift and shift in six months&#8221; narrative common in cloud vendor marketing.</p><p>The migration challenge requires running old and new systems simultaneously. JPMorgan uses change data capture technology that copies every transaction from mainframe computers to cloud databases in real-time, like carbon paper, creating a duplicate. Both systems process the same transactions for months while engineers verify that the cloud version produces identical results.</p><p>Old mainframe systems store data differently from modern cloud databases. Records from the 1980s use outdated formatting that doesn&#8217;t translate directly to today&#8217;s standards. A single customer&#8217;s information might be scattered across 15 different mainframe files that need to be combined into a single modern database record.</p><p>Testing presents unique constraints. Banks cannot experiment with real customer transactions due to regulatory rules. Instead, JPMorgan runs shadow tests where cloud systems process copies of live transactions without affecting actual payments. Engineers compare outputs between old and new systems. Only after weeks of matching results with total precision does JPMorgan shift real traffic to cloud infrastructure.</p><p>The bank invested over $2 billion in building cloud data centers with computing power that mainframes cannot provide. Modern fraud detection requires specialized processors that analyze transactions instantly, achieving the 300x speed improvement documented in Part 1, where older systems took 24 hours running overnight batch processes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YwTm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YwTm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YwTm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YwTm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>OmniAI Platform: ML Lifecycle Management for 1,700 Specialists</strong></h2><p>JPMorgan operates OmniAI, an internal ML platform serving 1,700 AI specialists across 450+ production models. The platform addresses problems obscured from organizations running 5-20 models but essential at scale: feature definition inconsistencies that cause training-serving skew, model versioning across teams that independently update shared features, and deployment pipelines that balance engineering velocity and regulatory audit requirements.</p><p>Feature stores solve a coordination problem. When different teams build models independently, they often define the same metric differently. One team calculates &#8216;customer transaction velocity&#8217; over 7 days, another over 30 days. Models trained on one definition but deployed using another produce incorrect predictions.</p><p>JPMorgan&#8217;s feature store provides a single definition that all teams share. Engineers define each metric once, and the platform ensures every model uses the same calculation for both training and production. This prevents errors where models work in testing but fail in real-world deployment.</p><p>The system maintains two versions: a storage system for historical data used in model training, and a fast-access system delivering metrics in milliseconds for real-time predictions. Some metrics update nightly (such as customer credit history), while others update instantly (such as current transaction counts).</p><p>Deployment follows a careful progression. New models first run alongside existing models without affecting actual decisions (&#8217;shadow deployment&#8217;). Engineers compare predictions between old and new versions. Next, new models handle 1-5% of real transactions (&#8217;canary deployment&#8217;) and are gradually increased if performance remains stable. Automated systems monitor for problems and can reverse deployments if metrics degrade.</p><p>Monitoring 450+ models requires tracking whether model predictions remain accurate as real-world patterns change. Each model logs its decisions to a central system. Nightly analysis checks whether current predictions match patterns from training data, alerting engineers when models need retraining.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YwTm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YwTm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YwTm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YwTm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!YwTm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e443dbe-6b24-4900-a9e2-42c88a8825cc_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This platform infrastructure enables JPMorgan&#8217;s distributed AI organization: 900 data scientists, 600 ML engineers, and 1,000 data management specialists working across lines of business while maintaining centralized governance. Without OmniAI, coordinating 1,700 specialists across 450+ models would create competing definitions, inconsistent deployments, and regulatory compliance failures. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>LLM Suite Gateway: Powering 250,000 Employees</strong></h2><p>The platform manages multiple AI providers (OpenAI and Anthropic) through a single interface. Employees request AI assistance without choosing specific vendors; the system routes requests based on cost and capabilities. This prevents dependence on any single vendor.</p><p>Cost tracking monitors AI usage by person, department, and application. The system records how many &#8216;tokens&#8217; (roughly equivalent to words) each request consumes, which AI model processed it, and when it was processed. Finance teams receive monthly reports showing AI costs by business unit, enabling budgeting and cost allocation.</p><p>The system connects AI models to JPMorgan&#8217;s internal documents using retrieval-augmented generation (RAG). When employees ask questions, the system searches millions of internal documents for relevant information, then provides that context to the AI before generating answers. This grounds responses in JPMorgan&#8217;s actual policies and data rather than the AI&#8217;s general training.</p><p>Vector databases enable semantic search across internal documents. Unlike keyword search, which matches exact words, semantic search understands meaning. A search for &#8216;loan approval process&#8217; finds relevant documents even if they use different terminology, such as &#8216;credit decisioning workflow.&#8217;</p><p>Access controls ensure employees only receive information they&#8217;re permitted to see. Investment bankers cannot access retail customer data; retail employees cannot access merger documents. The system filters search results based on employee permissions before providing context to the AI.</p><p>The eight-week update cadence manages LLM Suite platform changes: evaluation &#8594; testing &#8594; limited rollout &#8594; full deployment. Evaluation assesses new models against existing models using golden datasets (curated question-answer pairs covering common use cases). Limited rollout serves 5-10% of production traffic and monitors for quality degradation. Full deployment occurs only after validating metrics across a limited rollout.</p><p>The platform enables measured productivity gains: investment bankers automating 40% of research tasks, portfolio managers cutting research time by up to 83%, and wealth advisors finding information 95% faster. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Real-Time Fraud Detection at $10 Trillion Daily Scale</strong></h2><p>JPMorgan&#8217;s fraud detection operates at millisecond latency while processing $10 trillion in daily transactions. The system achieves 40% higher accuracy than traditional rule-based approaches, enabling real-time blocking of fraudulent transactions before they are completed.</p><p>The system must analyze each transaction in milliseconds before completing payment. At $10 trillion in daily volume across 8 billion transactions, JPMorgan processes roughly 93,000 transactions per second on average, peaking above 200,000 during peak periods.</p><p>Fraud detection examines dozens of signals: transaction amount, merchant type, location, time of day, account age, typical spending patterns, recent transaction frequency, and connections to known fraudulent accounts. The system computes these signals instantly by maintaining pre-calculated summaries that update with each transaction rather than recalculating from scratch.</p><p>The architecture uses streaming technologies (Kafka and Flink) to continuously process transactions. As transactions occur, the system computes risk signals, scores fraud probability, and returns decisions before payments are complete.</p><p>Reducing false positives represents the primary challenge. Traditional systems block many legitimate transactions, frustrating customers. JPMorgan&#8217;s 40% improvement in accuracy means the system correctly identifies actual fraud while allowing more legitimate transactions through.</p><p>The system continuously re-trains on recent fraud patterns. Fraudsters constantly evolve their tactics, making yesterday&#8217;s model less effective today. JPMorgan deploys updated models through the same careful progression used for other AI systems (shadow testing, then gradual rollout).</p><p>Fraud attacks grow 12% annually. Without AI, fraud losses would escalate exponentially. By holding fraud costs flat despite surging attack volumes, the system avoids hundreds of millions in potential losses, contributing significantly to the $2 billion in annual business value detailed in Part 1. This represents defensive value that&#8217;s easily overlooked: preventing losses rather than generating new revenue. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Strategic Maturity: Structural Barriers to AI Replication</strong></h2><p>Data infrastructure maturity distinguishes successful AI initiatives from failed attempts.</p><p>JPMorgan spent a decade building foundations before deploying AI at scale, unifying customer information across 30+ disconnected legacy systems. This unification ensures every department accesses identical customer data. The bank built pipelines moving data from mainframe computers to cloud databases instantly. In contrast, many organizations rely on inconsistent customer records, daily batch updates, and manual error tracking.</p><p>Testing requirements reflect banking regulations. JPMorgan must explain every credit decision to regulators, prove fraud models treat all customers fairly, and demonstrate AI systems meet safety standards. Most companies deploy models after basic accuracy testing without rigorous validation or explanation capabilities. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><p>Legacy system integration determines what&#8217;s possible. JPMorgan spent years building connections, allowing modern AI systems to interact with decades-old mainframe applications. Companies with similar old systems but without this integration cannot deploy AI, requiring instant access to core data.</p><p>The $2 billion in returns comes more from data infrastructure, testing frameworks, and operational systems than from sophisticated algorithms. Any company can buy the same cloud services, use the same open-source software, and hire comparable talent. What cannot be replicated quickly is the decade of data engineering, laying the foundations for deployment.</p><p>Organizations should assess their readiness through honest questions: Do you have consistent customer information across all systems, or does marketing see different data than sales? Can you calculate customer metrics instantly, or does data processing take hours? Do you have shared tools preventing teams from defining the same metric differently? Can you test new models safely without affecting customers? Do you monitor whether models stay accurate as conditions change? Can you explain to regulators why models make specific decisions?</p><p>Honest answers reveal gaps. Closing them requires multi-year infrastructure investment, producing no immediate revenue. Executives must approve spending millions on data quality tools and deployment automation before the first AI model delivers business value. This patience separates JPMorgan from competitors seeking immediate AI returns.</p><p>Part 1 documented JPMorgan&#8217;s competitive positioning: the bank ranks #1 on Evident AI&#8217;s Index for AI maturity, commands a valuation premium of 2.68x book value versus peers, and outperformed bank indices by 35% in 2025. That market recognition reflects investor confidence that competitors cannot quickly replicate this infrastructure advantage. Wells Fargo, Citigroup, Goldman Sachs, and Bank of America all acknowledge AI investments, but none disclose production use case counts or specific financial returns approaching JPMorgan&#8217;s transparency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KIUG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KIUG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!KIUG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!KIUG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!KIUG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KIUG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KIUG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!KIUG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!KIUG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!KIUG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd20d2029-a198-4ce2-bef5-b0441a14362e_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Data Infrastructure Foundations: Prerequisites for AI Success</strong></h2><p>JPMorgan&#8217;s $2 billion annual return stems from a technical infrastructure built to handle 450 production models scaling toward 1,000. These results include 40% higher fraud detection accuracy and wealth advisors finding information 95% faster. Such outcomes originate from a decade of foundational engineering rather than the recent adoption of popular algorithms.</p><p>Many organizations struggle with AI because they lack foundational data architecture. Without consistent identifiers, real-time pipelines, and automated drift monitoring, data scientists spend 80% of their time on infrastructure maintenance. JPMorgan&#8217;s success proves that shifting this ratio through centralized platforms creates a structural lead over competitors.</p><p>Technical practitioners should recognize that AI returns require ML operations to be mature, which can take years to build. Organizations starting AI initiatives today must invest in data infrastructure, feature engineering capabilities, deployment automation, and monitoring systems before expecting $2 billion returns. Machine learning models represent a widely available commodity. The infrastructure surrounding those models determines success.</p><p>JPMorgan&#8217;s AI leadership persists because competitors cannot quickly replicate the data engineering foundation. Regional banks can hire data scientists, but cannot build equivalent data pipelines without a multi-year investment. Fintech startups begin with modern infrastructure but lack transaction data at JPMorgan&#8217;s scale.</p><p>For executives considering AI investment, JPMorgan&#8217;s experience teaches patience. The bank spent years building data infrastructure starting from 300 use cases and $100 million in value (2022) to reach 450+ use cases and $2 billion in value (2025). Expecting immediate ROI from AI initiatives without addressing foundational data quality, infrastructure, and governance challenges leads to failed projects and abandoned strategies.</p><p>The future of enterprise AI belongs to organizations willing to invest in infrastructure first and algorithms second. JPMorgan proves the thesis: $2 billion in annual returns from infrastructure that enables 1,700 specialists to operate 450+ models, delivering measurable business value. That infrastructure includes cloud migration, feature stores, deployment pipelines, and monitoring systems. </p><div><hr></div><p><em>A special thanks to John Brewton for collaborating on this analysis!</em></p><p><br><strong>The Data Letter</strong> delivers breakdowns like this on the systems and strategies behind the world's most important companies. For deep dives into data infrastructure, MLOps, and the operating models that create billion-dollar advantages, <strong>become a paying subscriber. </strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Upgrade to Paid&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Upgrade to Paid</span></a></p>]]></content:encoded></item><item><title><![CDATA[A Small Data Manifesto]]></title><description><![CDATA[How to choose simple solutions over complex data infrastructure]]></description><link>https://www.thedataletter.com/p/a-small-data-manifesto</link><guid isPermaLink="false">https://www.thedataletter.com/p/a-small-data-manifesto</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 18 Jan 2026 11:01:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bebe154a-73fe-49c1-9ed9-b501bb3727b0_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve built data systems across startups and enterprises, and I keep seeing the same mistake: teams build for problems they don&#8217;t have. The worst example I&#8217;ve seen is a startup with 50,000 daily users running a Kafka cluster capable of handling 10 million events per second. They spent $15,000 per month on infrastructure and another 40 hours per week on operational maintenance. Their actual data volume was about 2GB per day. A managed Postgres database with a cron job would have cost $60 per month and required minimal maintenance.</p><p>This happens everywhere. Teams choose Spark when DuckDB would suffice. They deploy Airflow when cron would work. They architect for scale they&#8217;ll never reach, then spend years paying the operational cost. This pattern repeats so consistently that I&#8217;ve developed a checklist to separate genuine requirements from resume-driven development. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Two diseases that plague modern data teams</strong></h2><p>The first disease is the future proofing fallacy. Engineers convince themselves they&#8217;re building for tomorrow&#8217;s scale, but tomorrow never arrives. I once worked with a team that implemented a complex real-time streaming pipeline because &#8220;we might need low-latency analytics eventually.&#8221; Two years later, they were still running batch reports overnight. The streaming infrastructure sat there, consuming cloud credits and engineering time, solving a problem that existed only in planning documents.</p><p>The second disease is tool selection by conference talk. An engineer attends a presentation about how Netflix uses Flink, then returns to their 50-person company convinced they need the same architecture. I call this conference driven development. The engineer forgets that Netflix processes petabytes of data daily, with hundreds of engineers. Their company processes gigabytes with three engineers. The scale mismatch renders the comparison meaningless.</p><p>Both diseases stem from the same root cause: engineers optimize for perceived sophistication rather than actual requirements. The cure is to ask better questions before writing any code. </p><div><hr></div><p>&#128075;&#127999;&#128075;&#127999;&#128075;&#127999; Welcome back to The Data Letter! Here are some recent articles you may have missed:</p><p><a href="https://hodmanmurad.substack.com/p/production-hell-of-ai-agents">Production Hell of AI Agents</a></p><p><a href="https://hodmanmurad.substack.com/p/ai-agent-starter-kit">AI Agent Starter Kit</a></p><p><a href="https://hodmanmurad.substack.com/p/diy-data-catalog-template">DIY Data Catalog Template</a> </p><div><hr></div><h2><strong>Five diagnostic questions for architecture decisions</strong></h2><p>Before choosing any data tool, I run through these five questions. They&#8217;ve saved me from countless overengineering disasters.</p><p><strong>Question 1: What problem am I solving right now, not hypothetically?</strong> Write down the specific pain point. If you can&#8217;t articulate it in one sentence without using &#8220;might&#8221; or &#8220;could,&#8221; you don&#8217;t have a clear requirement. Real problems are concrete: &#8220;The daily report takes 6 hours to run&#8221; or &#8220;Users wait 30 seconds for search results.&#8221; Hypothetical problems sound like: &#8220;We might need to scale to millions of users.&#8221;</p><p><strong>Question 2: What&#8217;s the actual data volume today, and what will it realistically be in 12 months?</strong> Measure in concrete units. If you&#8217;re processing 50GB daily now, honest growth projections rarely exceed 200GB in a year unless you&#8217;re experiencing explosive user acquisition. I&#8217;ve never seen a team accurately predict they&#8217;d 10x their data volume. Most teams 2x or 3x over years, not months.</p><p><strong>Question 3: Can I solve this with tools I already understand?</strong> Familiarity has enormous value. A tool you know well will always outperform a superior tool you barely understand. I&#8217;d rather maintain a slightly awkward Postgres solution than a theoretically elegant Kafka setup that requires constant Stack Overflow searches.</p><p><strong>Question 4: What&#8217;s the operational burden of this choice?</strong> Count the hours weekly. Will someone need to monitor dashboards? Investigate failures? Tune performance? Upgrade versions? If the answer exceeds 5 hours per week, you need strong justification, as operational costs compound while delivering zero feature value to users.</p><p><strong>Question 5: What happens if I&#8217;m wrong and need to migrate later?</strong> Most engineers fear this scenario excessively. Migration projects are common in data engineering. I&#8217;ve migrated from Postgres to distributed databases, from cron to Airflow, from batch to streaming. None took more than three months. Compare that to the years you&#8217;ll spend maintaining infrastructure you don&#8217;t need. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Choosing between dull and complex tools</strong></h2><p>Here&#8217;s how I evaluate tool pairs for common scenarios:</p><p><strong>Postgres vs. Kafka:</strong> Use Postgres for anything under 100GB daily or where hour-level latency is acceptable. Use Kafka only when you need sub-second latency across multiple consumers, or when the daily data volume exceeds 500 GB. The operational complexity difference between them is substantial. Postgres requires basic SQL knowledge. Kafka requires understanding partitions, consumer groups, retention policies, and cluster management.</p><p><strong>DuckDB vs. Spark:</strong> Use DuckDB for anything that fits in memory on a single machine, roughly 100GB of source data. Use Spark only when your data genuinely spans terabytes and requires distributed processing. I&#8217;ve seen DuckDB outperform badly configured Spark clusters on datasets under 500GB. The performance gap narrows as data grows, but the operational burden stays disproportionately high.</p><p><strong>Cron + SQL vs. workflow orchestration engines:</strong> Use cron for dependency graphs with fewer than 20 steps or when failures can wait hours for manual intervention. Use Airflow or Prefect when you have complex dependencies, need sophisticated retry logic, or require detailed execution history. I&#8217;ve maintained cron-based pipelines for years with zero issues. I&#8217;ve also maintained Airflow deployments that required weekly troubleshooting.</p><p>The pattern is consistent: simple tools excel when you operate below certain thresholds. Complex tools become justified only at specific scale or complexity levels.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Mental model for tool selection</strong></h2><p>I visualize tool selection as a decision tree that starts with one question: Can this wait hours or days? If yes, proceed to batch processing territory. If no, advance to real-time considerations.</p><p>For batch processing, the next question becomes: Does this fit on one machine? If your data compresses to under 100GB, stay with single-machine tools like DuckDB or Postgres. If it exceeds that, advance to distributed processing tools.</p><p>For real-time requirements, ask: Do multiple systems need this data simultaneously? If no, consider whether a faster database query or materialized view solves the problem. If yes, you&#8217;ve arrived at legitimate streaming territory.</p><p>At each decision point, the answer &#8220;I&#8217;m not sure&#8221; defaults to the simpler option. You can always migrate up in complexity. Migrating down is harder but still possible.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>When complex tools are actually justified</strong></h2><p>I&#8217;m not arguing against sophisticated data infrastructure entirely. I can think of three scenarios that genuinely require complex tools:</p><p>First, when the data volume exceeds what one server can handle. If you&#8217;re processing multiple terabytes of data daily and a single Postgres instance can&#8217;t handle the load, even with optimization, distributed systems become necessary. But verify you&#8217;ve actually hit this limit through measurement, not assumption.</p><p>Second, when latency requirements demand it. If users expect sub-second responses on queries that scan billions of rows, or if downstream systems require millisecond-level data freshness, streaming architectures and specialized databases earn their complexity. Ensure these requirements come from user needs, not engineering preferences.</p><p>Third, when regulatory or business requirements mandate specific capabilities. Some industries require audit trails, point-in-time recovery, or cross-region replication that simpler tools can&#8217;t provide. These are external constraints that override technical preferences.</p><p>Notice how all three of these scenarios involve measurable thresholds or external requirements, and not hypothetical future needs or architectural aesthetics?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Action plan for escaping overengineering</strong></h2><p>Start by auditing your current data infrastructure. For each component, answer the five diagnostic questions above. If you can&#8217;t justify a tool with concrete measurements, add it to your migration backlog.</p><p>Next, establish volume thresholds for tool selection. Write them down and share them with your team. Mine are: under 100GB daily on Postgres, under 1 TB daily on single-machine processing, and under an hour of latency in batch territory. Your thresholds might differ based on team expertise and existing infrastructure.</p><p>Then implement a complexity budget. Each new tool requires approval from the full engineering team. The proposer must demonstrate that simpler alternatives are inadequate using actual measurements, not projections. I&#8217;ve seen this single practice eliminate 80% of overengineering proposals.</p><p>Finally, celebrate boring solutions. When someone solves a problem with cron and SQL instead of a new framework, recognize it explicitly. Engineering culture often rewards complexity over simplicity. Reversing this incentive structure takes deliberate effort but pays enormous dividends.</p><p>Most data problems are small data problems wearing big data costumes. Strip away the costume, and you&#8217;ll find that simple tools, wielded competently, solve the vast majority of real requirements.</p><div><hr></div><p>I&#8217;m currently documenting the build of Asaura AI, an AI personal assistant for people with ADHD and executive dysfunction. If you&#8217;re interested in watching a product get built from scratch (complete with user research, design decisions, and technical choices), I&#8217;m writing about it on my Asaura substack.</p><p>Three articles so far:</p><p><a href="https://asauraai.substack.com/p/executive-dysfunction-laziness">Executive Dysfunction &#8800; Laziness</a></p><p><a href="https://asauraai.substack.com/p/patterns-from-user-research">Patterns From User Research</a></p><p><a href="https://asauraai.substack.com/p/asauras-training-manual">Asaura&#8217;s Training Manual</a> </p><div><hr></div><p><strong>Support The Data Letter</strong></p><p>If you found the small data manifesto useful, consider becoming a paid subscriber. You&#8217;ll get access to deeper technical breakdowns, case studies from real projects, and the occasional rant about data engineering decisions that keep me up at night. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Become a Paid Subscriber&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Become a Paid Subscriber</span></a></p>]]></content:encoded></item><item><title><![CDATA[AI Agent Starter Kit]]></title><description><![CDATA[Reliable AI agents with built-in cost tracking and debugging infrastructure]]></description><link>https://www.thedataletter.com/p/ai-agent-starter-kit</link><guid isPermaLink="false">https://www.thedataletter.com/p/ai-agent-starter-kit</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Thu, 15 Jan 2026 13:19:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/de9f0ff8-25cd-495d-b2a6-41f2da6e5431_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Production AI agents encounter four critical failure modes: unpredictable costs that spiral out of control without warning, debugging nightmares where problems leave no trail, brittleness that turns minor errors into total breakdowns, and integration complexity that multiplies risk across every external API. These obstacles turn promising prototypes into operational liabilities.</p><p>Teams need an engineered response: a starter kit that embeds solutions for cost control, observability, and resilience directly into an agent&#8217;s architectural foundation. The power of this approach lies in deliberate structure and explicit data flow. By organizing an agent system around interconnected design patterns, each addressing a specific failure mode, we transform debugging from archeology to engineering.</p><p>The AI Agent Starter Kit creates an agent architecture where every decision, action, and resource consumption leaves a structured, queryable trace. When something goes wrong, and it will, the system provides the precise diagnostic data needed to identify root causes and implement fixes.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Design Patterns for Agent Resilience</strong></h2><p>Four foundational principles guide this architecture, each targeting a specific production failure mode.</p><p><strong>Cost-Awareness by Default</strong>: Every interaction with a language model must emit structured cost data before execution proceeds. This principle addresses the cost spiral problem by making resource consumption a first-class concern, tracked and logged at the same level as functional outputs. The architecture treats cost as an intrinsic state, never an afterthought.</p><p><strong>Observability-First Design</strong>: The system records detailed, machine-readable logs for every decision, API call, and action the agent takes. This requirement applies to every component without exception. This counters the debugging nightmare by ensuring diagnostic data is available before problems occur. Observability becomes part of the contract each component must fulfill.</p><p><strong>Explicit State Management</strong>: All task context, execution history, and intermediate results reside in a single, inspectable state object that flows through the system. This addresses brittleness by eliminating implicit assumptions and hidden dependencies. When the agent fails, its complete context remains available for analysis.</p><p><strong>Defensive Tooling Patterns</strong>: Every external integration point includes automatic input validation, output verification, and error logging before results reach the agent&#8217;s reasoning layer. This mitigates integration complexity by standardizing how the agent interacts with external systems and ensuring failures at API boundaries generate diagnostic data rather than cascading into the agent&#8217;s logic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NFGJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NFGJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!NFGJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!NFGJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!NFGJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NFGJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NFGJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!NFGJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!NFGJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!NFGJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1bb977b-6b8b-402e-ad2c-a5903b69399f_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These four principles shape every component in the system. Understanding how they translate into concrete architectural patterns requires examining each layer in detail.</p>
      <p>
          <a href="https://www.thedataletter.com/p/ai-agent-starter-kit">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Production Hell of AI Agents]]></title><description><![CDATA[Welcome to the Grind]]></description><link>https://www.thedataletter.com/p/production-hell-of-ai-agents</link><guid isPermaLink="false">https://www.thedataletter.com/p/production-hell-of-ai-agents</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Sun, 11 Jan 2026 10:58:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2d14d590-5383-4b8a-9f7b-8ababf135d2a_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every promising technology goes through a phase where the gap between prototype and production becomes brutally apparent. For agentic AI, that moment arrived in 2025. The models work. The reasoning capabilities exist. The demos prove feasibility.</p><p>What doesn&#8217;t exist yet is the operational discipline to make agents reliable at scale. Teams are discovering that building an agent is straightforward. Making it survive contact with real users, real data, and real business constraints is an entirely different engineering challenge.</p><p>Welcome to production hell.</p><p>This isn't a failure of ambition or technology. It exposes the chasm between demo-stage potential and production-stage engineering requirements. Every team building agentic AI systems encounters this descent: a series of compounding technical, operational, and economic challenges that transform a promising prototype into a reliability nightmare. According to recent surveys, 57% of organizations have agents in production, yet quality remains the top barrier, with 32% citing it as their primary challenge.</p><p>Survival requires building a new discipline: agent operations, not waiting for the next model release. They&#8217;ll do it through pragmatic design, rigorous observability, and the wisdom to know when a deterministic workflow beats an autonomous agent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EghP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EghP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!EghP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!EghP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!EghP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EghP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EghP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!EghP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!EghP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!EghP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b3e63c-3236-425c-a024-8d7125aa4d4e_1408x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Descending Through Agent Hell: Where Production Dreams Die</strong></h2><p>Building production-ready AI agents involves overcoming different layers of difficulty, with each layer building on the previous one. Each demands engineering solutions that don&#8217;t yet exist in standardized form.</p><h3><strong>Spiraling AI Agent Costs: When LLM Expenses Devour Your Budget</strong></h3><p>A single GPT-4 call costs fractions of a penny. Then you chain six calls together: planning, tool selection, execution, validation, error recovery, and final synthesis. Now you&#8217;re at several cents per task attempt. Multiply by failed attempts. Multiply by the debugging runs that never make it to production.</p><p>The economics collapse fast. Production agents orchestrate complex workflows: state management, validation logic, retry mechanisms, and logging systems. Each piece adds cost. Most of these pieces serve as operational overhead to make LLMs semi-reliable rather than LLM calls themselves.</p><p>According to industry data, GPT-4 Turbo costs $0.01&#8211;$0.03 per 1,000 tokens, and complex agents can burn 5&#8211;10 million tokens monthly. For mid-sized deployments, LLM operational costs range from $1,000 to $5,000 per month. Long context windows and chained reasoning multiply costs exponentially. One e-commerce brand saw token usage spike 300% after enabling order-tracking workflows, pushing monthly costs from $1,200 to $4,800.</p><p>Research from 2025 shows that 80% of enterprises underestimate their AI infrastructure costs by more than 25%. This is why agent projects stall: the unit economics don&#8217;t work until reliability crosses 90%, and that threshold remains elusive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tc4f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tc4f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!tc4f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!tc4f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!tc4f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tc4f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tc4f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!tc4f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!tc4f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!tc4f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cda3476-f714-4a24-8e41-938a2f449f51_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Debugging AI Agents: Tracing Failures Through Stochastic Fog</strong></h3><p>Traditional software fails the same way every time. Same input, same bug, every time. You set a breakpoint, step through the code, find the bad line, and fix it.</p><p>Agents behave differently.</p><p>Run the same prompt twice, and get two different reasoning paths. One succeeds; the other halts with a malformed JSON response. Which step broke? Was it the prompt? The model&#8217;s sampling randomness? An edge case in your validation logic? A transient API timeout that corrupted the state three steps ago?</p><p>You have no breakpoints. You have logs: thousands of lines of LLM outputs that read like stream-of-consciousness reasoning, peppered with tool calls and intermediate results. Somewhere in that morass, the agent decided to skip a necessary validation step. Why? The model doesn&#8217;t tell you. The logs show it happened, not why.</p><p>The community&#8217;s recent enthusiasm for models like DeepSeek R1 reflects this pain. DeepSeek R1&#8217;s explicit reasoning traces provide unprecedented transparency, exposing the model&#8217;s decision process through structured sequences that show problem definition, iterative refinement, and final solution articulation. Engineers want visibility into <em>why</em> the agent chose path A over path B, <em>why</em> it hallucinated a parameter value, and <em>why</em> it decided the task was complete when it clearly wasn&#8217;t.</p><p>Better reasoning traces help diagnosis, yet they don&#8217;t solve the core operational problem. Even with complete visibility, you&#8217;re still debugging a stochastic system. The fix for one failure pattern might introduce a new one. Prompt engineering becomes a game of whack-a-mole: patch the issue where the agent misinterprets datetime formats, only to discover it now fails on timezone conversions.</p><p>Research shows that DeepSeek R1&#8217;s transparent reasoning makes models vulnerable to safety threats and jailbreak attacks precisely because detailed traces expose the full decision-making process. The transparency that aids debugging also increases the attack surface.</p><p>You can&#8217;t write unit tests for &#8220;the agent should reason correctly.&#8221; You can write integration tests for specific scenarios, watch them pass, and hope the model generalizes. When it doesn&#8217;t, you&#8217;re back in the logs, searching for patterns in randomness.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sULm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sULm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!sULm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!sULm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!sULm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sULm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sULm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!sULm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!sULm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!sULm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c32360-e3b8-4745-82a0-7f9ce2d2c089_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Hitting AI Agent Reliability Ceilings: When Brittleness Wins</strong></h3><p>You&#8217;ve tuned your prompts. You&#8217;ve added validation. You&#8217;ve implemented retry logic. Your agent now succeeds 75% of the time. Then you plateau.</p><p>No amount of prompt engineering gets you past 80%. The remaining failures are edge cases: ambiguous inputs, unexpected API responses, scenarios that require contextual judgment the model simply doesn&#8217;t have. You&#8217;re stuck in the reliability gap: good enough to be tantalizing, too unreliable to ship.</p><p>In demos, teams rarely mention that a simple decision tree or state machine often beats an autonomous agent on reliability, cost, debuggability, and predictability.</p><p>A decision tree with 15 branches costs nothing to run and succeeds 99% of the time. Your clever agent costs $0.30 per attempt and succeeds 78% of the time. Which one ships?</p><p>Real-world data confirms this pattern. UC Berkeley found that reliability remains the top development challenge for production agents. Rather than develop technical innovations, developers dial down their ambitions and adopt simpler methods. Most use off-the-shelf models with no fine-tuning and hand-tuned prompts. Agents have short run-times, with 68% executing fewer than 10 steps before requiring human intervention.</p><p>Testing of autonomous agents like Devin revealed stark limitations: while they excel at isolated tasks like API integrations, they achieve only 3 successes out of 20 end-to-end tasks. Simpler, developer-driven workflows using tools like Cursor avoid many issues encountered with autonomous agents.</p><p>A 5% error rate might be acceptable for a chatbot, but it becomes a massive problem for agents that place orders, update databases, or make automated decisions. One corrupted database entry can shut down operations. The brittleness ceiling forces a brutal reckoning: maybe autonomous agents aren&#8217;t the right architecture for this problem. Maybe hybrid approaches combining deterministic workflows with LLM-powered flexibility at specific decision points deliver better outcomes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YJKJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YJKJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YJKJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YJKJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YJKJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YJKJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YJKJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YJKJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YJKJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YJKJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F497ae542-b584-4867-9d05-e6d3f93864fc_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Integration Labyrinth: Connecting AI Agents to Real-World Systems</strong></h3><p>While you&#8217;ve been wrestling with prompt reliability, your agent still needs to talk to the outside world. Every real production agent requires integration with existing systems: CRMs, databases, payment processors, internal APIs, and third party services. This is where demo magic dies in a pile of authentication flows and schema mismatches.</p><p>Your demo agent &#8220;sends an email.&#8221; In production, that means:</p><ul><li><p>OAuth 2.0 flow with token refresh logic</p></li><li><p>Rate limiting that varies by provider</p></li><li><p>Handling bounces, spam filters, and delivery failures</p></li><li><p>Parsing varied response formats (JSON, XML, GraphQL)</p></li><li><p>Managing API versioning when providers change schemas</p></li><li><p>Timeouts that corrupt the multi-step agent state</p></li><li><p>Webhook verification for async confirmations</p></li><li><p>Error codes that mean different things across different APIs</p></li></ul><p>Each integration multiplies the failure modes. Your agent might execute flawless reasoning yet hit errors because the calendar API returned a 429 rate limit, the CRM schema changed and broke your field mapping, or the payment processor requires 3D Secure authentication that your agent can&#8217;t handle.</p><p>Industry practitioners confirm this is the hardest part of production deployment. One analysis found that the most challenging part of building a production-ready agent is the &#8220;body&#8221; layer: secure authentication with third-party applications, credential management for thousands of users, and reliable execution via well-formed API calls. This is the time-consuming plumbing that separates a clever prototype from a scalable product.</p><p>Authentication complexity alone creates massive overhead. AI agents require robust, automated, and cryptographically secure authentication rather than traditional human-centric methods. Best practices include using short-lived certificates from trusted PKIs, using hardware security modules (HSMs) to store keys, and workload identity federation to tie agent identities directly to organizational infrastructure. Token rotation must happen automatically every 24-72 hours to maintain security.</p><p>Engineers spend weeks building resilient connectors, implementing exponential backoff, and writing parsers for inconsistent responses. None of this shows up in demos. All of it determines whether your agent survives contact with production.</p><p>The integration layer becomes your agent&#8217;s largest codebase, with more lines of defensive error handling than actual agent logic. You realize you&#8217;re building a traditional distributed system that happens to have an LLM in the middle, with all the operational complexity that entails.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Voices from the Production Trenches: Community Sentiment on AI Agent Challenges</strong></h2><p>The disillusionment is widespread and well-documented. Across engineering communities, two narratives emerge repeatedly:</p><p><strong>Engineers Pursuing Solutions:</strong> 89% of organizations have implemented some form of observability for their agents, and 62% have detailed tracing that allows them to inspect individual agent steps. Without visibility into how an agent reasons and acts, teams can&#8217;t reliably debug failures, optimize performance, or build trust with stakeholders.</p><p>The enthusiasm for transparent reasoning models like DeepSeek R1 reveals how starved teams are for debuggability. Engineers know the problems are solvable; they need the right instrumentation.</p><p><strong>Business Anxiety</strong>: Organizations face significant obstacles in translating agentic pilots into deployable solutions. Even among enterprises with agents in production, maturity remains low. Only 5% of engineering leaders cited accurate tool calling as a major challenge, suggesting most production systems focus on surface-level behavior rather than deeper reasoning.</p><p>The gap between promised business value and delivered reliability creates existential pressure. According to MMC Ventures data, 42% of organizations deployed at least some agents in Q3 2025, up from 11% two quarters prior, yet 68% of employees interact with agents in fewer than half their workflows. Higher accuracy correlates with lower production autonomy. Healthcare founders report 90% accuracy rates but admit this isn&#8217;t sufficient to remove human oversight.</p><p>Teams are frustrated, not defeated. They&#8217;re sharing workarounds, comparing architectures, and debating hybrid approaches. Production hell is painful, but it&#8217;s where real engineering disciplines are forged.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Standardizing Agent Infrastructure: AAIF&#8217;s Emerging Role</strong></h2><p>While teams struggle with production challenges, the industry is standardizing the infrastructure layer that could ease the pain. In December 2025, the Linux Foundation announced the Agentic AI Foundation (AAIF), bringing together Anthropic&#8217;s Model Context Protocol (MCP), Block&#8217;s goose, and OpenAI&#8217;s AGENTS.md under neutral governance.</p><p>This represents a strategic recognition: agent execution infrastructure, not model capabilities, currently blocks progress. MCP alone went from an internal Anthropic project to an industry standard in 12 months, with over 10,000 published servers now connecting agents to tools, data, and applications. The protocol has been adopted by Claude, Cursor, Microsoft Copilot, Gemini, VS Code, and ChatGPT.</p><p>The formation of AAIF, backed by platinum members including AWS, Anthropic, Block, Bloomberg, Cloudflare, Google, Microsoft, and OpenAI, signals that the unstructured experimentation phase is coming to an end.</p><p>For engineers in production hell, this standardization offers a path forward. Rather than building custom integration layers for every external system, teams can build on MCP&#8217;s universal connection standard. Rather than inventing project-specific agent guidance, they can adopt AGENTS.md&#8217;s Markdown convention, already used by over 60,000 open-source projects.</p><p>Teams now face a different question: &#8220;How do we make this work reliably within established protocols?&#8221; That&#8217;s still hard, but it&#8217;s engineering hard, not research hard.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mBEO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mBEO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!mBEO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!mBEO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!mBEO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mBEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mBEO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!mBEO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!mBEO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!mBEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4142a421-ded8-46ed-8561-b8ada2777299_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Survival Guide: Engineering Your Way Out of AI Agent Production Hell</strong></h2><p>Production hell ends when you stop fighting the fundamental nature of LLMs and start building systems that account for their limitations. Here&#8217;s how teams are escaping:</p><h3><strong>Prioritize Deterministic Workflows Over Autonomous AI Agents</strong></h3><p>Start with the hardest question: Does this problem actually need an agent? Map your workflow. Identify which steps truly require flexible reasoning. You&#8217;ll often find 80% of your logic is deterministic and well-suited for state machines or decision trees.</p><p>Build that deterministic skeleton first. Use LLMs only for genuinely ambiguous decision points: parsing unstructured user input, choosing between semantically similar options, and generating natural language responses. This hybrid architecture delivers:</p><ul><li><p>Predictable behavior for most cases</p></li><li><p>Debuggable logic flows</p></li><li><p>Cost control (LLM calls only where needed)</p></li><li><p>Clear failure boundaries</p></li></ul><p>Production data validates this approach. Analysis shows that prompt and sequence lengths are steadily growing for programming use cases, while all other categories remain stagnant. Agent builders are keeping their agents simple and short to achieve reliability. Outside of coding agents, prompt and sequence complexity remain stagnant. These simpler agents are the ones reaching production.</p><p>An agent that&#8217;s 40% state machine and 60% LLM-powered flexibility often outperforms a 100% autonomous agent on every production metric.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Design AI Agents for Human Oversight from Day One</strong></h3><p>Autonomous agents are a goal, not a starting point. Systems built for production assume human intervention and design for it gracefully. Research confirms that 92.5% of in-production agents deliver their output to humans, not to other software or agents. Chatbot UX dominates because it keeps a human in the loop.</p><p>Key strategies include:</p><ul><li><p><strong>Confidence thresholds</strong>: When the agent&#8217;s certainty drops below a threshold, escalate to human review before proceeding</p></li><li><p><strong>Preview and confirm</strong>: Show users the agent&#8217;s planned actions before execution, especially for high-stakes operations</p></li><li><p><strong>Intervention points</strong>: Build explicit handoff mechanisms where humans can step in, correct course, and hand back to the agent</p></li><li><p><strong>Audit trails</strong>: Log every decision and action in a human-readable format for post-hoc review</p></li></ul><p>Companies emphasize &#8220;co-pilot positioning&#8221; even when full autonomy is technically possible. They discovered employees either overrely or underrely on outputs, never achieving optimal collaboration. Winners aren&#8217;t building autonomous systems; they&#8217;re building narrow, high-frequency task executors with human oversight.</p><p>Measure &#8220;mean time to human intervention&#8221; as a key metric. You want this number trending down over time, but you never want it to reach zero. That signals you&#8217;ve eliminated necessary oversight.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Build AI Agent Observability Before Scaling Logic</strong></h3><p>You can&#8217;t fix what you can&#8217;t see. Before adding more sophisticated agent behaviors, instrument everything. The importance of this cannot be overstated: 89% of organizations with agents in production have implemented observability, and adoption is even higher (94%) among those with mature deployments.</p><p>Essential observability components:</p><ul><li><p><strong>Structured logging</strong>: Every tool call, every reasoning step, every state transition gets logged with context</p></li><li><p><strong>Distributed tracing</strong>: Track requests across the entire agent execution path, including external API calls</p></li><li><p><strong>Evaluation frameworks</strong>: Build automated tests that run your agent against a growing suite of real-world scenarios, not just happy paths</p></li><li><p><strong>Failure classification</strong>: Tag and categorize every failure mode so you can identify patterns</p></li></ul><p>For production agents, teams typically track a mix of quality and performance metrics, including accuracy, task completion rate, latency, error rate, and resource usage. For many customer-facing flows, teams aim for high-90s accuracy on core tasks, completion rates above 90%, sub-second response times for simple interactions, and low single-digit error rates.</p><p>Teams that build observability first can iterate rapidly. Teams that bolt it on later spend months retrofitting logging into complex agent logic.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h3><strong>Measure AI Agent Operational Metrics, Not Just Model Performance</strong></h3><p>Forget about vibes. Track metrics that connect to business outcomes:</p><ul><li><p><strong>Cost per successful task</strong>: Total spend (LLM + infrastructure) divided by tasks completed successfully</p></li><li><p><strong>Success rate by task complexity</strong>: Segment simple vs. complex tasks to understand where brittleness lives</p></li><li><p><strong>Retry rate</strong>: How often does the agent need multiple attempts to complete a task?</p></li><li><p><strong>Human intervention rate</strong>: What percentage of tasks require human oversight or correction?</p></li><li><p><strong>Time to resolution</strong>: How long does the full task take, including retries and interventions?</p></li></ul><p>These metrics tell you whether your agent is getting more reliable and cost-effective over time. They also give you the data to make architectural decisions. Research shows that enterprises face $50,000 to $200,000 in integration costs and take 3-6 months to deploy production agents. Without clear operational metrics, it&#8217;s impossible to determine if this investment is worthwhile.</p><p>One analysis found that startups claiming broad autonomy inevitably pivot to narrow, high-accuracy verticals. Infrastructure costs force model selection trade-offs. High-regulation industries lock into 90% accuracy, 40% autonomy configurations. Others optimize for 70/70 configurations with lower costs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PgWI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PgWI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!PgWI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!PgWI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!PgWI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PgWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PgWI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!PgWI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!PgWI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!PgWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cc61c3-3b64-47b0-94fd-74c82fa06c46_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Production Hell Forges Better Engineering Practices for AI Agents</strong></h2><p>Production hell feels like failure. Demos worked. Prototypes impressed stakeholders. Then reality intervened.</p><p>But this phase matters more than the demo ever did.</p><p>Right now, engineers worldwide are learning which agent architectures survive contact with production. They&#8217;re discovering that hybrid workflows beat pure autonomy. They&#8217;re building observability tools that make stochastic systems debuggable. They&#8217;re developing operational metrics that connect AI capabilities to business value. They&#8217;re establishing patterns for human-agent collaboration that acknowledge the limitations of current models while leveraging their strengths.</p><p>This is how new engineering disciplines are born. Not from triumphant product launches, but from the grinding work of making unstable technology stable. The teams enduring production hell today are writing the playbooks others will follow tomorrow.</p><p>The defining story of 2025 was not which models topped benchmarks, but which organizations successfully moved from experimentation to scaled production. Three barriers consistently prevented pilots from reaching production: reliability requirements (a 5% error rate becomes massive for agents making automated decisions), integration complexity (integrating with Oracle, Salesforce, legacy databases, security protocols, and compliance requirements often exceeded expected value), and cost-benefit analysis (proving ROI at scale).</p><p>The next generation of agentic applications won&#8217;t emerge from better models alone, though better models will help. They&#8217;ll emerge from the operational practices being forged right now: knowing when to use agents and when to use state machines, building for human oversight rather than pure autonomy, and measuring operational reliability rather than demo polish.</p><p>Production hell reveals that polished demos and deployable systems require fundamentally different engineering approaches.</p><p>Your agent will fail. Your agent will fail. The question is whether you&#8217;ve built systems to understand why, fix it, and prevent it from happening again. That capability, not model performance, determines whether you ship or stall.</p><div><hr></div><p><em><strong>Stay ahead of the shift in agent infrastructure.</strong></em></p><p><em>Subscribe for in-depth analysis of production AI systems, protocol standards, and the teams building reliable agents at scale.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thedataletter.com/subscribe&quot;,&quot;text&quot;:&quot;Become a paid subscriber&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thedataletter.com/subscribe"><span>Become a paid subscriber</span></a></p><div><hr></div><h2><strong>References</strong></h2><p>LangChain. &#8220;State of AI Agent Engineering 2025.&#8221; November-December 2025.<a href="https://www.langchain.com/state-of-agent-engineering"> https://www.langchain.com/state-of-agent-engineering</a></p><p>AgentiveAIQ. &#8220;AI Agent Cost Per Month 2025: Real Pricing Revealed.&#8221; August 2025.<a href="https://agentiveaiq.com/blog/how-much-does-ai-cost-per-month-real-pricing-revealed"> https://agentiveaiq.com/blog/how-much-does-ai-cost-per-month-real-pricing-revealed</a></p><p>Greenice. &#8220;AI Agent Development Cost 2025: Expectation vs Reality.&#8221; October 2025.<a href="https://greenice.net/ai-agent-development-cost/"> https://greenice.net/ai-agent-development-cost/</a></p><p>Emergent Mind. &#8220;DeepSeek-R1 Reasoning Traces.&#8221; 2025.<a href="https://www.emergentmind.com/topics/deepseek-r1-reasoning-traces"> https://www.emergentmind.com/topics/deepseek-r1-reasoning-traces</a></p><p>Drew Breunig. &#8220;Enterprise Agents Have a Reliability Problem.&#8221; December 2025. Analysis of UC Berkeley&#8217;s MAP research and other 2025 agent studies.<a href="https://www.dbreunig.com/2025/12/06/the-state-of-agents.html"> https://www.dbreunig.com/2025/12/06/the-state-of-agents.html</a></p><p>Carl Rannaberg. &#8220;State of AI Agents in 2025: A Technical Analysis.&#8221; Medium, January 2025.<a href="https://carlrannaberg.medium.com/state-of-ai-agents-in-2025-5f11444a5c78"> https://carlrannaberg.medium.com/state-of-ai-agents-in-2025-5f11444a5c78</a></p><p>Arion Research. &#8220;The State of Agentic AI in 2025: A Year-End Reality Check.&#8221; December 2025.<a href="https://www.arionresearch.com/blog/the-state-of-agentic-ai-in-2025-a-year-end-reality-check"> https://www.arionresearch.com/blog/the-state-of-agentic-ai-in-2025-a-year-end-reality-check</a></p><p>Composio. &#8220;The 2026 Guide to AI Agent Builders (And Why They All Need an Action Layer).&#8221; December 2025.<a href="https://composio.dev/blog/best-ai-agent-builders-and-integrations"> https://composio.dev/blog/best-ai-agent-builders-and-integrations</a></p><p>Obsidian Security. &#8220;Security for AI Agents: Protecting Intelligent Systems in 2025.&#8221; November 2025.<a href="https://www.obsidiansecurity.com/blog/security-for-ai-agents"> https://www.obsidiansecurity.com/blog/security-for-ai-agents</a></p><p>Obsidian Security. &#8220;The 2025 AI Agent Security Landscape: Players, Trends, and Risks.&#8221; November 2025.<a href="https://www.obsidiansecurity.com/blog/ai-agent-market-landscape"> https://www.obsidiansecurity.com/blog/ai-agent-market-landscape</a></p><p>Local AI Zone. &#8220;DeepSeek AI Models 2025: Revolutionary Reasoning AI for Education &amp; Research.&#8221; October 2025.<a href="https://local-ai-zone.github.io/brands/deepseek-ai-coding-expert-guide-2025.html"> https://local-ai-zone.github.io/brands/deepseek-ai-coding-expert-guide-2025.html</a></p><p>Machine Learning Mastery. &#8220;7 Agentic AI Trends to Watch in 2026.&#8221; January 2026.<a href="https://machinelearningmastery.com/7-agentic-ai-trends-to-watch-in-2026/"> https://machinelearningmastery.com/7-agentic-ai-trends-to-watch-in-2026/</a></p><p>Cleanlab. &#8220;AI Agents in Production 2025: Enterprise Trends and Best Practices.&#8221; August 2025.<a href="https://cleanlab.ai/ai-agents-in-production-2025/"> https://cleanlab.ai/ai-agents-in-production-2025/</a></p><p>TechUpkeep. &#8220;The Uncomfortable Truth About AI Agents: 90% Claim Victory While 10% Achieve Adoption.&#8221; Analysis of MMC Ventures data. November 2025.<a href="https://www.techupkeep.dev/blog/state-of-agentic-ai-2025"> https://www.techupkeep.dev/blog/state-of-agentic-ai-2025</a></p><p>Maxim AI. &#8220;Understanding AI Agent Reliability: Best Practices for Preventing Drift in Production Systems.&#8221; November 2025.<a href="https://www.getmaxim.ai/articles/understanding-ai-agent-reliability-best-practices-for-preventing-drift-in-production-systems/"> https://www.getmaxim.ai/articles/understanding-ai-agent-reliability-best-practices-for-preventing-drift-in-production-systems/</a></p><p>Thammineni, Prasad. &#8220;The Complete Guide to AI Agent Pricing Models in 2025.&#8221; Agentman, Medium. January 2025.<a href="https://medium.com/agentman/the-complete-guide-to-ai-agent-pricing-models-in-2025-ff65501b2802"> https://medium.com/agentman/the-complete-guide-to-ai-agent-pricing-models-in-2025-ff65501b2802</a></p><p>The Linux Foundation. &#8220;Linux Foundation Announces the Formation of the Agentic AI Foundation (AAIF), Anchored by New Project Contributions Including Model Context Protocol (MCP), goose and AGENTS.md.&#8221; December 9, 2025. <a href="https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation">https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation</a></p>]]></content:encoded></item><item><title><![CDATA[DIY Data Catalog Template]]></title><description><![CDATA[Implementing Scalable Metadata Management Without Vendor Lock-In]]></description><link>https://www.thedataletter.com/p/diy-data-catalog-template</link><guid isPermaLink="false">https://www.thedataletter.com/p/diy-data-catalog-template</guid><dc:creator><![CDATA[Hodman Murad]]></dc:creator><pubDate>Wed, 07 Jan 2026 09:02:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c82c390e-4bc4-4946-8fef-f9a314d9d5a3_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The three-pillar framework needs validation at a manageable scale before teams invest in industrial-strength infrastructure.</p><p>I&#8217;ve encountered the same story with Enterprise data catalogs multiple times.  Organizations invest six figures in vendor platforms, assign implementation teams, conduct training sessions, and watch adoption collapse within months. Engineers return to Slack channels and tribal knowledge because the catalog provides worse answers than asking a colleague.</p><p>The failure pattern stems from misdiagnosis. Teams treat catalog implementation as a technology problem that requires vendor solutions, when metadata management fundamentally requires process change and behavioral integration. Technology alone cannot fix missing workflows, undefined ownership, or unclear documentation standards.</p><p>The three-pillar framework introduced in my <a href="https://www.thedataletter.com/p/data-catalog-implementation">Data Catalog Implementation</a> article addresses root causes: Decoupled Architecture separates concerns that scale differently, Enforced Contracts make metadata non-optional through CI/CD integration, and Ruthless Curation focuses effort where business value concentrates. That framework explains why traditional approaches fail at 60,000+ tables.</p><p>Experienced practitioners choose DIY approaches for specific reasons. They need metadata validation integrated into existing CI/CD pipelines, not separate catalog interfaces. They require flexibility in the storage layer as infrastructure evolves. They want ownership of metadata schemas without vendor upgrade cycles forcing breaking changes. Most importantly, they recognize metadata management as a team capability issue that requires cultural change, not a technology gap that calls for vendor solutions.</p><p>The implementation pattern described here embodies all three pillars of the framework. Decoupled architecture separates metadata ingestion from storage and presentation. Enforced contracts make validation mandatory in deployment workflows. Ruthless curation implements tier-based documentation requirements that scale to production environments.</p><p>Below you&#8217;ll find complete, downloadable components for a working implementation: template structures, contract schemas, validation patterns, and ready-to-use automation scripts. I&#8217;ve tested these components locally in under 2 hours.</p><p>After the paywall: I&#8217;ll show you how to test everything locally, set up manual Google Sheets integration, and discuss when and why to consider migration paths or advanced patterns. These are production-tested components that work today.</p>
      <p>
          <a href="https://www.thedataletter.com/p/diy-data-catalog-template">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>