<?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[Jovil’s Newsletter]]></title><description><![CDATA[Practical lessons at the intersection of technology, product strategy, and innovation.]]></description><link>https://newsletter.jovil.co</link><image><url>https://substackcdn.com/image/fetch/$s_!bO7A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff353ff4b-fb96-4596-8d27-194019fda8d9_1280x1280.png</url><title>Jovil’s Newsletter</title><link>https://newsletter.jovil.co</link></image><generator>Substack</generator><lastBuildDate>Wed, 13 May 2026 19:55:48 GMT</lastBuildDate><atom:link href="https://newsletter.jovil.co/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jovil]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[jovil@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[jovil@substack.com]]></itunes:email><itunes:name><![CDATA[Jovil Pasrija]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jovil Pasrija]]></itunes:author><googleplay:owner><![CDATA[jovil@substack.com]]></googleplay:owner><googleplay:email><![CDATA[jovil@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jovil Pasrija]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Manual Testing is NOT Dead — It’s Becoming Elite (Part 2)]]></title><description><![CDATA[Why Automation Will Never Be Enough]]></description><link>https://newsletter.jovil.co/p/manual-testing-is-not-dead-its-becoming-4f6</link><guid isPermaLink="false">https://newsletter.jovil.co/p/manual-testing-is-not-dead-its-becoming-4f6</guid><dc:creator><![CDATA[Jovil Pasrija]]></dc:creator><pubDate>Mon, 04 May 2026 03:47:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!exXk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Automation is powerful, and AI is moving faster than most teams are ready for - so it's worth asking honestly: </p><p> - <em>if machines can test at scale, what's left for humans to do?</em></p><p>Because it challenges a belief many people have already accepted.</p><div><hr></div><h2>Automation Works Inside Boundaries</h2><p>Automation is incredibly efficient.</p><p>It:</p><ul><li><p>Executes predefined steps</p></li><li><p>Validates expected outcomes</p></li><li><p>Runs thousands of checks in minutes</p></li></ul><p>But all of this happens within one constraint:</p><p>&#128073; <strong>It only operates within boundaries you define.</strong></p><p>And here&#8217;s the problem:</p><p><strong>Real-world systems don&#8217;t fail inside boundaries.<br>They fail outside them.</strong></p><div><hr></div><h2>What Automation Can't Ask?</h2><p>Automation answers one question extremely well:</p><p>&#10004; <em>Did the system behave as expected?</em></p><p>But it cannot ask:</p><p>&#10060; <em>Was the expectation correct in the first place?</em></p><p>No tool closes that - it requires someone who can question the assumption before the test is ever written</p><p>And no framework, tool, or AI model can fully close it.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!exXk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!exXk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 424w, https://substackcdn.com/image/fetch/$s_!exXk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 848w, https://substackcdn.com/image/fetch/$s_!exXk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!exXk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!exXk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg" width="1315" height="725" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:725,&quot;width&quot;:1315,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:703743,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.jovil.co/i/196379227?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!exXk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 424w, https://substackcdn.com/image/fetch/$s_!exXk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 848w, https://substackcdn.com/image/fetch/$s_!exXk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!exXk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b15874b-4fe6-43a8-897e-35b31551ccb6_1315x725.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>Where the Real Problems Actually Live?</h2><p>Automation tests <strong>correctness</strong>.</p><p>Manual testing explores <strong>experience + risk</strong>.</p><p>That gap is where most real problems live.</p><p>Because users don&#8217;t think in terms of:</p><ul><li><p>&#8220;Expected vs actual result&#8221;</p></li></ul><p>They think in terms of:</p><p>&#128073; <em>&#8220;Does this make sense?&#8221;</em><br>&#128073; <em>&#8220;Why is this confusing?&#8221;</em><br>&#128073; <em>&#8220;Can I trust this product?&#8221;</em></p><p>And those questions don&#8217;t return a boolean result.</p><div><hr></div><h2>A Quiet Failure Scenario</h2><p>Imagine this:</p><p>Your automation suite passes 100%.</p><ul><li><p>Payments work</p></li><li><p>APIs respond correctly</p></li><li><p>UI elements function as expected</p></li></ul><p>Everything is green.</p><p>But <em>users were abandoning the checkout flow at the pricing step - not because it was broken, but because the copy created hesitation nobody had thought to test for&#8221;</em></p><p>Why?</p><ul><li><p>Pricing feels unclear</p></li><li><p>Flow creates hesitation</p></li><li><p>Something feels&#8230; off</p></li></ul><p>No test failed.</p><p>But the product did.</p><div><hr></div><p>&#128073; <strong>If this resonates, don&#8217;t miss future breakdowns like this.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! 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><hr></div><h2>Where Manual Testers Still Win</h2><p>Even in highly automated systems, manual testers outperform in key areas:</p><h3>1. Ambiguity</h3><p>Requirements are rarely perfect.<br>Humans interpret. Automation executes.</p><h3>2. Exploratory Thinking</h3><p>Unexpected flows. Strange inputs. Real-world chaos.</p><h3>3. UX Judgment</h3><p>&#8220;Feels wrong&#8221; cannot be asserted in code.</p><h3>4. Risk Anticipation</h3><p>Experienced testers see patterns before failure happens.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SbSC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SbSC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SbSC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SbSC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SbSC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SbSC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg" width="1309" height="792" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:792,&quot;width&quot;:1309,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:664043,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.jovil.co/i/196379227?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SbSC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SbSC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SbSC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SbSC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a85ffe8-97c0-4122-84e2-0bf8c4a0ae3f_1309x792.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2></h2><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>And What About AI?</h2><p>AI changes the game. </p><p>It can:</p><ul><li><p>Generate test cases</p></li><li><p>Suggest edge scenarios</p></li><li><p>Analyze logs faster than humans</p></li></ul><p>But here&#8217;s what AI still depends on:</p><p>&#128073; Data<br>&#128073; Context<br>&#128073; Problem framing</p><p>If those are flawed&#8230;</p><p>AI doesn&#8217;t fix the problem.</p><p>It <strong>scales the flaw</strong>.</p><div><hr></div><h2><strong>The More Automation Grows, The More Thinking Matters</strong></h2><p>The more automation grows&#8230;</p><p>The more valuable thinking becomes.</p><p>Because someone still needs to:</p><ul><li><p>Decide what to automate</p></li><li><p>Interpret results beyond pass/fail</p></li><li><p>Identify what&#8217;s <em>missing</em>, not just what&#8217;s covered</p></li></ul><p>Automation increases speed.</p><p>But <strong>thinking defines direction</strong>.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uXpZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uXpZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uXpZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uXpZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uXpZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uXpZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg" width="1201" height="913" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:913,&quot;width&quot;:1201,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:494665,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.jovil.co/i/196379227?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uXpZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uXpZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uXpZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uXpZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191d2917-dd74-404a-aaf1-aa135210e840_1201x913.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Final Thought</h2><p>Automation is not the enemy of manual testing.</p><p>It&#8217;s an amplifier.</p><p>But amplification without direction is dangerous.</p><p>Because you don&#8217;t just scale what&#8217;s right.</p><p>You scale what you <em>assume</em> is right.</p><p></p><p>&#128073; <strong>Want to stay ahead in the AI + testing era?</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2></h2>]]></content:encoded></item><item><title><![CDATA[Manual Testing is NOT Dead - It’s Becoming Elite (Part 1)]]></title><description><![CDATA[The Lie the Industry Keeps Repeating]]></description><link>https://newsletter.jovil.co/p/manual-testing-is-not-dead-its-becoming</link><guid isPermaLink="false">https://newsletter.jovil.co/p/manual-testing-is-not-dead-its-becoming</guid><dc:creator><![CDATA[Jovil Pasrija]]></dc:creator><pubDate>Thu, 23 Apr 2026 04:02:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bO7A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff353ff4b-fb96-4596-8d27-194019fda8d9_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There&#8217;s a sentence floating around the tech world that refuses to die:</p><p><strong>&#8220;Manual testing is dead.&#8221;</strong></p><p>It shows up in posts, conference talks, job descriptions, and sometimes&#8230; in quiet conversations between colleagues.</p><p>Not loud. Not aggressive.<br>Just enough to plant doubt.</p><p>And over time, that doubt turns into pressure.</p><p>&#128073; <em>Am I behind?</em><br>&#128073; <em>Am I becoming irrelevant?</em><br>&#128073; <em>Should I drop everything and chase automation?</em></p><p>If you&#8217;ve ever felt that&#8230; you&#8217;re not alone.</p><p>I&#8217;ve been in testing long enough to watch this narrative evolve.</p><p>It didn&#8217;t start as &#8220;manual testing is dead.&#8221;</p><p>It started as something more reasonable:</p><p>&#8220;Automation is important.&#8221;</p><p>Which is true.</p><p>But somewhere along the way, the message got distorted.</p><p>And now we have an entire generation of testers questioning the value of the very skill that built their foundation.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Where This Narrative Comes From</h2><p>To understand why this belief exists, you have to look at how the industry changed.</p><p>Software delivery accelerated.</p><ul><li><p>Agile replaced long release cycles</p></li><li><p>DevOps removed handoffs</p></li><li><p>CI/CD pipelines made releases continuous</p></li></ul><p>Speed became the currency.</p><p>And automation became the engine powering that speed.</p><p>Naturally, companies started prioritizing:</p><ul><li><p>Test automation engineers</p></li><li><p>SDET roles</p></li><li><p>Engineers who could code and test</p></li></ul><p>From a business perspective, it makes sense.</p><p>If you can run thousands of tests in minutes&#8230; why rely on humans?</p><p>That&#8217;s the surface-level logic.</p><p>And it&#8217;s convincing.</p><div><hr></div><h2>But There&#8217;s a Problem Hidden Beneath It</h2><p>Automation solves a very specific problem:</p><p>&#128073; Repetition at scale.</p><p>It is exceptional at:</p><ul><li><p>Running predefined checks</p></li><li><p>Validating known behavior</p></li><li><p>Preventing regressions</p></li></ul><p>But here&#8217;s what it does <em>not</em> solve:</p><ul><li><p>Discovering unknown risks</p></li><li><p>Understanding user confusion</p></li><li><p>Questioning product decisions</p></li><li><p>Identifying gaps in requirements</p></li></ul><p>In other words:</p><p><strong>Automation protects what you know.<br>Manual testing explores what you don&#8217;t.</strong></p><p>And modern systems fail more often in the unknown.</p><div><hr></div><h2>The Part No One Says Out Loud</h2><p>Let&#8217;s be brutally honest for a moment.</p><p>A certain type of manual testing <em>is</em> disappearing.</p><p>The kind where:</p><ul><li><p>Test cases are followed step-by-step without thinking</p></li><li><p>Bugs are logged without understanding impact</p></li><li><p>Testing is treated as execution, not investigation</p></li></ul><p>That version of testing is easy to replace.</p><p>Not just by automation.</p><p>But by:</p><ul><li><p>junior resources</p></li><li><p>outsourced teams</p></li><li><p>or even AI-assisted tools</p></li></ul><p>So when people say &#8220;manual testing is dead,&#8221;<br>what they&#8217;re <em>actually seeing</em> is this version fading away.</p><div><hr></div><h2>Meanwhile&#8230; Something Else is Rising</h2><p>While one version declines, another version is becoming incredibly valuable.</p><p>This tester:</p><ul><li><p>Challenges assumptions</p></li><li><p>Asks uncomfortable questions</p></li><li><p>Connects technical behavior to business impact</p></li><li><p>Thinks in edge cases, not just happy paths</p></li></ul><p>They don&#8217;t just test features.</p><p>They <strong>interrogate systems</strong>.</p><p>They don&#8217;t wait for instructions.</p><p>They <strong>create direction</strong>.</p><div><hr></div><h2>The Shift Most People Miss</h2><p>Testing used to be about:</p><p>&#10004; Verification<br>&#8220;Does the system work as expected?&#8221;</p><p>Now it&#8217;s about:</p><p>&#9888; Risk Discovery<br>&#8220;What could go wrong when real users interact with this?&#8221;</p><p>That shift changes everything.</p><p>Because risk is not always visible in test cases.</p><p>It lives in:</p><ul><li><p>incomplete requirements</p></li><li><p>misunderstood users</p></li><li><p>assumptions nobody challenged</p></li></ul><p>And those are human problems.</p><div><hr></div><h2>Why This Matters for You</h2><p>If you believe the narrative blindly, you&#8217;ll react like most people do:</p><ul><li><p>Learn tools quickly</p></li><li><p>Copy automation frameworks</p></li><li><p>Compete in a crowded space</p></li></ul><p>But here&#8217;s the irony:</p><p>The more people chase tools&#8230;</p><p>The more valuable <em>thinking</em> becomes.</p><p>Because tools are accessible.</p><p>Thinking is not.</p><div><hr></div><h2>A Quiet Realization</h2><p>After years in testing, here&#8217;s something I&#8217;ve learned:</p><p>The industry doesn&#8217;t eliminate roles.</p><p>It <strong>evolves expectations</strong>.</p><p>Manual testing didn&#8217;t disappear.</p><p>It matured.</p><p>And like anything that matures&#8230;</p><p>It became harder.</p><div><hr></div><h2>What This Series Will Show You</h2><p>This isn&#8217;t a motivational piece.</p><p>It&#8217;s a reality check.</p><p>In Part 2, we&#8217;ll go deeper:</p><ul><li><p>Why automation cannot replace thinking</p></li><li><p>Where even advanced automation fails in real-world systems</p></li><li><p>The invisible gap between &#8220;working software&#8221; and &#8220;usable software&#8221;</p></li></ul><p>And in Part 3:</p><ul><li><p>How to evolve your skillset</p></li><li><p>What actually makes a tester valuable today</p></li><li><p>A practical roadmap you can start immediately</p></li></ul><div><hr></div><p>If you&#8217;ve ever felt uncertain about your place in this industry&#8230;</p><p>You&#8217;re asking the right questions.</p><p>Now it&#8217;s time to find better answers.</p><p><em>Part 2 is where things get uncomfortable&#8230; and clear.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! 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><h3><strong>Upcoming:<br>Part 2: Why Automation Will Never Be Enough</strong></h3><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/p/manual-testing-is-not-dead-its-becoming/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.jovil.co/p/manual-testing-is-not-dead-its-becoming/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[I Built an AI-Assisted Release Confidence Engine]]></title><description><![CDATA[Instead of a Pass/Fail Gate]]></description><link>https://newsletter.jovil.co/p/i-built-an-ai-assisted-release-confidence</link><guid isPermaLink="false">https://newsletter.jovil.co/p/i-built-an-ai-assisted-release-confidence</guid><dc:creator><![CDATA[Jovil Pasrija]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:21:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ojTu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>After building that test failure explainer I wrote about last week, something became really obvious.</p><p>Failures aren&#8217;t the real decision point.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Shipping is.</p><p>Most release decisions still look like this:     </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ojTu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ojTu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png 424w, https://substackcdn.com/image/fetch/$s_!ojTu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png 848w, https://substackcdn.com/image/fetch/$s_!ojTu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png 1272w, https://substackcdn.com/image/fetch/$s_!ojTu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ojTu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png" width="1456" height="690" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:690,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1633297,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.jovil.co/i/188174982?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ojTu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png 424w, https://substackcdn.com/image/fetch/$s_!ojTu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png 848w, https://substackcdn.com/image/fetch/$s_!ojTu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.png 1272w, https://substackcdn.com/image/fetch/$s_!ojTu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5584624-f187-4a1b-a9fa-5b3ae10e2322_1708x810.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><ul><li><p>All tests passed &#8594; Ship it</p></li><li><p>Some tests failed &#8594; Hold everything</p></li><li><p>Flaky failures &#8594; &#8220;Probably fine?&#8221;</p></li></ul><p>That&#8217;s not quality engineering. That&#8217;s checkbox engineering.</p><p>So I built something slightly more ambitious: a system that converts test signals into a structured release confidence score.</p><p>Not automation of approval. Not replacing QA sign-off. Just structured reasoning at release time.</p><p>Here&#8217;s what happened.</p><h2>The Real Problem (It&#8217;s Not What You Think)</h2><p>CI pipelines are noise machines.</p><p>A release decision actually depends on a bunch of signals:</p><ul><li><p>How many failures and what type</p></li><li><p>Historical flakiness patterns</p></li><li><p>Which components are impacted</p></li><li><p>The risk profile of this specific release</p></li></ul><p>But these signals live in completely different places. Test reports. Jira tickets. Git diffs. Random Slack threads at 4 PM on Friday.</p><p>Humans manually synthesize all of this under time pressure.</p><p>That&#8217;s the actual bottleneck.</p><p>After 14 years of watching release meetings, I can tell you: the problem isn&#8217;t that we don&#8217;t have enough data. It&#8217;s that we have too much, and no structured way to think about it.</p><h2>What I Explicitly Did NOT Build</h2><p>This matters more than what I built.</p><p>I avoided:</p><ul><li><p>Auto-blocking releases</p></li><li><p>Auto-approving builds</p></li><li><p>Touching the pipeline itself</p></li></ul><p>The system produces a structured &#8220;confidence narrative.&#8221; That&#8217;s it.</p><p>Humans still make the call.</p><p>Why? Because I&#8217;ve seen what happens when automation starts making release decisions without context. It becomes this thing that everyone routes around. You end up with more problems than you started with.</p><h2>The Inputs (Nothing Magical)</h2><p>For each release candidate, I aggregated:</p><ul><li><p>Total tests run</p></li><li><p>Failure categories (using my earlier failure explainer)</p></li><li><p>Flaky test history</p></li><li><p>Code change size</p></li><li><p>Impacted services</p></li><li><p>Recent defect trends</p></li></ul><p>Just structured signals. Nothing you don&#8217;t already have.</p><h2>The Key Design Choice That Changed Everything</h2><p>Instead of asking &#8220;Is this release safe?&#8221;</p><p>I reframed it:</p><ul><li><p>What are the risk drivers?</p></li><li><p>What failure types increased compared to baseline?</p></li><li><p>Are failures clustered in critical paths?</p></li><li><p>Is this regression pattern consistent with the change size?</p></li></ul><p>That framing changed everything.</p><p>Here&#8217;s what I learned: LLMs are actually pretty good at structured synthesis. They&#8217;re terrible at binary judgment.</p><p>So I stopped asking it to judge and started asking it to synthesize.</p><h2>How the System Actually Works</h2><p>The workflow is straightforward:</p><ol><li><p>Aggregate structured release data</p></li><li><p>Normalize it (same principle as the failure explainer&#8212;clean inputs matter)</p></li><li><p>Send it to the LLM with very specific constraints:</p><ul><li><p>Highlight risk clusters</p></li><li><p>Compare against historical baseline</p></li><li><p>Avoid absolute statements</p></li><li><p>Explicitly state uncertainty</p></li></ul></li></ol><p>The output format:</p><ul><li><p>Risk factors identified</p></li><li><p>Stability signals</p></li><li><p>Areas requiring human review</p></li><li><p>Suggested confidence band (High / Moderate / Low)</p></li></ul><p>Not a verdict. A reasoning summary.</p><p>The kind of thing that would take a human 20 minutes to compile, but the LLM does in seconds.</p><h2>What Surprised Me</h2><p>Small releases sometimes got flagged as low confidence.</p><p>Large releases sometimes scored higher.</p><p>This felt wrong at first. Surely bigger changes = more risk?</p><p>But then I looked closer:</p><ul><li><p>Change size doesn&#8217;t equal risk</p></li><li><p>Failure type matters way more than failure count</p></li><li><p>Clustering predicts instability better than totals</p></li></ul><p>A 5-line config change that breaks auth is riskier than a 500-line refactor in a well-tested util library.</p><p>This completely changed how I think about regression signals.</p><h2>What Broke (Learn From My Mistakes)</h2><p>The first version over-weighted failure count.</p><p>It would punish releases for:</p><ul><li><p>Known flaky tests that nobody cares about</p></li><li><p>Low-impact modules that don&#8217;t affect users</p></li></ul><p>So I introduced:</p><ul><li><p>Historical flakiness discounting</p></li><li><p>Service criticality weighting</p></li><li><p>Regression vs known issue differentiation</p></li></ul><p>The system improved immediately.</p><p>Not because I changed the model. Because I changed the framing.</p><p>Same lesson as the failure explainer: clean inputs and good prompts beat smart models.</p><h2>Where This Actually Helps</h2><p>This system is useful for:</p><ul><li><p>QE leads making decisions under time pressure</p></li><li><p>Engineering managers reviewing release health</p></li><li><p>Cross-team alignment discussions</p></li><li><p>Avoiding those emotional &#8220;ship vs don&#8217;t ship&#8221; debates at 5 PM</p></li></ul><p>It creates structured conversation instead of gut feelings and arguments.</p><p>That&#8217;s valuable.</p><h2>What This Is NOT</h2><p>Let me be very clear.</p><p>This is not:</p><ul><li><p>A replacement for QA</p></li><li><p>A safety certification</p></li><li><p>A risk oracle</p></li></ul><p>It is: a reasoning layer over noisy test systems.</p><p>It&#8217;s the same philosophy as the failure explainer. It doesn&#8217;t make decisions. It helps humans make better decisions, faster.</p><h2>The Pattern I Keep Seeing</h2><p>Both the failure explainer and this confidence engine follow the same principle:</p><p><strong>Don&#8217;t automate judgment. Automate synthesis.</strong></p><p>The judgment still needs human context. But the synthesis&#8212;pulling together scattered signals, normalizing data, identifying patterns&#8212;that&#8217;s where AI actually shines.</p><p>Every time I&#8217;ve tried to push AI further into the &#8220;decision&#8221; territory, it breaks down. Trust erodes. People route around it.</p><p>But when I keep it in the &#8220;&#21161;&#29702;&#8221; territory&#8212;assistant, not replacement&#8212;it works.</p><h2>If I Were Scaling This</h2><p>At 10&#215; usage, I&#8217;d add:</p><ul><li><p>Release confidence trends over time</p></li><li><p>Prediction accuracy tracking (did low-confidence releases actually have issues?)</p></li><li><p>Team-specific risk tolerance calibration</p></li><li><p>Integration with incident management systems</p></li></ul><p>At 100&#215;, this becomes a release intelligence platform that learns from outcomes and gets better at synthesis.</p><p>But I&#8217;d never let it auto-approve or auto-block. That line is important.</p><h2>Final Thought</h2><p>Look, I&#8217;ve been in enough release meetings to know that most of the stress comes from uncertainty, not risk.</p><p>&#8220;Should we ship this?&#8221; is a hard question when you&#8217;re staring at 15 test failures, 3 known flaky tests, a code change that touches 12 files, and a deployment window that closes in 2 hours.</p><p>This system doesn&#8217;t eliminate risk. It eliminates confusion.</p><p>And honestly? That&#8217;s more valuable than any &#8220;smart&#8221; automation that tries to make the call for you.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[I Built a Simple LLM-Based Test Failure Explainer]]></title><description><![CDATA[And Learned Why "Smart" Automation Fails Quietly]]></description><link>https://newsletter.jovil.co/p/i-built-a-simple-llm-based-test-failure</link><guid isPermaLink="false">https://newsletter.jovil.co/p/i-built-a-simple-llm-based-test-failure</guid><dc:creator><![CDATA[Jovil Pasrija]]></dc:creator><pubDate>Mon, 09 Feb 2026 04:12:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bO7A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff353ff4b-fb96-4596-8d27-194019fda8d9_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You know what&#8217;s wild? After 14 years in test automation, the failure analysis process hasn&#8217;t really changed.</p><p>A test breaks. There&#8217;s a mountain of logs. Maybe a screenshot. And then... crickets. Someone reruns it. Or worse, someone ignores it.</p><p>I kept seeing all this hype about &#8220;AI in testing&#8221; and figured, why not actually build something? Not another think piece&#8212;something real. Something small. Something that solves an actual problem I deal with every day.</p><p>So I built an LLM that reads test failures and explains why they probably failed. In plain English.</p><p>Here&#8217;s what happened.</p><h2>The Real Problem Nobody Talks About</h2><p>Everyone&#8217;s excited about AI for test generation, self-healing locators, autonomous testing&#8212;all that sexy stuff.</p><p>But that&#8217;s not where teams bleed time.</p><p>The real cost? It&#8217;s the 20-30 minutes you spend per failure, re-reading the same stack traces, trying to figure out if it&#8217;s a product bug, a test bug, or just flaky infrastructure.</p><p>After doing this for over a decade, I can tell you: the bottleneck isn&#8217;t writing tests. It&#8217;s understanding why they fail, quickly.</p><p>So that&#8217;s all I focused on.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>What I Didn&#8217;t Build (And Why That Matters)</h2><p>This is actually more important than what I built.</p><p>I deliberately avoided:</p><ul><li><p>Auto-fixing tests</p></li><li><p>Modifying code</p></li><li><p>Re-running pipelines</p></li><li><p>Deep framework integration</p></li></ul><p>Why? Because I&#8217;ve seen what happens when automation starts making decisions without human context. It becomes this black box that nobody trusts. You end up debugging the automation instead of the tests.</p><p>My only goal was simple: turn raw failure data into something a human can actually understand in under a minute.</p><h2>The Architecture (Boring on Purpose)</h2><p>I kept it stupidly simple.</p><p><strong>Inputs:</strong></p><ul><li><p>Test name</p></li><li><p>Failure message</p></li><li><p>Stack trace</p></li><li><p>Last step that executed</p></li><li><p>Screenshot filename (I&#8217;m not processing images yet, just metadata)</p></li></ul><p><strong>Processing:</strong></p><ul><li><p>Normalize the logs</p></li><li><p>Strip out noise</p></li><li><p>Chunk large stack traces so they&#8217;re digestible</p></li></ul><p><strong>LLM Task:</strong></p><ul><li><p>Classify the failure type</p></li><li><p>Explain the likely cause</p></li><li><p>Suggest what to check next (not what to fix&#8212;important distinction)</p></li></ul><p><strong>Output:</strong></p><ul><li><p>5-7 bullet points</p></li><li><p>One-line &#8220;most probable cause&#8221;</p></li></ul><p>That&#8217;s it.</p><h2>Step 1: Cleaning Up the Logs (Where Most Tools Die)</h2><p>Raw logs are terrible for LLMs. They&#8217;re terrible for humans too, but at least we can skim.</p><p>Before I send anything to the model, I strip out:</p><ul><li><p>Timestamps (who cares?)</p></li><li><p>Repeated stack frames (framework noise)</p></li><li><p>Boilerplate garbage</p></li><li><p>Everything after the meaningful exception</p></li></ul><p>This did three things:</p><ul><li><p>Cut token usage way down</p></li><li><p>Reduced hallucinations significantly</p></li><li><p>Made the explanations actually relevant</p></li></ul><p>Here&#8217;s what I learned: LLMs don&#8217;t need more data. They need cleaner signals. Same as humans, honestly.</p><h2>Step 2: Prompt Design (No Magic Here)</h2><p>Early on, I tried asking the model to &#8220;analyze the failure.&#8221;</p><p>Big mistake. Too vague.</p><p>The responses sounded intelligent but were completely useless.</p><p>So I forced structure into the prompt:</p><ul><li><p>Identify the failure category first</p></li><li><p>Explain the cause using testing terminology, not developer jargon</p></li><li><p>Distinguish between test issues, product bugs, and environment problems</p></li><li><p>Do not suggest code fixes (this is critical)</p></li></ul><p>When the prompt was loose, I got smart-sounding nonsense.</p><p>When the prompt was strict, I got boring, actionable answers.</p><p>I&#8217;ll take boring over clever every single time.</p><h2>Step 3: Early Results (Better Than Expected, But...)</h2><p>For straightforward failures&#8212;missing elements, timeouts, assertion mismatches&#8212;it actually worked really well.</p><p>The explanations were genuinely helpful:</p><ul><li><p>&#8220;Locator is probably too specific&#8221;</p></li><li><p>&#8220;Page load was delayed&#8221;</p></li><li><p>&#8220;Assertion is checking dynamic text&#8221;</p></li></ul><p>But then I noticed something dangerous.</p><p>The model was <em>always</em> confident. Even when it was wrong.</p><p>That&#8217;s when I realized I needed guardrails.</p><h2>Step 4: Embracing Uncertainty (This Changed Everything)</h2><p>I added one simple rule to the prompt:</p><p><em>If multiple causes are plausible, say so explicitly.</em></p><p>This one change:</p><ul><li><p>Reduced false confidence</p></li><li><p>Increased trust from the team</p></li><li><p>Stopped people from blindly following &#8220;what the AI said&#8221;</p></li></ul><p>Turns out, sometimes the best AI improvement isn&#8217;t making it smarter. It&#8217;s making it honest about what it doesn&#8217;t know.</p><h2>What Broke (Learn From My Mistakes)</h2><h3>1. Flaky Tests Broke the Model&#8217;s Brain</h3><p>LLMs hate randomness. They try to find patterns even when there aren&#8217;t any. They&#8217;ll give you these elaborate theories about why a flaky test failed when the real answer is just &#8220;because it&#8217;s Tuesday.&#8221;</p><p>My fix: flag known flaky tests in the system, and change the explanation tone to acknowledge probability instead of certainty.</p><h3>2. Screenshots Are Overrated (Without Context)</h3><p>Everyone thinks adding image analysis will be a game-changer. It wasn&#8217;t.</p><p>Without the DOM state or step context, the screenshots didn&#8217;t help much at all. The model would describe what it saw, but couldn&#8217;t really explain <em>why</em> it mattered.</p><p>Lesson learned: multimodal AI is useless if your test framework doesn&#8217;t capture semantic structure. Fix your instrumentation first.</p><h3>3. Long Stack Traces Degraded Everything</h3><p>Even after trimming, really deep stack traces made the output quality drop hard.</p><p>Solution: hard cap on stack depth. Focus only on the first meaningful failure point. More isn&#8217;t better.</p><h2>What This Thing Is Actually Good For</h2><p>Let me be realistic about this.</p><p>It doesn&#8217;t:</p><ul><li><p>Replace debugging</p></li><li><p>Fix your tests</p></li><li><p>Remove the need for engineering judgment</p></li></ul><p>It does:</p><ul><li><p>Reduce cognitive load on the team</p></li><li><p>Speed up initial triage</p></li><li><p>Help junior engineers reason through failures better</p></li><li><p>Create consistency in how we explain what happened</p></li></ul><p>In other words: it improves <em>thinking</em>, not execution.</p><p>And honestly? That&#8217;s exactly where AI belongs in testing.</p><h2>The Bigger Lesson Here</h2><p>AI in testing doesn&#8217;t fail because the models aren&#8217;t good enough.</p><p>It fails because we:</p><ul><li><p>Try to automate judgment instead of augmenting it</p></li><li><p>Feed it garbage data and expect gold</p></li><li><p>Chase full replacement instead of useful assistance</p></li></ul><p>The moment I started treating the LLM like &#8220;a smart junior engineer who can read logs really fast but doesn&#8217;t have all the context&#8221;&#8212;everything clicked.</p><h2>Final Thought</h2><p>If you&#8217;re experimenting with AI in your testing workflow, start where your team wastes the most <em>thinking</em> time. Not where the demos look impressive.</p><p>For most of us, that&#8217;s still the same question we&#8217;ve been asking for years:</p><p>&#8220;Why did this test fail... again?&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.jovil.co/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 Jovil&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>