<?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[Denis De O: QA Fundamentals]]></title><description><![CDATA[This is where real QA begins.

Not test cases. Not tools. Not frameworks.

Thinking.

Here I share how to see the product the way experienced QA engineers do — understanding risk, user behavior, and what actually matters in production.

If you’ve ever felt like you’re “testing but not really finding anything meaningful,” this section will change how you approach QA forever.]]></description><link>https://denisdeoqa.substack.com/s/qa-fundamentals</link><image><url>https://substackcdn.com/image/fetch/$s_!8GJg!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F569668de-b6b1-47f6-bc84-b3229c2b261f_1024x1024.png</url><title>Denis De O: QA Fundamentals</title><link>https://denisdeoqa.substack.com/s/qa-fundamentals</link></image><generator>Substack</generator><lastBuildDate>Mon, 08 Jun 2026 03:46:47 GMT</lastBuildDate><atom:link href="https://denisdeoqa.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Denis De O]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[denisdeoqa@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[denisdeoqa@substack.com]]></itunes:email><itunes:name><![CDATA[Denis De O]]></itunes:name></itunes:owner><itunes:author><![CDATA[Denis De O]]></itunes:author><googleplay:owner><![CDATA[denisdeoqa@substack.com]]></googleplay:owner><googleplay:email><![CDATA[denisdeoqa@substack.com]]></googleplay:email><googleplay:author><![CDATA[Denis De O]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Defect leakage: the metric that tells you if your testing actually worked]]></title><description><![CDATA[A bug in production is not just a bug. It's a signal. Here's what it's telling you &#8212; and why you should listen.]]></description><link>https://denisdeoqa.substack.com/p/defect-leakage-the-metric-that-tells</link><guid isPermaLink="false">https://denisdeoqa.substack.com/p/defect-leakage-the-metric-that-tells</guid><dc:creator><![CDATA[Denis De O]]></dc:creator><pubDate>Fri, 10 Apr 2026 21:58:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vKS0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vKS0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vKS0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vKS0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vKS0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vKS0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vKS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3842450,&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://denisdeoqa.substack.com/i/193836189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.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_!vKS0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!vKS0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!vKS0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!vKS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc70f2dfe-9023-4baf-a8a5-1829e5b1be0d_1024x1536.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></p><p>Let me paint you a scene that I&#8217;ve lived more times than I&#8217;d like to admit.</p><p>The sprint is done. Testing is done. The team signs off. The release goes out on a Friday afternoon (always a Friday, for some reason). And then, sometime between Saturday morning and Monday standup, a user finds something. A bug. Something that breaks a real workflow. Something that was absolutely, definitely, supposed to have been caught.</p><p>That moment, that specific sinking feeling has a name in QA. It&#8217;s called <strong>defect leakage</strong>.</p><p>And if you&#8217;ve never formally tracked it, I&#8217;d argue you&#8217;re flying blind on <strong>one of the most important signals your testing process produces.</strong></p><h3>So what exactly is defect leakage?</h3><p>The definition is straightforward: defect leakage occurs when a bug that existed during testing makes it all the way to production or a later phase of the release cycle &#8212;without being caught.</p><p>You had the code. You had the test environment. You had the time. The defect was there. And it still got through.</p><div class="callout-block" data-callout="true"><p>Imagine you're testing an e-commerce checkout. Your team runs 200 test cases, covering the happy path, edge cases, and payment failures. The build goes to production. Three days later, a customer reports that applying a discount code and changing their delivery address in the same session wipes out their cart. Silently. No error. Just gone. That's a defect leakage. It existed </p><p>when you were testing. It wasn't caught. The user found it instead.</p></div><p>Now, some people hear "defect leakage" and immediately get defensive. <em>"We can't catch everything."</em> And honestly? That's true. No QA process catches 100% of bugs. But defect leakage isn't about perfection; it's about understanding <strong>what your testing process is actually doing</strong>.</p><h3>Why this metric matters more than your test pass rate</h3><p>Here&#8217;s a thing I&#8217;ve seen happen in a lot of teams: the test pass rate looks great. 95%. 98%. Green dashboards everywhere. Leadership is happy. QA is happy. And then production keeps catching fire.</p><p>The problem is that a high pass rate just tells you that the tests you wrote passed. It says nothing about what you didn&#8217;t test. Defect leakage tells you something entirely different; it tells you about the <em>gap between what you tested and what reality threw at you</em>.</p><blockquote><p>The formula is simple: take the number of defects found in production (or a later phase), divide by the total defects found across all phases, and multiply by 100. A lower percentage means more defects were caught before reaching users. A higher percentage means your testing net has holes.</p></blockquote><p>That gap is where the real QA work lives. And unless you're measuring it, you won't know how big it is or where it comes from.</p><h3>The most common reasons defects leak through</h3><p>In my experience, defect leakage rarely comes from laziness or carelessness. It usually comes from a few structural problems that quietly build up over time.</p><p><strong>Test coverage that looks complete but isn&#8217;t.</strong> We often design tests around how the feature <em>should</em> work, not around how users will <em>actually</em> use it. The combination of two valid actions that creates an invalid state? That&#8217;s not in most test plans. That&#8217;s where bugs live.</p><p><strong>Regression blind spots.</strong> A change in one area breaks something in another area that nobody connected in their head. This is especially common in mature, complex systems where the team has half-forgotten what touches what.</p><p><strong>Environmental differences.</strong> Something works fine in staging. It breaks in production because the data, load, and configuration are slightly different. Environment parity issues are a classic source of leakage that gets blamed on QA, but often isn&#8217;t purely a testing problem.</p><p><strong>Time pressure.</strong> This one&#8217;s uncomfortable but real. When a release is being pushed out fast, testing gets compressed. Corners get cut. Risk gets accepted informally, without anyone really naming it. And then the risk materializes in production.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://denisdeoqa.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p><h3>How to actually use defect leakage data</h3><p>The number itself isn&#8217;t the point. What you do with it is.</p><p>When I track defect leakage properly, the first thing I want to know is: <em>where did this bug come from, and why didn&#8217;t we catch it?</em> That retrospective question is worth more than the metric itself. Was it a missing test case? An assumption we made about user behavior that turned out to be wrong? A dependency we didn&#8217;t know about?</p><p>Over time, patterns emerge. It may be concentrated in one feature area. Maybe it consistently shows up after integrations with a specific third-party service. It may spike after releases with compressed timelines. That&#8217;s intelligence. That&#8217;s where you direct your attention next.</p><div class="callout-block" data-callout="true"><p><strong>What good looks like</strong></p><p>One team I worked with had persistent leakage around their notification system, bugs kept reaching users even though the feature was &#8220;well-tested.&#8221; When we dug into it, the issue was that tests were validating that notifications were sent, but not validating what happened when the user&#8217;s preference settings interacted with different notification types. A focused expansion of coverage in that specific area dropped their notification-related leakage to near zero over two sprints.</p></div><h3>A system that actually worked &#8212; and that you can steal</h3><p>I want to share something concrete from a team I was part of, because I think it's one of the most practical approaches to defect leakage I've seen in action. It wasn't complicated. It didn't require a big process overhaul. But it was consistent, and that's what made it work.</p><div class="callout-block" data-callout="true"><p><strong>Idea worth borrowing</strong></p><p><strong>The weekly production bug review &#8212; with Jira doing the heavy lifting</strong></p><p>Our QA manager set up custom fields directly in Jira for every bug that reached production. The fields weren&#8217;t there to generate reports for leadership they were there to force a structured conversation. Specifically, each production bug ticket required answers to three things: <em>why it was missed</em>, <em>what QA should do about it</em>, and <em>who else needs to be involved to fully understand it</em>.</p><p>That last one matters more than it sounds. A production bug doesn&#8217;t always have a QA answer. Sometimes the only way to understand why a customer is seeing something is to sit down with a developer and ask what changed under the hood. Or with a project manager to understand what requirements shifted late in the sprint. Or with support to understand exactly what the customer was doing when it broke. The Jira fields created a paper trail that made those conversations happen, rather than letting the bug quietly get closed and forgotten.</p><h3><strong>The weekly meeting</strong></h3><p>Every week, the entire QA team met to review production bugs together. The ritual was simple, but the discipline around it was serious:</p><ul><li><p><strong>Zero production bugs that week?</strong> The meeting still happened. The team used the time to review the QA backlog, specifically assessing whether existing bugs required new regression tests or whether new test cases should be written based on recent releases. A quiet week was an opportunity to strengthen coverage, not an excuse to skip the conversation.</p></li><li><p><strong>Production bugs found?</strong> The team walked through each one together. Why did it leak? Was the test case missing entirely? Did we test the wrong thing? Was it a known risk that got accepted under time pressure? And critically, do we need to pull in dev, the PM, or anyone else to get the full picture? Because sometimes QA alone can&#8217;t answer why a customer saw what they saw. That&#8217;s not a failure; that&#8217;s just how complex software works. The failure is not asking.</p></li></ul><h3>The culture that made it work</h3><p>What made this system effective wasn&#8217;t the Jira fields or even the weekly cadence. It was what happened inside the room. Nobody was blamed. The question was never &#8220;whose fault is this?&#8221; It was always &#8220;what does our process need to learn from this?&#8221; and, just as importantly, &#8220;who do we need to talk to in order to actually understand this?&#8221;</p><p>That distinction sounds small. In practice, it&#8217;s everything. It&#8217;s the only way people tell the truth about what happened. And it&#8217;s the only way a production bug becomes something useful instead of something everyone just wants to move past.</p><p>When QA, dev, and the PM are sitting together looking at the same Jira ticket, asking the same question why did this reach our customer? the answer is almost always richer and more honest than anything QA could have figured out alone.</p><h3>Why is it worth the hour?</h3><p>If your team isn&#8217;t doing something like this, I&#8217;d genuinely recommend starting here before investing in any tooling or automation. The meeting costs an hour a week. The return cleaner releases, a smarter regression suite, a team that&#8217;s actually learning from production, and cross-functional conversations that surface things no single role would catch alone compound over time in ways that are hard to overstate.</p></div><h3>A word on what defect leakage is not</h3><p>It&#8217;s not a stick to beat QA with.</p><p>I&#8217;ve seen defect leakage metrics get weaponized and turned into a performance measure that makes QA engineers defensive and risk-averse. That&#8217;s exactly backward. If people are afraid to report or acknowledge production defects because it&#8217;ll reflect badly on testing, you lose the signal entirely. You need a culture where leaked data is treated as information, not blame.</p><p>It&#8217;s also not a complete picture of testing quality on its own. A team that ships tiny, well-scoped features might have low leakage simply because there&#8217;s less surface area for bugs to hide. A team tackling complex, high-risk migrations might have higher leakage while still doing excellent work. Context always matters.</p><h3>Why does this become even more important as AI enters the picture?</h3><p>I&#8217;ll be honest, this is something I think about a lot right now.</p><p>As AI-generated code becomes more common, the nature of defects is changing. AI can write functional-looking code that passes unit tests and fails in integration. It can produce edge cases that nobody explicitly thought about, because nobody explicitly wrote that code; a model interpolated it from patterns. The kinds of bugs that leak through are going to get more subtle, more contextual, harder to anticipate.</p><p>That means defect leakage tracking and the retrospective thinking that comes with it becomes <em>more</em> valuable, not less. Understanding what your testing missed and systematically closing those gaps is the kind of work that doesn&#8217;t get automated away. It requires understanding what &#8220;correct&#8221; actually means in your specific context. That&#8217;s still a human judgment. That&#8217;s still QA work.</p><h3>The bottom line</h3><p>Defect leakage is one of the clearest signals your testing process generates. It tells you, in concrete terms, what got through the net. Not hypothetically, actually.</p><p>If you&#8217;re not tracking it, start small. Pick the last three releases. Look at the production bugs. Trace them back. Ask whether they were testable during the testing phase. That exercise alone will tell you something useful.</p><p>And if you want a ready-made ritual to build around it, the weekly review I described above is as good a starting point as any. Zero bugs? Use the time to strengthen your test suite. Bugs found? Use them to teach your process something. Either way, the hour is never wasted.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.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><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.substack.com/p/defect-leakage-the-metric-that-tells?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://denisdeoqa.substack.com/p/defect-leakage-the-metric-that-tells?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Reflection: What I Would Learn If I Started QA Today]]></title><description><![CDATA[A senior tester's honest letter to their younger self about skills, mindset, and what actually matters.]]></description><link>https://denisdeoqa.substack.com/p/reflection-what-i-would-learn-if</link><guid isPermaLink="false">https://denisdeoqa.substack.com/p/reflection-what-i-would-learn-if</guid><dc:creator><![CDATA[Denis De O]]></dc:creator><pubDate>Sun, 29 Mar 2026 20:43:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T1Jn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T1Jn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T1Jn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!T1Jn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!T1Jn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!T1Jn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T1Jn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2414088,&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://denisdeoqa.substack.com/i/192541615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T1Jn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!T1Jn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!T1Jn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!T1Jn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd17dab66-c8af-4488-8db7-e2776aea6fc8_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>I&#8217;ve been in QA for a while now. Long enough to have strong opinions. Long enough to look back at my early years and cringe a little.</p><p>Not because I was bad at the job. But because I was learning the wrong things in the wrong order, nobody told me.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.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><p>So this is the article I wish had existed when I was starting out. Not a tutorial. Not a tool list. Just an honest reflection from someone who&#8217;s been in the trenches and wants to save you some time.</p><div><hr></div><h3>The first thing I&#8217;d change: stop thinking QA is about finding bugs.</h3><p>It took me an embarrassingly long time to unlearn this. When I started, I thought my job was to break things. Find the bugs, report them, done. The more bugs I found, the better I was doing.</p><p>That&#8217;s not wrong, but it&#8217;s dangerously incomplete.</p><p>The real job is to give your team information they don&#8217;t have yet. Information about risk. About what could go wrong and how badly. About what users actually do versus what we assume they do.</p><p>A tester who only finds bugs is useful. A tester who shapes how the team thinks about quality? That person is irreplaceable.</p><div><hr></div><h3>I&#8217;d also get technical faster. Much faster.</h3><p>Not &#8220;learn to code&#8221; in the intimidating sense. But enough to stop being dependent on developers to confirm your suspicions.</p><p>Here&#8217;s what I mean practically:</p><p>Learn how APIs work. Not just how to test them, but how they actually work. HTTP methods, status codes, headers, and authentication. Most bugs today don&#8217;t live in the UI. They live in the layer underneath it. If you can&#8217;t test that layer, you&#8217;re missing half the picture.</p><p>Pick up basic SQL. Just enough to query a database yourself. So many bugs hide in data, and if you need to wait for a developer every time you want to check what&#8217;s in the database, you&#8217;re always two steps behind.</p><p>Learn a little scripting. Python or JavaScript. Not to write automation frameworks from scratch, but to write a 20-line script when you need one. Generate test data. Parse a log file. Call an API and check a response. Small scripts change your relationship to the work.</p><p>None of this has to happen in month one. But it should happen in year one.</p><div><hr></div><h3>Speaking of automation &#8212; I&#8217;d approach it completely differently.</h3><p>When I started, automation felt like the goal. The more tests you had running in CI, the better you were at your job. I chased coverage numbers. I built big Selenium suites. I was proud of them.</p><p>Then I watched teams ship confidently broken software because all their automated checks passed.</p><p>Here&#8217;s what I know now: automated checks verify that known behavior still behaves as expected. Testing discovers what you don&#8217;t know yet. Both matter. Neither replaces the other.</p><p>If I were starting today, I&#8217;d learn Playwright; it&#8217;s genuinely good. But I&#8217;d learn it after I had a clear answer to the question: &#8220;What makes a test worth automating in the first place?&#8221; The tool is the easy part. The strategy is what most people skip.</p><div><hr></div><h3>The skill that took me the longest to develop &#8212; and that I&#8217;d prioritize much earlier &#8212; is risk-based thinking.</h3><p>It sounds fancy. It isn&#8217;t.</p><p>It&#8217;s just asking: if something breaks here, how bad is it? Who gets hurt? What does the user lose? How likely is it to break?</p><p>Coverage tells you where you&#8217;ve been. Risk thinking tells you where you should go next.</p><p>I built this skill mostly by accident, reading user support tickets, sitting with a customer success team, and watching how real people used the software we were testing. The patterns of where things actually break are rarely where we expect them to break.</p><p>Please spend time close to users (if you can) early in your career. It will calibrate your instincts in a way that no amount of test theory can.</p><div><hr></div><h3>One thing that&#8217;s genuinely new if you&#8217;re starting today: AI changes the game in both directions.</h3><p>On one side, it helps. AI tools can generate test cases, write boilerplate automation, and analyze logs. That&#8217;s real and useful, and you should learn to use them well.</p><p>On the other side, AI creates entirely new categories of bugs that most existing QA knowledge doesn&#8217;t cover. Non-deterministic outputs. Hallucinations in generated content. Prompt injection vulnerabilities. Model behavior that drifts over time.</p><p>If you&#8217;re working on any product that uses AI, and soon that will be most products, you need a testing vocabulary that barely existed five years ago. Learn what LLM evaluation looks like. Try adversarial prompting. Understand what &#8220;correct output&#8221; even means when the system is probabilistic.</p><p>This is the frontier right now. Getting there early is worth a lot.</p><div><hr></div><h3>Here&#8217;s something nobody told me when I started: how you communicate findings matters as much as how you find them.</h3><p>The best bug report I ever wrote was three sentences and a screen recording. The worst were long, detailed documents that sat unread in a Jira backlog.</p><p>A bug report isn&#8217;t a legal document. It&#8217;s a call to action. What&#8217;s broken? Why it matters. How to reproduce it. Everything else is noise.</p><p>And beyond reports, learn to have uncomfortable conversations. Sometimes your job is to tell a PM that a feature isn&#8217;t ready the day before a release. That conversation never gets easy, but you can get better at it. Doing it with tact and evidence, instead of hesitation or aggression, is a skill worth developing early.</p><div><hr></div><h3>If I had to lay out a rough six-month learning path for someone starting today, it would look something like this:</h3><p><strong>Months 1&#8211;2:</strong> Focus on thinking, not tools. Read about testing philosophy. Practice exploratory testing on apps you actually use. Write down what you notice. Study HTTP and how REST APIs work.</p><p><strong>Months 3&#8211;4:</strong> Learn SQL basics. Build your first API test collection in Postman or Bruno. Understand what CI/CD is and why it affects your work. Please shadow a developer for a sprint.</p><p><strong>Months 5&#8211;6: </strong>Pick one automation framework (Playwright) and build something small with it. Contribute to an open-source project&#8217;s test suite. Start writing up your test investigations &#8212; not just the scripts, but your thinking behind them.</p><p>After that, dig into performance testing basics, AI-specific testing, and whatever the product you&#8217;re working on actually needs.</p><div><hr></div><h3>I&#8217;ll close with the thing that matters most, and that nobody can teach you directly:</h3><p>The best testers I&#8217;ve met are people who can&#8217;t help asking &#8220;but what happens if&#8230;&#8221;</p><p>In code reviews. In design meetings. In conversations about requirements that sound simple but aren&#8217;t.</p><p>That instinct &#8212; comfortable uncertainty, systematic curiosity is what separates good testers from great ones. The tools are learnable. The mindset takes longer. But if you have the instinct, everything else can be built on top of it.</p><p>You&#8217;re starting at a good time. The field needs people who think carefully about quality. Go be one of them.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.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><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.substack.com/p/reflection-what-i-would-learn-if?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://denisdeoqa.substack.com/p/reflection-what-i-would-learn-if?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p>]]></content:encoded></item><item><title><![CDATA[Most QA Engineers Don’t Understand the Product]]></title><description><![CDATA[And that&#8217;s where real quality starts to break]]></description><link>https://denisdeoqa.substack.com/p/most-qa-engineers-dont-understand</link><guid isPermaLink="false">https://denisdeoqa.substack.com/p/most-qa-engineers-dont-understand</guid><dc:creator><![CDATA[Denis De O]]></dc:creator><pubDate>Sat, 28 Mar 2026 09:50:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r0RD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r0RD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r0RD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!r0RD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!r0RD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!r0RD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r0RD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2498346,&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://denisdeoqa.substack.com/i/192391559?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r0RD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!r0RD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!r0RD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!r0RD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb3f19a3-6644-4f14-a4d9-1727cddd145b_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>There&#8217;s a quiet problem in QA that nobody really talks about.</p><p>Most QA engineers don&#8217;t understand the product.</p><p>Not deeply.<br>Not beyond the test cases.</p><div><hr></div><p>I didn&#8217;t fully understand this early in my career either.</p><p>With over 20 years of QA experience, I&#8217;ve tested a wide range of systems from enterprise platforms to retail applications.<br>I&#8217;ve written thousands of test cases.<br>Executed regression cycles.<br>Managed tools like TestRail for large teams.</p><p>And for a long time, I thought that was enough.</p><div><hr></div><p>It wasn&#8217;t.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://denisdeoqa.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p><div><hr></div><h2>The moment things started to change</h2><p>I remember working on a feature that passed everything.</p><p>All test cases: &#9989;<br>No major bugs: &#9989;<br>Release approved: &#9989;</p><p>From a QA perspective, it looked perfect.</p><p>But after its release, the feature was barely used.</p><p>Users were confused.<br>The flow didn&#8217;t feel natural.<br>It solved a problem, but it wasn&#8217;t the right one.</p><div><hr></div><p>That was a turning point for me.</p><p>Because technically, we did everything right.</p><p>But in reality, we missed the point.</p><div><hr></div><h2>The person who changed how I see testing</h2><p>In one of my roles, I worked with someone who approached testing very differently.</p><p>He didn&#8217;t start with test cases.<br>He started with the product.</p><p>He understood it inside out.</p><p>Not just the flows but:</p><ul><li><p>Why features existed</p></li><li><p>How users actually behaved</p></li><li><p>Where things would realistically break</p></li><li><p>What truly mattered for the business</p></li></ul><div><hr></div><p>At first, it was subtle.</p><p>In meetings, he would ask questions that no one else was asking:</p><ul><li><p>&#8220;What problem are we really solving here?&#8221;</p></li><li><p>&#8220;How would a real user approach this?&#8221;</p></li><li><p>&#8220;What happens if this fails during peak usage?&#8221;</p></li></ul><div><hr></div><p>And when he tested&#8230;</p><p>He didn&#8217;t just follow steps.</p><p>He explored.<br>He challenged.<br>He anticipated.</p><div><hr></div><p>I remember thinking:</p><p><em>&#8220;This is different.&#8221;</em></p><div><hr></div><p>Because while the rest of us were validating requirements&#8230;</p><p>He was validating <strong>reality</strong>.</p><div><hr></div><p>Over time, I realized something important:</p><p>He wasn&#8217;t a better tester because he had better tools.</p><p>He was better because he understood the product more deeply.</p><div><hr></div><p>That experience stayed with me.</p><p>And it pushed me to change how I approach testing.</p><div><hr></div><h2>What I took from that experience</h2><p>Since then, I&#8217;ve tried to bring that mindset into my own work:</p><ul><li><p>Go beyond the test cases</p></li><li><p>Understand the business behind the feature</p></li><li><p>Think like a real user, not just a tester</p></li><li><p>Focus on impact, not just execution</p></li></ul><div><hr></div><p>Because the difference is clear.</p><p>Anyone can follow steps.</p><p>But not everyone can see what really matters.</p><div><hr></div><h2>The illusion of &#8220;good testing&#8221;</h2><p>In many teams, QA is still measured by:</p><ul><li><p>Number of test cases</p></li><li><p>Coverage</p></li><li><p>Bugs found</p></li><li><p>Execution speed</p></li></ul><p>And I&#8217;ve worked in environments where those metrics mattered a lot.</p><p>But here&#8217;s what I learned:</p><p>You can hit all those metrics&#8230;<br>and still deliver something that doesn&#8217;t create value.</p><div><hr></div><h2>When I started testing differently</h2><p>Over time, my approach changed.</p><p>Especially working closely with developers and product teams, and supporting the tools and processes behind the scenes.</p><p>Instead of just validating requirements, I started asking:</p><ul><li><p>Why are we building this?</p></li><li><p>Who is going to use it?</p></li><li><p>What happens if this fails in real life?</p></li><li><p>How does this impact the business?</p></li></ul><div><hr></div><p>When you&#8217;ve been responsible for systems, tools, and workflows, like managing TestRail for thousands of users&#8212;you start to see something clearly:</p><p>Quality is not just execution.</p><p>It&#8217;s understanding how everything connects.</p><div><hr></div><h2>Test cases don&#8217;t see risk &#8212; context does</h2><p>I&#8217;ve seen many scenarios like this:</p><p>A test case says:</p><blockquote><p>&#8220;Verify user completes action successfully.&#8221;</p></blockquote><p>And yes&#8230; technically, it works.</p><p>But:</p><ul><li><p>The user hesitates</p></li><li><p>The flow feels unnatural</p></li><li><p>The value isn&#8217;t clear</p></li><li><p>The business impact is weak</p></li></ul><p>None of that shows up in a test case.</p><div><hr></div><p>That only shows up when you understand the product.</p><div><hr></div><h2>The difference between checking and testing</h2><p>Looking back, I can clearly see two phases in my career:</p><p><strong>Phase 1 &#8212; Checking</strong></p><ul><li><p>Following test cases</p></li><li><p>Validating expected results</p></li><li><p>Focusing on execution</p></li></ul><p><strong>Phase 2 &#8212; Real testing</strong></p><ul><li><p>Challenging assumptions</p></li><li><p>Understanding user behavior</p></li><li><p>Thinking about business impact</p></li><li><p>Identifying real risks</p></li></ul><div><hr></div><p>The tools didn&#8217;t change.</p><p>My mindset did.</p><div><hr></div><h2>What strong QA engineers do differently</h2><p>The best QA engineers I&#8217;ve worked with all had one thing in common:</p><p>They understood the product.</p><p>Not just how it works but why it exists.</p><p>They could answer:</p><ul><li><p>How does this product make money?</p></li><li><p>What do users actually care about?</p></li><li><p>Where are we most likely to fail?</p></li></ul><div><hr></div><p>That&#8217;s where real quality comes from.</p><div><hr></div><h2>A simple upgrade you can start today</h2><p>Next time you test something, pause for a second.</p><p>Ask yourself:</p><ul><li><p>Would I use this?</p></li><li><p>Would I trust this?</p></li><li><p>Would I pay for this?</p></li><li><p>What would break after release?</p></li></ul><div><hr></div><p>That shift alone can completely change your impact.</p><div><hr></div><h2>Final thought</h2><p>Test cases verify behavior.</p><p>Product understanding verifies value.</p><p>And after 20+ years in QA&#8230;</p><p>That&#8217;s the difference that matters most.</p><div><hr></div><p>If you&#8217;re in QA and want to grow beyond execution,<br>start here.</p><p>Not with tools.<br>Not with automation.</p><p>But with understanding.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.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><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://denisdeoqa.substack.com/p/most-qa-engineers-dont-understand?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://denisdeoqa.substack.com/p/most-qa-engineers-dont-understand?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item></channel></rss>