<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Artemii Zakharov</title>
    <description>The latest articles on DEV Community by Artemii Zakharov (@zarart).</description>
    <link>https://dev.to/zarart</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4135283%2Fa803501b-747c-4e57-86b3-acdd97d5593f.jpeg</url>
      <title>DEV Community: Artemii Zakharov</title>
      <link>https://dev.to/zarart</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zarart"/>
    <language>en</language>
    <item>
      <title>From Quantity to Quality: A Risk-Based Approach to AI-Assisted QA at Scale</title>
      <dc:creator>Artemii Zakharov</dc:creator>
      <pubDate>Tue, 22 Sep 2026 09:18:00 +0000</pubDate>
      <link>https://dev.to/zarart/from-quantity-to-quality-a-risk-based-approach-to-ai-assisted-qa-at-scale-12d9</link>
      <guid>https://dev.to/zarart/from-quantity-to-quality-a-risk-based-approach-to-ai-assisted-qa-at-scale-12d9</guid>
      <description>&lt;p&gt;We write more tests than ever, yet bugs still reach production. This post introduces a risk-based approach to QA. We'll show how AI-driven impact analysis can flag what needs testing, using one of Salmon's own releases — a rewritten transfer flow and a changed card issuance fee calculation — as the example. Instead of testing features, we focus on consequences: financial loss, user impact, and operational cost.&lt;/p&gt;

&lt;p&gt;This is the kind of approach that allows Salmon's team to maintain quality while keeping up with development speed in the AI era, so read on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The math stopped working
&lt;/h2&gt;

&lt;p&gt;At some point, one of our products at Salmon had 2,000 test cases: about 500 automated, 1,500 manual. Split across eight QA engineers, on paper, that's roughly 57 hours of regression testing per release. In practice, every release took &lt;strong&gt;five days&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Fifty-seven hours assumes pure execution: no analysis, no retesting, no coordination. Real regression testing never runs that clean.&lt;/p&gt;

&lt;p&gt;The product was also several connected products linked by cross-product flows. A defect in one small piece could ripple into services that never touched the original change. This might lead to lost money, eroded trust, a support queue full of the same complaint, and a funnel that leaks users.&lt;/p&gt;

&lt;p&gt;Five days of full-team regression is the realistic cost of the old model. QA joins after a feature is built, writes test cases, expands coverage, runs a full regression pass, and everyone feels safe because the coverage number looks good.&lt;/p&gt;

&lt;p&gt;But a coverage number can hide how much effort went into a project. Easy-to-test areas get tested thoroughly. Yet, important areas stay under-tested because nobody flagged them as different.&lt;/p&gt;

&lt;p&gt;This flow manages to hold up when systems are smaller. That stops once a system gets more interconnected and the pace of change accelerates. AI-assisted development alone has pushed commit volume up by roughly a quarter year over year in a lot of orgs. QA capacity hasn't grown anywhere near that fast, and it isn't going to.&lt;/p&gt;

&lt;p&gt;Test case count was never the measure of quality. What matters is where the attention goes, and deciding that before you're deep in a regression pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  One screen, three bugs, three different problems
&lt;/h2&gt;

&lt;p&gt;Take a form we ship at Salmon, where a client enters bank details, and imagine three bugs on it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A typo in the page title&lt;/li&gt;
&lt;li&gt;A confusing input mask on the account number field&lt;/li&gt;
&lt;li&gt;A broken validation rule that lets the confirm button submit an empty or invalid form straight to the backend&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsad44coirpdwj9qa942z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsad44coirpdwj9qa942z.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ask a room of engineers which matters most and the answer is likely unanimous: the broken validation. It causes real financial and operational damage, bad records in the database, and requires manual cleanup by an operations team.&lt;/p&gt;

&lt;p&gt;This is worth formalizing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Risk = (Impact × Blast Radius) ÷ Safety Net&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7e554r5nmwhhrpssz2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7e554r5nmwhhrpssz2m.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Impact&lt;/strong&gt; — the pain if it goes wrong, for users, trust, and the business.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blast radius&lt;/strong&gt; — how widely the underlying change actually reaches. A one-line fix to shared authentication code has a much bigger blast radius than it seems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety net&lt;/strong&gt; — whatever already protects you, such as automated tests, design review, or existing process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's run those three bugs through the formula:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0eyt5mrhtp9ww8ooi61i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0eyt5mrhtp9ww8ooi61i.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Typo&lt;/strong&gt; — low impact, small blast radius, decent safety net (design review would likely catch it). Low risk, quick fix, move on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confusing mask&lt;/strong&gt; — medium impact (confusion, support tickets, funnel drop-off), small blast radius, weak safety net (a test can confirm the field exists, not whether it's clear). Medium risk, worth a real conversation with the design team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken validation&lt;/strong&gt; — high impact (direct financial exposure), wide blast radius (this logic runs on nearly every form in the app), no safety net. Unquestionably high risk, worth expanded testing, and possibly holding the release.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The real problem is one level up
&lt;/h2&gt;

&lt;p&gt;A real release involves dozens of tickets, hundreds of changed files, changes to underlying data models, all on top of a test suite that already exists. The issue is figuring out what to prioritize across a large diff. This necessitates something closer to a live map between what changed in the code and what that means for test coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does AI impact analysis fit?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6jtkzil7w0ori1w93gcq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6jtkzil7w0ori1w93gcq.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, AI's job is compressing the time it takes to get a clear picture of what a release touches. &lt;strong&gt;The risk decisions stay with people.&lt;/strong&gt; This can mean fifteen to twenty minutes instead of days of manual tracing. Output quality is a direct function of input quality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The full release branch diff, so the model reads everything that changed, not one file at a time.&lt;/li&gt;
&lt;li&gt;Ticket descriptions, so it has business context, not just a diff. A diff shows what changed. A ticket tells us why.&lt;/li&gt;
&lt;li&gt;The existing test case repository and its mapping to code (Allure TestOps, Zephyr Scale, TestRail — the tool doesn't matter), so the model knows what's already covered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful report flags key risk areas in plain language and shows any unmapped new functionality that shipped without test coverage — exactly what the old model tends to miss, since the team is busy running the existing suite and feels productive doing it.&lt;/p&gt;

&lt;p&gt;It also triages existing test cases into "must-test", "recommended", and "safe-to-skip", and highlights selective automation targets once your suite has grown into the hundreds and started costing real CI time.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real release
&lt;/h2&gt;

&lt;p&gt;Let's say one release comes with forty tickets, roughly seven hundred changed files, fifteen data models touched, four hundred existing test cases.&lt;/p&gt;

&lt;p&gt;Under the old model we would open all four hundred, run them broadly, for about three days, with no real way to know in advance which ones mattered.&lt;/p&gt;

&lt;p&gt;With AI impact analysis inserted into the pre-merge job, the same release produced a report in fifteen to twenty minutes flagging the two areas that actually mattered: a rewritten transfer flow and a changed card issuance fee calculation.&lt;/p&gt;

&lt;p&gt;Roughly &lt;strong&gt;200 of the four hundred cases (50%)&lt;/strong&gt; came back must-test, given how wide the blast radius was. Another &lt;strong&gt;83 (about 20%)&lt;/strong&gt; were recommended, backed by a solid existing safety net. The rest were "safe to skip".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fry23fuwkm06b9w2vx4my.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fry23fuwkm06b9w2vx4my.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To illustrate, one skipped area had 25 associated test cases with zero code changes and zero dependencies, and running them would have been pure overhead. That saved time went straight into the parts of the release touching money and operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full disclosure
&lt;/h2&gt;

&lt;p&gt;This didn't work from day one. The first iteration was rough: regression time went up before it went down, extra hours went into tuning inputs, and perceived risk on releases got worse for a stretch.&lt;/p&gt;

&lt;p&gt;Adding AI to a regression process can make things more expensive before it makes it cheaper. It took a few release cycles before the setup stabilized and paid back the early investment.&lt;/p&gt;

&lt;p&gt;Budget for this ramp-up, rather than expecting immediate savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this approach still struggles
&lt;/h2&gt;

&lt;p&gt;Four failure modes are worth naming.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A diff shows what changed, not the full blast radius, so &lt;strong&gt;hidden runtime dependencies&lt;/strong&gt; that only surface at compile time, container build, or in-browser stay invisible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-cutting changes&lt;/strong&gt; that look small but touch shared authentication, models, or storage still need a human sanity check at the end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak or missing test mapping&lt;/strong&gt; means the model doesn't have a reliable ground truth and will guess. A confident wrong answer is worse than no answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brand-new features without history&lt;/strong&gt; give the model nothing to calibrate against; it doesn't know what's critical or where the business boundaries are, and that context still has to come from a person.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What should still be human?
&lt;/h2&gt;

&lt;p&gt;Users today are accustomed to well-built products and don't extend much patience for unpredictable UX. When something breaks, people rarely trace the failure back to which team owns it. They just leave.&lt;/p&gt;

&lt;p&gt;A simple rule helps decide what belongs in automation: &lt;strong&gt;if two QA engineers testing the same thing independently would test it the same way every time, it's a strong automation candidate.&lt;/strong&gt; Think login, registration, other repeatable critical paths, plus basic checks like whether a screen loads and expected elements are present.&lt;/p&gt;

&lt;p&gt;On the other hand, novel, unstable scenarios with no history, and exploratory testing of ambiguous UX — like that confusing input mask — still need a human.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality over quantity
&lt;/h2&gt;

&lt;p&gt;Test case count was never a good proxy for quality. Replacing "how much did we test" with impact, blast radius, and existing safety net forces a more useful question: given all three, where does this release need attention?&lt;/p&gt;

&lt;p&gt;Getting that right, fast enough to keep up with real release velocity, matters more than adding another few hundred test cases to a suite nobody has time to fully run. That's the same read that flagged the transfer flow and fee calculation changes early enough to matter, and let the rest wait.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
