<?xml version="1.0"?><feed xmlns:media="http://search.yahoo.com/mrss/" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:idx="urn:atom-extension:indexing" xmlns="http://www.w3.org/2005/Atom" idx:index="no" gr:dir="ltr"><!--
Content-type: Preventing XSRF in IE.

--><generator uri="https://bazqux.com">BazQux Reader</generator><id>tag:google.com,2005:reader/feed/http://007unlicensedtotest.blogspot.com/feeds/posts/default</id><title>blogs</title><subtitle type="html">blogs</subtitle><link rel="self" href="https://bazqux.com/feed/d45a6ead98c5f8f9f99f?no_branding"></link><gr:continuation>10535554777149</gr:continuation><updated>2026-04-23T08:19:15Z</updated><entry gr:crawl-timestamp-msec="1776925879000"><id gr:original-id="http://emnaayadi.wordpress.com/2026/04/23/silly-questions-are-almost-never-silly/">tag:google.com,2005:reader/item/000006a000000063</id><category term="AI"></category><category term="AI &amp; Emotions"></category><category term="Blogging"></category><category term="IA"></category><title type="html">« Silly Questions » Are Almost Never Silly</title><published>2026-04-23T06:31:19Z</published><updated>2026-04-23T06:31:19Z</updated><link rel="alternate" href="https://emnaayadi.wordpress.com/2026/04/23/silly-questions-are-almost-never-silly/" type="text/html"></link><summary type="html">&lt;p&gt;Blog by : Imen Naguez&lt;/p&gt;



&lt;p&gt;How AI unlocks the questions we’re too afraid to ask anywhere else&lt;/p&gt;



&lt;p&gt;You know the moment. Someone explains something, everyone nods, and somewhere in your mind a phrase is trying to get out: “What exactly is that?”, “Could you explain again?”, “I don’t see the connection.” You keep it to yourself. Not because you’re less intelligent than the others — but because asking that question carries a social costyou’re not ready to pay.&lt;/p&gt;



&lt;p&gt;AI doesn’t make people smarter by magic. What it does, however, is reduce that cost. And that shift, seemingly minor, can profoundly transform the way we learn, think, and grow.&lt;/p&gt;



&lt;p&gt;Here are 12 concrete situations. For each: what happens without AI, what becomes possible with it, and what the research says about it.&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;─────────────────────────────────&lt;/p&gt;



&lt;p&gt;The real problem isn’t the question — it’s other people’s reactions&lt;/p&gt;



&lt;p&gt;In a classroom, a meeting, a training session, or even among colleagues, some questions seem tiny — but they expose a lot. Asking “what exactly is that?” can feel like admitting you weren’t following. Asking again can feel like appearing slow. Saying “I don’t understand the link” can feel like displaying a flaw in your thinking.&lt;/p&gt;



&lt;p&gt;The block is almost never intellectual to begin with. It’s relational.&lt;/p&gt;



&lt;p&gt;” Teams learn more when members feel they can take an interpersonal risk without being immediately disqualified or ridiculed. ”  — Amy Edmondson, Psychological Safety and Learning Behavior in Work Teams (1999)&lt;/p&gt;



&lt;p&gt;In other words: when the cost of judgment drops, asking a question becomes possible. And when you can finally ask, real learning can begin.&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;─────────────────────────────────&lt;/p&gt;



&lt;p&gt;12 questions we don’t dare ask — and what AI changes&lt;/p&gt;



&lt;p&gt;For each situation: the reality without AI, what becomes possible with it, and what the research says.&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f914.png&quot; alt=&quot;🤔&quot; style=&quot;height: 1em&quot;&gt;  1. “What exactly is… ?”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;The question comes too late, gets sidestepped, or people just guess. Fear of judgment takes over — looking incompetent, appearing like you weren’t paying attention. Result: an entire line of reasoning built on a shaky foundation.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You ask directly for a definition, a rephrasing, a simpler explanation. No sighs, no looks. Result: the concept is clarified from the start, you move forward on solid ground.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;When the risk of judgment decreases, asking for clarification becomes natural. Amy Edmondson showed that psychological safety — the feeling that you can speak up without being ridiculed — is one of the strongest predictors of real learning. (Edmondson, 1999)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f504.png&quot; alt=&quot;🔄&quot; style=&quot;height: 1em&quot;&gt;  2. “Can you explain that again?”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You pretend to have understood so as not to bother anyone. You take confused notes, retain little, and memorize poorly. Embarrassment wins over learning.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You ask as many times as you need, in different ways if necessary. No sighs, no impatience. You consolidate the foundations and move forward on stable ground.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Asking for help often carries a high social cost. Ryan and Shin showed that students who dare to ask for help at the right moment — what they call adaptive help-seeking — achieve significantly better outcomes than those who avoid the question out of fear. (Ryan &amp;amp; Shin, 2011)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f517.png&quot; alt=&quot;🔗&quot; style=&quot;height: 1em&quot;&gt;  3. “I don’t see the connection between A and B”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You don’t dare admit you can’t follow the logic between two ideas. You retain isolated fragments without ever grasping the mechanism linking them.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You ask for a step-by-step walkthrough, a logical diagram, an intermediate example. The lack of understanding becomes a legitimate starting point, not a source of shame.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Precisely naming what is missing does not block learning — on the contrary, it often activates a clarification process. Chi et al. showed that learners who self-explain — who verbalize missing links — build far deeper understanding than those who stay passive. (Chi et al., 1989)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f4a1.png&quot; alt=&quot;💡&quot; style=&quot;height: 1em&quot;&gt;  4. “Give me a concrete example”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You don’t dare look like a beginner. You understand in theory but retain poorly and struggle to apply it. The abstract stays abstract.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You ask for one or several examples, even a counter-example. You see how the concept works in real life. You retain better and can transfer it to other situations.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Worked examples — pre-solved, guided illustrations — are especially effective for novices. Atkinson et al. demonstrated that well-structured guidance with resolved examples significantly accelerates learning, especially at the start of a learning journey. (Atkinson et al., 2000)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f50d.png&quot; alt=&quot;🔍&quot; style=&quot;height: 1em&quot;&gt;  5. “Check my reasoning !”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;In public, you protect your image. You avoid exposing a still-fragile line of thinking. You spot your mistakes too late and correct them with difficulty.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You submit your reasoning and explicitly ask: “Where does it break down? Which assumption is weak?” You detect flaws earlier, correct faster, and raise your level of rigor.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Hattie and Timperley showed that the most useful feedback is not just validation — it is precise information that helps understand where you are, where you’re going, and what needs adjusting. The less the ego is exposed, the more this feedback is genuinely used. (Hattie &amp;amp; Timperley, 2007)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f331.png&quot; alt=&quot;🌱&quot; style=&quot;height: 1em&quot;&gt;  6. “I start from scratch ?”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You hide your real level and overcompensate. You try to appear already autonomous. You skip essential steps, exhaust yourself, and progress less than you could.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You embrace starting from the basics. You ask for a fundamental, progressive, structured explanation. You make real progress and build solid foundations.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Acknowledging your gaps takes courage. But when the pressure of others’ judgment decreases, this honesty becomes possible — and it is often the beginning of more lasting learning. (Edmondson, 1999)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f5fa.png&quot; alt=&quot;🗺&quot; style=&quot;height: 1em&quot;&gt;  7. “What’s the first step?”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You want to appear autonomous. You avoid asking where to begin. You scatter your efforts, start too broad, and lose energy and efficiency.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You ask for a minimal plan, a clear first action. The mental load drops immediately. You move forward step by step and regain a sense of control.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Knowing how to ask for a clear entry point helps reduce scattered effort. Research on cognitive load shows that breaking down a complex task into simple steps significantly improves both perseverance and outcomes. (Sweller, 1988)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1fa9c.png&quot; alt=&quot;🪜&quot; style=&quot;height: 1em&quot;&gt;  8. “Explain it again simply”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You don’t dare ask for a very simple version, for fear of being seen as “not at the right level.” You stay confused, understand partially, and don’t dare admit the explanation is over your head.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You ask for a simple explanation first, then gradually increase complexity. You build understanding step by step and can later absorb a more technical level.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Implicit norms about “level” sometimes censor the request for simplicity. Yet learning through gradation is often more effective than diving straight into complexity. Shute stresses this point: progressive formative feedback is far more useful than an expert explanation given all at once. (Shute, 2008)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2694.png&quot; alt=&quot;⚔&quot; style=&quot;height: 1em&quot;&gt;  9. “Challenge my idea”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You dread contradiction because it feels like a personal attack. You avoid objections, stay in your initial logic, and miss your blind spots.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You deliberately ask for objections, possible criticisms, and ways to test them. You spot your biases, strengthen your idea if it holds — or adjust it before it crumbles in the real world.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Actively seeking objections improves the quality of reasoning. This approach reduces blind spots, limits certain biases, and makes decisions more robust. It is critical thinking in action. (Hattie &amp;amp; Timperley, 2007)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2696.png&quot; alt=&quot;⚖&quot; style=&quot;height: 1em&quot;&gt;  10. “Between these 2 options, which should I choose?”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You hesitate without daring to clearly articulate your doubt. You stay stuck, hesitate for a long time, and sometimes decide without explicit criteria.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You ask for a structured comparison: criteria, advantages, risks, trade-offs, use cases. You decide better, with a more reasoned and coherent choice.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Asking for an opinion is not always a sign of weakness — it can signal discernment. The quality of a decision increases when it rests on explicit criteria rather than unverified intuition. (Kahneman, 2011)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1fac2.png&quot; alt=&quot;🫂&quot; style=&quot;height: 1em&quot;&gt;  11. “Help me without judgment”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You don’t voice this need because you think you should handle your confusion alone. You push through, learn less well, and risk closing off instead of staying open to learning.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You clearly state that you want calm, non-judgmental, progressive guidance. You become a learner again. Your real questions surface. A constructive dynamic takes hold.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;Even in front of a machine, we sometimes retain social reactions. But since the relational cost is lower, it becomes easier to ask for a reassuring framework — and within that framework, authentic learning becomes possible again. (Edmondson, 1999)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f9d0.png&quot; alt=&quot;🧐&quot; style=&quot;height: 1em&quot;&gt;  12. “What if you are wrong?”&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/274c.png&quot; alt=&quot;❌&quot; style=&quot;height: 1em&quot;&gt;  Without AI&lt;/p&gt;



&lt;p&gt;You verify through your usual sources, your experience, or the opinion of others — sometimes in a less structured or slower way.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/2705.png&quot; alt=&quot;✅&quot; style=&quot;height: 1em&quot;&gt;  With AI&lt;/p&gt;



&lt;p&gt;You can ask for sources, assumptions, limitations, points of uncertainty, and a verification method. You use AI as an exploration tool, not an absolute authority.&lt;/p&gt;



&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f52c.png&quot; alt=&quot;🔬&quot; style=&quot;height: 1em&quot;&gt;  What the research says&lt;/p&gt;



&lt;p&gt;A lower social cost of discussion must not suppress critical thinking. On the contrary: the easier the exchange, the more important it becomes to verify, compare, and validate before deciding. A fluent answer is not necessarily a correct one. (Shute, 2008)&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;─────────────────────────────────&lt;/p&gt;



&lt;p&gt;In truth, these questions take courage&lt;/p&gt;



&lt;p&gt;When someone asks “what exactly is that?” or “I’m starting from scratch,” they’re not necessarily showing a lack of ability. They’re often showing a genuine willingness to actually understand. What blocks most people, most of the time, isn’t a lack of intelligence. It’s the fear of exposure.&lt;/p&gt;



&lt;p&gt;” Avoiding help-seeking out of fear of others’ judgment deprives the learner of essential resources — while adaptive help-seeking is directly linked to better outcomes. ”  — Ryan &amp;amp; Shin, Help-seeking tendencies during early adolescence (2011)&lt;/p&gt;



&lt;p&gt;AI, used thoughtfully, replaces neither human pedagogy nor intellectual rigor. But it offers something valuable: a space where you can start small, try again often, ask simply, ask clearly, ask for an objection, ask for verification. Without putting your image on the line.&lt;/p&gt;



&lt;p&gt;And sometimes, that’s exactly what it takes for learning to stop being a performance — and become real understanding again.&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;p&gt;─────────────────────────────────&lt;/p&gt;



&lt;p&gt;References&lt;/p&gt;



&lt;p&gt;Atkinson, R. K., Derry, S. J., Renkl, A., &amp;amp; Wortham, D. (2000). Learning from examples: Instructional principles from the worked examples research. Review of Educational Research, 70(2), 181–214.&lt;/p&gt;



&lt;p&gt;Chi, M. T. H., Bassok, M., Lewis, M. W., Reimann, P., &amp;amp; Glaser, R. (1989). Self-explanations: How students study and use examples in learning to solve problems. Cognitive Science, 13(2), 145–182.&lt;/p&gt;



&lt;p&gt;Edmondson, A. (1999). Psychological Safety and Learning Behavior in Work Teams. Administrative Science Quarterly, 44(2), 350–383.&lt;/p&gt;



&lt;p&gt;Hattie, J., &amp;amp; Timperley, H. (2007). The Power of Feedback. Review of Educational Research, 77(1), 81–112.&lt;/p&gt;



&lt;p&gt;Kahneman, D. (2011). Thinking, Fast and Slow. Farrar, Straus and Giroux.&lt;/p&gt;



&lt;p&gt;Ryan, A. M., &amp;amp; Shin, H. (2011). Help-seeking tendencies during early adolescence. Learning and Instruction, 21(2), 247–256.&lt;/p&gt;



&lt;p&gt;Shute, V. J. (2008). Focus on Formative Feedback. Review of Educational Research, 78(1), 153–189.&lt;/p&gt;



&lt;p&gt;Sweller, J. (1988). Cognitive load during problem solving: Effects on learning. Cognitive Science, 12(2), 257–285.&lt;/p&gt;</summary><author><name>Emna Ayadi</name></author><source gr:stream-id="feed/https://emnaayadi.com/feed/"><id>tag:google.com,2005:reader/feed/https://emnaayadi.com/feed/</id><title type="html">Emna Ayadi</title><link rel="alternate" href="https://emnaayadi.wordpress.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776925320000"><id gr:original-id="http://testpappy.wordpress.com/?p=1793">tag:google.com,2005:reader/item/000005360000006f</id><category term="Uncategorized"></category><title type="html">Hey Siri, is AI Fatigue a Thing?</title><published>2026-04-23T06:22:00Z</published><updated>2026-04-23T06:22:00Z</updated><link rel="alternate" href="https://testpappy.wordpress.com/2026/04/23/hey-siri-is-ai-fatigue-a-thing/" type="text/html"></link><summary type="html">&lt;p&gt;The other day I scrolled through my LinkedIn feed and noticed something. AI, AI, AI. Three out of four posts are about AI in one way or the other. New tools, new prompts, new ways to be more productive. And somewhere between the tenth and twentieth post, a word popped into my head: AI fatigue.&lt;/p&gt;



&lt;p&gt;So I asked Bing: “Is AI fatigue already a thing?” The answer came back in capital letters: YES. Together with, of course, an AI-generated summary. The irony wasn’t lost on me.&lt;/p&gt;



&lt;p&gt;Turns out, since 2025 there are actual reports and studies about people suffering from AI fatigue. AI fatigue, as it turns out, is not just one thing. It’s a whole family of exhaustions. (1) There’s the constant pressure to adopt yet another tool, to keep up with updates and new features. (2) There’s the cognitive drain of reviewing AI output instead of creating, turning us from makers into judges. (3) There’s the endless flood of AI-generated “slop”, filling our feeds with hollow noise and fake news.(4)  And there’s the sheer hype fatigue, the relentless drumbeat of AI everywhere you look. Four flavors of exhaustion, and most of us are tasting multiple of them at once.&lt;br&gt;Even though this post is triggered by number (4), this post focuses on (1) and (2).&lt;/p&gt;



&lt;p&gt;What triggered this reflection was a report from Anthropic titled “Estimating AI productivity gains.” The numbers are impressive and frightening. Current AI models could increase US labor productivity growth by 1.8% annually over the next decade. That would double the growth rate we’ve seen since 2019. The median task shows 80% time savings. Sounds like progress, right?&lt;/p&gt;



&lt;p&gt;But here’s the question nobody seems to be asking. Progress for whom?&lt;/p&gt;



&lt;p&gt;From news articles and podcasts, I’m hearing something different. Management has discovered a new instrument. And it’s not being used to make work easier or more meaningful. It’s being used to squeeze more out of people. Faster. More. More efficient. At any cost. There’s this constant pressure now, this unspoken threat hanging over every desk: AI could replace you. So you better speed up. You better adopt. You better produce.&lt;/p&gt;



&lt;p&gt;It feels less like a tool and more like a whip, like a threat.&lt;/p&gt;



&lt;p&gt;And if you look at it from a purely capitalistic perspective, it makes sense. Companies are not in the business of keeping humans healthy and happy. They’re in the business of generating value. And right now, AI promises to generate more value with less human involvement. Which means the humans can produce more and more output in the same time. They just need to focus on the parts that AI can’t solve yet, and use AI as efficient as possible for the rest. &lt;/p&gt;



&lt;p&gt;And the human cost? AI fatigue is real. People are being forced to use tools they don’t understand, don’t trust, or simply don’t like. Some companies even reward the employees with the highest token usage. The pressure mounts. The exhaustion grows. We’re optimizing productivity at the expense of wellbeing. We’re measuring output while ignoring the people producing it. And with tokenmaxxing you only guarantee two things. More income for AI providers and a warmer planet thanks to unnecessary resource use.&lt;/p&gt;



&lt;p&gt;Proponents say that AI handles the stupid and easy jobs, so that humans can focus on the tough parts. But constantly working on the tough parts is draining energy. And work models don’t account for that. Managers now expect you to work 40+ hours a week on the tough parts only.&lt;br&gt;In a good world the work days would become shorter, because people with the help of AI can now manage 40 hours of work in let’s say 25 hours. So why not cut the work week down to 30 hours or less. People sometimes need a few stupid tasks to regenerate mentally. Or they need other means. Like longer breaks.&lt;/p&gt;



&lt;p&gt;Professional athletes don’t train all day the hard moves and tactics. They also train the simple things, the basics. Because the simple things are the foundation for the hard things. By outsourcing the foundation you will lose a vital part of the package. &lt;br&gt;It’s like when an F1 drivers uses his F1 car to get to the train station or running errands. Driving the whole time at maximum speed.&lt;/p&gt;



&lt;p&gt;I don’t have a neat answer here. But I do have a question: Where does this end? Is “more productivity” really the goal we should be chasing? Or do we need a different conversation entirely, one about what good work actually means, about sustainable pace, about treating people as humans rather than resources to be optimized?&lt;/p&gt;



&lt;p&gt;I know that companies need to make money. But for the long run, maybe it’s time to stop asking “How can AI make us more productive?” and start asking “What kind of work do we actually want to do?” and “How can we balance work and life in these new times?”&lt;/p&gt;&lt;p style=&quot;clear: both&quot;&gt;&lt;/p&gt;&lt;p data-bqr-info=&quot;attachment&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://testpappy.wordpress.com/wp-content/uploads/2026/04/pexels-photo-22046203.jpeg&quot; alt=&quot;man in shirt lying down on table at office&quot;&gt;&lt;/p&gt;</summary><author><name>Patrick</name></author><source gr:stream-id="feed/https://testpappy.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/https://testpappy.wordpress.com/feed/</id><title type="html">Test Pappy</title><link rel="alternate" href="https://testpappy.wordpress.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776916800000"><id gr:original-id="https://glebbahmutov.com/blog/upgrade-cypress-to-typescript-v6/">tag:google.com,2005:reader/item/0000097e00000272</id><category term="products"></category><category term="cypress"></category><category term="typescript"></category><title type="html">Upgrade Cypress To TypeScript v6</title><published>2026-04-23T04:00:00Z</published><updated>2026-04-23T04:00:00Z</updated><link rel="alternate" href="https://glebbahmutov.com/blog/upgrade-cypress-to-typescript-v6/" type="text/html"></link><summary type="html">&lt;p&gt;Finally, it has happened. Cypress &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://on.cypress.io/changelog#15-14-0&quot;&gt;v15.14&lt;/a&gt; supports TypeScript v6. This is a big deal - TypeScript v6 is the last step before TypeScript v7 which is implemented in Go and is &lt;em&gt;much faster&lt;/em&gt;. By the way, you can try &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-beta/&quot;&gt;TypeScript v7 beta today&lt;/a&gt;. So what do you need to switch your projects to use TS v6 with Cypress? It is pretty straightforward:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;check out the TypeScript v6 changes, for example &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://gist.github.com/privatenumber/3d2e80da28f84ee30b77d53e1693378f&quot;&gt;this is a good summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;switch module resolution from &amp;quot;node&amp;quot; to &amp;quot;bundler&amp;quot; and let Cypress use WebPack to bundle the transpiled code&lt;/li&gt;&lt;/ul&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;  {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &amp;quot;compilerOptions&amp;quot;: {&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;-     &amp;quot;moduleResolution&amp;quot;: &amp;quot;node&amp;quot;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;+     &amp;quot;moduleResolution&amp;quot;: &amp;quot;bundler&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    }&lt;/span&gt;&lt;br&gt;&lt;span&gt;  }&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;&lt;li&gt;remove the &amp;quot;target&amp;quot; transpile option, since it is assumed to be the current ES standard (&lt;code&gt;es2025&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;remove the &lt;code&gt;allowSyntheticDefaultImports: true&lt;/code&gt; option, since it defaults to it&lt;/li&gt;&lt;li&gt;remove the &lt;code&gt;baseUrl&lt;/code&gt; option UNLESS you are using &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://glebbahmutov.com/blog/using-ts-aliases-in-cypress-tests/&quot; title=&quot;TypeScript aliases in your specs&quot;&gt;TypeScript aliases in your specs&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you are using path aliases in your specs like this:&lt;/p&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;tsconfig.json&lt;/span&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;span&gt;7&lt;/span&gt;&lt;br&gt;&lt;span&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;quot;compilerOptions&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;&amp;quot;paths&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;quot;@support/*&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;quot;./cypress/support/*&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;quot;@fixtures/*&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;quot;./cypress/fixtures/*&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;cypress/e2e/cart/add-to-cart.cy.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt; { &lt;span&gt;LoginPage&lt;/span&gt; } &lt;span&gt;from&lt;/span&gt; &lt;span&gt;&amp;apos;@support/pages/login.page&amp;apos;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt; { &lt;span&gt;InventoryPage&lt;/span&gt; } &lt;span&gt;from&lt;/span&gt; &lt;span&gt;&amp;apos;@support/pages/inventory.page&amp;apos;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;Then without &lt;code&gt;baseUrl&lt;/code&gt; the Webpack gets lost trying to find the import 🙁&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/upgrade-cypress-to-typescript-v6/path-alias-error.png&quot; alt=&quot;WebPack cannot find TS aliased path import&quot;&gt;&lt;/p&gt;&lt;p&gt;So for now, put the &lt;code&gt;baseUrl&lt;/code&gt; back into your &lt;code&gt;tsconfig.json&lt;/code&gt; and just point at the current &lt;code&gt;tsconfig.json&lt;/code&gt; folder. Add &lt;code&gt;&amp;quot;ignoreDeprecations&amp;quot;: &amp;quot;6.0&amp;quot;&lt;/code&gt; option to avoid everything screaming at you&lt;/p&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;tsconfig.json&lt;/span&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;span&gt;7&lt;/span&gt;&lt;br&gt;&lt;span&gt;8&lt;/span&gt;&lt;br&gt;&lt;span&gt;9&lt;/span&gt;&lt;br&gt;&lt;span&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;quot;compilerOptions&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;&amp;quot;baseUrl&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;&amp;quot;./&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;&amp;quot;ignoreDeprecations&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;&amp;quot;6.0&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;&amp;quot;paths&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;quot;@support/*&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;quot;./cypress/support/*&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;quot;@fixtures/*&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;quot;./cypress/fixtures/*&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;All relative paths in the &lt;code&gt;paths&lt;/code&gt; map are relative to the &lt;code&gt;tsconfig.json&lt;/code&gt; file.&lt;/p&gt;&lt;p&gt;Happy TypeScripting!&lt;/p&gt;</summary><author><name>Gleb Bahmutov</name></author><source gr:stream-id="feed/https://glebbahmutov.com/blog/atom.xml"><id>tag:google.com,2005:reader/feed/https://glebbahmutov.com/blog/atom.xml</id><title type="html">Better world by better software</title><link rel="alternate" href="https://glebbahmutov.com/blog/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776895200000"><id gr:original-id="https://scrolltest.com/?p=7211">tag:google.com,2005:reader/item/000004440000019b</id><category term="Testing"></category><title type="html">Flaky Tests Are a Trust Problem: How to Diagnose, Quarantine, and Permanently Fix Unreliable Tests</title><published>2026-04-22T22:00:00Z</published><updated>2026-04-22T22:00:00Z</updated><link rel="alternate" href="https://scrolltest.com/flaky-tests-trust-problem-diagnose-quarantine-fix-unreliable-tests/" type="text/html"></link><summary type="html">&lt;p&gt;A failing test is useful. A flaky test is dangerous. This guide covers the trust erosion cycle, root cause diagnosis, quarantine strategies, and how one team cut flakiness from 30% to under 2%.&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com/flaky-tests-trust-problem-diagnose-quarantine-fix-unreliable-tests/&quot;&gt;Flaky Tests Are a Trust Problem: How to Diagnose, Quarantine, and Permanently Fix Unreliable Tests&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com&quot;&gt;Software Testing &amp;amp; Automation&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Pramod Dutta</name></author><source gr:stream-id="feed/https://scrolltest.com/feed/"><id>tag:google.com,2005:reader/feed/https://scrolltest.com/feed/</id><title type="html">Software Testing &amp; Automation</title><link rel="alternate" href="https://scrolltest.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776879962753"><id gr:original-id="tag:blogger.com,1999:blog-3868566217808655382.post-8181651375841637744">tag:google.com,2005:reader/item/000002c50000045e</id><category term="Contract Testing"></category><category term="Pact.io"></category><title type="html">The History of Contract Testing with Pact.io</title><published>2026-04-22T17:46:02Z</published><updated>2026-04-22T17:46:02Z</updated><link rel="alternate" href="https://www.tjmaher.com/2026/04/the-history-of-contract-testing-with.html" type="text/html"></link><summary type="html">&lt;div&gt;Lately, I&amp;apos;ve been watching a lot of lectures about Contract Testing and Pact.io, trying to prepare for an upcoming job interview. When diving into a new toolset I can never simply jump into the code. I need to know: Why was this toolset created? What problem did it solve? How was this tool created? How did this toolset evolve?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;A few days ago, I blogged about &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.tjmaher.com/2026/04/integrated-tests-are-scam-lecture-that.html&quot;&gt;Integrated Tests are a Scam: The Lecture That Sparked Pact.io&lt;/a&gt; talking about J. B. Rainsberger&amp;apos;s 2013 lecture. Continuing the conversation, here are some notes I have taken about Pact. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;span&gt;&lt;a name=&quot;article-h-3_pS7BqktkEIV_CNK8GijI4Gk-more&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;The History of Pact.io &lt;/h2&gt;&lt;div&gt;According to &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://docs.pact.io/history&quot;&gt;Pact Docs / History&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;quot;Pact was originally written by a development team (including Ron Holshausen from DiUS) at &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://realestate.com.au&quot;&gt;realestate.com.au&lt;/a&gt; in 2013. They were trying to solve the problem of how to do integration testing for their new Ruby microservices architecture, and they threw together a codebase that was to become the first Pact implementation. As the team was writing Ruby microservices, the serialization of the &amp;quot;matching logic&amp;quot; (e.g. regular expressions) was done using Ruby specific code. The team was under the pump to finish their actual customer deliverable, so they got their Pact MVP working, and left it at that.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;quot;A few months later Beth Skurrie from DiUS joined the one of the teams that was working with the Pact authors&amp;apos; team. She had recently seen a talk by J.B.Rainsberger entitled &amp;apos;Integration tests are a scam&amp;apos;, which promoted the concept of &amp;apos;collaboration&amp;apos; and &amp;apos;contract&amp;apos; tests, so she was immediately interested when she was introduced to Pact. After trying (as most people do) to convince the authors that the provider should be the contract writer, she was soon convinced by Brent Snook, one of the original authors, of the value of consumer driven contracts. At this stage, she realised that what was missing in the current implementation was the ability to run the same request under different conditions, and &amp;quot;provider states&amp;quot; were born.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;quot;[...] Pact spread around the codebases in the wider program of work at &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://realestate.com.au&quot;&gt;realestate.com.au&lt;/a&gt;, until it hit its first Java microservice. &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://realestate.com.au&quot;&gt;realestate.com.au&lt;/a&gt; had many JVM projects, so a group of DiUS consultants (including Ron Holshausen again) started the pact-jvm project on a hack day. It was at this stage that the authors realized that the Rubyisms in the format were going to have to be replaced by a non-language specific format, and the idea of the v2 pact-specification arose (though it would take a while before it became reality)&amp;quot;.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;SmartBear Acquires Pact.io &lt;/h2&gt;&lt;div&gt;&lt;div&gt;In April 2022, DiUS sold PactFlow to SmartBear, the company behind Swagger, ReadyAPI, and other API toolsets. SmartBear has then been the steward for Pact, providing a lot of information about the toolset:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Docs.Pact.io&lt;/b&gt; has a basic Introduction &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://docs.pact.io/&quot;&gt;https://docs.pact.io/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;SmartBear University&lt;/b&gt; at &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://smartbear.com/academy/&quot;&gt;https://smartbear.com/academy/&lt;/a&gt; offers simple courses in Introduction to Contract Testing &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://smartbear.com/academy/pactflow/introduction-to-contract-testing&quot;&gt;https://smartbear.com/academy/pactflow/introduction-to-contract-testing&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Swagger Contract Testing University&lt;/b&gt;: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://support.smartbear.com/swagger/contract-testing/docs/en/swagger-contract-testing-university/overview.html&quot;&gt;https://support.smartbear.com/swagger/contract-testing/docs/en/swagger-contract-testing-university/overview.html&lt;/a&gt; offers videos and workshops on introductions to Pact, CI / CD, and Creating a Pact Plugin, along with advanced workshops.  &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;But What Is Contract Testing, according to SmartBear Academy?&lt;/h2&gt;&lt;div&gt;&lt;div&gt;Let&amp;apos;s say you have a server that provides data, such as a list of all the users on the system, sharing it through an API to a mobile app. The mobile app would be the &lt;b&gt;Consumer&lt;/b&gt;, and the server would be the &lt;b&gt;Provider&lt;/b&gt;. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;If you wanted to test that things were working correctly, according to SmartBear&amp;apos;s course, &amp;quot;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://academy.smartbear.com/content-details/319098598/2&quot;&gt;Introduction to Pact&lt;/a&gt;&amp;quot;, you can test things in isolation, breaking the test into two parts: &lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left&quot;&gt;&lt;li&gt;The Consumer talks to a mock provider, which simulates sending the data back to the consumer.  &lt;/li&gt;&lt;li&gt;Provider talks to a simulated consumer which simulates requesting the data.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Example: You don&amp;apos;t trigger a smoke alarm by setting your house on fire, and seeing if it responds. You simulate a fire by pressing the button to send the signal, and you test that the smoke alarm is triggered.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;The Consumer can talk to a mock provider and the Provider can talk to a simulated consumer.    &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Contract testing ensures that a provider is compatible with the consumer expectations of it. These needs are captured in a Contract. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Example&lt;/b&gt;: An http system would check that the provider accepts the expected requests, and that it returns the expected responses. The contract is verified against the Provider. This is Contract Testing.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;Consumer Driven Contract Testing&lt;/h2&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;When using &lt;b&gt;consumer driven contract testing&lt;/b&gt;, the consumers expectations are serialized to a contract file during the execution of its own automated tests, and then verified against a provider during the providers automated tests. The contract is generated in such a way that ties the content to the consumer code, either by use of a &amp;quot;test double&amp;quot; that records requests and expected responses and writes them to a contract. An HTTP contract would consist of request / response pairs. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;A Consumer would send a response, such as GET /orders/1234 an HTTP request, and the mock would give an http response back, such as id: 1234, and list items. This is recorded, and matched with something such as PactFlow, &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;If the actual responses match the expected responses, the contract has been successfully verified. Any mismatches show an incompatibility between Consumer and Provider.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;Provider Verification&lt;/h2&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Provider Verification Step&lt;/b&gt;: runs locally where the requests in the Contract file are played back against a REAL instance of the provider, to make sure it captures all expectations in the consumer contract. The provider team stubs out all the dependencies keeping the focus on the consumers expectations. When you include these tests in the providers own build, running on the dev build, it provides fast feedback and helps ensure that breaking changes are not committed. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;The Pact Broker&lt;/h2&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;A Pact Broker&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Open source application sharing consumer driven contacts. &lt;/li&gt;&lt;li&gt;Can be use by any contract that is serialized into JSON, but is specifically for Pact. &lt;/li&gt;&lt;li&gt;Comes with a Pact command line interface that is used to set up the contract testing workflow. &lt;/li&gt;&lt;li&gt;See &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://docs.pact.io/getting_started/sharing_pacts&quot;&gt;Sharing the Pact With Pact Broker&lt;/a&gt; (SmartBear Docs)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Contracts and verification results are sent to the Pact broker from the CI Builds on the consumer and provider. Consumer CI build generates a Pact during the run of its isolated tests, and publishes the generated Pact Broker. The Provider CI retrieves the Pact, performs the verification, publishes the results locally, back to the Broker. Consumer and Provider CI Builds check with the broker before deploying, to ensure the application version they are about to deploy are compatible of the versions already in the environment.   &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The Pact Broker: No integration tests needed. Services can be deployed independently. You can share contracts and verification results between consumer and provider projects. It can tell you which versions of the application can be deployed safely together. It versions your contracts, and ensures backward compatibility, between multiple consumer and provider versions. It also provides API documentation of your application that is guaranteed to be up to date. It also shows you how your services really interact. It also allows you to visualize your relationship between your services. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The Pact Broker can allow you to self host, or use PactFlow a SaaS package. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;CI / CD&lt;/h2&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Contract Testing can be used in CI / CD platforms, such as Jenkins. Consumer driven contract testing: Consumer pipeline, you run tests from the consumer&amp;apos;s codebase, configure a test to publish the contract to PactFlow. Then you configure a step in the provider CI / CD pipeline that takes the PactFlow that verifies the contract, publishes the results to Pactflow. Optionally, you have the step, &amp;quot;can-i-deploy&amp;quot;. Best way to use these steps is the Pact Broker Client command line interface. It allows you to create, update, and delete and query resources in PactFlow. It is available as a Docker image and a standalone executable.   &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;         &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;Happy Testing! &lt;br&gt;&lt;br&gt;
-T.J. Maher&lt;br&gt;
Software Engineer in Test&lt;br&gt;
&lt;br&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://bsky.app/profile/tjmaher1.bsky.social&quot;&gt;BlueSky&lt;/a&gt; | &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://bit.ly/tj_youtube&quot;&gt;YouTube&lt;/a&gt; | &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/tjmaher1&quot;&gt;LinkedIn&lt;/a&gt; | &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://www.tjmaher.com/p/media.html&quot;&gt;Articles&lt;/a&gt;</summary><author><name>T.J. Maher</name></author><source gr:stream-id="feed/http://www.tjmaher.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://www.tjmaher.com/feeds/posts/default</id><title type="html">Adventures in Automation</title><link rel="alternate" href="https://www.tjmaher.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776875306010"><id gr:original-id="tag:blogger.com,1999:blog-3868566217808655382.post-5150488597748637243">tag:google.com,2005:reader/item/000002c50000045d</id><category term="Playwright"></category><title type="html">What happens when you pair Playwright with something other than TypeScript?</title><published>2026-04-22T16:28:26Z</published><updated>2026-04-22T16:28:26Z</updated><link rel="alternate" href="https://www.tjmaher.com/2026/04/what-happens-when-you-pair-playwright.html" type="text/html"></link><summary type="html">&lt;div style=&quot;clear: both; text-align: center&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxRwMu1BVhFlU2ZWeLTWPdpct0XSBLpKsXlk_GsR0LgtR5zMEeV3lz1dNuo5pWr_z6tVfWEdY7mMW3nDTlMKPBYqKsuBcw9ZWiiNd7xfxuq0TT-DAlGqq8S0vM9TgnGRfVRhghmIXB9LCgtwP35dx-tSiKvOYlCkPMPyDAPyP6GbB23JS4Pe1ZMhIt6IA/s1536/playwright_and_typescript.png&quot; style=&quot;margin-left: 1em; margin-right: 1em&quot;&gt;&lt;img width=&quot;640&quot; height=&quot;426&quot; style=&quot;border: 0px solid black&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxRwMu1BVhFlU2ZWeLTWPdpct0XSBLpKsXlk_GsR0LgtR5zMEeV3lz1dNuo5pWr_z6tVfWEdY7mMW3nDTlMKPBYqKsuBcw9ZWiiNd7xfxuq0TT-DAlGqq8S0vM9TgnGRfVRhghmIXB9LCgtwP35dx-tSiKvOYlCkPMPyDAPyP6GbB23JS4Pe1ZMhIt6IA/w640-h426/playwright_and_typescript.png&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;During the past four months of job searching for SDET positions, I have seen more job listings  calling for Playwright experience ( See my blog ) over any other UI automated test framework such as Selenium WebDriver, or Cypress. Most of the time, I see TypeScript paired with Playwright ... But every now and then, I see companies pair Playwright with C# or Java. Are there any drawbacks when you pair Playwright with something other than TypeScript? &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;When I asked &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwrightsolutions.com/author/butch/&quot;&gt;Butch Mayhew&lt;/a&gt;, Playwright Ambassador, what they would get if they don&amp;apos;t use TypeScript, he said, &amp;quot;In the end they are using &amp;apos;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/library&quot;&gt;Playwright Library&lt;/a&gt;&amp;apos; so just the browser integration. They are missing out on all the good test things that &amp;apos;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/api/class-test&quot;&gt;Playwright Test&lt;/a&gt;&amp;apos; brings to the table, reports, traces, videos, before/after block, describe, test steps/fixtures etc. [...] you lose all the great out of the box features. You have to bring your own test runner in Java&amp;quot;. &lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;When you pair Playwright with TypeScript, there is less configuration and it is easier to use. According to the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/test-typescript&quot;&gt;Playwright Docs / TypeScript Introduction&lt;/a&gt;, &amp;quot;Playwright supports TypeScript out of the box. You just write tests in TypeScript, and Playwright will read them, transform to JavaScript and run&amp;quot;. &lt;span&gt;&lt;a name=&quot;article-c8r3Lr00pHAM8anpWp62FX-cqBE-more&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;As far as setting up Test Runners, you can still use &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/python/docs/test-runners&quot;&gt;Python with PyTest&lt;/a&gt;, Java with &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/java/docs/test-runners&quot;&gt;JUnit or TestNG&lt;/a&gt;, and C# with .&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/dotnet/docs/test-runners&quot;&gt;NET&amp;apos;s MSTest, NUnit, xUnit&lt;/a&gt;. The problem is that you are limiting yourself to the core library, and not using the platform&amp;apos;s native runners so you don&amp;apos;t get the built in features to automate browsers, mock APIs, make assertions and add HTML reports.  &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;From what I have researched, this means... &lt;br&gt;&lt;div&gt;&lt;br&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;Playwright + TypeScript&lt;/th&gt;
      &lt;th&gt;Playwright + Java&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Test Runner&lt;/td&gt;
      &lt;td&gt;Uses the native &lt;strong&gt;Playwright Test&lt;/strong&gt; runner (optimized for speed/parallelism).&lt;/td&gt;
      &lt;td&gt;Relies on third-party frameworks like &lt;strong&gt;JUnit&lt;/strong&gt; or &lt;strong&gt;TestNG&lt;/strong&gt;.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Boilerplate&lt;/td&gt;
      &lt;td&gt;Low; native &lt;code&gt;async/await&lt;/code&gt; and built-in fixtures make code concise.&lt;/td&gt;
      &lt;td&gt;Higher; more verbose syntax and manual object instantiation.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;New Features&lt;/td&gt;
      &lt;td&gt;First to receive updates; it is the framework&amp;apos;s &amp;quot;home&amp;quot; language.&lt;/td&gt;
      &lt;td&gt;Feature parity follows shortly after the TS release.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Tooling&lt;/td&gt;
      &lt;td&gt;Deep integration with &lt;strong&gt;VS Code&lt;/strong&gt; (&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/getting-started-vscode&quot;&gt;official extension&lt;/a&gt;, UI mode).&lt;/td&gt;
      &lt;td&gt;Standard IDE support (IntelliJ/Eclipse) via generic plugins.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Debugging&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/trace-viewer-intro&quot;&gt;Trace Viewer&lt;/a&gt;&lt;/strong&gt; and time-travel debugging out of the box.&lt;/td&gt;
      &lt;td&gt;Requires more manual configuration to generate and view traces.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Reporting&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/test-reporters&quot;&gt;HTML reports&lt;/a&gt;&lt;/strong&gt; included by default.&lt;/td&gt;
      &lt;td&gt;Requires external libraries (like Allure) or runner-specific reporters.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Parallelism&lt;/td&gt;
      &lt;td&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/test-parallel&quot;&gt;Built-in&lt;/a&gt; and easy to configure via &lt;code&gt;playwright.config.ts&lt;/code&gt;.&lt;/td&gt;
      &lt;td&gt;Managed via the test runner (e.g., Maven Surefire or TestNG).&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Test Agents&lt;/td&gt;
      &lt;td&gt;Includes built-in &lt;strong&gt;Planner, Generator, and Healer&lt;/strong&gt; &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/test-agents&quot;&gt;test agents&lt;/a&gt;.&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Manual execution only.&lt;/strong&gt; AI agents are not currently available for Java.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Self-Healing&lt;/td&gt;
      &lt;td&gt;Native AI-driven &lt;strong&gt;self-healing selectors&lt;/strong&gt; are supposed to fix broken tests in real-time.&lt;/td&gt;
      &lt;td&gt;No native self-healing; requires manual locator updates.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AI Integration&lt;/td&gt;
      &lt;td&gt;Direct support for &lt;strong&gt;Model Context Protocol (&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/mcp/introduction&quot;&gt;MCP&lt;/a&gt;)&lt;/strong&gt; for deep AI agency.&lt;/td&gt;
      &lt;td&gt;Basic integration via Copilot; lacks native protocol hooks.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Authoring&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Natural language test generation&lt;/strong&gt; via plain-English notes.&lt;/td&gt;
      &lt;td&gt;Requires manual coding of every step using Java syntax.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Debug Insights&lt;/td&gt;
      &lt;td&gt;AI-driven &lt;strong&gt;triage assistants&lt;/strong&gt; summarize failures in plain language.&lt;/td&gt;
      &lt;td&gt;Traditional logs and stack traces; requires manual analysis.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left&quot;&gt;Related Articles:&lt;/h3&gt;&lt;ul style=&quot;text-align: left&quot;&gt;&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://modelcontextprotocol.io/docs/getting-started/intro&quot;&gt;What is the Model Context Protocol (MCP)?&lt;/a&gt; from ModelContextProtocol.io&lt;/li&gt;&lt;/ul&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;Benefits for using Playwright + TypeScript:&lt;/h2&gt;&lt;ul style=&quot;text-align: left&quot;&gt;&lt;li&gt;&lt;b&gt;Native Test Runner&lt;/b&gt;: The official &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/languages&quot;&gt;Playwright Supported Languages&lt;/a&gt; guide notes that while core automation is shared across languages, the &amp;quot;best experience&amp;quot; comes from the recommended native runners. The Playwright Test runner is unique to the TypeScript/Node.js ecosystem and provides built-in parallelization and fixtures.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Java Integration&lt;/b&gt;: The &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/java/docs/test-runners&quot;&gt;Playwright Java Documentation&lt;/a&gt; confirms that for Java, users must &amp;quot;hook up Playwright to your favorite Java test runner&amp;quot; like JUnit or TestNG.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Boilerplate &amp;amp; Syntax&lt;/b&gt;: Articles on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/pulse/optimal-language-choices-playwright-why-javascript-typescript-mane-x80ff&quot;&gt;LinkedIn&lt;/a&gt; and &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://medium.com/@rsb1201/why-you-should-choose-typescript-for-playwright-908b4dfd1afc&quot;&gt;Medium&lt;/a&gt; highlight that TypeScript uses native async/await for concise code, whereas Java&amp;apos;s syntax is more verbose for similar operations.&lt;/li&gt;&lt;li&gt;&lt;b&gt;New Feature Adoption&lt;/b&gt;: Community consensus on platforms like &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.reddit.com/r/QualityAssurance/comments/1c4slf2/why_is_jsts_recommended_over_java_when_using/&quot;&gt;Reddit&lt;/a&gt; reflects that because Playwright is written in TypeScript, new features and tutorials almost always arrive there first. &lt;/li&gt;&lt;/ul&gt;&lt;br&gt;AI Features: &lt;div&gt;&lt;ul style=&quot;text-align: left&quot;&gt;&lt;li&gt;&lt;b&gt;Model Context Protocol (MCP)&lt;/b&gt;: The &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/getting-started-mcp&quot;&gt;Official Playwright MCP Documentation&lt;/a&gt; specifies that the MCP server provides browser automation capabilities through accessibility snapshots for LLMs, primarily within the Node.js/TypeScript stack. &lt;/li&gt;&lt;li&gt;&lt;b&gt;AI-Assisted Debugging&lt;/b&gt;: Microsoft&amp;apos;s &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://developer.microsoft.com/blog/the-complete-playwright-end-to-end-story-tools-ai-and-real-world-workflows&quot;&gt;Developer Blog&lt;/a&gt; showcases the &amp;quot;Fix with AI&amp;quot; button and AI-assisted test fixes as part of the Playwright for VS Code extension, which is tailored for the TypeScript ecosystem.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Self-Healing &amp;amp; Agents&lt;/b&gt;: Playwright + AI has supposed advanced self-healing capabilities. Tools like the &amp;quot;execute automation Playwright MCP server&amp;quot; are being used to build agent-driven frameworks without manual coding, and are part of the Node.js/TypeScript environment.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Playwright works across languages. Whether it works &lt;em&gt;well&lt;/em&gt; depends on what the team needs from it.&lt;/p&gt;
&lt;p&gt;For teams already committed to Java, the library layer covers the core use case. For teams starting fresh or looking to leverage Playwright&amp;apos;s full feature set, including its reporting, AI tooling, and agent capabilities, TypeScript is where the platform is built and where new features arrive first.&lt;/p&gt;&lt;div&gt;&lt;br&gt;Happy Testing! &lt;br&gt;&lt;br&gt;
-T.J. Maher&lt;br&gt;
Software Engineer in Test&lt;br&gt;
&lt;br&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://bsky.app/profile/tjmaher1.bsky.social&quot;&gt;BlueSky&lt;/a&gt; | &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://bit.ly/tj_youtube&quot;&gt;YouTube&lt;/a&gt; | &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/tjmaher1&quot;&gt;LinkedIn&lt;/a&gt; | &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://www.tjmaher.com/p/media.html&quot;&gt;Articles&lt;/a&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: left&quot;&gt;Related Topics on TJMaher.com:&lt;/h2&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.tjmaher.com/search/label/Playwright&quot;&gt;Playwright articles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.tjmaher.com/2026/02/new-project-creating-automated-test.html&quot;&gt;Playwright + C#&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;</summary><author><name>T.J. Maher</name></author><source gr:stream-id="feed/http://www.tjmaher.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://www.tjmaher.com/feeds/posts/default</id><title type="html">Adventures in Automation</title><link rel="alternate" href="https://www.tjmaher.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776873600000"><id gr:original-id="https://failureisfeedback.beehiiv.com/p/stec-deepdive-module-3-4-0-how-to-deliver-bad-news">tag:google.com,2005:reader/item/00000d7e0000002c</id><title type="html">STEC Deepdive: Module 3.4.0 - How to deliver bad news</title><published>2026-04-22T16:00:00Z</published><updated>2026-04-22T16:00:00Z</updated><link rel="alternate" href="https://failureisfeedback.beehiiv.com/p/stec-deepdive-module-3-4-0-how-to-deliver-bad-news" type="text/html"></link><summary type="html">&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; alt src=&quot;https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/20cf556e-8f01-4671-8f2a-77c3bc61a5d0/giphy.gif?t=1776813696&quot;&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left&quot;&gt;Continuing my journey through the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.ministryoftesting.com/certification-paths/mot-software-testing-essentials-certificate&quot; rel=&quot;noopener noreferrer nofollow&quot;&gt;MoT Software Testing Essentials Certificate&lt;/a&gt;, there is a section on feedback, both giving and receiving, that caught my attention. &lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;Feedback is a gift in &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://failureisfeedback.beehiiv.com/p/quality-experience-thoughts-on-feedback&quot; rel=&quot;noopener noreferrer nofollow&quot;&gt;nearly every circumstance&lt;/a&gt;. One of the worst things that could happen in life is never receiving feedback. &lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;For instance, I got braces for my teeth last October. I’ve instructed every member of my family to tell me if I have something in my teeth. Eating is hard. Worse is not knowing there’s something stuck in there and learning about it later. My teeth are a work in progress. &lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;So are we. &lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;As QA professionals, we need to be able to give and receive clear and actionable feedback. When we signed the contract, we were given the role and the right to deliver feedback. Sometimes, that feedback won’t be good. We’re the ones pointing out who has what stuck in their “braces”.&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;How you deliver feedback to your teammates can make all the difference.&lt;/p&gt;&lt;h3 style=&quot;text-align: left&quot; id=&quot;article-pU_kLjaLjXa_cCXIH1vaJCFS_-A-know-your-audience&quot;&gt;Know your audience&lt;/h3&gt;&lt;h4 style=&quot;text-align: left&quot; id=&quot;article-pU_kLjaLjXa_cCXIH1vaJCFS_-A-crossteam-discussions&quot;&gt;&lt;i&gt;Cross-team discussions&lt;/i&gt;&lt;/h4&gt;&lt;p style=&quot;text-align: left&quot;&gt;These days, I post in the organization’s public project-specific channels to provide updates on the feature being tested. Knowing that my posts will reach different types of team members across departments, I provide a concise summary on the status of what’s been tested, what remains, a link to the report where everyone can view the test cases, and a list of defects found. Those interested can view the resources at any point. I do use emojis because these help (in my opinion) make the post more readable and relatable. Though it may depend on your work culture. If emojis are frowned on where you work, refrain from using them in more public settings.&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;Be ready and willing to answer questions about reports. And, at all possible, avoid DMs. If a question is being asked about a project, take it to the project channel. Avoid the silos at all costs.&lt;/p&gt;&lt;h4 style=&quot;text-align: left&quot; id=&quot;article-pU_kLjaLjXa_cCXIH1vaJCFS_-A-what-if-the-feedback-i-need-to-give&quot;&gt;&lt;i&gt;What if the feedback I need to give is really bad?&lt;/i&gt;&lt;/h4&gt;&lt;p style=&quot;text-align: left&quot;&gt;Be honest. Be brief. If you made a misstep or missed something during testing, own it. I’ve apologized in public channels for forgetting something in my test plan. Then I describe what I will change in the test plans moving forward so that it’s not forgotten. Own your actions. &lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;If something is clearly broken, regardless of the environment, take it to the appropriate public channel and alert others. The goal is not to cause panic. The intent is to provide clear information about what is wrong and to alert the right people so that it can be fixed as soon as possible. Avoid using emotional words or blame. There is a difference between:&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;i&gt;“Hey, uh, y’all, Jack’s pr broke the login page…”&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;and &lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;i&gt;“I’m unable to access the login page. Can anyone verify? If so, what do we need to do to get it fixed?”&lt;/i&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left&quot; id=&quot;article-pU_kLjaLjXa_cCXIH1vaJCFS_-A-persontoperson&quot;&gt;&lt;i&gt;Person-to-person&lt;/i&gt;&lt;/h4&gt;&lt;p style=&quot;text-align: left&quot;&gt;Sometimes, I’ll need to offer feedback to a developer on their PR. Many developers want to know if their code has issues so that when released, the feedback is… crickets. A quiet release is a good release. Even then, when testing a PR, how you say it is as critical as what you say. &lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left&quot;&gt;Ask how the developer likes to receive feedback on a PR. There could be an engineering practice where all conversations regarding a code change need to be in the ticket or on the PR request. Follow whatever is normal for your organization. If there aren’t any set practices, ask them if they’d like feedback in a project channel, in the ticket, or in a DM. Being able to have open and honest conversations about the code is the goal. Wherever that is achieved best is where it should happen.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left&quot;&gt;Be clear and provide action steps. Again, DMs are fine, but it’s tempting to speak vaguely about an issue. Write down exactly what you are seeing, steps to reproduce, and provide videos or screenshots, as you do when writing tickets. Then, if you need to write an actual ticket for what you’re seeing, all you have to do is copy and paste the information you already wrote down. Easy peasy.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left&quot;&gt;Ask the next question. Yeah, &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://failureisfeedback.beehiiv.com/p/quality-insight-why-cant-we-be-friends&quot; rel=&quot;noopener noreferrer nofollow&quot;&gt;it probably does work on their machine&lt;/a&gt;. Be the one who asks why. What is the difference between your environment and mine? Earlier this week, I was seeing console errors while visiting a specific page. A dev asked if I’d pulled down the latest changes. I hadn’t. I pulled them down, the issue was fixed, and the conversation was resolved. They didn’t treat me like I was silly, and I thanked him for giving me more information. Keep it neutral. And, when you need to, keep asking the next question to figure out what is actually going on.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left&quot;&gt;Treat people as &lt;b&gt;they&lt;/b&gt; want to be treated. Some people are fine with making the occasional joke about their code changes. Some aren’t. Read the room. I am a light-hearted person. And, I’ve learned that, in hard moments, my light-heartedness can be read very wrong. Depending on your personality, hold back the jokes if you are discussing hard topics. Then, when the conversation turns light again, feel free to be your goofy self.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 style=&quot;text-align: left&quot; id=&quot;article-pU_kLjaLjXa_cCXIH1vaJCFS_-A-find-the-next-step&quot;&gt;Find the next step&lt;/h3&gt;&lt;p style=&quot;text-align: left&quot;&gt;After having hard conversations, you may need to take a break from the situation. Perhaps everyone does. Hopefully, you’ve been able to have the hard conversations in a non-blaming, actionable way. Or, maybe it went so badly. Either way, take a minute, refresh yourself, and talk to the person you had the discussion with. Find a neutral topic if you need to. Saying thank you is a great way to move on. You can say things like:&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;i&gt;“Thank you for talking that through with me. I was so confused.”&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;i&gt;“Thanks for being so quick about fixing those issues. That was awesome.”&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;i&gt;“Thanks for being willing to take the conversation to a public channel. I didn’t realize others were unsure about what to do next.”&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;One good hard conversation down. Only a million more to go. &lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;Communication is hard. Being responsible for bringing bad news can feel like a lot. In between those times, be sure to create lots of positive experiences for your teammates. That way, when you have bad news to bring, you aren’t being the Debby Downer. You&amp;apos;re the friend who doesn’t want their friend to walk around with something in their teeth.&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;Till next time…&lt;/p&gt;&lt;div&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; alt src=&quot;https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/11a8a137-9429-4638-be89-25785b86639f/giphy.gif?t=1776813726&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;noopener nofollow noreferrer&quot; href=&quot;https://failureisfeedback.beehiiv.com/subscribe&quot;&gt;&lt;span&gt; Subscribe &lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;span style=&quot;color: rgb(3, 7, 18); font-family: Helvetica, Arial, sans-serif; font-size: 16px&quot;&gt;&lt;i&gt;All my posts are free to read and clicking subscribe will bring each post to your inbox. If my work brings you joy, and you’d like to support it, you can become a subscriber by clicking the button above. If a subscription is not your thing, you can support my &lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(3, 7, 18); font-family: Helvetica, Arial, sans-serif; font-size: 16px&quot;&gt;&lt;span style=&quot;text-decoration: line-through&quot;&gt;&lt;i&gt;caffeine addiction&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(3, 7, 18); font-family: Helvetica, Arial, sans-serif; font-size: 16px&quot;&gt;&lt;i&gt; writing by clicking the button below! Thanks!&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: center&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;noopener nofollow noreferrer&quot; href=&quot;https://ko-fi.com/judymosley&quot;&gt;&lt;span&gt; Buy me a ☕️  &lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;span style=&quot;color: rgb(3, 7, 18); font-family: Helvetica, Arial, sans-serif; font-size: 16px&quot;&gt;&lt;i&gt;Written with &lt;/i&gt;&lt;/span&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.youtube.com/watch?v=B3Nfd601mH8&amp;amp;utm_source=failureisfeedback.beehiiv.com&amp;amp;utm_medium=newsletter&amp;amp;utm_campaign=stec-deepdive-module-3-4-0-how-to-deliver-bad-news&quot; rel=&quot;noopener noreferrer nofollow&quot;&gt;&lt;i&gt;Happiness is a butterfly&lt;/i&gt;&lt;/a&gt;&lt;i&gt; &lt;/i&gt;&lt;span style=&quot;color: rgb(3, 7, 18); font-family: Helvetica, Arial, sans-serif; font-size: 16px&quot;&gt;&lt;i&gt;playing in the background.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left&quot;&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;hr&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; style=&quot;text-align: center&quot; href=&quot;https://www.beehiiv.com/&quot;&gt;Powered by beehiiv&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</summary><author><name>Judy Mosley</name></author><source gr:stream-id="feed/https://rss.beehiiv.com/feeds/CaPvQSzkyC.xml"><id>tag:google.com,2005:reader/feed/https://rss.beehiiv.com/feeds/CaPvQSzkyC.xml</id><title type="html">Failure is Feedback</title><link rel="alternate" href="https://failureisfeedback.beehiiv.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776866819000"><id gr:original-id="https://cakehurstryan.com/?p=4591">tag:google.com,2005:reader/item/000002ee00000058</id><category term="Quality Engineering"></category><category term="Guest"></category><title type="html">Guest Blog: You don’t want Quality Engineers</title><published>2026-04-22T14:06:59Z</published><updated>2026-04-22T14:06:59Z</updated><link rel="alternate" href="https://cakehurstryan.com/2026/04/22/guest-blog-you-dont-want-quality-engineers/" type="text/html"></link><summary type="html">&lt;h1&gt;You don’t want Quality Engineers&lt;/h1&gt;



&lt;div style=&quot;border-width: 1px; margin-top: var(--wp--preset--spacing--30); margin-bottom: var(--wp--preset--spacing--30); padding-top: var(--wp--preset--spacing--30); padding-right: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30); padding-left: var(--wp--preset--spacing--30)&quot;&gt;
&lt;h2&gt;Foreword&lt;/h2&gt;



&lt;p style=&quot;margin-top: var(--wp--preset--spacing--30); margin-right: 0; margin-bottom: var(--wp--preset--spacing--30); margin-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0&quot;&gt;This is a guest blog by &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/luke-lattimer-rogers-86461931/?skipRedirect=true&quot; rel=&quot;noreferrer noopener&quot;&gt;Luke Lattimer-Rogers&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Luke is a quality advocate, a fantasy book author and a kick-ass dungeons and dragons player! He and I have discussed the topics of the testing community and what quality engineering means a number of times, our conversations formed the basis of my keynote talk at PeersCon 2026.&lt;/p&gt;



&lt;p&gt;Going full circle, Luke watched my talk “You’re not ready for QE”, read my blog and even watched the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/safety/go/?url=https%3A%2F%2Fyoutu.be%2FJQM-8tln-r0&amp;amp;urlhash=gbeL&amp;amp;mt=DnbHRcDYfp5dtpScYf6gceV5pI2gNDOFHVIpQGuMi180erSreU9iL_KKLk0nWjFDAy0VADfhzgUo2lJictALp8ogANdWncijZ_TT8k7UhLQTV3ZzUGhE8EwoQTmtBlpVdAHEySupJu6hDf1xmLGJf0LFp34T4fFTZw&amp;amp;isSdui=true&amp;amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_detail_base%3BRzt4K4ijRNiCD0ic9WkYMQ%3D%3D&quot; data-type=&quot;link&quot; data-id=&quot;https://www.linkedin.com/safety/go/?url=https%3A%2F%2Fyoutu.be%2FJQM-8tln-r0&amp;amp;urlhash=gbeL&amp;amp;mt=DnbHRcDYfp5dtpScYf6gceV5pI2gNDOFHVIpQGuMi180erSreU9iL_KKLk0nWjFDAy0VADfhzgUo2lJictALp8ogANdWncijZ_TT8k7UhLQTV3ZzUGhE8EwoQTmtBlpVdAHEySupJu6hDf1xmLGJf0LFp34T4fFTZw&amp;amp;isSdui=true&amp;amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_detail_base%3BRzt4K4ijRNiCD0ic9WkYMQ%3D%3D&quot; rel=&quot;noreferrer noopener&quot;&gt;Quality Talks podcast &lt;/a&gt;that I joined and wrote his own companion piece.&lt;/p&gt;



&lt;p&gt;I’m sharing his blog post, which you can also find under his LinkedIn, for it to be a long lived thought piece from him!&lt;/p&gt;
&lt;/div&gt;



&lt;p style=&quot;padding-top: var(--wp--preset--spacing--30)&quot;&gt;“In order to understand how to show value as quality professionals we need to…” &lt;em&gt;Yes!&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;“Understand what it is that engineering teams want and work to support them at that.” &lt;em&gt;Oh good point but…&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Callum and I are friends, in geekery, life and professionally. We’ve worked in similar spaces, had similar conversations, and arrived at similar places on what good quality work actually looks like. I was even lucky enough to go for a walk and hear some of his thoughts before his keynote at PeersCon 2026.&lt;/p&gt;



&lt;p&gt;I agreed. And I didn’t. So I wrote the first take on this ages ago.&lt;/p&gt;



&lt;p&gt;This is my “yes, but…”&lt;/p&gt;



&lt;p&gt;Where I think he’s wrong, and why ultimately I agree. But like he said in his talk, “Drama!”&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30)&quot;&gt;Why Framing over the Behaviour&lt;/h2&gt;



&lt;p&gt;Callum walks us through why the testing community is not ready for quality engineering because we fail to serve engineering teams. The well is poisoned by bad public messaging, and we’re accelerating it ourselves.&lt;/p&gt;



&lt;p&gt;I agree on the evidence. I disagree on the cause.&lt;/p&gt;



&lt;p&gt;For me the most damaging well-poisoning I’ve experienced didn’t come from other QAs posting bad content. It came from managers and leaders who’d already decided what a tester was before I arrived; and nothing I could do would shifted that mindset.&lt;/p&gt;



&lt;p&gt;In one of my early consultancy roles I was put in a team with a very specific role that the client had defined. Automate the tests to help a migration. I found other issues, and raised a performance risk early. I flagged it to the manager client side and was put back in my lane. Three months later performance becomes an issue and I got a call from my account manager asking why I hadn’t raised it sooner. Guess who had been taking the meeting notes.&lt;/p&gt;



&lt;p&gt;The reason this happened? I was a consultant. The manager was permanent staff. When it came to “whose word do we trust,” the answer was predetermined by my employment status. I did what Callum warns, I got put in a box and I stayed there. Yes I failed to communicate effectively. But there’s also an accountability and leadership failure behind it all.&lt;/p&gt;



&lt;p&gt;We all see reposted memes poisoning the well, but it’s not just the Quality community.&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30)&quot;&gt;What Quality Professionals Actually Do&lt;/h2&gt;



&lt;p&gt;Callum’s list of what engineering teams want from us is good. Builders, not breakers. Generalist skills. Trusted advisors. Systems thinking. Pragmatism. I agree with all of it.&lt;/p&gt;



&lt;p&gt;But he has another list, the skills he’s had to demonstrate as a Quality Engineer: colour psychology, typography, branding, cloud architecture, business analysis, OKRs, agile ceremonies, observability, AI agents, threat modelling, ethical hacking, user personas, product domain knowledge.&lt;/p&gt;



&lt;p&gt;That is not an engineering team’s skill set. It’s an organisation spanning skill set.&lt;/p&gt;



&lt;p&gt;I’ve spoken about it before in [QA as Cosplay] and Stu points out quality professionals have been doing that work since he had hair (sorry!).&lt;/p&gt;



&lt;p&gt;This isn’t new. What’s new is we keep changing the sign on the well and expecting the water to taste different.&lt;/p&gt;



&lt;p&gt;Hot take: “Quality Engineering” might be the worst possible name for what we’re describing.&lt;/p&gt;



&lt;p&gt;Engineers build software; that’s the execution stage.&lt;/p&gt;



&lt;p&gt;Quality professionals build &lt;em&gt;understanding&lt;/em&gt;; of risk, of user needs, of what good looks like before, during, and after the build. We don’t engineer quality. We cultivate it. And just like “Product Manager” crowding out “Project Manager” and “Programme Manager” made the PM acronym confusing, “QE” muddies exactly the language we need to be clear about.&lt;/p&gt;



&lt;p&gt;Callum notes that “Quality Engineering” wasn’t coined by the testing community; it was coined by engineering, a rebranding exercise to distance themselves from bad QA experiences. So testers followed an invite to a well most of us are already at, but with a new sign.&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30)&quot;&gt;What I’ve Seen vs What I Hear About&lt;/h2&gt;



&lt;p&gt;Callum interviewed engineers and leaders. They said they wouldn’t trust testers, wouldn’t hire them, wouldn’t ask for their advice based on what they’d seen online. He takes that seriously and so do I.&lt;/p&gt;



&lt;p&gt;But those engineers are hearing what they expect to hear.&lt;/p&gt;



&lt;p&gt;Callum points out that engineers don’t argue publicly about what “backend” means, I disagree. Terminology wars aren’t a QA problem. They’re a human problem. The signal that engineers are filtering for, and what QAs are actually producing, are not always the same thing.&lt;/p&gt;



&lt;p&gt;What I find more instructive than what engineers say is the structural question underneath: when a quality professional gets excluded from a planning conversation, is it because they haven’t yet proven value? Or because someone already decided they wouldn’t add value before the invite went out?&lt;/p&gt;



&lt;p&gt;In my experience, the second is more common than we acknowledge. The vicious cycle; testers disengage, get excluded, default to bug-hunting, expectations permanently degrade, doesn’t always start with the tester. Sometimes they arrive in a team that’s already mid-loop, placed there by decisions made before they existed, filling a seat somebody else designed for them.&lt;/p&gt;



&lt;p&gt;This gives us two groups neither of us are really reaching. Not directly.&lt;/p&gt;



&lt;p&gt;The first: quality professionals who’ve internalised the old ways and the box others put them in. Not because they’re lazy. Often because they were curious and got told no enough times that they stopped asking. The ones asked to just run the scripts, told not to rock the boat, ignored often enough that they stopped pushing. Callum describes this as learned helplessness, it’s not as a character flaw but as a reasonable response to a bad environment.&lt;/p&gt;



&lt;p&gt;These people are stuck. They’re not seeing our posts, they’re just trying to survive. Blame gets us nowhere. So if we find them, sling a rope and help them help themselves.&lt;/p&gt;



&lt;p&gt;The second group is harder to talk about, because they’re not in the room and they’re not doing it overtly. We could call them bad actors; the manager who celebrates the developers on a good release and looks for a QA to blame on a bad one. Who lets the tester go first when cuts come because thats just the way things are done. Who says “okay, prove your worth” but makes no allowances to do so. They’re often not consciously malicious. They’re trapped in their own frame, hearing what they expect rather than what’s actually being said.&lt;/p&gt;



&lt;p&gt;This is the fox in the henhouse. You can’t fix it with better content strategy. You fix it by making sure other voices in the room have already seen your value, when the fox speaks, someone else can speak back.&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30)&quot;&gt;What We’re Already Doing&lt;/h2&gt;



&lt;p&gt;Callum’s prescriptions are good. Know your audience. Build things. Get comfortable going fast. Show value in terms the room understands. I’d add one reframe.&lt;/p&gt;



&lt;p&gt;He says lose the ego.&lt;/p&gt;



&lt;p&gt;I say if you know Callum what he’s actually saying is “Own your ego”.&lt;/p&gt;



&lt;p&gt;Watch how Callum actually behaves in conversation with Stu. When his team uses a different term to his preferred one, he adopts theirs; not because he’s being submissive, but because he’s redirecting his expertise from &lt;em&gt;being right&lt;/em&gt; to &lt;em&gt;being useful&lt;/em&gt;. That’s not ego loss. That’s ego discipline. When Stu challenges him on a point, he doesn’t back down, he explores and clarifies. Have his confidence in your expertise. Spend it on helping the room understand, not on establishing that you’re the one who understands (or on jumping into their box and being a yes man).&lt;/p&gt;



&lt;p&gt;But I also want to push further than his article or the podcast actually go.&lt;/p&gt;



&lt;p&gt;Callum’s frame is engineering-facing; intentionally so. He’s solving a specific trust problem with a specific audience. However Callum also asks us what a good quality professional looks like right now and he’s shown it through the progress of his talk, into his blog post and now the podcast.&lt;/p&gt;



&lt;p&gt;His own skill list reaches far beyond engineering. Quality work lives in the BA conversation that shapes the requirement. In the PM decision that sets the scope. In the data that trains the model. Right now there are class action lawsuits against software companies for bias baked in at the data collection stage; bias that a quality mindset might have flagged if they were there (wonderfully well timed after I had a discussion on bias in AI and if QA’s should be involved).&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30)&quot;&gt;Same Hymn Sheet, Different Pages&lt;/h2&gt;



&lt;p&gt;Callum and I (and I suspect you if you’ve read this far) are singing from the same hymn sheet. We just started on different pages.&lt;/p&gt;



&lt;p&gt;He’s right that the conversation needs to reach engineering teams. He’s right that we need to stop naval-gazing and work with others to build things not just tell them they’re broken. He’s right that the market has moved and some of us haven’t moved with it.&lt;/p&gt;



&lt;p&gt;So lets expand his ask, go beyond quality professionals showing up better for engineering teams. Lets ask engineers and leaders to look past whatever label is on the well. To listen to what’s actually being said, not to what they expected to hear. Both sides need to be giving “Yes and…” not just one.&lt;/p&gt;



&lt;p&gt;Lets keep an eye for the people who need a rope, not a rebuke. They may be stuck in a box of another’s or their own making.&lt;/p&gt;



&lt;p&gt;Lastly we need to remember the the BAs, the PMs, the data teams, the hiring managers the people who set the room before engineering or quality professional walk in. Oh and all the guys after too, cause QA wears many hats, but this is already getting pretty long.&lt;/p&gt;



&lt;p&gt;A quality culture isn’t built by quality professionals alone. We’re just meant to be guiding the way, not dragging us down.&lt;/p&gt;



&lt;p style=&quot;padding-bottom: var(--wp--preset--spacing--30)&quot;&gt;What’s your experience? Are you in the choir, throwing the rope, or spotting foxes?&lt;/p&gt;



&lt;p style=&quot;padding-top: var(--wp--preset--spacing--20); padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Thanks for taking the time to read!&lt;/strong&gt; If you found this helpful and would like learn more, be sure to check out my other posts on the blog. You can also connect with me on LinkedIn for additional content, updates and discussions; I’d love to hear your thoughts and continue the conversation.&lt;/p&gt;



&lt;div&gt;
&lt;div style=&quot;font-style: normal; font-weight: 400&quot;&gt;
&lt;div&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://cakehurstryan.com/blog-posts/&quot; style=&quot;border-width: 1px; font-style: normal; font-weight: 500&quot;&gt;More Blogs&lt;/a&gt;&lt;/div&gt;



&lt;div&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/cakehurstryan/&quot; style=&quot;border-width: 1px; font-style: normal; font-weight: 500&quot; rel=&quot;noreferrer noopener&quot;&gt;LinkedIn&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</summary><author><name>callumakehurstryan</name></author><source gr:stream-id="feed/https://callumakehurstryansblog.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/https://callumakehurstryansblog.wordpress.com/feed/</id><title type="html">Callum Akehurst-Ryan&apos;s Testing Blog</title><link rel="alternate" href="https://cakehurstryan.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776866039000"><id gr:original-id="https://testerstories.com/?p=6775">tag:google.com,2005:reader/item/000001ce000000a8</id><category term="AI"></category><category term="DSPy"></category><title type="html">DSPy: Declaring Instead of Prompting</title><published>2026-04-22T13:53:59Z</published><updated>2026-04-22T13:53:59Z</updated><link rel="alternate" href="https://testerstories.com/2026/04/dspy-declaring-instead-of-prompting/" type="text/html"></link><summary type="html">&lt;p&gt;In my AI and Testing series, which ran for a couple of months, I focused heavily on the testing side of things. I now want to consider AI in some specific contexts that you are likely to come across and show how those contexts work. The first that I’ll focus on is a tool called &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://dspy.ai/&quot;&gt;DSPy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;article-0erOJdmdG3sWwSSJ4Osv0OAE7Fo-more-6775&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; decoding=&quot;async&quot; src=&quot;https://testerstories.com/files/ai_testing/ai-and-dspy.png&quot; style=&quot;border-radius: 20%&quot;&gt;&lt;/p&gt;
&lt;p&gt;Imagine you have a more-or-less precise robotic manipulator calibrating the intersection of two distinct, glowing streams. One stream (the “blue logic”) is angular and structured with geometric circuit patterns and digital glyphs, which represents programmatic code. The other stream (the “gold intuition”) is fluid, soft, and text-based, which represents natural language. Where they weave, they generate sparking white “compilation” points.&lt;/p&gt;
&lt;p&gt;That metaphorical image is essentially what DSPy provides, but let’s talk about how it all works.&lt;/p&gt;
&lt;p&gt;If you’ve spent time with LLMs, you know the drill: you write a prompt, it works, then you change the model or the task slightly, and you’re back to rewriting the prompt by hand. Prompts are strings. Strings are fragile. And when your pipeline grows beyond one step, you end up with a tangle of formatted text and manual parsing that breaks in ways that are hard to debug and painful to fix.&lt;/p&gt;
&lt;p&gt;DSPy is a response to that problem. Built by the Stanford NLP group, it treats LLM pipelines as &lt;em&gt;programs&lt;/em&gt; rather than prompt templates, and that shift in framing has real practical consequences for how you build, inspect, and eventually optimize LLM-powered logic.&lt;/p&gt;
&lt;p&gt;This post introduces DSPy through two small scripts. The first establishes the baseline machinery. The second changes exactly one word, and in doing so, makes DSPy’s core claim demonstrably visible. Both scripts are available for you to download and run.&lt;/p&gt;
&lt;h2&gt;What Problem Does DSPy Solve?&lt;/h2&gt;
&lt;p&gt;Here’s an analogy that might help frame it. Early programmers wrote machine code by hand. They controlled every instruction. That gave them power but also enormous maintenance burden. Higher-level languages introduced &lt;em&gt;compilers&lt;/em&gt;: you write source code that describes &lt;em&gt;what&lt;/em&gt; you want, and the compiler figures out &lt;em&gt;how&lt;/em&gt; to express that to the machine.&lt;/p&gt;
&lt;p&gt;DSPy does something similar for LLM prompting. You describe your task as a typed &lt;em&gt;signature&lt;/em&gt; (essentially: what goes in, what comes out) and DSPy compiles that into a structured prompt. You don’t write the prompt string. You don’t maintain it when the model changes. You declare the interface, and DSPy handles the expression.&lt;/p&gt;
&lt;p&gt;There’s another important consequence of this approach: because prompts are compiled artifacts rather than hand-authored strings, DSPy can &lt;em&gt;optimize&lt;/em&gt; them. You can provide examples, define a metric, and let DSPy search for better prompt strategies automatically. That optimization story is beyond scope for this post, but it’s worth naming upfront, because it’s the reason the framework is designed the way it is.&lt;/p&gt;
&lt;h2&gt;The Core Abstractions&lt;/h2&gt;
&lt;p&gt;DSPy has three layers you’ll encounter in any program, no matter how simple or complex.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Language Model (LM).&lt;/strong&gt; DSPy wraps your LLM backend using LiteLLM’s provider format. Once configured globally, every DSPy module in your process uses it without needing it passed around explicitly. This is analogous to configuring a database connection at application startup: you set it once, and everything downstream inherits it.&lt;/p&gt;
&lt;p&gt;LiteLLM is an open-source AI gateway and Python SDK that provides a unified interface to call over many different Large Language Models, including OpenAI, Anthropic, Huggingface, and Cohere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Signature.&lt;/strong&gt; A Signature is a typed declaration of what a task takes as input and produces as output. Think of it like a function signature in a statically typed language: it describes the interface, not the implementation. DSPy reads the field names, types, and ordering to automatically construct a prompt. You don’t write prompts; you write contracts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Module.&lt;/strong&gt; A DSPy Module is the executable unit, modeled after PyTorch’s &lt;code&gt;nn.Module&lt;/code&gt;. It wraps one or more &lt;em&gt;predictors&lt;/em&gt;, the objects that actually compile a Signature into a prompt, call the LM, and parse the response back into typed fields. Simple programs have a single module with a single predictor. Complex pipelines chain many modules together, each with its own Signature.&lt;/p&gt;
&lt;p&gt;PyTorch is a leading open-source machine learning framework used primarily for developing and training deep learning models. In PyTorch, nn.Module is the base class for all neural network modules and it acts as a foundational building block that allows you to define complex, stateful computations, such as layers or entire models.&lt;/p&gt;
&lt;p&gt;With those three layers in mind, let’s look at the simplest possible DSPy program.&lt;/p&gt;
&lt;h2&gt;Script 1: The Baseline&lt;/h2&gt;
&lt;p&gt;The first script, &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://github.com/jeffnyman/ai-and-testing/blob/main/dspy/dspy1.py&quot;&gt;dspy1.py&lt;/a&gt;, demonstrates all three layers in minimal form: one Signature, one predictor, one question, one answer.&lt;/p&gt;
&lt;p&gt;Let’s consider a few prerequisites before you run it.&lt;/p&gt;
&lt;p&gt;Similar to my AI and Testing series, I’m going to use Ollama for this so that you can use free models locally. Accordingly, you will need to get Ollama on your system. My post on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://testerstories.com/2026/01/ai-and-testing-ollama-and-models/&quot;&gt;Ollama and Models&lt;/a&gt; contains the basics.&lt;/p&gt;
&lt;p&gt;I’ve provided some models for use in my posts on AI, and one of those is known as &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://ollama.com/jeffnyman/ts-reasoner&quot;&gt;TesterStories Reasoner&lt;/a&gt;. If you want to get that model, just execute the following command:&lt;/p&gt;
&lt;pre&gt;
  ollama pull jeffnyman/ts-reasoner
&lt;/pre&gt;
&lt;p&gt;You can actually use any model you want to for this and I’ll indicate where you can change it in the script, although it’s pretty obvious.&lt;/p&gt;
&lt;p&gt;I’ll be focusing on Python scripts, so having a relatively recent Python 3.x version installed on your system would be good. The best thing to do is set up a project directory where you can work. When you set up Python projects, it helps to set up a virtual environment. Without any secondary tooling, the easiest way to do this is:&lt;/p&gt;
&lt;pre&gt;
  python -m venv .venv
&lt;/pre&gt;
&lt;p&gt;You can name your virtual environment whatever you want, but &lt;em&gt;.venv&lt;/em&gt; is considered the standard and IDEs will tend to look for that first. To activate this virtual environment, you can do this on a POSIX system:&lt;/p&gt;
&lt;pre&gt;
   source .venv/bin/activate
&lt;/pre&gt;
&lt;p&gt;On Windows, do this:&lt;/p&gt;
&lt;pre&gt;
  .\.venv\Scripts\activate
&lt;/pre&gt;
&lt;p&gt;To get out of the virtual environment, you can do this:&lt;/p&gt;
&lt;pre&gt;
  deactivate
&lt;/pre&gt;
&lt;p&gt;Once you have all that setup, the main thing to do is install the DSPy dependency into your virtual environment.&lt;/p&gt;
&lt;pre&gt;
  python -m pip install dspy
&lt;/pre&gt;
&lt;p&gt;The script we’re using for this post accepts an optional command-line argument. If you pass a question, it uses that; if you don’t, it falls back to a default. So you can just run the script like this:&lt;/p&gt;
&lt;pre&gt;
  python &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://script.py&quot;&gt;script.py&lt;/a&gt;
&lt;/pre&gt;
&lt;p&gt;You can also run the script like this:&lt;/p&gt;
&lt;pre&gt;
  python &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;http://script.py&quot;&gt;script.py&lt;/a&gt; &amp;quot;What year did the Berlin Wall fall?&amp;quot;
&lt;/pre&gt;
&lt;p&gt;The script, which I should note is heavily commented, does three things: configures the LM backend, defines a Signature and a Module, then runs the module and prints both the structured result and the generated prompt via &lt;code&gt;inspect_history&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That LM backend in the script is where you can change the model from ts-reasoner to any other model you have installed.&lt;/p&gt;
&lt;h3&gt;What the Output Tells You&lt;/h3&gt;
&lt;p&gt;When you run the script, you’ll see three sections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Prediction object.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;=== Prediction ===
Prediction(
    answer=&amp;apos;42&amp;apos;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You didn’t get back a raw string. You got a structured &lt;code&gt;Prediction&lt;/code&gt; object with typed fields; specifically, the &lt;code&gt;answer&lt;/code&gt; field you declared in &lt;code&gt;QASignature&lt;/code&gt;. You can access it programmatically as &lt;code&gt;result.answer&lt;/code&gt;. The Signature you wrote shaped what came back. If you had called the LLM directly via the API, you would have received a blob of text and had to parse it yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The generated prompt.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;=== Generated Prompt ===

System message:

Your input fields are:
1. &lt;code&gt;question&lt;/code&gt; (str):
Your output fields are:
1. &lt;code&gt;answer&lt;/code&gt; (str):
All interactions will be structured in the following way, with the appropriate values filled in.

[[ ## question ## ]]
{question}

[[ ## answer ## ]]
{answer}

[[ ## completed ## ]]
In adhering to this structure, your objective is: Given the fields `question`, produce the fields `answer`.

User message:

[[ ## question ## ]]
What is the answer to life, the universe and everything?

Respond with the corresponding output fields, starting with the field `[[ ## answer ## ]]`, and then ending with the marker for `[[ ## completed ## ]]`.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is the prompt DSPy compiled from your Signature. You didn’t write it. The system message establishes the schema: naming the fields, showing the section marker format, stating the objective. Your field names (&lt;code&gt;question&lt;/code&gt; and &lt;code&gt;answer&lt;/code&gt;) became the section headers. The user message slots into your actual input and instructs the model to respond using the same marker structure.&lt;/p&gt;
&lt;p&gt;Those markers, &lt;code&gt;[[ ## fieldname ## ]]&lt;/code&gt;, are not formatting noise. They’re parse targets. DSPy uses them to extract the model’s response back into the typed fields on the Prediction object. The full round-trip is: declaration → compiled prompt → structured response → typed object.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The model’s response.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Response:

[[ ## answer ## ]]
42
[[ ## completed ## ]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The model responded in exactly the format DSPy specified. It didn’t just say “42” but, rather, it echoed the section marker structure so DSPy could parse the output unambiguously. The &lt;code&gt;answer=&amp;apos;42&amp;apos;&lt;/code&gt; you saw in the Prediction object came directly from this. The model cooperated with a parsing protocol that DSPy established in the system message. Notice that you didn’t have to write any of the scaffolding that made that possible.&lt;/p&gt;
&lt;h2&gt;Script 2: One Word, New Behavior&lt;/h2&gt;
&lt;p&gt;The second script, &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://github.com/jeffnyman/ai-and-testing/blob/main/dspy/dspy2.py&quot;&gt;dspy2.py&lt;/a&gt;, is structurally identical to the first. Same LM configuration. Same Signature. Same module shape. The only difference is a single word in the module’s &lt;code&gt;__init__&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Script 1
self.predictor = dspy.Predict(QASignature)

# Script 2
self.predictor = dspy.ChainOfThought(QASignature)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That’s it. &lt;code&gt;Predict&lt;/code&gt; becomes &lt;code&gt;ChainOfThought&lt;/code&gt;. Run the script the same way as you did the first one.&lt;/p&gt;
&lt;h3&gt;What Changes in the Output&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Prediction object now has two fields.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;=== Prediction ===
Prediction(
    reasoning=&amp;quot;This is a classic question from the science fiction comedy series
    *The Hitchhiker&amp;apos;s Guide to the Galaxy* by Douglas Adams. The answer, according to the supercomputer Deep Thought, is 42. The question itself was never fully explained in the books, adding to the humor and absurdity of the situation.&amp;quot;,
    answer=&amp;apos;42&amp;apos;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You declared one output field in your Signature: &lt;code&gt;answer&lt;/code&gt;. The Prediction object now has two: &lt;code&gt;reasoning&lt;/code&gt; and &lt;code&gt;answer&lt;/code&gt;. DSPy injected the reasoning field internally when you switched to &lt;code&gt;ChainOfThought&lt;/code&gt;. You didn’t declare it. You didn’t touch the Signature. It appeared because the predictor strategy requested it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The compiled prompt reflects the new field.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;System message:

Your input fields are:
1. `question` (str):
Your output fields are:
1. `reasoning` (str):
2. `answer` (str):

...

User message:

[[ ## question ## ]]
What is the answer to life, the universe and everything?

Respond with the corresponding output fields, starting with the field
`[[ ## reasoning ## ]]`, then `[[ ## answer ## ]]`, and then ending with the marker for `[[ ## completed ## ]]`.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Compare this system message against the one from the first script. The output fields section now lists &lt;code&gt;reasoning&lt;/code&gt; before &lt;code&gt;answer&lt;/code&gt;. The user message instructs the model to start at &lt;code&gt;[[ ## reasoning ## ]]&lt;/code&gt; before reaching &lt;code&gt;[[ ## answer ## ]]&lt;/code&gt;. DSPy compiled a structurally different prompt from the same Signature, purely because the predictor strategy changed.&lt;/p&gt;
&lt;h3&gt;What Doesn’t Change&lt;/h3&gt;
&lt;p&gt;The Signature is identical. &lt;code&gt;QASignature&lt;/code&gt; still declares exactly one input field and one output field, with the same names and types as the first script. Nothing about the contract changed. Only the strategy for fulfilling it did.&lt;/p&gt;
&lt;p&gt;This is the claim DSPy makes that’s worth taking seriously: the &lt;em&gt;declaration&lt;/em&gt; of what you want is completely independent of &lt;em&gt;how&lt;/em&gt; DSPy asks for it. Swapping from a direct answer to a chain-of-thought reasoning strategy required no prompt rewriting, no string editing, no new parsing logic. One word changed, and DSPy recompiled everything around it.&lt;/p&gt;
&lt;h2&gt;A Note on inspect_history&lt;/h2&gt;
&lt;p&gt;Both scripts use &lt;code&gt;dspy.inspect_history(n=1)&lt;/code&gt; to print the generated prompt. It’s tempting to treat this as a debugging convenience that you might strip out once things are working. That undersells it.&lt;/p&gt;
&lt;p&gt;Because DSPy compiles prompts rather than accepting hand-authored ones, &lt;code&gt;inspect_history&lt;/code&gt; is how you verify what was &lt;em&gt;actually&lt;/em&gt; sent to the model versus what you assumed was sent. As your Signatures grow more complex (adding field descriptions, chain-of-thought, few-shot examples), the compiled prompt can diverge from your intuition in subtle ways. Being able to inspect the compiled artifact is the same discipline as being able to read compiler output: you want to know what your declaration produced, not just trust that compilation went as intended.&lt;/p&gt;
&lt;p&gt;This, needless to say, is an aspect of testability.&lt;/p&gt;
&lt;p&gt;Think of it as your test oracle for the prompt layer. Which, given what this blog is about, seems worth keeping around.&lt;/p&gt;
&lt;h2&gt;Where This Goes Next&lt;/h2&gt;
&lt;p&gt;These two scripts establish the foundation: declare a Signature, choose a predictor strategy, get typed output back, inspect what was compiled. The Signature stays stable; the strategy adapts around it.&lt;/p&gt;
&lt;p&gt;The natural next question is: what happens when a single step isn’t enough? What if you need to expand an answer and then compress it? What if the output of one LLM call needs to become the input of another?&lt;/p&gt;
&lt;p&gt;That’s where DSPy’s pipeline model comes in: multiple Signatures, multiple predictors, explicit data flow between steps, and &lt;code&gt;inspect_history&lt;/code&gt; showing you every compiled prompt in sequence. That’s the focus of the next post.&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.addtoany.com/share#url=https%3A%2F%2Ftesterstories.com%2F2026%2F04%2Fdspy-declaring-instead-of-prompting%2F&amp;amp;title=DSPy%3A%20Declaring%20Instead%20of%20Prompting&quot; data-a2a-url=&quot;https://testerstories.com/2026/04/dspy-declaring-instead-of-prompting/&quot; data-a2a-title=&quot;DSPy: Declaring Instead of Prompting&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://static.addtoany.com/buttons/favicon.png&quot; alt=&quot;Share&quot;&gt;&lt;/a&gt;&lt;/p&gt;</summary><author><name>Jeff Nyman</name></author><source gr:stream-id="feed/http://testerstories.com/feed/"><id>tag:google.com,2005:reader/feed/http://testerstories.com/feed/</id><title type="html">Stories from a Software Tester</title><link rel="alternate" href="https://testerstories.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776857663000"><id gr:original-id="https://gasparnagy.com/?p=2538">tag:google.com,2005:reader/item/000000e40000043b</id><category term="SpecSync Announcements"></category><category term="BDD"></category><category term="pull operation"></category><category term="SpecSync"></category><category term="synchronization"></category><category term="test automation"></category><title type="html">SpecSync v5.4: Improved performance</title><published>2026-04-22T11:34:23Z</published><updated>2026-04-22T11:34:23Z</updated><link rel="alternate" href="https://gasparnagy.com/2026/04/specsync-v5-4-improved-performance/" type="text/html"></link><summary type="html">&lt;p&gt;We are happy to announce that we have released a new update for SpecSync v5 that significantly improves the synchronization performance. The new version (v5.4) is a compatible update for v5 according to our new semantic versioning policy, which means that you can use your existing SpecSync v5 configuration with the new version – no […]&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://gasparnagy.com/2026/04/specsync-v5-4-improved-performance/&quot;&gt;SpecSync v5.4: Improved performance&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://gasparnagy.com&quot;&gt;Gáspár Nagy on software&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Gáspár</name></author><source gr:stream-id="feed/http://gasparnagy.com/feed/"><id>tag:google.com,2005:reader/feed/http://gasparnagy.com/feed/</id><title type="html">Gáspár Nagy on software</title><link rel="alternate" href="https://gasparnagy.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776847602000"><id gr:original-id="http://leadtestinclude.com/?p=2860">tag:google.com,2005:reader/item/0000036d00000035</id><category term="ai"></category><category term="leadership"></category><category term="quality"></category><category term="Quality Engineering"></category><category term="artificial-intelligence"></category><category term="IntelligentQualityLeadership"></category><category term="llm"></category><category term="people"></category><category term="technology"></category><title type="html">IQL Practical #1 – Don’t Just Test the Output… Challenge the Reasoning.</title><published>2026-04-22T08:46:42Z</published><updated>2026-04-22T08:46:42Z</updated><link rel="alternate" href="https://leadtestinclude.com/2026/04/22/iql-practical-1-dont-just-test-the-output-challenge-the-reasoning/" type="text/html"></link><summary type="html">&lt;p&gt;&lt;em&gt;This is the fifth post in the Intelligent Quality Leadership series, and if I’m being honest with myself, I wanted this one to feel different. The first four posts have been heavy on frameworks and thinking models, and while I stand behind every word, I was conscious that we’d been spending a lot of time in the theory. So for this one, I wanted to bring something you could actually use tomorrow. Something you could open a new tab and try while you’re reading. That’s where TRACE came from.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;There’s a question I’ve been sitting with for a while now: what does it actually mean to test an AI system?&lt;/p&gt;



&lt;p&gt;Not the mechanics of it. I mean the &lt;em&gt;mindset&lt;/em&gt;. Because if you come at AI testing the same way you’d approach a traditional software system, you’re going to miss the most important failures entirely. You’ll get green lights on everything that doesn’t matter and miss everything that does.&lt;/p&gt;



&lt;p&gt;Traditional testing has a simple contract: given this input, I expect this output. Pass or fail. The system either behaves as specified or it doesn’t.&lt;/p&gt;



&lt;p&gt;AI doesn’t work like that. AI systems are confident. Fluent. Plausible. They produce outputs that &lt;em&gt;look&lt;/em&gt; right, that read as authoritative, that feel complete. And they can be completely, catastrophically wrong, not because of a bug in the traditional sense, but because the reasoning underneath is shallow, inconsistent, or unsupported.&lt;/p&gt;



&lt;p&gt;The skill quality engineers need to develop right now isn’t just evaluating &lt;em&gt;what&lt;/em&gt; an AI produced. It’s knowing how to interrogate &lt;em&gt;why&lt;/em&gt;, and knowing when to trust the answer and when to push back hard.&lt;/p&gt;



&lt;p&gt;So here’s a framework I’ve been developing: &lt;strong&gt;TRACE&lt;/strong&gt;. Five challenge moves that let you interrogate AI reasoning in a structured, repeatable way. I’ve been actively using this over the last couple of months while developing the apps at home during my time out of work. It’s really helped me understand the nuances of testing AI solutions.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;T&lt;/strong&gt; – Twist the question (The Reframe) &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;R&lt;/strong&gt; – Rewrite the scenario (The Counterfactual) &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt; – Argue back (The Pressure Test) &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;C&lt;/strong&gt; – Check the limits (The Edge Case) &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;E&lt;/strong&gt; – Evidence check (The Source Challenge)&lt;/p&gt;



&lt;p&gt;These aren’t theoretical constructs. They’re practical techniques you can try today, with any AI system you’re working with. And crucially, they’re the kinds of questions good testers have always asked. We’re just pointing them at a new class of system.&lt;/p&gt;



&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png&quot;&gt;&lt;img width=&quot;800&quot; height=&quot;520&quot; data-attachment-id=&quot;2862&quot; data-permalink=&quot;https://leadtestinclude.com/2026/04/22/iql-practical-1-dont-just-test-the-output-challenge-the-reasoning/trace-model/&quot; data-orig-file=&quot;https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png&quot; data-orig-size=&quot;800,520&quot; data-comments-opened=&quot;1&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}&quot; data-image-title=&quot;trace-model&quot; data-image-description data-image-caption data-large-file=&quot;https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png?w=800&quot; alt data-orig-srcset=&quot;https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png 800w, https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png?w=150 150w, https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png?w=300 300w, https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png?w=768 768w&quot; src=&quot;https://leadtestinclude.com/wp-content/uploads/2026/04/trace-model.png&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;hr&gt;



&lt;h2&gt;T – Twist the Question (The Reframe)&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Ask the same question a different way. Change the phrasing, the order, the framing but not the underlying question. Then compare the answers.&lt;/p&gt;



&lt;p&gt;Real understanding is robust to paraphrasing. If an AI genuinely comprehends something, it should give you substantively consistent answers regardless of how you word the question. If the answer shifts significantly based on how you ask, the reasoning was probably shallow. The system was pattern-matching to surface features of your prompt rather than engaging with the actual problem.&lt;/p&gt;



&lt;p&gt;This is one of the quickest and cheapest tests you can run. No special tooling required.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Ask your AI assistant: &lt;em&gt;“What are the risks of deploying a machine learning model without proper testing?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Then ask: &lt;em&gt;“If a team skips testing before releasing an ML system, what could go wrong?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;And then: &lt;em&gt;“A startup wants to ship fast. Their ML model works well in demos. What’s the argument for slowing down and testing more thoroughly?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The core question is the same across all three. You’re asking about the risks of under-tested ML deployment. But the framing shifts from neutral and direct, to consequence-focused, to adversarial business pressure.&lt;/p&gt;



&lt;p&gt;Watch for changes in the risks identified, changes in the emphasis, and risks that appear in one framing and vanish in another. If the AI gives you materially different answers, ask yourself: which one does it &lt;em&gt;actually&lt;/em&gt; believe? And why does the framing change its confidence?&lt;/p&gt;



&lt;hr&gt;



&lt;h2&gt;R – Rewrite the Scenario (The Counterfactual)&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Change one variable in your scenario. Ask the AI what it would recommend differently, and why.&lt;/p&gt;



&lt;p&gt;This is arguably the most powerful challenge technique because it forces the AI to reveal what it’s actually weighting. If it can’t tell you what would change its answer, or if it gives you the same answer regardless of the variable you changed, it’s not reasoning. It’s returning a cached response.&lt;/p&gt;



&lt;p&gt;Good reasoning has sensitivity to context. The AI should be able to say: &lt;em&gt;“Yes, in this version of the scenario, I’d recommend X instead of Y, because of Z.”&lt;/em&gt; If it can’t, the reasoning is decorative.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Give your AI this scenario: &lt;em&gt;“A software team is moving to continuous deployment. They currently have a manual regression suite that takes three days to run. What testing strategy would you recommend?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Note the answer. Then change one variable at a time:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;em&gt;“Same scenario, but the product handles financial transactions.”&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;em&gt;“Same scenario, but the team has two QA engineers and twelve developers.”&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;em&gt;“Same scenario, but the product is a consumer mobile app with five million users.”&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;em&gt;“Same scenario, but they operate in a regulated healthcare environment.”&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Each of those variables should, if the AI is reasoning properly, shift the recommendation meaningfully. Regulated healthcare should make it far more conservative about speed. Financial transactions should elevate risk tolerance thresholds. A 12:2 developer-to-QA ratio should prompt a conversation about automation investment.&lt;/p&gt;



&lt;p&gt;If the AI gives you the same answer for the healthcare regulated environment as it does for the consumer mobile app, it isn’t adjusting for context. It’s templating. That’s important to know.&lt;/p&gt;



&lt;hr&gt;



&lt;h2&gt;A – Argue Back (The Pressure Test)&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Disagree with the AI’s answer. Directly. Tell it you think it’s wrong, or that you’ve heard a different view, and ask it to defend its position.&lt;/p&gt;



&lt;p&gt;This one makes people uncomfortable because it feels confrontational. But it’s one of the most revealing tests you can run.&lt;/p&gt;



&lt;p&gt;There are two failure modes here. The first is &lt;em&gt;capitulation&lt;/em&gt;: the AI immediately agrees with your pushback, abandons its original position, and validates whatever you just said, even if you’re wrong. The second is &lt;em&gt;entrenchment&lt;/em&gt;: it repeats its original answer at length but adds nothing new, simply reasserting its position rather than engaging with your challenge.&lt;/p&gt;



&lt;p&gt;Good reasoning does neither. It engages with the challenge, acknowledges what’s valid in the pushback, defends what it still believes and why, and updates where your challenge has merit. That’s what intellectual honesty looks like, in a human or an AI.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Ask your AI: &lt;em&gt;“Is test automation always worth the investment?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Whatever it says, respond with: &lt;em&gt;“I’ve spoken to a lot of senior engineers who think automation is massively overrated and that good manual testers find more bugs. I think you’re wrong. Can you explain why your view is correct?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Watch what happens. Does it:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Capitulate entirely?&lt;/strong&gt; (“You make a great point, you’re absolutely right that manual testing often outperforms…”) This is a red flag. It just agreed with you to avoid conflict.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Repeat itself without engaging?&lt;/strong&gt; (“As I mentioned, automation provides significant benefits including…”) Also a red flag. It’s not engaging with your challenge.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Engage with nuance?&lt;/strong&gt; (“There’s validity in that — senior engineers are often reacting to poorly implemented automation rather than automation per se. Here’s why I’d still hold the core position, and here’s where I’d concede ground…”) This is what you want to see.&lt;/p&gt;



&lt;p&gt;You can crank this up. Push harder. Tell it a specific expert said the opposite. See at what point, if any, its position becomes genuinely flexible versus just performed flexibility.&lt;/p&gt;



&lt;hr&gt;



&lt;h2&gt;C – Check the Limits (The Edge Case)&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Take the AI to the boundary of its knowledge or confidence. Ask it about something obscure, niche, or genuinely uncertain, and watch whether it knows its own limits.&lt;/p&gt;



&lt;p&gt;One of the most dangerous failure modes in AI systems is &lt;em&gt;confident ignorance&lt;/em&gt;: the system produces a fluent, authoritative-sounding answer in a domain where it has no reliable basis. There’s no “I don’t know.” No hedging. No invitation to verify. Just a plausible-sounding answer that happens to be wrong.&lt;/p&gt;



&lt;p&gt;A trustworthy AI system should be able to say when it’s uncertain. It should signal when you’re at the edge of reliable territory. If it doesn’t, if it answers everything with the same tone of confidence, that’s a signal you should trust it less across the board.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Start with something the AI should be confident about: &lt;em&gt;“What’s the difference between unit testing and integration testing?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Now shift to something more niche: &lt;em&gt;“What’s the test strategy used by the engineering team at [a specific small or mid-size company in your industry]?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Then push into genuinely uncertain territory: &lt;em&gt;“What will best practice for AI model testing look like in five years?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Watch the confidence calibration across all three. The first should be answered clearly and factually. The second should prompt acknowledgement that it doesn’t have access to that company’s internal practices. The third should be framed explicitly as speculative, as opinions and informed extrapolation, not fact.&lt;/p&gt;



&lt;p&gt;If all three come back with the same authoritative register, something’s off. Test this across multiple domains. Build a feel for where your AI system loses confidence calibration, because that’s where the dangerous answers live.&lt;/p&gt;



&lt;hr&gt;



&lt;h2&gt;E – Evidence Check (The Source Challenge)&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Ask the AI to show its working. Where does that claim come from? What’s it based on? And if it cites a source, does that source actually say what it claims?&lt;/p&gt;



&lt;p&gt;This matters more as AI systems become more integrated into decision-making. In low-stakes contexts, a confident but unsupported claim is merely annoying. In high-stakes contexts — a medical diagnosis, a legal interpretation, a security recommendation — it can be genuinely harmful.&lt;/p&gt;



&lt;p&gt;Many AI systems now include retrieval-augmented generation (RAG), where they pull from a set of documents or data sources before answering. Testing the integrity of that retrieval, whether the cited source says what the AI claims it says, is an increasingly important quality discipline.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Ask your AI a factual question in your professional domain. Something specific enough that it should have a source: &lt;em&gt;“What does ISO 29119 say about test planning documentation requirements?”&lt;/em&gt; or &lt;em&gt;“What did the DORA report conclude about the relationship between test automation and deployment frequency?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Then ask: &lt;em&gt;“Can you tell me specifically where that comes from? What’s the source?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;If it cites something, check it. Go and read the source. Does it actually say what the AI claimed? Is the quote accurate? Is it in context? Is the emphasis faithful to the original?&lt;/p&gt;



&lt;p&gt;You’ll sometimes find that the AI has hallucinated a plausible-sounding citation. You’ll sometimes find it’s cited a real source but mischaracterised it. You’ll sometimes find it’s exactly right.&lt;/p&gt;



&lt;p&gt;What you’re building is a calibration: a sense of how much to trust this system’s attribution, in this domain, at this level of specificity. That calibration is worth developing deliberately rather than discovering the hard way.&lt;/p&gt;



&lt;hr&gt;



&lt;h2&gt;Why TRACE Matters for Quality Engineers&lt;/h2&gt;



&lt;p&gt;I want to be honest about something. These five moves are not complicated. They don’t require specialist tooling or advanced AI expertise. They’re essentially the same critical thinking skills good testers have always applied, just pointed at a new class of system.&lt;/p&gt;



&lt;p&gt;Which is partly the point.&lt;/p&gt;



&lt;p&gt;The quality engineering discipline has always been about more than running tests. It’s been about asking uncomfortable questions. About not taking the happy path at face value. About being the person in the room who says &lt;em&gt;“but what if this goes wrong?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;AI systems need that voice more than almost any technology we’ve worked with before. They’re fluent enough to be convincing. Confident enough to bypass scrutiny. And deployed fast enough that the scrutiny often doesn’t happen at all.&lt;/p&gt;



&lt;p&gt;So develop the habit. Build TRACE into how your team engages with AI outputs, in reviews, in testing, in your own daily use. Not to be obstructionist, but because healthy scepticism applied consistently is what turns a useful AI tool into a trustworthy one.&lt;/p&gt;



&lt;p&gt;The happy path is tempting. It usually is.&lt;/p&gt;



&lt;p&gt;That’s why we test.&lt;/p&gt;



&lt;p&gt;I’d love to hear how you get on with using this.&lt;/p&gt;</summary><author><name>siprior</name></author><source gr:stream-id="feed/https://priorsworld.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/https://priorsworld.wordpress.com/feed/</id><title type="html">My World of Testing</title><link rel="alternate" href="https://leadtestinclude.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776840120000"><id gr:original-id="http://testpappy.wordpress.com/?p=1800">tag:google.com,2005:reader/item/000005360000006e</id><category term="Uncategorized"></category><title type="html">AI Doesn’t Understand the World (yet)</title><published>2026-04-22T06:42:00Z</published><updated>2026-04-22T06:42:00Z</updated><link rel="alternate" href="https://testpappy.wordpress.com/2026/04/22/ai-doesnt-understand-the-world-yet/" type="text/html"></link><summary type="html">&lt;p&gt;There’s a video by woodworker John Malecki called “AI vs Man” where he tries to build a cutting board designed by AI. The image looks, well, interesting. Complex patterns, different wood tones.  The only problem: it’s physically nearly impossible to assemble.&lt;/p&gt;


&lt;div&gt;
&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://testpappy.wordpress.com/wp-content/uploads/2026/04/image-1.png&quot;&gt;&lt;img width=&quot;512&quot; height=&quot;512&quot; data-attachment-id=&quot;1804&quot; data-permalink=&quot;https://testpappy.wordpress.com/2026/04/22/ai-doesnt-understand-the-world-yet/image-29/&quot; data-orig-file=&quot;https://testpappy.wordpress.com/wp-content/uploads/2026/04/image-1.png&quot; data-orig-size=&quot;512,512&quot; data-comments-opened=&quot;1&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}&quot; data-image-title=&quot;image&quot; data-image-description data-image-caption data-large-file=&quot;https://testpappy.wordpress.com/wp-content/uploads/2026/04/image-1.png?w=512&quot; alt data-orig-srcset=&quot;https://testpappy.wordpress.com/wp-content/uploads/2026/04/image-1.png 512w, https://testpappy.wordpress.com/wp-content/uploads/2026/04/image-1.png?w=150 150w, https://testpappy.wordpress.com/wp-content/uploads/2026/04/image-1.png?w=300 300w&quot; src=&quot;https://testpappy.wordpress.com/wp-content/uploads/2026/04/image-1.png&quot;&gt;&lt;/a&gt;&lt;figcaption&gt;This is the design John settled on, that looked actually doable.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;


&lt;p&gt;The AI generated an interesting looking &lt;em&gt;result&lt;/em&gt;. But it has no idea how you’d actually &lt;em&gt;make&lt;/em&gt; it. It doesn’t think about which pieces need to be glued first, how grain direction affects stability, or whether the geometry even allows for assembly. It just sees patterns in training data and predicts what a cutting board should look like. And that prediction can be completely disconnected from reality.&lt;/p&gt;



&lt;p&gt;This isn’t just a woodworking problem. The craft community has been fighting this battle for a while now.&lt;/p&gt;



&lt;p&gt;Etsy and Ravelry are flooded with AI-generated crochet and knitting patterns. They come with polished images of adorable amigurumi animals, intricate shawls, cozy socks. People pay for the patterns, start working, and discover: they don’t work. NBC News reported on frustrated buyers who found patterns with impossible stitch counts, garments that couldn’t physically fit together, instructions that contradicted themselves.&lt;/p&gt;



&lt;p&gt;One Reddit user, a crocheter with over 15 years of experience, wrote that the AI images fooled them at first. It was only when they looked closer that they noticed “stitches that weren’t there” and designs that were simply impossible to create with yarn and a hook.&lt;/p&gt;



&lt;p&gt;There’s a wonderful earlier experiment called SkyKnit, where researchers fed thousands of knitting patterns into a neural network and let it generate new ones. The knitters who volunteered to test them called it “Operation Hilarious Knitting Disaster.” The AI produced patterns requiring 6,395 stitches in a single row. Patterns that would immediately unravel. Patterns that turned into “long whiplike tentacles.” The knitters had to &lt;em&gt;debug&lt;/em&gt; the AI output, because they actually understood how yarn behaves in the physical world.&lt;/p&gt;



&lt;p&gt;Why does this happen?&lt;/p&gt;



&lt;p&gt;AI, especially generative AI, is fundamentally a pattern-matching system. It predicts the next likely token, pixel, or word based on statistical patterns in its training data. It doesn’t simulate physics. It doesn’t understand that wood expands across the grain, that yarn has tension, and that knots must be attached to other knots.&lt;/p&gt;



&lt;p&gt;Humans learn these things through their bodies. You cut wood and feel the resistance. You knit a row and notice when something’s off. You fail, adjust, and build intuition over thousands of repetitions. This is what cognitive scientists call embodied cognition. Knowledge that lives in your hands, your muscles, your sensory experience. Some call it “muscle memory”, but it’s more than that.&lt;/p&gt;



&lt;p&gt;AI has none of that. It has never held a chisel. Never felt a thread snap. Never assembled a single physical object. It can mimic the &lt;em&gt;appearance&lt;/em&gt; of expertise with impressive accuracy. But appearance is all it has.&lt;/p&gt;



&lt;p&gt;And here’s the danger: people are selling these phantom plans. On Etsy, on random websites, often for real money. The images look professional. The descriptions sound confident. And if you don’t know enough about the craft to spot the problems, you might not realize you’ve been had until you’re halfway through a project that can’t be finished.&lt;/p&gt;



&lt;p&gt;So what can you do?&lt;/p&gt;



&lt;p&gt;If it looks too perfect, be suspicious. Check the reviews. Look for photos of actual finished projects, not just the listing images. Ask yourself: can I trace the steps from raw material to finished product? If the seller can’t show you that path, maybe they don’t know it either.&lt;/p&gt;



&lt;p&gt;AI is a powerful tool. But it doesn’t &lt;em&gt;understand&lt;/em&gt; the physical world. It mimics the appearance of understanding. And that difference can cost you time, money, and a lot of frustration.&lt;/p&gt;



&lt;p&gt;Trust the people who have actually built things. They know what’s possible because they’ve done it with their hands.&lt;/p&gt;</summary><author><name>Patrick</name></author><source gr:stream-id="feed/https://testpappy.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/https://testpappy.wordpress.com/feed/</id><title type="html">Test Pappy</title><link rel="alternate" href="https://testpappy.wordpress.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776816000000"><id gr:original-id="https://filipin.eu//testival-79">tag:google.com,2005:reader/item/000004110000007a</id><category term="event"></category><category term="photo"></category><category term="testing"></category><category term="testival"></category><title type="html">Testival Meetup #79, Zagreb, Croatia</title><published>2026-04-22T00:00:00Z</published><updated>2026-04-22T00:00:00Z</updated><link rel="alternate" href="https://filipin.eu//testival-79" type="text/html"></link><summary type="html">&lt;p&gt;&lt;em&gt;Estimated reading time is 1 minute.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://filipin.eu/assets/2026/testival-79.jpg&quot; alt=&quot;Testival Meetup #79&quot; title=&quot;Testival Meetup #79&quot;&gt;&lt;/p&gt;

&lt;p&gt;Last month we didn’t have a regular Testival meetup, so we had the second &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.meetup.com/testival/events/313776699/&quot;&gt;Testival book club&lt;/a&gt;. The attendance was lower than the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://filipin.eu/testival-78&quot;&gt;last time&lt;/a&gt;. This time only three of us came. It is my fault. I organized the meetup on very short notice. March was really busy.&lt;/p&gt;

&lt;p&gt;We were talking about &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.goodreads.com/book/show/201116293-taking-testing-seriously&quot;&gt;Taking Testing Seriously: The Rapid Software Testing Approach&lt;/a&gt; by James Bach. I was the only one that finished the book. Other attendees (Karlo and Bojan) started reading, but didn’t finish yet.&lt;/p&gt;

&lt;p&gt;It was still a good meetup. Karlo wrote a blog post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://karlosmid.com/2026/03/an-unexpected-display-of-art/&quot;&gt;An unexpected display of art&lt;/a&gt; about it.&lt;/p&gt;

&lt;p&gt;During the last meetup, I didn’t yet write &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://filipin.eu/taking-testing-seriously&quot;&gt;Taking Testing Seriously by James Bach and Michael Bolton&lt;/a&gt;. I also depended on my Kindle for highlights from the book. Looking for relevant highlights on the Kindle proved not to be fast, so this time I have printed both the blog post and all of my Kindle highlights. It made it much faster to find things.&lt;/p&gt;

&lt;h2 id=&quot;article-qg5T99Ff6aktTC4kwWHEFwMQiz0-feedback&quot;&gt;Feedback&lt;/h2&gt;

&lt;p&gt;Thank you for reading. If you want to stay in touch please use the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://filipin.eu/feed.xml&quot;&gt;feed&lt;/a&gt; or send me an &lt;a href=&quot;mailto:zeljko@filipin.eu&quot;&gt;email&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Željko Filipin</name></author><source gr:stream-id="feed/https://filipin.eu/feed"><id>tag:google.com,2005:reader/feed/https://filipin.eu/feed</id><title type="html">Filipin.eu</title><link rel="alternate" href="https://filipin.eu//" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776808800000"><id gr:original-id="https://scrolltest.com/?p=7208">tag:google.com,2005:reader/item/000004440000019a</id><category term="Testing"></category><title type="html">Playwright vs Selenium in 2026: Benchmarks, Migration Paths, and the Real Decision Framework</title><published>2026-04-21T22:00:00Z</published><updated>2026-04-21T22:00:00Z</updated><link rel="alternate" href="https://scrolltest.com/playwright-vs-selenium-2026-benchmarks-migration-real-decision-framework/" type="text/html"></link><summary type="html">&lt;p&gt;The most common question in QA right now deserves a data-backed answer. Real benchmarks, migration strategies, and a decision matrix for every team scenario.&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com/playwright-vs-selenium-2026-benchmarks-migration-real-decision-framework/&quot;&gt;Playwright vs Selenium in 2026: Benchmarks, Migration Paths, and the Real Decision Framework&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com&quot;&gt;Software Testing &amp;amp; Automation&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Pramod Dutta</name></author><source gr:stream-id="feed/https://scrolltest.com/feed/"><id>tag:google.com,2005:reader/feed/https://scrolltest.com/feed/</id><title type="html">Software Testing &amp; Automation</title><link rel="alternate" href="https://scrolltest.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776806362000"><id gr:original-id="https://medium.com/p/5fc054a85784">tag:google.com,2005:reader/item/00000fd500000010</id><category term="qa"></category><category term="test-automation"></category><category term="qa-testing"></category><category term="testers"></category><category term="software-testing"></category><title type="html">Sprint &amp;amp; Release Reports: The Missing QA Practice That Drives Real Quality</title><published>2026-04-21T21:19:22Z</published><updated>2026-04-21T21:19:22Z</updated><link rel="alternate" href="https://medium.com/@marinacruzjordao/sprint-release-reports-the-missing-qa-practice-that-drives-real-quality-5fc054a85784?source=rss-a6f7e93e4f93------2" type="text/html"></link><summary type="html">&lt;p&gt;In many teams, the sprint ends, the release is deployed, and everyone quickly moves on to the next set of tasks. New tickets are picked up, new features are discussed, and the cycle continues almost mechanically.&lt;/p&gt;&lt;p&gt;But something important is often missing in this transition.&lt;/p&gt;&lt;p&gt;There is no structured moment where QA steps back and answers a simple but critical question:&lt;/p&gt;&lt;p&gt;&lt;em&gt;What actually happened to quality during this sprint or release?&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Yes, there are tools. There are dashboards, Jira boards, test execution reports, CI/CD logs. But all of these are fragmented sources of information. They show activity, but they rarely tell a coherent story.&lt;/p&gt;&lt;p&gt;And without that story, quality becomes difficult to understand, difficult to communicate, and even more difficult to improve.&lt;/p&gt;&lt;p&gt;This is where sprint and release reports from a QA perspective become not just useful , but essential. They are not about documentation for the sake of process. They are about creating clarity in a space that is often noisy and ambiguous.&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;Why Sprint/Release Reports Matter (More Than You Think)&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;At first, many QAs see reporting as an administrative task. Something that needs to be done, but doesn’t directly contribute to testing itself. It can feel like time taken away from “real work.”&lt;/p&gt;&lt;p&gt;But this perception usually comes from how reports are done, not from what they can achieve.&lt;/p&gt;&lt;p&gt;A well-crafted QA report acts as a bridge between different perspectives in a team. Developers, product managers, and stakeholders all look at the product through different lenses. QA sits in a unique position where it can connect these views through evidence and insight.&lt;/p&gt;&lt;p&gt;Without a report, quality discussions often become subjective:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;“It feels stable”&lt;/li&gt;&lt;li&gt;“We tested most of it”&lt;/li&gt;&lt;li&gt;“There weren’t many issues”&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These statements are vague and open to interpretation. A strong report replaces ambiguity with clarity. It provides a grounded view of reality:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;What was tested, and how deeply&lt;/li&gt;&lt;li&gt;What issues were found, and where&lt;/li&gt;&lt;li&gt;What risks still exist&lt;/li&gt;&lt;li&gt;How the product evolved compared to previous iterations&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This clarity has a direct impact on decision-making. Releases become more informed. Trade-offs become more explicit. Trust in QA increases because the team can see not just what was done, but what it means. In this sense, reporting is not about looking back. It’s about enabling better decisions moving forward.&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;What a Good QA Report Should Contain&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;A common mistake is to treat a QA report as a collection of metrics. Numbers are gathered, charts are generated, and everything is presented as-is. But numbers alone don’t tell a story.&lt;/p&gt;&lt;p&gt;A good report should guide the reader through the state of quality in a way that is easy to understand, even for someone who was not involved in the sprint.&lt;/p&gt;&lt;p&gt;It should answer not only &lt;em&gt;what happened&lt;/em&gt;, but also &lt;em&gt;why it matters&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Executive Summary: Setting the Context&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The executive summary is where you define how the entire report will be interpreted. This is not just a formality, but it is where QA takes a position.&lt;/p&gt;&lt;p&gt;Instead of listing facts, you provide an informed perspective:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Is the product stable or fragile?&lt;/li&gt;&lt;li&gt;Did quality improve or regress?&lt;/li&gt;&lt;li&gt;Are there risks that should influence release decisions?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A strong summary requires confidence and clarity. It forces QA to synthesize everything that happened into a concise message. This is also where many QAs hesitate. There is often a fear of being too definitive, especially when quality is not perfect.&lt;/p&gt;&lt;p&gt;But avoiding a clear statement reduces the value of the report. Stakeholders are not looking for neutrality, they are looking for guidance. Learning to write strong summaries is one of the ways QA evolves from execution to influence.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Test Execution Overview: Beyond Counting Tests&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;At a surface level, reporting test execution seems straightforward. You list how many tests were run, how many passed and how many failed. But if you stop there, the information is incomplete. What really matters is understanding what those tests represent.&lt;/p&gt;&lt;p&gt;For example, executing 500 test cases sounds impressive. But if most of them are low-risk scenarios, the actual confidence gained may be limited.&lt;/p&gt;&lt;p&gt;On the other hand, executing a smaller number of highly targeted tests on critical flows might provide much stronger assurance. This is where narrative adds value.&lt;/p&gt;&lt;p&gt;Instead of just presenting numbers, explain:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;What areas were heavily tested&lt;/li&gt;&lt;li&gt;What types of testing were performed (regression, exploratory, API, etc.)&lt;/li&gt;&lt;li&gt;Where testing was limited or constrained&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This transforms the section from a status update into a meaningful insight about coverage and confidence.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Defects Summary: From Data to Understanding&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Defect reporting is often reduced to counting bugs and categorizing them by severity. While this is useful, it only scratches the surface. What really matters is what defects reveal about the system. A high number of bugs is not always bad, just as a low number is not always good and context matters.&lt;/p&gt;&lt;p&gt;For example:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A high number of low-severity bugs might indicate attention to detail&lt;/li&gt;&lt;li&gt;A small number of critical bugs in core flows might signal deeper instability&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This is where QA can provide real value by interpreting patterns. Ask questions like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Are defects concentrated in a specific area?&lt;/li&gt;&lt;li&gt;Do they relate to recent changes or legacy issues?&lt;/li&gt;&lt;li&gt;Are similar types of bugs recurring?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By analyzing trends, you move from reporting defects to understanding system behavior. This is what helps teams improve, not just fix issues.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Automation Progress: Measuring Meaningful Growth&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Automation is often seen as a linear progression, more tests mean better coverage. But in reality, automation maturity is more complex. A report should reflect not only how much automation was added, but how useful and sustainable it is becoming.&lt;/p&gt;&lt;p&gt;For instance:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Are new tests targeting high-value scenarios?&lt;/li&gt;&lt;li&gt;Is execution becoming more stable or more flaky?&lt;/li&gt;&lt;li&gt;Is automation reducing manual effort, or creating maintenance overhead?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It’s also important to recognize that growth is not only about adding tests. Sometimes, progress comes from improving existing tests, refactoring frameworks, or stabilizing pipelines. Without this perspective, automation reporting can become misleading, focusing on quantity instead of quality.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Deprecated Tests: A Sign of Maturity&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;One of the most overlooked aspects of QA reporting is acknowledging what was removed. There is often a natural tendency to focus on additions, new tests, new coverage, new features. But a growing test suite without maintenance leads to complexity, longer execution times, and reduced reliability. Including deprecated or removed tests in your report shows that:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The test suite is actively managed&lt;/li&gt;&lt;li&gt;Redundant or outdated tests are being cleaned up&lt;/li&gt;&lt;li&gt;The focus is on value, not volume&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This reflects a mature approach to automation and testing in general. It also reinforces an important mindset: not everything should be kept forever.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Risks &amp;amp; Known Issues: Where QA Becomes Strategic&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is one of the most critical sections of the report and often the one that differentiates average QA from high-impact QA. Here, you explicitly acknowledge what is not fully validated. This requires a level of transparency that can feel uncomfortable. It means admitting uncertainty, limitations, or gaps.&lt;/p&gt;&lt;p&gt;But this is exactly what makes the report valuable. No system is ever fully tested. There are always constraints:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Time limitations&lt;/li&gt;&lt;li&gt;Environment issues&lt;/li&gt;&lt;li&gt;Complex scenarios that are hard to validate&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By clearly stating these risks, QA enables better decision-making. Instead of assuming everything is fine, stakeholders can weigh trade-offs consciously. This is where QA moves from reporting past actions to influencing future outcomes.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Additional Notes &amp;amp; Observations: Capturing the Unstructured Insights&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Not everything fits into metrics or predefined categories. Some of the most valuable insights come from experience:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Subtle usability issues&lt;/li&gt;&lt;li&gt;Confusing flows&lt;/li&gt;&lt;li&gt;Patterns noticed during exploratory testing&lt;/li&gt;&lt;li&gt;Collaboration challenges within the team&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These observations often don’t have numbers attached to them, but they provide depth. Including them in the report ensures that this knowledge is not lost. It also reinforces the role of QA as someone who observes, questions, and understands not just executes.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommendations &amp;amp; Next Steps: Turning Insight Into Action&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A report that only describes the past is incomplete. The final step is to translate insights into actions. This can include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Areas that need deeper testing in the next sprint&lt;/li&gt;&lt;li&gt;Improvements in automation strategy&lt;/li&gt;&lt;li&gt;Process adjustments&lt;/li&gt;&lt;li&gt;Focus areas for developers or product teams&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Recommendations show that QA is not just analyzing, but also guiding. They close the loop between observation and improvement.&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;How to Improve as a QA in Reporting&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Developing strong reporting skills is not immediate. It requires practice and a shift in mindset. One of the most effective ways to improve is to move from reporting activity to explaining impact.&lt;/p&gt;&lt;p&gt;Instead of asking:&lt;/p&gt;&lt;p&gt;“What did we do?”&lt;/p&gt;&lt;p&gt;Start asking:&lt;/p&gt;&lt;p&gt;“What does this mean for the product and the user?”&lt;/p&gt;&lt;p&gt;Another important aspect is learning to balance detail with clarity. Too much information can overwhelm, while too little can mislead. Finding that balance is a skill that improves over time. It’s also useful to seek feedback. Ask stakeholders:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;What parts of the report are useful?&lt;/li&gt;&lt;li&gt;What is unclear?&lt;/li&gt;&lt;li&gt;What would help them make better decisions?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Reporting is ultimately about communication. The more aligned it is with its audience, the more valuable it becomes.&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;QA work is often invisible. Testing happens behind the scenes. Insights remain in conversations. Risks are understood, but not always communicated clearly. A sprint or release report is your opportunity to change that.&lt;/p&gt;&lt;p&gt;It allows you to make quality visible, structured, and actionable. It transforms QA from a role that executes tasks into one that drives understanding and decision-making.&lt;/p&gt;&lt;p&gt;And over time, this shift doesn’t just improve how others see QA. It changes how QA sees itself, not as a checkpoint at the end, but as a key contributor to building better products.&lt;/p&gt;&lt;figure&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; alt src=&quot;https://cdn-images-1.medium.com/max/1024/1*mX6Do2FyD-yNnFAfi_FAfg.png&quot;&gt;&lt;/figure&gt;</summary><author><name>MarinaJordao</name></author><source gr:stream-id="feed/https://medium.com/feed/@marinacruzjordao"><id>tag:google.com,2005:reader/feed/https://medium.com/feed/@marinacruzjordao</id><title type="html">Stories by MarinaJordao on Medium</title><link rel="alternate" href="https://medium.com/@marinacruzjordao?source=rss-a6f7e93e4f93------2" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776790623000"><id gr:original-id="https://cakehurstryan.com/?p=4463">tag:google.com,2005:reader/item/000002ee00000057</id><category term="Quality Engineering"></category><title type="html">You’re not ready for Quality Engineering</title><published>2026-04-21T16:57:03Z</published><updated>2026-04-21T16:57:03Z</updated><link rel="alternate" href="https://cakehurstryan.com/2026/04/21/youre-not-ready-for-quality-engineering/" type="text/html"></link><summary type="html">&lt;h1 style=&quot;padding-bottom: var(--wp--preset--spacing--50)&quot;&gt;You’re not ready for Quality Engineering&lt;/h1&gt;



&lt;p&gt;In order to understand how to show value as quality professionals we need to understand what it is that engineering teams want and work to support them at that. But many testers and quality professionals are stuck doing the same old things or worse, saying things that show that they’re not ready for quality engineering.&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--20); padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;Why this matters&lt;/h2&gt;



&lt;p&gt;Like it or not things are changing, the days of working in a dedicated testing team or as a siloed tester is over. More and more quality management roles have disappeared and quality professionals get hired by engineering leadership. If we paint ourselves as not engaging correctly with engineers by showing that we valuing what they value then we’re going to be left behind.&lt;/p&gt;



&lt;p&gt;Compounding this issue is that what other people say has a knock on effect on to how we are perceived. Misjudged and poorly messages “content” surrounding quality and how testers behave get scraped by LLMs and AI and presented to engineering leaders, impacting how we’re all perceived. Bad content poisons the well against us all.&lt;/p&gt;



&lt;div style=&quot;border-width: 1px; margin-top: var(--wp--preset--spacing--30); margin-bottom: var(--wp--preset--spacing--30); padding-top: var(--wp--preset--spacing--30); padding-right: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30); padding-left: var(--wp--preset--spacing--30)&quot;&gt;
&lt;p style=&quot;padding-bottom: 0; text-transform: uppercase&quot;&gt;&lt;strong&gt;Poisoning the well&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;It’s happened before… bad experiences with testers created bad associations with terms like QA, Tester, Manual Testing, etc… which is why so many people won’t use those terms or constantly want to use new ones.&lt;/p&gt;



&lt;p&gt;The term Quality Engineering (QE) stemmed from engineering teams as a rebrand to get away from previous bad associations and experiences. With more and more people now using the term QE across the industry we risk re-poisoning the well again.&lt;/p&gt;
&lt;/div&gt;



&lt;p&gt;From my observations and context of working embedded into engineering organisations for many years I can say that the majority of engineers want to work with quality engineering. But because of the poisoned well they find it hard to find quality professionals that they can work with and trust.&lt;/p&gt;



&lt;p&gt;As an industry we need to rebuild credibility with engineers by showing value in the things they care about. I’ve worked with and spoken to engineering leaders and teams for years and have used this to understand what is needed from Quality Engineering.&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--20); padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;What engineering teams want &lt;/h2&gt;



&lt;p&gt;From speaking to senior engineers, Engineering Managers, head of Engineering and CTOs I’ve built up a picture of what engineering teams need from quality specialists. By looking at how the testing community talks publicly about these areas we can see if we’re giving our audience what they want and need.&lt;/p&gt;



&lt;ul&gt;
&lt;li style=&quot;padding-top: 0; padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Builders, not breakers.&lt;/strong&gt; Engineers want collaborators who build. Testers publicly reject the “engineer” label and celebrate ignorance of how things are made.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Generalist skills.&lt;/strong&gt; Teams need help with security, performance, accessibility, CI/CD, chaos engineering. Yet ISTQB downplays non-functional testing and “modern testing” lists treat basics as cutting edge.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Demonstrable competence.&lt;/strong&gt; Widely shared diagrams label unit testing as “manual black box” (nobody does unit testing manually). Testers are loud about what they don’t know.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Trusted advisors.&lt;/strong&gt; Testers vs devs memes signal conflict and drama, not partnership. Getting reposted as training data for LLMs makes it worse.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Selling the dream.&lt;/strong&gt; Gatekeeping terms like “shift left” or “quality engineering” (“it’s all just testing”) prevents teams from understanding what’s possible. “Just Google it” from thought leaders doesn’t inspire.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Coaching and influence.&lt;/strong&gt; The community argues endlessly over terminology (QA vs QE vs test analyst) instead of standardising and teaching.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Pragmatism.&lt;/strong&gt; Teams must ship. Demanding you “test everything” when a 100-char field has more permutations than seconds in the universe is not pragmatic. Testing in production is sometimes necessary.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Working in uncertainty.&lt;/strong&gt; Testers demand spoon fed requirements. Engineers want experts who navigate ambiguity.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Innovation and ownership.&lt;/strong&gt; “Just measuring” isn’t enough. Coasters waiting to be told what to do get pushed out.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Speed.&lt;/strong&gt; The industry (and AI) is optimising for throughput. Testers who frame speed vs quality as a tradeoff look obsolete.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Systems thinking.&lt;/strong&gt; Quality spans branding, pipelines, workflows. Bug hunting alone doesn’t cut it. Execution has been automated since the early 2000s.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Generally speaking, the way that the quality and testing community speaks to what engineering teams want show that we don’t value the same things, show that we can solve these things for them or puts us at odds with engineers. We’re showing that as a community that we’re not ready to work alongside our engineering peers and aren’t ready for what quality engineering really means.&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--20); padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;What engineering teams think&lt;/h2&gt;



&lt;p&gt;Anecdotally we know (or assume) that engineers have opinions about testers and the quality community. I looked to back that up by speaking to engineers directly to ask them their impressions of quality professionals is, based on what they see them writing about online.&lt;/p&gt;



&lt;div style=&quot;border-width: 1px; margin-top: var(--wp--preset--spacing--30); margin-bottom: var(--wp--preset--spacing--30); padding-top: var(--wp--preset--spacing--30); padding-right: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30); padding-left: var(--wp--preset--spacing--30)&quot;&gt;
&lt;p style=&quot;padding-bottom: 0; text-transform: uppercase&quot;&gt;&lt;strong&gt;Quotes from engineers&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;I wouldn’t work with people who have no passion, they have the wrong attitude about engineering.&lt;/p&gt;



&lt;p&gt;This is insane, (what they say about engineering) pushes testers further away from the industry as devs are trying to get closer to testing.&lt;/p&gt;



&lt;p&gt;It wouldn’t be helpful to work with someone not interested in wider quality or only to a basic level.&lt;/p&gt;



&lt;p&gt;Your influence will be limited unless you can get decision makers on your side regarding quality.&lt;/p&gt;



&lt;p&gt;Someone talking like that wouldn’t coach engineers, I wouldn’t ask them for advice.&lt;/p&gt;



&lt;p&gt;Those comments (about having to test everything) make me question the value of hiring testers.&lt;/p&gt;



&lt;p&gt;We’ve changed our ability to release faster, you need to change to meet that.&lt;/p&gt;



&lt;p&gt;This isn’t giving leadership, they won’t make meaningful change in the team.&lt;/p&gt;
&lt;/div&gt;



&lt;p&gt;Engineers didn’t feel that, from what they saw online or from AI presented data, the testing community was building credibility and trust in their specialism. Many of those that I spoke to felt that they wouldn’t want to engage with or work with quality specialists based off of what they’d seen. Some of them were actually saddened and disheartened that it seemed testers hadn’t learned or improved and were saying the same things as they saw 20 years ago.&lt;/p&gt;



&lt;p&gt;The main feedback from engineers were that they wouldn’t trust testers to be able to help them solve quality problems based on what they were seeing. Some would actively exclude testers from conversations (or wouldn’t hire them) based on feeling that they wouldn’t work with them and help the team.&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--20); padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;What can we do?&lt;/h2&gt;



&lt;p&gt;All is not lost! Engineers still want help with quality and with a few small changes we can show them how we’re the ones to help them.&lt;/p&gt;



&lt;ul style=&quot;padding-top: 0; padding-bottom: 0&quot;&gt;
&lt;li style=&quot;padding-top: 0; padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Know your audience&lt;/strong&gt;.  We need to stop the naval gazing and making content for other testers, focus on creating content for engineers and meeting their needs.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Lose the ego&lt;/strong&gt;. Stop trying to win arguments and be right, focus on being humble and helping others to learn rather than correcting them.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Focus on value the audience cares about&lt;/strong&gt;. When we create content it needs to support current issues engineers have (at the moment that’s AI guard rails) rather than retreading the same old issues.&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Build things&lt;/strong&gt;. Don’t be an armchair critic, show that you can build tools and frameworks and even applications by inputting into their quality!&lt;/li&gt;



&lt;li style=&quot;padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Get used to going fast&lt;/strong&gt;. Build resilience and talk about being comfortable with not being able to test everything so you can support your teams.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Basically we just need to communicate wisely online. Since any content becomes AI training data if stop engaging with and pushing dumb takes then these will stop being created and will focus our messaging to what’s important. We can make this even better by sharing more use cases where quality engineering has helped solve relevant engineering problems and worked with teams (not against them).&lt;/p&gt;



&lt;h2 style=&quot;padding-top: var(--wp--preset--spacing--30); padding-bottom: var(--wp--preset--spacing--30)&quot;&gt;The whole talk&lt;/h2&gt;



&lt;p&gt;Want to see the undiluted hot take that this post is based on, here’s the video of the keynote I gave on this topic at PeersCon 2026. &lt;/p&gt;



&lt;figure&gt;&lt;div&gt;
&lt;iframe width=&quot;640&quot; height=&quot;360&quot; style=&quot;border: 0&quot; src=&quot;https://www.youtube.com/embed/9164DbIF_1o?version=3&amp;amp;rel=1&amp;amp;showsearch=0&amp;amp;showinfo=1&amp;amp;iv_load_policy=1&amp;amp;fs=1&amp;amp;hl=en-US&amp;amp;wmode=transparent&amp;amp;autoplay=0&amp;amp;rel=0&amp;amp;playsinline=1&amp;amp;modestbranding=1&amp;amp;origin=https:%2f%2fbazqux.com&quot; allow=&quot;autoplay; fullscreen; encrypted-media; clipboard-write; picture-in-picture; web-share&quot; sandbox=&quot;allow-same-origin allow-scripts allow-forms allow-popups allow-presentation&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p style=&quot;padding-top: var(--wp--preset--spacing--20); padding-bottom: var(--wp--preset--spacing--20)&quot;&gt;&lt;strong&gt;Thanks for taking the time to read!&lt;/strong&gt; If you found this helpful and would like learn more, be sure to check out my other posts on the blog. You can also connect with me on LinkedIn for additional content, updates and discussions; I’d love to hear your thoughts and continue the conversation.&lt;/p&gt;



&lt;div&gt;
&lt;div style=&quot;font-style: normal; font-weight: 400&quot;&gt;
&lt;div&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://cakehurstryan.com/blog-posts/&quot; style=&quot;border-width: 1px; font-style: normal; font-weight: 500&quot;&gt;More Blogs&lt;/a&gt;&lt;/div&gt;



&lt;div&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/cakehurstryan/&quot; style=&quot;border-width: 1px; font-style: normal; font-weight: 500&quot; rel=&quot;noreferrer noopener&quot;&gt;LinkedIn&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</summary><author><name>callumakehurstryan</name></author><source gr:stream-id="feed/https://callumakehurstryansblog.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/https://callumakehurstryansblog.wordpress.com/feed/</id><title type="html">Callum Akehurst-Ryan&apos;s Testing Blog</title><link rel="alternate" href="https://cakehurstryan.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776781978000"><id gr:original-id="69e782c803366a000183f381">tag:google.com,2005:reader/item/0000071a000000df</id><category term="Workshops and Talks"></category><category term="Exercises"></category><title type="html">Software Testing Live 07</title><published>2026-04-21T14:32:58Z</published><updated>2026-04-21T14:32:58Z</updated><link rel="alternate" href="https://www.workroom-productions.com/mot-testing-live-07/" type="text/html"></link><summary type="html">&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://storage.ghost.io/c/7e/30/7e30843b-2abb-494a-ab80-0e931d8ae9a9/content/images/2026/04/bdcuj78cqnbededxyhy7rq3gp2e7.png&quot; alt=&quot;Software Testing Live 07&quot;&gt;&lt;p&gt;We&amp;apos;ll test software that makes crossword grids. Give it words, and it will build a grid of intersecting words.&lt;/p&gt;&lt;h2 id=&quot;article-HXTQmZb_VmztKamdxu5n_uOwthM-for-the-workshop-uploads-due-during-workshop&quot;&gt;For the workshop (uploads due &lt;em&gt;during&lt;/em&gt; workshop)&lt;/h2&gt;&lt;p&gt;Target: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_target/index.html&quot; rel=&quot;noreferrer&quot;&gt;GridBuilder&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_target/testRunner.html&quot; rel=&quot;noreferrer&quot;&gt;Tests&lt;/a&gt;. &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_target/coverage/index.html&quot; rel=&quot;noreferrer&quot;&gt;Coverage&lt;/a&gt;. &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_target/AGENTS.md&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;agents.md&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://ampcode.com/threads/...&quot; rel=&quot;noreferrer&quot;&gt;Build log&lt;/a&gt; via Amp.&lt;/p&gt;&lt;h2 id=&quot;article-HXTQmZb_VmztKamdxu5n_uOwthM-backup-version-working-before-workshop&quot;&gt;Backup version (working before workshop)&lt;/h2&gt;&lt;p&gt;Target: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_backup/index.html&quot; rel=&quot;noreferrer&quot;&gt;GridBuilder&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_backup/testRunner.html&quot;&gt;Tests&lt;/a&gt;. &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_backup/coverage/index.html&quot;&gt;Coverage&lt;/a&gt;. &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_backup/AGENTS.md&quot;&gt;&lt;code&gt;agents.md&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://ampcode.com/threads/T-019daf67-92d1-744d-ba2e-2ec616b178b3&quot;&gt;Build log&lt;/a&gt; via Amp.&lt;/p&gt;&lt;p&gt;A &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://exercises.workroomprds.com/tt_mot_backup/?words=PEA%2COVERDONE%2CRAPIDLY%2CCOPENHAGEN%2CFORTINBRAS%2CREPTILE%2CNOTIFY%2CARRANGEMENT&amp;amp;width=10&amp;amp;height=10&amp;amp;all_cross=true&amp;amp;allow_diagonals=false&amp;amp;allow_reverse=false&quot; rel=&quot;noreferrer&quot;&gt;populated grid&lt;/a&gt;: &lt;/p&gt;&lt;h2 id=&quot;article-HXTQmZb_VmztKamdxu5n_uOwthM-more&quot;&gt;More&lt;/h2&gt;&lt;p&gt;MoT&amp;apos;s page&lt;/p&gt;&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.ministryoftesting.com/events/software-testing-live-episode-07-testing-transparently&quot;&gt;&lt;div&gt;&lt;div&gt;Software Testing Live: Episode 07 - Testing transparently&lt;/div&gt;&lt;div&gt;Explore the boundaries of AI-generated software by live-testing a word search tool and using collaborative techniques to identify gaps in logic despite passing all initial automated tests.&lt;/div&gt;&lt;div&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://storage.ghost.io/c/7e/30/7e30843b-2abb-494a-ab80-0e931d8ae9a9/content/images/icon/favicon-2d674442d2b5d949f41d3acf8dcde2e6ac434709591a8b71f7fd7acc4e89f803.ico&quot; alt=&quot;Software Testing Live 07&quot;&gt;&lt;span&gt;Ministry of Testing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://storage.ghost.io/c/7e/30/7e30843b-2abb-494a-ab80-0e931d8ae9a9/content/images/thumbnail/523uyhqvfm4p9med4xr6g2l93g5f&quot; alt=&quot;Software Testing Live 07&quot;&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;</summary><author><name>James Lyndsay</name></author><source gr:stream-id="feed/https://www.workroom-productions.com/rss/"><id>tag:google.com,2005:reader/feed/https://www.workroom-productions.com/rss/</id><title type="html">Workroom Productions</title><link rel="alternate" href="https://www.workroom-productions.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776759862000"><id gr:original-id="69e73328171744000118c29e">tag:google.com,2005:reader/item/0000068300000076</id><category term="Test Automation"></category><category term="Performance"></category><category term="Continuous Integration"></category><category term="Strategy"></category><category term="Improvement"></category><title type="html">Why Your CI Test Suite Keeps Getting Slower</title><published>2026-04-21T08:24:22Z</published><updated>2026-04-21T08:24:22Z</updated><link rel="alternate" href="https://dev-tester.com/why-your-ci-test-suite-keeps-getting-slower/" type="text/html"></link><summary type="html">&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://dev-tester.com/content/images/2026/04/blog_cover_why_your_ci_test_suite_keeps_getting_slower.png&quot; alt=&quot;Why Your CI Test Suite Keeps Getting Slower&quot;&gt;&lt;p&gt;It’s launch day for your app, and the engineering team is putting the finishing touches on that shiny new feature that they’ve been working on for weeks. But in the flurry of the inevitable last-minute tweaks and bug fixes, the output begins to slow to a crawl, and it starts to look like the launch will have to be put on hold. It seems like the developers and testers have run out of steam, but that’s not the case. The reason they’ve slowed down is that the CI test suite has been taking longer and longer to run, and they can’t do much until the build turns green.&lt;/p&gt;&lt;p&gt;What happened? Did the automated tests suddenly get slow from one day to the next? In my experience, that’s rarely the case. Automated test suites rarely slow down all of a sudden. Instead, they get slower and slower as the team works on the project. A new test case, when run by itself, can take just a few milliseconds, but that short amount of time piles up when you add dozens or hundreds of test cases to the project. Before you know it, a test suite that took less than five minutes to run is now taking over 20 minutes, and no one knows how it got to that point.&lt;/p&gt;&lt;p&gt;I’ve run into this problem over and over through my career, and it’s one of my main reasons for building &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://testnod.com/?ref=dev-tester.com&quot;&gt;TestNod&lt;/a&gt;, a service that collects automated test run data over time and uncovers these patterns that are easy to miss. A common issue that happens in most automated test suites is these gradual slowdowns where test execution times creep up slowly. Most development and QA teams don’t pay much attention to a test suite that takes a second or two longer compared to the previous code commit, so the slower times become the norm. It never feels like an issue until it’s too late.&lt;/p&gt;&lt;h2 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-how-automated-test-suites-slow-over-time&quot;&gt;How Automated Test Suites Slow Over Time&lt;/h2&gt;&lt;p&gt;Of course, no one wakes up in the morning and thinks, &lt;em&gt;“You know what? I’m going to make the tests slower today.”&lt;/em&gt; Test runs that gradually experience slowdowns over time are barely noticeable, and the times when someone does notice, it appears like a harmless thing. For most organizations, there are a thousand more high-priority tasks to address than figuring out why the CI systems are taking a few seconds longer compared to last week. It’s rare that teams proactively carve out the time needed to make sure things don’t get worse, but it’s usually because no one realizes what’s going on.&lt;/p&gt;&lt;p&gt;Decay in automated test suites, whether it’s in the form of slower test runs or less reliable results, always comes as a result of many small decisions taken over time. Developers and testers go through their day doing their work by writing code for new features, adding new test cases for existing functionality, or increasing coverage. Your CI system will run the automated tests and tell you whether things are still looking good or if there’s a change in expected behavior. It will also have the details about how long the tests took to run, but it won’t tell you, &lt;em&gt;“Hey, your tests have slowly gotten slower over the past 20 test runs.”&lt;/em&gt; That kind of feedback loop is missing for most CI setups.&lt;/p&gt;&lt;p&gt;There&amp;apos;s also the fact that we, as humans, are excellent at adapting to gradual change. If your CI build took five minutes to run and it suddenly spiked to over ten minutes in a day or two, you&amp;apos;ll immediately take notice. However, if the execution time took five minutes last week and now it&amp;apos;s five and a half minutes, it&amp;apos;s highly likely you won&amp;apos;t care about that seemingly insignificant bump. The week after that, it&amp;apos;s another 30 seconds added to the test suite run time that you won&amp;apos;t pay attention to. Over time, those half-minute increments add up, and that&amp;apos;s where most teams end up with test suites that run twice as long as just a few months prior, wondering where things went wrong.&lt;/p&gt;&lt;p&gt;This problem has existed as long as automated testing has, but it&amp;apos;s gotten noticeably worse over the past year. AI coding tools let teams churn out test cases faster than ever, and most of those tests get committed without anyone checking whether they&amp;apos;re efficient.&lt;/p&gt;&lt;h2 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-metrics-that-actually-matter&quot;&gt;Metrics That Actually Matter&lt;/h2&gt;&lt;p&gt;If you want to determine if your automated tests have a speed issue, you need to look at the right numbers. Most teams will only pay attention to the total build time in their CI system dashboard or how long it takes the process to complete from commit to test result. They’re good indicators for understanding the development workflow experience, but they don&amp;apos;t tell you where the issue is.&lt;/p&gt;&lt;p&gt;A typical CI test run does a lot more than running your tests. I typically work with Ruby on Rails projects, and the typical workflow has to install the current version of Ruby, install dependencies, and set up the database before it runs the test suite. Any one of those steps could be taking the lion’s share of the total time it takes to complete the entire cycle. One of the first places to look is the difference between &lt;em&gt;wall time&lt;/em&gt; and &lt;em&gt;test time&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Wall time is the actual real-world time that elapses in a given process, while test time is how long the tests spend running. Distinguishing between these two measurements will help you know where the team’s focus should lie when it comes to speed improvements. For example, if it takes a developer 12 minutes from the moment they make a commit to the time they get the CI build results back (wall time) and the automated tests take 3 minutes to execute (test time), the problem isn’t the test suite. But if the test times are growing at a pace faster than the wall time, you should pay closer attention to the test suite.&lt;/p&gt;&lt;p&gt;Another area worth looking at is how long each individual test takes, specifically the median and p95 (95th percentile) values. The median value tells you what a typical test in the suite takes, which is good to know but can also obscure pain points. With the p95, you can see the outliers in your automated tests. In most projects I’ve worked on, there’s always a small percentage of the tests that account for the bulk of the total execution time. Improving these test cases usually makes the most of your time in speeding things up.&lt;/p&gt;&lt;p&gt;Given the increase of AI-generated test suites, one of the main metrics I’ve been keeping track of lately is the relationship between the number of test cases and the run time. If your test count went up 20% in the past month but the total execution time went up by 50%, it’s a clear sign that the newer tests are not as efficient as they should be (which is common in AI-heavy workflows).&lt;/p&gt;&lt;p&gt;Regardless of the numbers you keep track of, what matters most is the trend over time. A CI test run only offers a single snapshot in time, and a single measurement on its own is almost meaningless because there are plenty of variables in play, from the CI service to bugs in the commit triggering the test run. What you need to pay close attention to is how things have changed in the past few days, weeks, or months. Seeing that your total time increased by 30% or your p95 has gotten significantly worse in the past three weeks tells you more than any single test run can.&lt;/p&gt;&lt;h2 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-what-you-can-do-about-it&quot;&gt;What You Can Do About It&lt;/h2&gt;&lt;h3 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-deciding-what-%E2%80%9Cslow%E2%80%9D-is-for-you&quot;&gt;Deciding what “slow” is for you&lt;/h3&gt;&lt;p&gt;Before jumping into the codebase to start refactoring to cut down the test run time, I’d recommend taking a step back to figure out the definition of &lt;em&gt;slow&lt;/em&gt; for you and your team. One of the reasons why automated test suites get to a point where it’s a pain to execute is because no one decided when things were slow. As mentioned earlier, execution slows over time, and we get used to the additional time until one day we realize the tests are hurting instead of helping. It’s because no one drew the proverbial line in the sand.&lt;/p&gt;&lt;p&gt;Deciding on what “too slow” means for you and your team is ideally done way before hitting that threshold. Doing it early gives you and your team accountability for keeping tests running as quickly as deemed acceptable. For example, let’s say your entire end-to-end tests have gone from running in 10 minutes to running in 13 minutes over time. It’s good enough, but everyone’s feeling a bit dragged down by waiting those extra three minutes. If the team decides that anything over 15 minutes is slow before reaching that point, developers and testers will know that they should do their best to reduce, or at the very least maintain, their tests so they don&amp;apos;t ever reach that point.&lt;/p&gt;&lt;p&gt;However, if we’re being honest, even with declaring what the slowest acceptable run times are for your tests, we’ll likely forget as we go on with our daily work. That’s why the threshold also needs to become visible, and the best way to do that is to build it into the test suite or CI system. Depending on your library or framework, you can add some configuration to fail a test run if it goes over a specified time limit.&lt;/p&gt;&lt;p&gt;For instance, in Playwright you can &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://playwright.dev/docs/test-timeouts?ref=dev-tester.com&quot;&gt;configure timeouts&lt;/a&gt; globally or per test, and in Python you can use the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://pypi.org/project/pytest-timeout/?ref=dev-tester.com&quot;&gt;&lt;code&gt;pytest-timeout&lt;/code&gt; library&lt;/a&gt; to extend pytest and configure how long to keep a test running before terminating and failing it. While these settings are typically used for making sure your tests don’t hang a CI process, you can also use them for the purpose of keeping your test runs fast and not being caught off guard when the suite slows down.&lt;/p&gt;&lt;h3 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-taking-care-of-the-outliers&quot;&gt;Taking care of the outliers&lt;/h3&gt;&lt;p&gt;In most automated test suites I’ve worked on, there always seem to be a few tests that take a disproportionate amount of the total run time. Most testing libraries and frameworks have built-in ways to profile and display the slowest tests in your automated test suite. If you haven’t done this in your applications, take a moment now to learn how to do this with your current testing tools and check the results.&lt;/p&gt;&lt;p&gt;I can almost guarantee that the top 10 slowest test cases in your automated test suite are taking much more of the test time than you imagined. I did this with the unit tests of a client project I’m working on currently, and out of nearly 900 unit tests, the 10 slowest tests took 10.6% of the total time. That means roughly 1% of the entire test suite is consuming over 10% of the time developers and testers have to wait around for the results. Your results will vary, but I’m certain the ratio is similar to or worse than this.&lt;/p&gt;&lt;p&gt;Whenever I help teams with the automated test suite performance, I typically like to begin with those 10 slowest test cases, even if there are thousands of test cases. The reason for addressing this subset first is that they almost always point to the same issues. Common patterns of slow tests are because they do too much I/O like creating dozens or hundreds of records in a database, making calls to external services, or overloading the test with too much unnecessary setup work. There are also many instances where a test case that can be a smaller and quicker unit or API test is running as a bulky integration or end-to-end test.&lt;/p&gt;&lt;p&gt;Often, addressing these issues in the slowest tests will also improve other tests that weren’t in that initial batch of ten. Once those top 10 slowest tests are handled, re-run the tests with your profiler again and check the next batch of slow tests. It’s likely that they’re similar issues from the first batch, and you’ll begin identifying what’s causing performance issues in your test suite. Do this enough times and you’ll begin to notice that the patterns causing frequent slowness start to disappear over time, including with new test cases.&lt;/p&gt;&lt;h3 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-beware-of-ai-generated-tests&quot;&gt;Beware of AI-generated tests&lt;/h3&gt;&lt;p&gt;Thanks to the explosion of LLMs for writing code, I’ve seen a radical increase in the number of automated test cases added to the codebase. Developers that would barely write a single unit test are now opening pull requests with complete code coverage of the new feature they built or bug they fixed. More tests are a good thing, right? I’d argue that it’s the opposite with AI-generated code.&lt;/p&gt;&lt;p&gt;Of course, having test coverage for critical parts of the system is essential to keep the application running smoothly. But it’s never a good idea to focus on having automated tests for various reasons, from increased complexity in test setup to more fragility as a system evolves. Unfortunately, AI tools like Claude Code and Gemini often don’t have enough context to know what to test, so they usually err on the side of writing too much code, and we end up with bloated test suites if we don’t pay attention to the output.&lt;/p&gt;&lt;p&gt;Besides the issue of having too many automated tests, AI-generated tests are prone to focus on making tests pass, entirely ignoring performance issues. As an example, another project I worked on recently suddenly experienced a 2x to 4x increase in test run times. I didn’t notice the slowdown until I worked on a feature a few days later and saw the test suite take over five minutes to run locally when before it took less than two minutes. When I traced the offending commit, it was due to an AI-generated test case from another developer. The test switched the database cleaning strategy (from transactions to table truncation) because the AI couldn’t “figure out” how to make the test pass without this. This single-line configuration change led to the massive slowdown across the test suite. Fixing the test to not need the database strategy switch resolved the slowdown and test run times went back to normal.&lt;/p&gt;&lt;p&gt;I’m not advocating to not use AI for test generation, as it can be a multiplier for most developers and testers. But the problem is that most people who use these tools tend to accept the output blindly without a second thought, and it’s led to test suites full of unnecessarily inefficient test cases. Until AI tooling gets better at this, the only solution is to pay close attention to whatever your preferred LLM generates before committing it to the codebase. This can take shape whether you’re the one doing the AI test generation or double-checking someone else’s pull request as part of a regular code review. The few extra minutes it takes to review AI output will save you much more time down the road.&lt;/p&gt;&lt;h3 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-treat-symptoms-but-know-why-youre-doing-it&quot;&gt;Treat symptoms, but know why you&amp;apos;re doing it&lt;/h3&gt;&lt;p&gt;There’s a handful of techniques that most teams go for when their test suites start dragging along and they want to cut down the wall time of the test suite. Some go-to strategies are using parallel workers to run multiple tests simultaneously, adding more caching of dependencies and state, running subsets of tests, or bumping up the size of their CI systems. These approaches are widely used because they work well and show real improvements that you can ship out as soon as possible.&lt;/p&gt;&lt;p&gt;The problem is that most teams reach for these first, before looking at why the tests are slow in the first place. None of these actions make your test suite faster, even though the result is a shorter test run. The same bad practices stay scattered throughout the codebase, and there&amp;apos;s only so much parallelization or scaling of your CI workers you can do before you hit a roadblock.&lt;/p&gt;&lt;p&gt;The order in which you apply these techniques matters. If 30 of your tests each spin up a full database and hit three external APIs, parallelizing them means you&amp;apos;re now spinning up 30 databases concurrently and hitting those APIs 30 times at once. Now you&amp;apos;ve traded a slow test suite for a flaky one that eats up your CI runner&amp;apos;s resources. Running subsets of tests has a similar trap. It works until a change breaks something the subset didn&amp;apos;t cover, and no one notices until it hits production. The underlying flaw didn&amp;apos;t disappear. It&amp;apos;s still lurking under the covers.&lt;/p&gt;&lt;p&gt;Fix the tests first, then apply parallelization, caching, and other strategies to what&amp;apos;s left. Working in that order will make each of these techniques compound. If you begin in reverse order, they’ll just paper over problems until the papering stops working. If you find yourself adding more parallelization or spending too much time figuring out which subset of tests to run effectively, it&amp;apos;s a sign to stop and address the real issue instead of slapping another stopgap method on top.&lt;/p&gt;&lt;h2 id=&quot;article--8Wc8V5yTLuR2bMehITX_d-48vc-how-testnod-helps-you-stay-ahead-of-slowdowns&quot;&gt;How TestNod Helps You Stay Ahead of Slowdowns&lt;/h2&gt;&lt;p&gt;All of this advice assumes someone is keeping track of the automated test suite over time. But if most teams are like the ones I’ve worked with over my career, the reality is that almost no one is paying attention. Tracking trends across weeks or months means either building internal tooling or manually pulling data from your CI provider. Most teams never get around to it, which is how we end up with 20-minute test suites in the first place.&lt;/p&gt;&lt;p&gt;That&amp;apos;s exactly what I built &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://testnod.com/?ref=dev-tester.com&quot;&gt;TestNod&lt;/a&gt; to do. TestNod collects JUnit XML files from your CI runs and tracks their data for every test case across your build history. These files often contain a &lt;code&gt;time&lt;/code&gt; attribute that tells you exactly how long it took a test case or test suite to run. Instead of looking at a single test run in isolation, TestNod shows you how your suite’s total execution time is trending over weeks and months. When your test suite begins to slow down, TestNod alerts you so you’ll see it long before it becomes a pain to deal with in your day-to-day workflow.&lt;/p&gt;&lt;p&gt;The data for tracking all of this information already exists in the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://testnod.com/blog/why-every-testing-tool-generates-different-junit-xml?ref=dev-tester.com&quot;&gt;JUnit XML files that most testing frameworks produce&lt;/a&gt; and most CI systems can store. TestNod makes that data visible and actionable without requiring you to build or maintain any custom tooling. Setup takes a few minutes on the most popular CI services, including GitHub Actions, CircleCI, and GitLab, and it works with any testing library or framework that outputs JUnit XML.&lt;/p&gt;&lt;p&gt;TestNod is not open to the public yet, but if you want to be one of the first to try it out, sign up for early access at &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://testnod.com/?ref=dev-tester.com&quot;&gt;https://testnod.com/&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Dennis Martinez</name></author><source gr:stream-id="feed/https://dev-tester.com/rss/"><id>tag:google.com,2005:reader/feed/https://dev-tester.com/rss/</id><title type="html">Dev Tester | Improve your test automation skills as a developer</title><link rel="alternate" href="https://dev-tester.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776751620000"><id gr:original-id="http://testpappy.wordpress.com/?p=1763">tag:google.com,2005:reader/item/000005360000006d</id><category term="Uncategorized"></category><title type="html">Talk to the Machine, or Why We Chat with AI But Not Each Other</title><published>2026-04-21T06:07:00Z</published><updated>2026-04-21T06:07:00Z</updated><link rel="alternate" href="https://testpappy.wordpress.com/2026/04/21/talk-to-the-machine-or-why-we-chat-with-ai-but-not-each-other/" type="text/html"></link><summary type="html">&lt;p&gt;Lisa Crispin recently dropped a comment under one of my posts. &lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;“It seems funny to me that people are willing to turn things over to an agent, but they don’t want to collaborate with other humans to do a better job of building quality in.”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;A little sad, if you think about it.&lt;/p&gt;



&lt;p&gt;With the rise of AI coding assistants suddenly everyone is prompting. People spend hours iterating with ChatGPT or Claude. They refine their prompts, try different angles, patiently wait for the response, adjust, try again. They have entire conversations with the machine about architecture decisions, edge cases, test strategies.&lt;/p&gt;



&lt;p&gt;And yet. Ask them to walk over to a colleague and have a five-minute conversation about the same thing? Too much effort. Too awkward. Takes too long. Don’t want to interrupt.&lt;/p&gt;



&lt;p&gt;I find myself wondering, what’s the psychology here? The friction is lower, that is clear. But is the machine “safer” because it doesn’t judge? Because we stay in control of the conversation? Because asking a human might feel like admitting we don’t know something? I genuinely don’t have the answer. But the pattern is hard to ignore.&lt;/p&gt;



&lt;p&gt;Here’s the thing though. AI doesn’t skip the conversation. It just delays it.&lt;/p&gt;



&lt;p&gt;You can prompt your way to code. Lots of code. Fast code. But without talking to your teammates first, that code arrives without shared understanding. Nobody discussed what problem we’re actually solving. Nobody aligned on the approach. Nobody mentioned that other edge case, or that dependency, or that thing the customer said last week.&lt;/p&gt;



&lt;p&gt;So the code lands. And then come the pull requests that miss the point. The bugs that could have been avoided. The incidents that escalate. The rework. The frustration. All the conversations you skipped? They happen anyway. Just later, angrier, and almost certainly more expensive.&lt;/p&gt;



&lt;p&gt;This is where in my opinion the difference shows. Teams that talk first and then use AI tools to execute? They scale. The AI amplifies their shared understanding. It accelerates what they’ve already aligned on.&lt;/p&gt;



&lt;p&gt;Teams that prompt instead of talking? They drown. In code nobody asked for. In PRs that go nowhere. In technical debt that piles up because nobody stopped to ask “wait, is this what we actually need?”&lt;/p&gt;



&lt;p&gt;This echoes what Lisa Crispin and Janet Gregory have championed for years: the human side of building software – the talking, the collaborating, the shared understanding – isn’t overhead. It’s the work.&lt;/p&gt;



&lt;p&gt;AI changes nothing about this. If anything, it makes it more obvious. The teams that were already good at communication? They’re getting better, faster. The teams that weren’t? They’re just producing more stuff that misses the mark. At higher speed.&lt;/p&gt;



&lt;p&gt;So here’s my ask. Before you open that chat window with your AI assistant, try something radical. Talk to a human first. Ask a colleague what they think. Have the awkward conversation. Align on the problem before you generate the solution.&lt;/p&gt;



&lt;p&gt;The AI will still be there when you’re done. And it’ll be a lot more useful once you actually know what you’re building.&lt;/p&gt;



&lt;p&gt;No agent can save you from not talking to each other.&lt;/p&gt;&lt;p style=&quot;clear: both&quot;&gt;&lt;/p&gt;&lt;p data-bqr-info=&quot;attachment&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://testpappy.wordpress.com/wp-content/uploads/2026/04/pexels-photo-8438974.jpeg&quot; alt=&quot;a robot holding a flower&quot;&gt;&lt;/p&gt;</summary><author><name>Patrick</name></author><source gr:stream-id="feed/https://testpappy.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/https://testpappy.wordpress.com/feed/</id><title type="html">Test Pappy</title><link rel="alternate" href="https://testpappy.wordpress.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1776744179000"><id gr:original-id="https://medium.com/p/70ecbd9d50e5">tag:google.com,2005:reader/item/000009950000003d</id><title type="html">What STACKx Cybersecurity 2026 Made Me Rethink About AI, Testing, and My Own Engineering Work</title><published>2026-04-21T04:02:59Z</published><updated>2026-04-21T04:02:59Z</updated><link rel="alternate" href="https://medium.com/singapore-gds/what-stackx-cybersecurity-2026-made-me-rethink-about-ai-testing-and-my-own-engineering-work-70ecbd9d50e5?source=rss----e017186968a1---4" type="text/html"></link><summary type="html">&lt;p&gt;Last Friday I spent the day at Marina Bay Sands for STACKx Cybersecurity 2026 — GovTech Singapore’s annual gathering of security leaders, engineers, and public sector technologists.&lt;/p&gt;&lt;p&gt;I’ve worked across Quality Engineering and Software Engineering roles, with a focus on testing strategy, CI/CD automation, and recent years, AI-assisted engineering workflows. And part of my job right now is figuring out how to bring AI into our engineering workflows responsibly. So I went in thinking I’d pick up some security pointers I could bring back to the framework design.&lt;/p&gt;&lt;p&gt;What I didn’t expect was to walk out questioning whether I’ve even been pointing the framework in the right direction. Below are the things I’m still thinking about.&lt;/p&gt;&lt;h3&gt;The Wrong Question Has Been Living Rent-Free in Our Roadmaps&lt;/h3&gt;&lt;p&gt;The old question everyone asks: &lt;em&gt;“Can we do the same work with fewer people?”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The better question: &lt;em&gt;“With the same people, how much more can we now do?”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;That second question sounds subtle, but it completely changes how you think about building an AI framework. I’ve been thinking about efficiency — how to speed up test creation, how to reduce review cycles, how to automate the boring stuff. And that’s fine, those are real problems. But the speakers were talking about something bigger: capability multiplication. Not doing the same job faster, but doing things you literally couldn’t do before.&lt;/p&gt;&lt;p&gt;Which means the AI framework I’m building shouldn’t just help engineers write tests quicker, it should let us catch categories of issues we’re currently blind to. That’s a different design goal, and honestly I hadn’t framed it that way until Friday.&lt;/p&gt;&lt;h3&gt;From Pilot to Air Traffic Controller — Whether You’re Ready or Not&lt;/h3&gt;&lt;p&gt;One of the more memorable frames: the shift every senior engineer needs to make right now is from being a pilot to being an air traffic controller. The pilot is a Solo Executor — deep expertise, full control, limited to what one person can personally fly. The air traffic controller does Supervisory Engineering — maintaining awareness across multiple simultaneous flows, calibrating when to intervene, trusting the system until there’s a reason not to.&lt;/p&gt;&lt;p&gt;The honest version of this for me is: I’ve been a pilot for most of my career, and I’m good at it. There’s real satisfaction in going deep into a problem, owning the outcome, verifying end-to-end. But I’m building a system now that will, eventually, run significantly without me in the loop. And I haven’t fully made peace with that yet.&lt;/p&gt;&lt;p&gt;The transition isn’t about working less or caring less. It’s about shifting where the expertise lives — from execution to the design and governance of execution. That’s actually harder. And it requires me to be honest about the habits I’m holding onto that are pilot habits, not air traffic controller habits.&lt;/p&gt;&lt;h3&gt;The Rungs I Climbed Soon Don’t Exist Anymore&lt;/h3&gt;&lt;p&gt;The speaker put up a redesigned career ladder and it stopped me cold — not because it was surprising, but because it named something I’ve been feeling without having the language for.&lt;/p&gt;&lt;p&gt;The bottom rungs are gone. The repetitive tasks that used to build expertise — writing hundreds of test cases by hand, grinding through manual reviews — are exactly the work AI is consuming. What’s left above demands a different kind of engineer: someone who can supervise agents, verify and challenge outputs at speed, think in systems, and exercise judgement with accountability. Strong fundamentals matter &lt;em&gt;more&lt;/em&gt; now, not less — but they’re the floor, not the ceiling.&lt;/p&gt;&lt;p&gt;The part that really got me was the framing around workforce development. The speaker was blunt: we cannot prepare for an AI-native future with a pre-AI workforce model. Train people in fundamentals plus new instincts — to supervise, verify, challenge, and reason in systems. Deploy them broadly — across ops, engineering, governance, assurance, product security, and AI-enabled cyber. Not deskilled. Deliberately developed.&lt;/p&gt;&lt;p&gt;If AI generates the test cases now, where does the instinct come from? I can’t just onboard someone onto the AI harness and assume they’ll grow into a strong tester. I have to create the friction on purpose — make them challenge the AI output, articulate what’s missing, catch what it got confidently wrong. And I need to think about breadth too — the best QEs in an AI-native world won’t just be test specialists, they’ll need to reason across governance, assurance, and security contexts. The tool is only as good as the judgment sitting behind it. That judgment doesn’t come for free anymore.&lt;/p&gt;&lt;h3&gt;AI Doesn’t Get to Own the Irreversible Decisions&lt;/h3&gt;&lt;p&gt;One of the most clarifying moments of the afternoon was a speaker drawing a hard line through the types of decisions AI should and shouldn’t own. Some things AI should handle autonomously — pattern-matching, high-volume detection, tasks where speed matters more than nuance. Some things AI should inform, but a human should decide. And some things AI must stay completely out of.&lt;/p&gt;&lt;p&gt;This maps directly onto quality engineering decisions I make every day. AI can autonomously flag test failures and coverage gaps. It can recommend where to focus effort. But the final go/no-go call on a release? That stays human. Not because I don’t trust the system, but because trust without clear accountability is just abdication with extra steps. This kind of tiering needs to be explicitly written into the AI harness design from day one.&lt;/p&gt;&lt;h3&gt;Communicate the Reasoning, Not Just the Answer&lt;/h3&gt;&lt;p&gt;The last thing that stuck with me came from a session about decision-making under pressure — how leaders behave when information is incomplete and time is short. The speaker had a clean framework for anchoring a team in those moments, but the line I wrote down was the one that followed: &lt;em&gt;“Communicate your reasoning, not just your decision.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I do this badly. When I make a judgment call — on test coverage, on a risk escalation, on a go/no-go — I tend to state the conclusion and move on. I assume the reasoning is implied. But sharing the reasoning, especially when it’s uncertain, is how you build trust over time. It’s also, I’ve started to think, what separates senior-level contribution from staff-level contribution. Not better decisions — more visible thinking.&lt;/p&gt;&lt;h3&gt;So what am I actually going to do about it?&lt;/h3&gt;&lt;p&gt;I’ve been chewing on this all weekend. Here’s where my head is at:&lt;/p&gt;&lt;p&gt;First, I’m reframing my AI framework from “efficiency tool” to “capability multiplier.” The design questions change when you shift that lens. Example: it’s not just “how do we write tests faster” — it’s “what can we now test that we couldn’t before?”&lt;/p&gt;&lt;p&gt;Second, I’m adding AI-assisted first-pass review as a core pillar, not a nice-to-have. If our AI code reviewer can catch a replay attack vector in a nonce handling issue, I should be building something that gives my team’s reviewers that same kind of head start.&lt;/p&gt;&lt;p&gt;Third — and this is the harder one — I need to redesign how my team trains and works alongside AI. Not just “here’s the tool, go use it,” but structured ways of working where the human stays in the loop and understands what the AI is doing. Because the moment your team treats AI output as gospel without understanding it, you’ve got a different kind of quality problem.&lt;/p&gt;&lt;p&gt;That’s a mindset shift, and it starts with me.&lt;/p&gt;&lt;h3&gt;Wrapping up&lt;/h3&gt;&lt;p&gt;Look, I went to a cybersecurity conference expecting to take some security notes. Instead I came back rethinking the whole framing of what I’m building and why.&lt;/p&gt;&lt;p&gt;The conference theme was “Creating a Trusted Digital Future Together” and honestly, “together” is the word I keep thinking about. Not just cross-org collaboration — though that matters — but the human-AI partnership. The idea that the future isn’t AI replacing us or us ignoring AI, but us learning to work alongside it in ways that actually make both sides better.&lt;/p&gt;&lt;p&gt;I’m still processing. But I’m glad I went.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://medium.com/singapore-gds/what-stackx-cybersecurity-2026-made-me-rethink-about-ai-testing-and-my-own-engineering-work-70ecbd9d50e5&quot;&gt;What STACKx Cybersecurity 2026 Made Me Rethink About AI, Testing, and My Own Engineering Work&lt;/a&gt; was originally published in &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://medium.com/singapore-gds&quot;&gt;Government Digital Products, Singapore&lt;/a&gt; on Medium, where people are continuing the conversation by highlighting and responding to this story.&lt;/p&gt;</summary><author><name>Tehhp</name></author><source gr:stream-id="feed/https://medium.com/feed/singapore-gds"><id>tag:google.com,2005:reader/feed/https://medium.com/feed/singapore-gds</id><title type="html">Government Digital Services, Singapore - Medium</title><link rel="alternate" href="https://medium.com/singapore-gds?source=rss----e017186968a1---4" type="text/html"></link></source></entry></feed>