<?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[CodeValid: CodeValid Blogs]]></title><description><![CDATA[We frequently share how teams optimize software development, informed by real customer experiences, lessons from the field, and what we learn building alongside developers.]]></description><link>https://codevalid.substack.com/s/codevalid-blogs</link><image><url>https://substackcdn.com/image/fetch/$s_!k709!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f70a3b-5003-41c7-8846-8fbb7c95d123_1140x1140.png</url><title>CodeValid: CodeValid Blogs</title><link>https://codevalid.substack.com/s/codevalid-blogs</link></image><generator>Substack</generator><lastBuildDate>Sat, 30 May 2026 11:08:51 GMT</lastBuildDate><atom:link href="https://codevalid.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Code Valid]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[codevalid@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[codevalid@substack.com]]></itunes:email><itunes:name><![CDATA[CodeValid]]></itunes:name></itunes:owner><itunes:author><![CDATA[CodeValid]]></itunes:author><googleplay:owner><![CDATA[codevalid@substack.com]]></googleplay:owner><googleplay:email><![CDATA[codevalid@substack.com]]></googleplay:email><googleplay:author><![CDATA[CodeValid]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Why Aren't Domain Experts Building Their Own Software Yet?]]></title><description><![CDATA[The promise of AI, coding agents is hard to ignore.]]></description><link>https://codevalid.substack.com/p/why-arent-domain-experts-building</link><guid isPermaLink="false">https://codevalid.substack.com/p/why-arent-domain-experts-building</guid><dc:creator><![CDATA[Karthik]]></dc:creator><pubDate>Wed, 21 Jan 2026 17:02:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!k709!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f70a3b-5003-41c7-8846-8fbb7c95d123_1140x1140.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The promise of AI, coding agents is hard to ignore. Software development has undeniably accelerated, coding agents have changed the game. Today, software engineers spend far less time writing boilerplate code and far more time architecting systems, reviewing code, and making design decisions. Yet, despite these advances, Why haven't we seen a wave of domain experts - financial planners, urban planners, and researchers - independently building and publishing their own software solutions? Despite the power of AI, three invisible walls still stand in the way of the domain expert.</p><div class="pullquote"><p>Why haven&#8217;t we seen a wave of domain experts - financial planners, urban planners, and researchers - independently building and publishing their own software solutions? </p></div><h3><strong>The Gap Between Knowing and Specifying</strong></h3><p>Domain experts possess a deep, intuitive grasp of their field&#8217;s problems often far deeper than any engineer. However, there is a massive difference between understanding a problem and specifying a technical solution.</p><p>Software doesn't just need to know what a good outcome looks like, it needs to know how data flows, how systems interact, and exactly what happens when things go wrong.  Translating these understanding into a complete technical specification is hard. It&#8217;s not just about screens and buttons, it&#8217;s about how systems interact, how data flows, how edge cases are handled, and how decisions are encoded. Even with AI, incomplete or <strong>ambiguous specifications lead to software that &#8220;almost works,&#8221;</strong> but misses critical details that only surface later.</p><h3>The Weight of Compounding Complexity</h3><p>In the beginning, building an app feels like magic. But as soon as you add the second, third, or tenth feature, the &#8220;complexity tax&#8221; kicks in.</p><p>Every new button or data point introduces dependencies and unintended side effects. In software, complexity compounds. While an AI can generate a hundreds of lines of code in seconds, without good system knowledge it is hard to explain why a change in the User Profile broke the Payment Gateway. Understanding these ripples requires system-level thinking. Without it, a domain expert can quickly find themselves trapped in a <strong>&#8220;bug loop,&#8221;</strong> unable to reason through why their creation is suddenly falling apart.</p><h3>The Hidden Half of Software: Infrastructure</h3><p>Writing the code is actually only half the battle; the other half is keeping it alive.</p><p>To turn a script into a solution, you have to deploy it reliably, monitor it in production, manage failures, handle scaling, secure and compliant data, and control costs. While cloud providers promise simplicity, they often just trade one type of complexity for another. For a non-technical founder, the learning curve of infrastructure is a major barrier to entry. It&#8217;s hard to ship with confidence when you don&#8217;t fully understand the ground your software is standing on.</p><div><hr></div><h3>The Road Ahead</h3><p>There&#8217;s no denying that software development is in the middle of massive change. In the last few years alone, we&#8217;ve seen more new tools, platforms, and approaches emerge than in the previous decade. Many of these are actively working to solve the exact problems above and make software more accessible than ever before.</p><p></p><p>If you&#8217;re a non-technical user who has tried to build software to solve a real problem, <strong>what challenges did you face along the way?</strong> Share your experiences and thoughts in the comments.</p>]]></content:encoded></item><item><title><![CDATA[When AI Makes Coding Faster, and Debugging Harder]]></title><description><![CDATA[How AI accelerates development, complicates systems, and why confidence, not code, is the real bottleneck]]></description><link>https://codevalid.substack.com/p/when-ai-makes-coding-faster-and-debugging</link><guid isPermaLink="false">https://codevalid.substack.com/p/when-ai-makes-coding-faster-and-debugging</guid><dc:creator><![CDATA[Sharath]]></dc:creator><pubDate>Wed, 07 Jan 2026 15:06:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CEc3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CEc3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CEc3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 424w, https://substackcdn.com/image/fetch/$s_!CEc3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 848w, https://substackcdn.com/image/fetch/$s_!CEc3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 1272w, https://substackcdn.com/image/fetch/$s_!CEc3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CEc3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic" width="1284" height="1545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1545,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:207969,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://codevalid.substack.com/i/183366625?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CEc3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 424w, https://substackcdn.com/image/fetch/$s_!CEc3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 848w, https://substackcdn.com/image/fetch/$s_!CEc3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 1272w, https://substackcdn.com/image/fetch/$s_!CEc3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413cb82c-f64c-45aa-b0e6-938ec38e623f_1284x1545.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Image credit: Linkedin</figcaption></figure></div><h2>The Golden Age of Fast Development</h2><p>A few years ago, shipping a new feature meant:</p><ul><li><p>Reading requirements carefully</p></li><li><p>Designing APIs and data models</p></li><li><p>Writing code line by line</p></li><li><p>Manually testing multiple flows</p></li></ul><p>Today?</p><blockquote><p><strong>Prompt &#8594; Code &#8594; Commit</strong></p></blockquote><p>With AI tools, developers can:</p><ul><li><p>Generate APIs in minutes</p></li><li><p>Scaffold services instantly</p></li><li><p>Write complex logic without remembering syntax</p></li><li><p>Explore multiple approaches at lightning speed</p></li></ul><p><strong>Development has never been faster.</strong> </p><p>But there&#8217;s a catch.</p><div><hr></div><h2>Faster Code &#8800; Safer Code</h2><p>In real-world applications especially complex ones, <strong>features don&#8217;t live in isolation</strong>.</p><p>Every new feature interacts with:</p><ul><li><p>Existing business rules</p></li><li><p>Data contracts</p></li><li><p>User workflows</p></li><li><p>Performance assumptions</p></li><li><p>Security constraints</p></li></ul><h3>The Hidden Risk</h3><blockquote><p>When you add or modify one feature, you might silently break three others.</p></blockquote><p>This risk existed <em>before</em> AI, but AI amplifies it.</p><p>Why?</p><ul><li><p>AI generates <strong>locally-correct</strong> code</p></li><li><p>Systems require <strong>globally-correct</strong> behavior</p></li></ul><div><hr></div><h2>A Very Familiar Story</h2><p>Let&#8217;s say you ask AI:</p><blockquote><p>&#8220;Add a discount feature for premium users.&#8221;</p></blockquote><p>AI delivers:</p><ul><li><p>New DB fields &#9989;</p></li><li><p>Discount calculation logic &#9989;</p></li><li><p>API changes &#9989;</p></li></ul><p>Looks perfect.</p><p>But later you discover:</p><ul><li><p>&#10060; Existing invoices are miscalculated</p></li><li><p>&#10060; Refund flow is broken</p></li><li><p>&#10060; Reports don&#8217;t match totals</p></li><li><p>&#10060; Edge cases weren&#8217;t considered</p></li></ul><p>Nothing <em>crashed</em>. Everything <em>compiled</em>.</p><p>But the system is now <strong>wrong</strong>.</p><div><hr></div><h2>A Real-World Example: Payments Feature Gone Wrong</h2><p>Imagine a <strong>payments system</strong> in a production application.</p><h3>Existing Flow (Working Fine)</h3><ul><li><p>User places an order</p></li><li><p>Payment is captured</p></li><li><p>Invoice is generated</p></li><li><p>Refunds and reports rely on the same data</p></li></ul><p>Everything is stable.</p><div><hr></div><h3>New Feature Request</h3><blockquote><p>&#8220;Add <strong>partial payment</strong> support for enterprise users.&#8221;</p></blockquote><p>You ask AI to implement it.</p><p>AI delivers:</p><ul><li><p>New <code>payment_status</code> values &#9989;</p></li><li><p>Updated payment calculation logic &#9989;</p></li><li><p>API changes for partial capture &#9989;</p></li></ul><p>The feature works perfectly in isolation.</p><div><hr></div><h3>What Actually Breaks</h3><p>A few days later, problems surface:</p><ul><li><p>&#10060; Refunds return incorrect amounts</p></li><li><p>&#10060; Finance reports don&#8217;t match bank settlements</p></li><li><p>&#10060; Order status gets stuck in <code>PROCESSING</code></p></li><li><p>&#10060; Edge cases fail during retries</p></li></ul><p>No syntax errors. No crashes.</p><p>Just <strong>incorrect system behavior</strong>.</p><p>Why?</p><p>Because the AI optimized for <em>the new feature</em>, not for <em>system-wide behavior</em>.</p><div><hr></div><h2>Why Debugging Got Harder with AI</h2><h3>1. You Didn&#8217;t Write the Code</h3><p>When AI writes code:</p><ul><li><p>You didn&#8217;t think through every branch</p></li><li><p>You didn&#8217;t design every assumption</p></li><li><p>You didn&#8217;t anticipate every edge case</p></li></ul><p>Debugging becomes archaeology instead of engineering.</p><div><hr></div><h3>2. Confidence Without Understanding</h3><p>AI-generated code often:</p><ul><li><p>Looks clean</p></li><li><p>Follows best practices</p></li><li><p>Uses correct patterns</p></li></ul><p>This creates <strong>false confidence</strong>.</p><blockquote><p>&#8220;It looks right, so it must be right.&#8221;</p></blockquote><p>That&#8217;s dangerous.</p><div><hr></div><h3>3. Systems Are About Behavior, Not Code</h3><p>AI is great at:</p><ul><li><p>Functions</p></li><li><p>Classes</p></li><li><p>APIs</p></li></ul><p>But weak at:</p><ul><li><p>End-to-end flows</p></li><li><p>Business intent</p></li><li><p>Cross-feature impact</p></li></ul><p>Your system breaks not because the code is bad, but because <strong>the behavior changed</strong>.</p><div><hr></div><h2>The Real Question Developers Must Ask</h2><blockquote><p><strong>How do I know this AI-generated code is actually correct?</strong></p></blockquote><p>Not just:</p><ul><li><p>Does it work?</p></li><li><p>Does it compile?</p></li></ul><p>But:</p><ul><li><p>Does it satisfy the feature fully?</p></li><li><p>Does it break existing flows?</p></li><li><p>Does it introduce hidden bugs?</p></li><li><p>Does it change system behavior?</p></li></ul><p>This is where most teams struggle today.</p><div><hr></div><h2>What If We Had a Better Way?</h2><p>Imagine a world where:</p><ul><li><p>AI doesn&#8217;t just write code</p></li><li><p>AI understands <strong>system behavior</strong></p></li><li><p>AI checks <strong>existing flows</strong> before changes</p></li><li><p>AI validates <strong>feature intent</strong>, not just syntax</p></li></ul><h3>Instead of asking:</h3><blockquote><p>&#8220;Write code for this feature&#8221;</p></blockquote><p>We ask:</p><blockquote><p>&#8220;Does this change break anything?&#8221;</p></blockquote><p>That shift changes everything.</p><div><hr></div><h2>The Missing Layer: Confidence Engineering</h2><p>What developers really need is not more code, but <strong>confidence</strong>.</p><p>Confidence that:</p><ul><li><p>New features don&#8217;t break old ones</p></li><li><p>Modifications don&#8217;t alter intent</p></li><li><p>Edge cases are covered</p></li><li><p>Behavior remains consistent</p></li></ul><p>This could come from:</p><ul><li><p>Automated behavior validation</p></li><li><p>AI-assisted impact analysis</p></li><li><p>Flow-based testing instead of unit-only tests</p></li><li><p>Requirement-to-code traceability</p></li></ul><div><hr></div><h2>Why Solving This Makes Developer Life Simple</h2><p>If we solve this problem:</p><ul><li><p>Development stays fast</p></li><li><p>Debugging becomes predictable</p></li><li><p>Refactoring becomes safe</p></li><li><p>Developers sleep better &#128524;</p></li></ul><p>AI then becomes a <strong>true partner</strong>, not a risk amplifier.</p><div><hr></div><h2>Final Thought</h2><p>AI didn&#8217;t make development harder.</p><p>It made <strong>our blind spots visible</strong>.</p><p>The next evolution isn&#8217;t faster code generation.</p><p></p><blockquote><p><strong>It&#8217;s knowing before production, what will break and why</strong></p></blockquote><div><hr></div><h3>Let&#8217;s Talk &#128071;</h3><p>If you&#8217;re building <strong>real-world, complex systems</strong> with AI-generated code, this isn&#8217;t a future problem.</p><p><strong>You&#8217;re probably feeling it already.</strong></p><ul><li><p>A feature that worked perfectly&#8230; until it hit production</p></li><li><p>AI-assisted change that broke an unrelated flow</p></li><li><p>A merge that looked safe but caused silent data issues</p></li></ul><p>&#128172; <strong>I&#8217;d love to hear from you:</strong></p><ul><li><p>How do you deal with bugs introduced by AI-generated code?</p></li><li><p>What&#8217;s the hardest part for you when reviewing or merging AI-written features?</p></li><li><p>How do <em>you</em> gain confidence that nothing breaks?</p></li></ul><p>Share your experiences or challenges in the comments &#128071;</p><p>Let&#8217;s learn from each other, and figure out how to make AI a true engineering partner, not just a fast code generator.</p><div><hr></div><p>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codevalid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://codevalid.substack.com/p/when-ai-makes-coding-faster-and-debugging?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">We write about making software development more efficient and enjoyable. Know someone who&#8217;d benefit? Please share it with them.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://codevalid.substack.com/p/when-ai-makes-coding-faster-and-debugging?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://codevalid.substack.com/p/when-ai-makes-coding-faster-and-debugging?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div>]]></content:encoded></item></channel></rss>