<?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>17991618003089</gr:continuation><updated>2026-05-18T15:46:50Z</updated><entry gr:crawl-timestamp-msec="1779090989000"><id gr:original-id="https://qualityremarks.com/?p=6741">tag:google.com,2005:reader/item/00000463000004bd</id><category term="Software Testing"></category><title type="html">MCA Awards 2026</title><published>2026-05-18T07:56:29Z</published><updated>2026-05-18T07:56:29Z</updated><link rel="alternate" href="https://qualityremarks.com/mca-awards-2026/" type="text/html"></link><summary type="html">&lt;p&gt;I am incredibly honored to have been selected by the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.mca.org.uk/&quot; rel=&quot;noopener&quot; title&gt;Management Consultancies Association&lt;/a&gt; as a finalist for &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.mca.org.uk/awards/finalists-2026/individuals-2026/keith-klain-kpmg&quot; rel=&quot;noopener&quot; title&gt;Chartered Management Consultant of the Year&lt;/a&gt;.&lt;/p&gt;



&lt;div&gt;
&lt;div style=&quot;flex-basis: 66.66%&quot;&gt;
&lt;p&gt;While recognition like this is appreciated, it really reflects the people and teams I’ve had the privilege to work alongside throughout my career in software testing. I’ve been fortunate to collaborate with talented, passionate professionals who care deeply about quality, delivery, innovation, and supporting one another through challenging projects.&lt;/p&gt;



&lt;p&gt;Some of the work I’m proudest of has never been about technology, it has been about building teams, mentoring people, creating opportunities, and helping others grow into leadership roles of their own.&lt;/p&gt;
&lt;/div&gt;



&lt;div style=&quot;flex-basis: 33.33%&quot;&gt;
&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.mca.org.uk/mca-awards&quot; rel=&quot; noreferrer noopener&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; data-recalc-dims=&quot;1&quot; fetchpriority=&quot;high&quot; decoding=&quot;async&quot; width=&quot;497&quot; height=&quot;484&quot; data-attachment-id=&quot;6742&quot; data-permalink=&quot;https://qualityremarks.com/mca-awards-2026/image-63/&quot; data-orig-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-1.png?fit=497%2C484&amp;amp;quality=20&amp;amp;ssl=1&quot; data-orig-size=&quot;497,484&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;}&quot; data-image-title=&quot;image&quot; data-image-description data-image-caption data-large-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-1.png?fit=497%2C484&amp;amp;quality=20&amp;amp;ssl=1&quot; alt data-orig-srcset=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-1.png?w=497&amp;amp;quality=20&amp;amp;ssl=1 497w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-1.png?resize=300%2C292&amp;amp;quality=20&amp;amp;ssl=1 300w&quot; src=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-1.png?w=497&amp;amp;quality=20&amp;amp;ssl=1&quot; style=&quot;width: 297px; height: auto&quot;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;I’m grateful to everyone who has supported me at &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://kpmg.com/uk/en/services/mca-awards.html#accordion-94bc5340f2-item-e365997494&quot; rel=&quot;noopener&quot; title&gt;KPMG UK&lt;/a&gt; for my nomination and the great people in the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://kpmg.com/uk/en/services/consulting/technology/testing-services.html&quot; rel=&quot;noopener&quot; title&gt;Quality Engineering and Testing&lt;/a&gt; practice run by &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/delfield/&quot; rel=&quot;noopener&quot; title&gt;Daryl Elfield&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Fingers crossed for October!&lt;/p&gt;



&lt;figure&gt;&lt;img width=&quot;640&quot; height=&quot;320&quot; data-recalc-dims=&quot;1&quot; decoding=&quot;async&quot; data-attachment-id=&quot;6768&quot; data-permalink=&quot;https://qualityremarks.com/mca-awards-2026/image-64/&quot; data-orig-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-2.png?fit=1024%2C512&amp;amp;quality=20&amp;amp;ssl=1&quot; data-orig-size=&quot;1024,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;}&quot; data-image-title=&quot;image&quot; data-image-description data-image-caption data-large-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-2.png?fit=640%2C320&amp;amp;quality=20&amp;amp;ssl=1&quot; alt data-orig-srcset=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-2.png?w=1024&amp;amp;quality=20&amp;amp;ssl=1 1024w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-2.png?resize=300%2C150&amp;amp;quality=20&amp;amp;ssl=1 300w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-2.png?resize=768%2C384&amp;amp;quality=20&amp;amp;ssl=1 768w&quot; src=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-2.png?w=1024&amp;amp;quality=20&amp;amp;ssl=1&quot;&gt;&lt;/figure&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityremarks.com/mca-awards-2026/&quot;&gt;MCA Awards 2026&lt;/a&gt; first appeared on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityremarks.com&quot;&gt;Quality Remarks&lt;/a&gt;.</summary><author><name>keithklain</name></author><source gr:stream-id="feed/http://qualityremarks.com/feed/"><id>tag:google.com,2005:reader/feed/http://qualityremarks.com/feed/</id><title type="html">Quality Remarks</title><link rel="alternate" href="https://qualityremarks.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779088714000"><id gr:original-id="https://medium.com/p/19ccacbec262">tag:google.com,2005:reader/item/0000091b0000006e</id><category term="technology"></category><category term="software-development"></category><category term="programming"></category><category term="coding"></category><category term="automation"></category><title type="html">How to perform different mouse click actions using Playwright Java</title><published>2026-05-18T07:18:34Z</published><updated>2026-05-18T07:18:34Z</updated><link rel="alternate" href="https://levelup.gitconnected.com/how-to-perform-different-mouse-click-actions-using-playwright-java-19ccacbec262?source=rss-d56167afca7d------2" type="text/html"></link><summary type="html">&lt;div&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://levelup.gitconnected.com/how-to-perform-different-mouse-click-actions-using-playwright-java-19ccacbec262?source=rss-d56167afca7d------2&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://cdn-images-1.medium.com/max/1920/1*K1kwFOvW2BnZeaHPRHQOng.jpeg&quot; width=&quot;1920&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Learn how to perform different click actions using Playwright Java with best practices, debugging tips, and advanced interactions.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://levelup.gitconnected.com/how-to-perform-different-mouse-click-actions-using-playwright-java-19ccacbec262?source=rss-d56167afca7d------2&quot;&gt;Continue reading on Level Up Coding »&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary><author><name>Mohammad Faisal Khatri</name></author><source gr:stream-id="feed/https://medium.com/@iamfaisalkhatri/feed"><id>tag:google.com,2005:reader/feed/https://medium.com/@iamfaisalkhatri/feed</id><title type="html">Stories by Mohammad Faisal Khatri on Medium</title><link rel="alternate" href="https://medium.com/@iamfaisalkhatri?source=rss-d56167afca7d------2" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779088714000"><id gr:original-id="https://medium.com/p/19ccacbec262">tag:google.com,2005:reader/item/00000a830000006d</id><category term="technology"></category><category term="software-development"></category><category term="programming"></category><category term="coding"></category><category term="automation"></category><title type="html">How to perform different mouse click actions using Playwright Java</title><published>2026-05-18T07:18:34Z</published><updated>2026-05-18T07:18:34Z</updated><link rel="alternate" href="https://levelup.gitconnected.com/how-to-perform-different-mouse-click-actions-using-playwright-java-19ccacbec262?source=rss-d56167afca7d------2" type="text/html"></link><summary type="html">&lt;div&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://levelup.gitconnected.com/how-to-perform-different-mouse-click-actions-using-playwright-java-19ccacbec262?source=rss-d56167afca7d------2&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://cdn-images-1.medium.com/max/1920/1*K1kwFOvW2BnZeaHPRHQOng.jpeg&quot; width=&quot;1920&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Learn how to perform different click actions using Playwright Java with best practices, debugging tips, and advanced interactions.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://levelup.gitconnected.com/how-to-perform-different-mouse-click-actions-using-playwright-java-19ccacbec262?source=rss-d56167afca7d------2&quot;&gt;Continue reading on Level Up Coding »&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary><author><name>Mohammad Faisal Khatri</name></author><source gr:stream-id="feed/https://medium.com/feed/@iamfaisalkhatri"><id>tag:google.com,2005:reader/feed/https://medium.com/feed/@iamfaisalkhatri</id><title type="html">Stories by Mohammad Faisal Khatri on Medium</title><link rel="alternate" href="https://medium.com/@iamfaisalkhatri?source=rss-d56167afca7d------2" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779046982000"><id gr:original-id="https://medium.com/p/f22c10a854c5">tag:google.com,2005:reader/item/000008a60000001f</id><category term="ai"></category><category term="prompt-engineering"></category><category term="generative-ai-tools"></category><title type="html">You’re not bad at AI. You’re just bad at talking to it.</title><published>2026-05-17T19:43:02Z</published><updated>2026-05-17T19:43:02Z</updated><link rel="alternate" href="https://sajithatharaka.medium.com/youre-not-bad-at-ai-you-re-just-bad-at-talking-to-it-f22c10a854c5?source=rss-3af8e7cc568a------2" type="text/html"></link><summary type="html">&lt;p&gt;&lt;em&gt;Most people blame the tool when the real problem is the conversation.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Every week, someone tells me AI “doesn’t work” for them. They tried ChatGPT. They got a wall of generic text. They asked Claude something specific and it completely missed the point. So they shrugged and went back to doing things the slow way. What’s frustrating is that the capability was always there. The gap wasn’t the AI. It was the gap between what they meant and what they said.&lt;/p&gt;&lt;figure&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; alt src=&quot;https://cdn-images-1.medium.com/max/1024/1*8bTNCJQEog683WLjvq8j4A.png&quot;&gt;&lt;/figure&gt;&lt;p&gt;This is the biggest challenge in AI adoption right now, and nobody talks about it plainly. We get articles about which model is best, which tool has the most features, which company raised the most money. But the bottleneck for most people and most teams isn’t access to AI. It’s knowing how to direct it.&lt;/p&gt;&lt;h3&gt;The real problem: AI does exactly what you ask, not what you mean&lt;/h3&gt;&lt;p&gt;Here’s the thing about working with AI that catches most people off guard. It’s not a colleague who fills in the gaps. It’s not a system that reads between the lines. When you write a vague instruction, you get a vague result. When you write a precise one, you get something genuinely useful.&lt;/p&gt;&lt;p&gt;Think of it like this: imagine hiring a contractor to renovate your kitchen. If you say “make it nicer”, you might come home to bright yellow walls and new cabinet handles. Technically, the instruction was followed. But that’s not what you needed. You needed to specify the budget, the style, which fixtures to keep, what “nicer” actually means in your house. AI works the same way. The quality of the output is almost entirely a function of the quality of the input.&lt;/p&gt;&lt;p&gt;What this means in practice is that the same AI model, given two different prompts for the same task, can produce wildly different results. One version is polished, structured, and saves you an hour. The other is a generic essay that you delete immediately. The model didn’t change. The prompt did.&lt;/p&gt;&lt;h3&gt;Most people write prompts like search queries&lt;/h3&gt;&lt;p&gt;The habit most people bring to AI is the habit of search. Short. Keyword-driven. No context. That made sense when the goal was to find a web page. It doesn’t work when the goal is to get a specific, usable output from a language model.&lt;/p&gt;&lt;p&gt;A search query says: “email subject lines marketing.” A prompt that works says: “Write five email subject lines for a B2B SaaS product targeting engineering managers. The campaign is about reducing manual QA work. Tone should be direct, no fluff, no exclamation marks. Each subject line under 50 characters.” The difference in output quality is enormous, and the difference in effort is maybe 45 seconds.&lt;/p&gt;&lt;p&gt;The practical shift is learning to think like a director, not a searcher. Before you type anything, ask yourself: what does the AI actually need to know to give me what I want? That usually includes the task, the audience, the format, the tone, and any constraints. Spell it out. You’ll be amazed how much the output improves.&lt;/p&gt;&lt;h3&gt;Why effective prompts are hard to maintain&lt;/h3&gt;&lt;p&gt;Here’s where the challenge becomes a real business problem and not just a personal productivity quirk. People figure out a prompt that works. Maybe it took them ten minutes of iteration. Maybe a colleague passed it to them. They use it once, it’s great, and then they paste it into a notes doc somewhere or just try to remember it next time.&lt;/p&gt;&lt;p&gt;And then next time, they start from scratch. Or they use a slightly different version and wonder why the output isn’t as good. Or the colleague who wrote the original prompt has left the team.&lt;/p&gt;&lt;p&gt;This is the ROI problem that most organisations haven’t addressed yet. Every time a good prompt gets lost or reinvented, you’re paying the cost of that ten-minute iteration again and again. Multiply that across a team of twenty engineers or a content team running fifty workflows, and you’re talking about hundreds of hours of lost productivity per year. Not counting the inconsistency in outputs when different people run slightly different versions of what should be the same instruction.&lt;/p&gt;&lt;p&gt;The craft of prompting is just the beginning. The operational question is how you capture, organise, version, and share what works.&lt;/p&gt;&lt;h3&gt;What a proper prompt practice looks like&lt;/h3&gt;&lt;p&gt;Treating prompts as assets rather than throwaway inputs is a mindset shift, but it’s one with a clear return. Teams that manage their prompts well are faster, more consistent, and better positioned to improve their AI workflows over time. The discipline looks a lot like how good engineering teams manage code: with version control, shared ownership, and some governance around what’s in production.&lt;/p&gt;&lt;p&gt;In practice, this means your best prompts live somewhere findable, not buried in a Slack thread or someone’s personal Notion. It means when you improve a prompt, you’re not just replacing the old one; you’re tracking that the new version exists and why it changed. It means new team members don’t need to rediscover what works. They inherit it.&lt;/p&gt;&lt;p&gt;This is exactly the gap that ai-monsoon is built to close. It gives teams a place to store, version, and manage their prompts the way they manage everything else that matters: with structure, access control, and a clear record of what’s being used and why. The prompts that power your AI workflows deserve the same care as the code that powers your product. Right now, most teams treat them as disposable. The ones who don’t will compound that advantage over time.&lt;/p&gt;&lt;p&gt;Talking to AI well is a learnable skill. The frustration most people feel isn’t a signal that AI isn’t useful for them; it’s a signal that the gap between intent and instruction hasn’t been closed yet. Start by writing prompts like a director, not a searcher. Then build the habit of keeping what works. The compounding effect of good prompt practice is bigger than most teams realise.&lt;/p&gt;&lt;blockquote&gt;Sajitha Pathirana is the founder of &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://aimonsoon.com&quot;&gt;ai-monsoon&lt;/a&gt;, a platform for managing AI prompts securely. Follow for more on prompt engineering, AI workflows, and building AI-native products.&lt;/blockquote&gt;</summary><author><name>Sajitha Pathirana</name></author><source gr:stream-id="feed/https://medium.com/feed/@sajithatharaka"><id>tag:google.com,2005:reader/feed/https://medium.com/feed/@sajithatharaka</id><title type="html">Stories by Sajitha Pathirana on Medium</title><link rel="alternate" href="https://medium.com/@sajithatharaka?source=rss-3af8e7cc568a------2" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779043142000"><id gr:original-id="https://testerstories.com/?p=6804">tag:google.com,2005:reader/item/000001ce000000ac</id><category term="History and Science"></category><title type="html">Testing: The Art of Unlearning</title><published>2026-05-17T18:39:02Z</published><updated>2026-05-17T18:39:02Z</updated><link rel="alternate" href="https://testerstories.com/2026/05/testing-the-art-of-unlearning/" type="text/html"></link><summary type="html">&lt;p&gt;In two earlier posts I traced the path from &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://testerstories.com/2022/11/testing-from-aristotelian-to-galilean-part-1/&quot;&gt;Aristotelian to Galilean&lt;/a&gt; thinking as a way of understanding how testing developed as a discipline: how competing models of quality, and the slow maturation of experimental method, gave rise to something we might actually recognize as testing today. This post sits in that same current of thought, but takes a step back to ask a prior question: what is it that makes any of that development so difficult in the first place?&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;article-EFiWlvc6xdlbvgC81FXuHm6dkM8-more-6804&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There’s a common assumption about how knowledge grows: we learn things, we add them to what we already know, and understanding accumulates. It’s a tidy picture. It also happens to be largely wrong, at least when it comes to the kind of understanding that actually changes how we see the world.&lt;/p&gt;
&lt;p&gt;A more accurate picture is this: the hardest part of learning something genuinely new is not acquiring the new idea. It’s &lt;em&gt;retiring&lt;/em&gt; the old one. And the old idea is hardest to retire precisely when it feels most obviously true; when it seems less like an assumption and more like the simple shape of reality itself.&lt;/p&gt;
&lt;p&gt;This has direct consequences for testing. A tester who can’t retire their assumptions about how a system works will systematically miss the failures that violate those assumptions. And those are often the most consequential failures of all. The bottleneck, in other words, is rarely evidence. It’s &lt;em&gt;unlearning&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;The Dialogue That Wasn’t About What You Think&lt;/h2&gt;
&lt;p&gt;Galileo’s &lt;em&gt;Dialogue Concerning the Two Chief World Systems&lt;/em&gt;, published in 1632, is often described as a defense of the Copernican heliocentric model. That description is technically accurate and almost entirely misleading.&lt;/p&gt;
&lt;p&gt;The bulk of the &lt;em&gt;Dialogue&lt;/em&gt; is not spent arguing that the Earth moves. It’s spent dismantling the felt certainty that the Earth’s movement is &lt;em&gt;inconceivable&lt;/em&gt;. Galileo understood something crucial: you cannot argue someone into a new model while they are still standing inside the logic of the old one.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; decoding=&quot;async&quot; src=&quot;https://testerstories.com/files/BLOG-unlearning-001.png&quot; style=&quot;border-radius: 10%; width: auto; height: 700px&quot;&gt;&lt;/p&gt;
&lt;p&gt;The geocentric model didn’t persist because people lacked access to better evidence. It persisted because the Earth’s stillness felt like bedrock; not a theory, but a precondition for thought itself. Galileo’s real target was &lt;em&gt;that&lt;/em&gt; feeling. His method was to make the geocentric intuition feel, from the inside, like the assumption it actually was.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;Dialogue&lt;/em&gt; is structured as a three-way conversation between Salviati (the Copernican), Simplicio (the Aristotelian), and Sagredo (the open-minded layman). The choice of format was deliberate: Galileo wanted to show that the geocentric position couldn’t survive honest cross-examination, not merely that it contradicted new data. The Inquisition’s subsequent objection wasn’t primarily to the astronomy. It was to the implication that orthodoxy was debatable at all.&lt;/p&gt;
&lt;p&gt;This is the key intuition for testing: evidence is necessary but not sufficient. What a tester brings to evidence, the assumptions through which they interpret it, determines what they can and cannot see. The question is never just “what does this system do?” It’s also “what am I already certain it does, and how would I know if that certainty were wrong?”&lt;/p&gt;
&lt;h2&gt;Seven Retirements&lt;/h2&gt;
&lt;p&gt;The physicist Carlo Rovelli, in his 2023 book &lt;em&gt;White Holes&lt;/em&gt;, sketched a compressed history of how humanity arrived at Einstein’s theory of general relativity, which among other things, is the discovery that time itself is not fixed but bends under the influence of gravity. What strikes me about his account is that it reads, on closer inspection, less like a sequence of discoveries and more like a sequence of &lt;em&gt;retirements&lt;/em&gt;. Each figure in the chain doesn’t simply add something new. They remove something that everyone had assumed was permanently load-bearing.&lt;/p&gt;
&lt;p&gt;If you walk through each part of the chain in order, the pattern becomes hard to miss. So let’s do that now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anaximander&lt;/strong&gt; (sixth century BCE) notices that if the Sun, Moon, and stars revolve around the Earth, there must be empty space &lt;em&gt;below&lt;/em&gt; the Earth as well as above it. Which means the Earth hovers. Which means the Earth needs no foundation. At the time, this was not just counterintuitive; it was conceptually vertiginous. After all, everything rests on something. Right? I mean, that’s not a theory, is it? That’s just how things &lt;em&gt;are&lt;/em&gt;. Well, Anaximander retired it anyway.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; decoding=&quot;async&quot; src=&quot;https://testerstories.com/files/BLOG-unlearning-002.png&quot; style=&quot;border-radius: 10%; width: auto; height: 700px&quot;&gt;&lt;/p&gt;
&lt;p&gt;Anaximander is often underappreciated in the history of science, perhaps because his conclusion sounds so obvious to us now. But the obviousness is the point: we’ve already done the unlearning he did. From inside the pre-Anaximander intuition, the Earth hovering on nothing was not a bold hypothesis. It was a category error. It was like asking what’s north of the North Pole. The assumption that things require support was so fundamental it didn’t feel like an assumption at all.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aristotle&lt;/strong&gt; (fourth century BCE) observes that during lunar eclipses, the Earth’s shadow falling across the Moon is only slightly larger than the Moon itself. Which means the Moon is not a small bright disc in the sky. It’s a large body, a world, only somewhat smaller than the Earth. The Moon as a distant lamp was retired. The Moon as a place became thinkable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aristarchus&lt;/strong&gt; (third century BCE) contributes what may be the most elegant argument in the ancient world. When the Moon is exactly half-lit, and thus a quarter Moon, the angle between the Sun and the Moon as seen from Earth is nearly a right angle. A triangle with two near-right angles has a very distant third vertex. So the Sun is vastly farther away than the Moon. Yet the Sun and Moon appear the same size in the sky. Therefore the Sun must be enormously larger than the Moon and, Aristarchus reasoned, much larger than the Earth itself. Now, if that’s true, it’s far more natural to suppose that the small Earth orbits the gigantic Sun than the reverse.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; decoding=&quot;async&quot; src=&quot;https://testerstories.com/files/BLOG-unlearning-003.png&quot; style=&quot;border-radius: 10%; width: auto; height: 700px&quot;&gt;&lt;/p&gt;
&lt;p&gt;Aristarchus arrived at heliocentrism nearly eighteen centuries before Copernicus, using nothing but naked-eye observation and geometry. His argument required no instruments and no mathematics beyond what any educated Greek would have known. What it required was the willingness to follow the geometry wherever it led, even when it led somewhere that felt absurd. He was largely ignored. This is itself a data point about how unlearning works: having the correct argument is not the same as having the argument accepted. The intuition that the Earth is still and central was too strong to be dislodged by logic alone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copernicus, Kepler, and Galileo&lt;/strong&gt; (sixteenth and seventeenth centuries) finally make the heliocentric model stick and not just as a geometric convenience but as a description of how things &lt;em&gt;actually&lt;/em&gt; are. And the core retirement here is perhaps the most psychologically demanding of all: the intuition that motion is something we would necessarily feel. We don’t feel the Earth move. Therefore the Earth doesn’t move. Galileo’s inclined planes and falling bodies established the principle of inertia (that uniform motion produces no felt sensation) and in doing so, retired the intuition that stillness and motion are experientially distinguishable from the inside.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Newton&lt;/strong&gt; (eighteenth century) builds modern physics on the work of his predecessors and makes a move that his contemporaries found almost as unsettling as heliocentrism: he proposes that objects can exert force on each other &lt;em&gt;across empty space&lt;/em&gt;, with nothing in between. Gravity acts at a distance. The intuition that forces require contact, that cause and effect must touch, is retired. Something else is present in the world beyond material bodies. Newton called it force. He couldn’t explain how it worked. He simply demonstrated, with devastating mathematical precision, that it did.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; decoding=&quot;async&quot; src=&quot;https://testerstories.com/files/BLOG-unlearning-004.png&quot; style=&quot;border-radius: 10%; width: auto; height: 700px&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Faraday and Maxwell&lt;/strong&gt; (nineteenth century) discover that Newton was almost right. Forces are not quite instantaneous. There is a lag: small, because light is fast, but real. Something propagates through space, carrying the force from one body to another. Faraday called this something the physical field. It was considered a somewhat mystical idea by many of his contemporaries, some invisible medium filling all of space, transmitting influences. Maxwell wrote the equations for it. The retirement here is the assumption that cause and effect are functionally simultaneous. They are not. The gap is just usually too small to matter.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; decoding=&quot;async&quot; src=&quot;https://testerstories.com/files/BLOG-unlearning-005.png&quot; style=&quot;border-radius: 10%; width: auto; height: 700px&quot;&gt;&lt;/p&gt;
&lt;p&gt;Faraday’s intuition about fields is worth pausing on because it echoes something from my earlier posts on these topics. Kepler, similarly, intuited that the Sun was the motive power of the universe but couldn’t explain the mechanism. Both men were working at the edge of what their conceptual frameworks could support, sensing that something was there without being able to say precisely what. In both cases, the intuition preceded the formalism by decades. This is a recurring pattern: the unlearning happens before the new learning can be properly articulated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Einstein&lt;/strong&gt; (twentieth century) finds, while searching for the equations governing the gravitational field, something he didn’t expect: that the geometry of space and time is not fixed. It’s shaped by the gravitational field itself. Time doesn’t pass at a uniform rate everywhere. Clocks run slower in stronger gravitational fields. Falling is not a force acting on a body; it’s a body following the straightest possible path through spacetime that has been curved by mass. The retirement here is double: the Euclidean geometry we learned in school, and the universal tick of time. Both turn out to be approximations, accurate enough for ordinary experience, quietly wrong at the edges.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; decoding=&quot;async&quot; src=&quot;https://testerstories.com/files/BLOG-unlearning-006.png&quot; style=&quot;border-radius: 10%; width: auto; height: 700px&quot;&gt;&lt;/p&gt;
&lt;h2&gt;What Testers Can Recognize Here&lt;/h2&gt;
&lt;p&gt;What the above sequence traces, viewed through the lens of testing, is a taxonomy of the kinds of assumptions that become invisible through familiarity. Each retirement maps onto a class of assumption that testers routinely carry into their work without examining it.&lt;/p&gt;
&lt;p&gt;There’s the &lt;strong&gt;Anaximander problem&lt;/strong&gt;: the assumption that the system rests on a foundation that may not actually exist. I’ve seen people assume, for instance, that the infrastructure beneath the application is stable, that dependencies behave consistently, that the environment in which we test resembles the environment in which users operate. These assumptions often go untested precisely because they feel like preconditions rather than hypotheses. This is something testers can correct for.&lt;/p&gt;
&lt;p&gt;There’s the &lt;strong&gt;Aristarchus problem&lt;/strong&gt;: the assumption that we have correctly estimated the scale and distance of things. I’ve seen people regularly misjudge how far a failure propagates, how large the affected surface area actually is, or how remote a particular edge case truly is from normal operation. Aristarchus followed the geometry and found that the Sun was far larger and farther than anyone had supposed. The same discipline, following the logic rather than the intuition, often reveals that a defect’s blast radius is not where we assumed it would be. This, too, is something testers can correct for.&lt;/p&gt;
&lt;p&gt;There’s the &lt;strong&gt;Copernican problem&lt;/strong&gt;: the assumption that we, as observers, are at the center of the interaction. Testers construct test cases from their own mental model of how a user approaches a system. That model is always, to some degree, geocentric: organized around the tester’s own position and perspective. The users who find the most interesting failures are often the ones who approach the system from angles the tester never inhabited.&lt;/p&gt;
&lt;p&gt;There’s the &lt;strong&gt;Newtonian problem&lt;/strong&gt;: the assumption that effects are local. A change &lt;em&gt;here&lt;/em&gt; shouldn’t affect behavior &lt;em&gt;there&lt;/em&gt;. After all, there’s nothing connecting them. Newton’s insight was that the absence of visible connection doesn’t mean the absence of actual connection. Testers encounter this constantly in complex systems, where a change in one component produces failures in a component that appears entirely unrelated. The field exists even when we can’t see it.&lt;/p&gt;
&lt;p&gt;There’s the &lt;strong&gt;Einsteinian problem&lt;/strong&gt;: the assumption that the frame of reference is stable. We test in a particular environment, at a particular load, with a particular dataset, and we treat the results as if they describe the system in general. Einstein showed that the geometry of spacetime is not fixed but contextual. A tester’s results are similarly contextual: not wrong, but local. The question is always how far the local result generalizes, and that question is harder to answer than it looks.&lt;/p&gt;
&lt;h2&gt;Unlearning as Method&lt;/h2&gt;
&lt;p&gt;It’s worth pausing on a contemporary example before returning to Galileo, because the unlearning problem is not just a historical curiosity. It’s happening right now in testing’s own present.&lt;/p&gt;
&lt;p&gt;A recent series of posts on this blog explored what it means to test AI-driven systems, by which is meant systems that are non-deterministic, and where the same input does not reliably produce the same output. The challenge that series kept circling was not primarily technical. It was conceptual: testers reading those posts had to retire the assumption that a test result is a stable, binary thing. Pass and fail, in a non-deterministic system, are not fixed categories. They are probabilistic ones. And that retirement turns out to be genuinely difficult, not because testers lack the intelligence to grasp the idea, but because pass/fail is so foundational to how testing has always felt that questioning it seems less like updating a technique and more like pulling on a load-bearing wall.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;That&lt;/em&gt; is precisely the Anaximander problem, wearing contemporary clothes. The assumption isn’t wrong because it was foolish. It was reasonable, well-supported by decades of practice, and invisible precisely because it worked so well for so long. Unlearning it required the same thing Anaximander required: following the logic of the new situation wherever it led, regardless of how vertiginous the destination felt.&lt;/p&gt;
&lt;p&gt;Galileo’s inclined planes, which I looked at in some of the earlier posts in this History and Science series, are worth returning to here. What made Galileo’s experimental method distinctive was not just that he observed carefully. It was that he designed observations specifically to defeat his own expectations. He recognized that an experiment conducted inside an unexamined assumption will tend to confirm that assumption, not because the experimenter is dishonest but because the assumption shapes what counts as a result worth recording.&lt;/p&gt;
&lt;p&gt;The mature version of this, for a tester, is not cynicism about one’s own work. It’s a structured practice of asking: what would have to be true for this test to be misleading? What assumption am I making about the system that, if false, would invalidate this result? What would the Aristarchus version of this test look like, the version that follows the geometry wherever it leads, regardless of where I expected it to go?&lt;/p&gt;
&lt;p&gt;Our above sequence ends with Einstein retiring the fixed geometry of space and time. That is, in a sense, the ultimate unlearning: discovering that even the stage on which all events occur is itself a participant in those events, bending and warping in response to what happens on it. The frame of reference is never neutral.&lt;/p&gt;
&lt;p&gt;Neither is the tester’s. The assumptions we bring to a system are not a transparent window onto its behavior. They are part of what we are testing. Or ought to be. The discipline of testing, understood in its fullest sense, is not just the discipline of observing carefully. It’s the discipline of becoming a rigorous skeptic of one’s own certainties.&lt;/p&gt;
&lt;p&gt;That is a harder thing to learn than any technique. It’s also the thing that, historically, has made the difference between testers (and scientists!) who merely confirmed what they already believed, and those who found something genuinely new.&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%2F05%2Ftesting-the-art-of-unlearning%2F&amp;amp;title=Testing%3A%20The%20Art%20of%20Unlearning&quot; data-a2a-url=&quot;https://testerstories.com/2026/05/testing-the-art-of-unlearning/&quot; data-a2a-title=&quot;Testing: The Art of Unlearning&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="1779038345000"><id gr:original-id="https://qualityeng.substack.com/p/where-does-quality-fit-in-the-pom">tag:google.com,2005:reader/item/00000b1e00000074</id><title type="html">Where does quality fit in the Product Operating Model?</title><published>2026-05-17T17:19:05Z</published><updated>2026-05-17T17:19:05Z</updated><link rel="alternate" href="https://qualityeng.substack.com/p/where-does-quality-fit-in-the-pom" type="text/html"></link><summary type="html">&lt;div&gt;&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://substackcdn.com/image/fetch/$s_!eh6L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png&quot; data-component-name=&quot;Image2ToDOM&quot;&gt;&lt;div&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://substackcdn.com/image/fetch/$s_!eh6L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 424w, https://substackcdn.com/image/fetch/$s_!eh6L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 848w, https://substackcdn.com/image/fetch/$s_!eh6L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 1272w, https://substackcdn.com/image/fetch/$s_!eh6L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 1456w&quot; sizes=&quot;100vw&quot;&gt;&lt;img width=&quot;1456&quot; height=&quot;817&quot; data-attrs=&quot;{&amp;quot;src&amp;quot;:&amp;quot;https://substack-post-media.s3.amazonaws.com/public/images/a71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png&amp;quot;,&amp;quot;srcNoWatermark&amp;quot;:null,&amp;quot;fullscreen&amp;quot;:null,&amp;quot;imageSize&amp;quot;:null,&amp;quot;height&amp;quot;:817,&amp;quot;width&amp;quot;:1456,&amp;quot;resizeWidth&amp;quot;:null,&amp;quot;bytes&amp;quot;:391449,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;title&amp;quot;:null,&amp;quot;type&amp;quot;:&amp;quot;image/png&amp;quot;,&amp;quot;href&amp;quot;:null,&amp;quot;belowTheFold&amp;quot;:false,&amp;quot;topImage&amp;quot;:true,&amp;quot;internalRedirect&amp;quot;:&amp;quot;https://qualityeng.substack.com/i/197994609?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png&amp;quot;,&amp;quot;isProcessing&amp;quot;:false,&amp;quot;align&amp;quot;:null,&amp;quot;offset&amp;quot;:false}&quot; alt title data-orig-srcset=&quot;https://substackcdn.com/image/fetch/$s_!eh6L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 424w, https://substackcdn.com/image/fetch/$s_!eh6L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 848w, https://substackcdn.com/image/fetch/$s_!eh6L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 1272w, https://substackcdn.com/image/fetch/$s_!eh6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png 1456w&quot; src=&quot;https://substackcdn.com/image/fetch/$s_!eh6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa71d77f7-dcde-463b-8e71-b0223f998876_2538x1424.png&quot; fetchpriority=&quot;high&quot;&gt;&lt;/picture&gt;&lt;div&gt;&lt;div&gt;&lt;button tabindex=&quot;-1&quot; type=&quot;button&quot;&gt;&lt;svg role=&quot;img&quot; width=&quot;20&quot; height=&quot;20&quot; viewbox=&quot;0 0 20 20&quot; fill=&quot;none&quot; stroke-width=&quot;1.5&quot; stroke=&quot;var(--color-fg-primary)&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;g&gt;&lt;title&gt;&lt;/title&gt;&lt;path d=&quot;M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/button&gt;&lt;button tabindex=&quot;-1&quot; type=&quot;button&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;20&quot; height=&quot;20&quot; viewbox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;15 3 21 3 21 9&quot;&gt;&lt;/polyline&gt;&lt;polyline points=&quot;9 21 3 21 3 15&quot;&gt;&lt;/polyline&gt;&lt;line x1=&quot;21&quot; x2=&quot;14&quot; y1=&quot;3&quot; y2=&quot;10&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;3&quot; x2=&quot;10&quot; y1=&quot;21&quot; y2=&quot;14&quot;&gt;&lt;/line&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;More software organisations are adopting the Product Operating Model, inspired by companies such as &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.svpg.com/the-product-operating-model/#:~:text=I%20am%20not%20anxious%20to,the%20common%20principles%20and%20practices&quot;&gt;Amazon, Apple, Netflix, Stripe and Spotify&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;These organisations are reshaping themselves around product, design and engineering. Teams are being asked to move away from simply delivering features and towards d&lt;/p&gt;&lt;p&gt;iscovering, building and improving products that achieve customer and business outcomes. It shifts the focus from simply shipping things to learning what the &lt;em&gt;right thing&lt;/em&gt; is and then &lt;em&gt;building it right&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;I think there is a lot to like about this shift, but one thing stands out to me.&lt;/p&gt;&lt;p&gt;In many conversations about the Product Operating Model, there is very little explicit mention of testing, testability or quality roles.&lt;/p&gt;&lt;p&gt;It can sometimes sound as if quality will simply be absorbed by product, design and engineering. But as many of us have seen before, when &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/when-everyone-owns-quality-no-one-does&quot;&gt;quality is everyone’s responsibility, it can easily become no one’s responsibility&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So where does quality fit into the Product Operating Model?&lt;/p&gt;&lt;h1&gt;What is the Product Operating Model (POM)?&lt;/h1&gt;&lt;p&gt;The Product Operating Model is a way of organising around empowered, cross-functional teams that continuously discover, build and improve products in pursuit of customer and business outcomes.&lt;/p&gt;&lt;p&gt;The POM, as it’s often referred to, doesn’t explicitly tell you what to do and how to do it. Instead, it encourages organisations to focus on the problems they want to solve, the outcomes they want to achieve, and the principles that help teams discover and deliver better solutions.&lt;/p&gt;&lt;p&gt;The POM has been popularised by Marty Cagan and the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.svpg.com/&quot;&gt;Silicon Valley Product Group&lt;/a&gt; (SVPG), which he founded in 2001 after working in product leadership roles at HP, Netscape and eBay.&lt;/p&gt;&lt;h1&gt;Why organisations are adopting it&lt;/h1&gt;&lt;p&gt;A lot of organisations building software products use engineering teams to build their products. But many of the teams are still following the older, waterfall hangover of projects. Typically, engineering teams are told what to build, and they figure out how to build it. Some people often refer to these teams as &lt;em&gt;delivery&lt;/em&gt; or &lt;em&gt;feature teams&lt;/em&gt;. These teams are often measured on their output e.g., how many things they shipped.&lt;/p&gt;&lt;p&gt;POM advocates for &lt;em&gt;product teams&lt;/em&gt; rather than &lt;em&gt;feature teams&lt;/em&gt;. These teams are not simply told what to build. They are given problems to solve, context for why those problems matter, and the autonomy to discover the best solution.&lt;/p&gt;&lt;p&gt;The POM is about empowering teams to own their solutions because they have the skills and abilities to identify what &lt;em&gt;could&lt;/em&gt; work and experiment to find what &lt;em&gt;does&lt;/em&gt; work. This allows teams to adapt more quickly, rather than waiting for the business to decide the best way forward.&lt;/p&gt;&lt;p&gt;One of the key ways POM tries to support this is through multi-disciplinary product trios, usually made up of product, design and engineering.&lt;/p&gt;&lt;p&gt;The idea is that these perspectives are interdependent. Product brings value and business context, design brings user experience and usability, and engineering brings feasibility and delivery. No one discipline can achieve the outcome alone, so collaboration becomes central to how the team works.&lt;/p&gt;&lt;p&gt;And I’m a big fan of collaboration in engineering teams, but it also raises an important question.&lt;/p&gt;&lt;p&gt;If POM talks explicitly about product, design and engineering, where does quality show up?&lt;/p&gt;&lt;h1&gt;But where is quality?&lt;/h1&gt;&lt;p&gt;What stands out to me is not that POM rejects quality. The issue is that quality is often implied rather than made explicit.&lt;/p&gt;&lt;p&gt;There is plenty of talk about empowered teams, product discovery, product delivery, outcomes and risk. But there is far less about testing as a learning activity, testability, observability, quality attributes, risk analysis, or the feedback loops teams need to understand whether their products are working safely and well.&lt;/p&gt;&lt;p&gt;This becomes a bigger issue when you remember that POM depends on learning.&lt;/p&gt;&lt;p&gt;Teams are expected to &lt;em&gt;learn&lt;/em&gt; what customers need, what solutions might work, what is feasible, what creates value, and whether what they shipped is producing the desired outcome.&lt;/p&gt;&lt;p&gt;But that learning is only useful if the feedback is trustworthy, and this is where Quality Engineering (QE) comes in.&lt;/p&gt;&lt;h2&gt;1. QE helps teams learn responsibly during discovery&lt;/h2&gt;&lt;p&gt;Product discovery is about figuring out what is worth building before committing too much time and effort. From a QE perspective, this is all about &lt;em&gt;uncertainty reduction&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Quality engineers can help teams ask better questions. Such as:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;What are we assuming?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What do we need to learn?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What evidence would increase our confidence?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What could go wrong?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What risks are acceptable in an experiment?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What risks should never be pushed onto users?&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This is where approaches like &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/mapping-feedback-across-uncertainty&quot;&gt;software feedback rings&lt;/a&gt; and &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/how-to-run-a-quality-mapping-session&quot;&gt;quality mapping sessions&lt;/a&gt; can help. They give teams a way to visualise uncertainty, discuss risk, and decide what kind of feedback they need before they build too much.&lt;/p&gt;&lt;p&gt;When quality thinking is excluded from discovery, teams often discover risks later as incidents, rework, and “how did we miss that?” conversations.&lt;/p&gt;&lt;h2&gt;2. QE helps teams build confidence during delivery&lt;/h2&gt;&lt;p&gt;Once a team has evidence that something is worth building, the question changes.&lt;/p&gt;&lt;p&gt;It is no longer only “is this the right thing?” It becomes “can we build this in a way that is reliable, accessible, observable, secure, maintainable and safe to change?”&lt;/p&gt;&lt;p&gt;This is where QE can help teams design better delivery feedback loops.&lt;/p&gt;&lt;p&gt;That might include improving testability, shaping automated checks, supporting exploratory testing, making release risks visible, improving observability, using feature flags, and helping teams build confidence through small, frequent and reversible changes.&lt;/p&gt;&lt;p&gt;The aim is not to slow delivery down. It is to connect delivery speed with confidence.&lt;/p&gt;&lt;p&gt;When quality thinking is missing from delivery, teams can end up with shallower feedback loops. Small issues are missed, risks combine, and the first meaningful signal may come from production incidents.&lt;/p&gt;&lt;h2&gt;3. QE helps teams make quality visible&lt;/h2&gt;&lt;p&gt;If product teams are accountable for outcomes, they also need to understand what quality means for the product they are building.&lt;/p&gt;&lt;p&gt;Reliability, performance, accessibility, privacy, resilience, usability and trust are not side concerns. If these things are poor, then it does not really matter how good the product idea is. People may still struggle to use it, trust it, or keep coming back to it.&lt;/p&gt;&lt;p&gt;Quality Engineering can help teams make these &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/what-quality-attributes-do-developers&quot;&gt;quality attributes&lt;/a&gt; visible earlier, connect them to stakeholder value, and decide which ones matter most for the product, the users and the organisation.&lt;/p&gt;&lt;h2&gt;4. QE helps teams learn from failure&lt;/h2&gt;&lt;p&gt;POM relies on teams learning quickly. But teams only learn quickly when it is safe to surface bad news, discuss uncertainty and treat failure as information.&lt;/p&gt;&lt;p&gt;In complex software systems, failure is not always a sign that someone did something wrong. Sometimes that failure is preventable. Other times, it is informative because it tells us something about the complexity of the system.&lt;/p&gt;&lt;p&gt;Quality engineers can help teams develop a more &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/scale-of-failure&quot;&gt;nuanced view of failure&lt;/a&gt;, so they are not just trying to avoid it, hide it or blame someone for it.&lt;/p&gt;&lt;p&gt;The goal is to learn from failure in ways that improve the product, the process and the system around the team.&lt;/p&gt;&lt;h1&gt;POM does not remove the need for quality thinking&lt;/h1&gt;&lt;p&gt;A Product Operating Model does not remove the need for quality thinking. If anything, it increases it.&lt;/p&gt;&lt;p&gt;When teams are given more autonomy and accountability, they need stronger ways to understand risk, test assumptions, observe behaviour and learn from what happens.&lt;/p&gt;&lt;p&gt;Quality Engineering can help make that possible.&lt;/p&gt;&lt;p&gt;Not by acting as a gate at the end of delivery, but by helping teams build quality into discovery, delivery, operations and team decision-making.&lt;/p&gt;&lt;p&gt;If POM is about helping teams learn faster, QE helps make that learning safer, deeper and more trustworthy.&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;p&gt;If this way of thinking about Quality Engineering is useful, you can subscribe to get future posts on testing, feedback loops, engineering culture and building quality into teams.&lt;/p&gt;&lt;p data-attrs=&quot;{&amp;quot;url&amp;quot;:&amp;quot;https://qualityeng.substack.com/subscribe?&amp;quot;,&amp;quot;text&amp;quot;:&amp;quot;Subscribe now&amp;quot;,&amp;quot;action&amp;quot;:null,&amp;quot;class&amp;quot;:null}&quot; data-component-name=&quot;ButtonCreateButton&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/subscribe?&quot;&gt;&lt;span&gt;Subscribe now&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;h1&gt;Further reading&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;To learn more about the Product Operating Model&lt;/strong&gt;, SVPG has written introductions to the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.svpg.com/the-product-operating-model-an-introduction/&quot;&gt;Product Operating Model&lt;/a&gt; and the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.svpg.com/product-model-competencies/&quot;&gt;product model competencies&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Marty Cagan has also written three books that are useful here: &lt;em&gt;Inspired&lt;/em&gt;, on what strong product teams look like; &lt;em&gt;Empowered&lt;/em&gt;, on how leadership needs to change to enable those teams; and &lt;em&gt;Transformed&lt;/em&gt;, on how organisations can shift towards a Product Operating Model.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;For more on bringing Quality Engineering into your organisation&lt;/strong&gt;, I’ve written a three-part series on building cultures of quality.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/repost-quality-engineering-as-philosophy&quot;&gt;Quality Engineering as philosophy, a framework and a tool&lt;/a&gt; covers what quality engineering is and three ways it can be adopted.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/repost-who-should-build-a-culture&quot;&gt;Who should build a culture of quality?&lt;/a&gt; explores who is involved in building quality across an organisation.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/repost-three-approaches-to-foster-coq&quot;&gt;Three approaches to foster a culture of quality&lt;/a&gt; look at three different types of quality engineers and how they can support teams.&lt;/p&gt;</summary><author><name>Jit Gosai</name></author><source gr:stream-id="feed/https://qualityeng.substack.com/feed"><id>tag:google.com,2005:reader/feed/https://qualityeng.substack.com/feed</id><title type="html">Quality Engineering Newsletter</title><link rel="alternate" href="https://qualityeng.substack.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779013140000"><id gr:original-id="tag:blogger.com,1999:blog-3033838173445667449.post-2495892756389045849">tag:google.com,2005:reader/item/000001a60000002a</id><category term="analysis"></category><category term="safety"></category><category term="software"></category><category term="testing"></category><title type="html">Non Timebound nature of Software Quality</title><published>2026-05-17T10:19:00Z</published><updated>2026-05-17T10:19:00Z</updated><link rel="alternate" href="https://softcircuitry.blogspot.com/2026/05/non-timebound-nature-of-software-quality.html" type="text/html"></link><summary type="html">Usually, usuallY it is easy to only talk about the times where software fails. And then try to learn from the event. And in a way, events are always messy. A hacker getting into and deleting your work for example is one event that is truly frightening. Should software testing be frightening at all you can hear yourself say. Surely software engineering is a sedate process of correcting wrongs one at a time. Considering the impact of one line of code here, removing another line or condition that no longer makes sense. The line that made sense at the time, but now it no longer does. So an engineer will try also to pre-empt a failure. &lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;margin-left: auto; margin-right: auto&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9RwvqtSJ3hSpfebQyi3-lkDShOzPH6xc6_xykMhYbeZ2CA3eH42JH9RF7kIG4PmgdU-A83XxuIwp4Anl8C3_Lb9R0jYzNGB6bStPaKuDvztU6uJRhyphenhyphent2iomTTn9AC9xrC700xd8o_isp21nNmdJiaa5MSkOGSTeQyurwL_IW7ayMv-bv34NdJzxf-8y4/s1024/rjpkDJjm2hg5nXFEP7fK--0--c26l8.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto&quot;&gt;&lt;img width=&quot;477&quot; height=&quot;477&quot; style=&quot;border: 0px solid black&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9RwvqtSJ3hSpfebQyi3-lkDShOzPH6xc6_xykMhYbeZ2CA3eH42JH9RF7kIG4PmgdU-A83XxuIwp4Anl8C3_Lb9R0jYzNGB6bStPaKuDvztU6uJRhyphenhyphent2iomTTn9AC9xrC700xd8o_isp21nNmdJiaa5MSkOGSTeQyurwL_IW7ayMv-bv34NdJzxf-8y4/w477-h477/rjpkDJjm2hg5nXFEP7fK--0--c26l8.jpg&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;The requirements versus the Yaymo Spec&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;A software tester will take a higher view, at the behaviour level of the system, and use the oracle of past behaviours memorised, and find newer ones that now offend. We do this by exploring, not by using AI to generate lists of test cases. Especially necessary since if the product itself has an AI core, using any AI tooling would easily become a case of a scholar marking their own homework. The tester in me for example makes mental and paper notes. Suggesting the eradication of an old behaviour will require the tester support their request for a bug fix with some proof. Proof that the product will be better somehow afterwards. But UsuallY only slightly better, because the tester also knows that every fix also has the possibility to break things. Things that are not visible at the surface.&lt;/div&gt;&lt;div&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.bbc.co.uk/news/articles/cwy2011dl4xo&quot;&gt;Waymo washed away&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I&amp;apos;m pretty sure they tested everything they were required to at the time. Software does not exist in a vacuum. Time is an untestable dimension to quality. So is water. We only know what we know, at the instant in time, that has usually past. Water can be ice, and it can be steam or fog. Trying to teach an AI something it cannot grasp merely points to needing a human to make domain decisions that decide which domains are really useful.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;So companies hire software testers, in the hope they will increase the body of knowledge just in time before the creek floods and their car drives into it and is written off. Waymo probably were unable to make an insurance claim. I&amp;apos;ll bet the age old &amp;quot;act of god&amp;quot; clause absolved the insurer. They certainly have a negligence defence. So the tester adds yet another test, can we drive the car into a flooded road. We assume they already test for the Whil E coyote painted road diversion trick, that never nets the wily canyon criminal a meal of road-runner. &lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left&quot;&gt;Limit capabilities at the right point in product life cycle&lt;/h4&gt;&lt;div&gt;I can only imagine a manager somewhere 20 years from now will ask, why do we have to test for that? It never rains around here. And the manager would be right, at least for the time being. You should also never know all of the defects in a product. That is especially true when a product initially launches. In the early days, testers can easily introduce so much defensive coding, that it can either hobble the vision or exhaust the developers. Imagine if that developer was not a human, but was an AI, the product might then have no friction at all to making bug-fixes which suddenly mean that your boat-car design, may in fact end up only being able to drive on roads because you raised too many water based bugs. And then your amphibious car might later-on fail proper sea-trials. The mind boggles.&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;margin-left: auto; margin-right: auto&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh908Y18_0MSA1bi0FgILHV1UfTHAS6mAPDASQ8kdsqczsIA66CoM9WQjBIXpHEosN8xGL5maAp6uwzll_zINf-vVezJVaNk1KK7VXCE0hewzN9TyZ31mAnzBryFIZxwEHRAnnIjiaAG9uzWOhx_8RtA8hmUNAnArot0zHajANC_jqg5-QRwun1lAuOolo/s1024/e5zHyFKCPGC9QpyiDNhr--0--mehGR.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto&quot;&gt;&lt;img width=&quot;438&quot; height=&quot;438&quot; style=&quot;border: 0px solid black&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh908Y18_0MSA1bi0FgILHV1UfTHAS6mAPDASQ8kdsqczsIA66CoM9WQjBIXpHEosN8xGL5maAp6uwzll_zINf-vVezJVaNk1KK7VXCE0hewzN9TyZ31mAnzBryFIZxwEHRAnnIjiaAG9uzWOhx_8RtA8hmUNAnArot0zHajANC_jqg5-QRwun1lAuOolo/w438-h438/e5zHyFKCPGC9QpyiDNhr--0--mehGR.jpg&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Any similarities are intended&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</summary><author><name>Conrad Braam</name></author><source gr:stream-id="feed/http://softcircuitry.blogspot.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://softcircuitry.blogspot.com/feeds/posts/default</id><title type="html">soft circuitry</title><link rel="alternate" href="https://softcircuitry.blogspot.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779011212703"><id gr:original-id="tag:blogger.com,1999:blog-1733784724667491523.post-3151302318949000539">tag:google.com,2005:reader/item/0000050e0000012a</id><category term="Tools"></category><title type="html">What Tools to Learn for Testing?</title><published>2026-05-17T09:46:52Z</published><updated>2026-05-17T09:46:52Z</updated><link rel="alternate" href="https://qahiccupps.blogspot.com/2026/05/what-tools-to-learn-for-testing.html" type="text/html"></link><summary type="html">&lt;p&gt; &lt;/p&gt;&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/AVvXsEi9qGhm1F4onMvmZMx5S25rBqeqw2S5IsyYpF0MavaVDQ423otc6N1Yo_XZqRzvAXhVYwpQBm7nMZ072Yvuzlqsbh_JiOUivwp3i4M-XhpeY2iY_dXmT36YT8MsQxlbwjG9zEMR9WvrZaeiAKLoXPTJ-KSRDQ-ITO01EfFMvpmSggYMsBvdpHHGbgA829qX/s4201/emine-karakurt-MgmPZWU8FnE-unsplash.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em&quot;&gt;&lt;img width=&quot;584&quot; height=&quot;640&quot; style=&quot;border: 0px solid black&quot; data-original-height=&quot;4201&quot; data-original-width=&quot;3836&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9qGhm1F4onMvmZMx5S25rBqeqw2S5IsyYpF0MavaVDQ423otc6N1Yo_XZqRzvAXhVYwpQBm7nMZ072Yvuzlqsbh_JiOUivwp3i4M-XhpeY2iY_dXmT36YT8MsQxlbwjG9zEMR9WvrZaeiAKLoXPTJ-KSRDQ-ITO01EfFMvpmSggYMsBvdpHHGbgA829qX/w584-h640/emine-karakurt-MgmPZWU8FnE-unsplash.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Over the years I&amp;apos;ve seen, heard, and been in many conversations about the tools testers &lt;b&gt;must &lt;/b&gt;learn&lt;b&gt;.&lt;/b&gt; So many specific tools mentioned in that time, but I prefer an answer like this:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Learn the tools that are important for your context.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Perhaps that sounds like a cop-out, because it means testers will have to think about what they&amp;apos;re doing, why they&amp;apos;re doing it, the results they want to get from it, ways that they might get those results, the relative trade-offs of alternative approaches, how deep to go, the amount of time it&amp;apos;s worth investing, when to invest it, and so on.&lt;/p&gt;&lt;p&gt;Tough.&lt;/p&gt;&lt;p&gt;There are easier alternatives. For example, just learn whatever tools someone on LinkedIn said that someone else on Linked said that someone else on LinkedIn said that someone else on LinkedIn said that ...&lt;/p&gt;&lt;p&gt;But that&amp;apos;s a merry-go-round anyone would soon want to get off. &lt;/p&gt;&lt;p&gt;If you were asking the question and urged me to be specific I&amp;apos;d point you to &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qahiccupps.blogspot.com/2022/01/my-favourite-tool.html&quot;&gt;My Favourite Tool&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;If you read it and then continued nagging me for something &lt;i&gt;very&lt;/i&gt; specific I might say to learn just enough of the key tooling that other people on your team use: IDEs, source control, visualisation, monitoring, etc. Those things are all gateways to information below the surface of your application and give you &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qahiccupps.blogspot.com/2020/12/no-shitcumber.html&quot;&gt;interactional expertise&lt;/a&gt;, which in turn greases the wheels of respect and collaboration.&lt;/p&gt;&lt;p&gt;I could ask you to think about the information you&amp;apos;d like to be able to have to do your job better but currently don&amp;apos;t have and to research tools that could get it. You could consider using a tool that can help you to &lt;i&gt;build &lt;/i&gt;the tool you need, or team up with someone who already knows that kind of tooling.&lt;/p&gt;&lt;p&gt;Maybe I&amp;apos;d also suggest that you keep an eye on what&amp;apos;s happening elsewhere in your company, the industry, and the world. You might be looking for a job at some point: what do you think you would need to be able to say or demonstrate to make yourself marketable? What role do tools play in that, and to what extent? &lt;/p&gt;&lt;p&gt;Finally I&amp;apos;m pretty sure I&amp;apos;d ask what you&amp;apos;d like to learn about, just for yourself, for your own interest and satisfaction. And I&amp;apos;d suggest you try to find a way to do that in your work, where it&amp;apos;s justifiable &lt;i&gt;enough &lt;/i&gt;for some task.&lt;/p&gt;&lt;p&gt;By this point, though, I&amp;apos;d hope you&amp;apos;d see that in these answers I&amp;apos;m merely helping you to do what I suggested at the start: look at your context(s) and find the important tools. &lt;br&gt;&lt;i&gt;&lt;span style=&quot;font-size: xx-small&quot;&gt;Image: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://unsplash.com/@tapistoaster07&quot;&gt;Emine Karakurt&lt;/a&gt; on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://unsplash.com/photos/a-merry-go-round-in-a-city-MgmPZWU8FnE&quot;&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;</summary><author><name>James Thomas</name></author><source gr:stream-id="feed/https://qahiccupps.blogspot.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/https://qahiccupps.blogspot.com/feeds/posts/default</id><title type="html">Hiccupps</title><link rel="alternate" href="https://qahiccupps.blogspot.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779004860000"><id gr:original-id="https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/">tag:google.com,2005:reader/item/0000086f00000007</id><category term="article"></category><title type="html">Why a test column on boards is a problem</title><published>2026-05-17T08:01:00Z</published><updated>2026-05-17T08:01:00Z</updated><link rel="alternate" href="https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/" type="text/html"></link><summary type="html">&lt;p&gt;I often see on boards columns like “Open”,  “Dev” or &amp;quot;In Progress&amp;quot; (but still just being for developers) and next to them “Test” or “QA.”. And ticket moving through it and handovers happening between columns. Developers stop working once they are done (with a first version) and testers just start once they got the ticket handed over. Sequentially working on it instead of doing it in parallel where doable.&lt;/p&gt;
&lt;p&gt;In this article, I explain why I see this structure as a problem, how it can cause issues if enforced, and what possible alternatives exist.&lt;/p&gt;
&lt;p&gt;This is an updated version of an already existing article. Also available in &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://agilereflection.org/warum-eine-test-spalte-auf-boards-ein-problem-darstellt/&quot;&gt;German&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;h3&gt;Table of Contents&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71oc&quot;&gt;You can use a test column on your ticket board when&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71od&quot;&gt;Some models of actual workload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1gulg0fkm19&quot;&gt;Testing benefits from preparation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1gulg0fkm1a&quot;&gt;Testing can be integrated into development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1gulgg15v2c&quot;&gt;Testing can be done in parallel to development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71oe&quot;&gt;What about tickets?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71of&quot;&gt;Bug tickets - Testing is here first (and also last)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71oh&quot;&gt;Single ticket for multiple people&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71oj&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71ok&quot;&gt;Alternatives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#mcetoc_1ia0vvic71ol&quot;&gt;Others say the same - further articles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;h4 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71oc&quot;&gt;You can use a test column on your ticket board when&lt;/h4&gt;
&lt;p&gt;… only one task can be carried out at a time at that ticket. Development XOR Testing.&lt;/p&gt;
&lt;p&gt;The notion that testers can only begin after development has started is based on the misconception that testing is reduced to mere interaction with the product. Like an executable (of a very final version) to exist would a precondition for &lt;em&gt;any &lt;/em&gt;testing work.&lt;br&gt;As if no preparatory work were possible, or as if interaction with the product could not take place in parallel with development (e.g., at various intermediate stages).&lt;br&gt;&lt;br&gt;A command-and-control mentality may be another root cause. This is not conducive to constructive collaboration and rapid feedback.&lt;/p&gt;
&lt;h4 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71od&quot;&gt;Some models of actual workload&lt;/h4&gt;
&lt;p&gt;This are some simplified models of what I observe regular. Reality is way more complex.&lt;/p&gt;
&lt;figure&gt;&lt;img width=&quot;1466&quot; height=&quot;146&quot; alt=&quot;3 graphs show. The first is showing equally and parallel workload of dev and test over time.The second dev starting with more than test and then transiting into the opposing distribution, ending with test having more work than dev. The third is showing sinus-waves like changes of workload between dev and test, constant switches between both.&quot; data-orig-srcset=&quot;https://www.enteresc.net/media/posts/35/responsive/TestColumn_Dev-Test-all-xs.png 640w, https://www.enteresc.net/media/posts/35/responsive/TestColumn_Dev-Test-all-sm.png 768w, https://www.enteresc.net/media/posts/35/responsive/TestColumn_Dev-Test-all-md.png 1024w, https://www.enteresc.net/media/posts/35/responsive/TestColumn_Dev-Test-all-lg.png 1366w, https://www.enteresc.net/media/posts/35/responsive/TestColumn_Dev-Test-all-xl.png 1600w, https://www.enteresc.net/media/posts/35/responsive/TestColumn_Dev-Test-all-2xl.png 1920w&quot; src=&quot;https://www.enteresc.net/media/posts/35/responsive/TestColumn_Dev-Test-all-2xl.png&quot;&gt;&lt;/figure&gt;
&lt;p&gt;When is a ticket changing from the Dev to the Test column by this distribution of the work???&lt;/p&gt;
&lt;p&gt;&lt;em&gt;=&amp;gt; Test after Dev is a problem&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1gulg0fkm19&quot;&gt;Testing benefits from preparation&lt;/h4&gt;
&lt;p&gt;Gathering information, planning (e.g. coverage and approaches), preparing test data and tools and many other are tasks in testing which can be done/started without an actual product - before or while the code is written.&lt;/p&gt;
&lt;p&gt;What are good reasons to postpone this until the development of the first version is done? Aside from a lack of time.&lt;br&gt;It would be a waste of time and being a risk by extending the feedback time for the developers.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;=&amp;gt; Test after Dev is a problem&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1gulg0fkm1a&quot;&gt;Testing can be integrated into development&lt;/h4&gt;
&lt;p&gt;Here are two examples from my daily work where I’ve collaborated closely with developers, and we couldn’t even say for sure which column a ticket was currently in.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pair / Ensemble testing with developers on their computers. They showed me the application, and I advised them on what to try. During these sessions, my colleagues made code changes and, when necessary, rebuilt the application so they could test it again immediately.&lt;/li&gt;
&lt;li&gt;I can build and deploy the product locally myself. With this setup, developers send me code changes at short intervals (git push &amp;amp; pull), which I then test within minutes—often while we’re on the phone or chat.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;=&amp;gt; Test after Dev is a problem&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1gulgg15v2c&quot;&gt;Testing can be done in parallel to development&lt;/h4&gt;
&lt;p&gt;It happens frequently that I interact with the product while in parallel developers still code by to basic scenarios:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;They start fixing bugs while I continue testing.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal)&quot;&gt;I start testing not yet fully developed features where we agree on that I should just look at specific places. Early feedback. I test while the developers code.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;=&amp;gt; Test after Dev is a problem&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71oe&quot;&gt;What about tickets?&lt;/h3&gt;
&lt;p&gt;All above is true no matter how your work is organized.&lt;/p&gt;
&lt;h4 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71of&quot;&gt;Bug tickets - Testing is here first (and also last)&lt;/h4&gt;
&lt;p&gt;Bug tickets in general about that someone found a problem, aka tested, and reported that. And often, especial when coming from the customer, they describe mostly symptom and don&amp;apos;t give a good manual of how to reproduce and exact details.&lt;/p&gt;
&lt;p&gt;A tester has to find out the scenario and causes, then developers (try to) fix it and finally it needs a test of the fix (and maybe some more loops).&lt;br&gt;Would this ticket start in a test column and the switch back to dev? …&lt;/p&gt;
&lt;p&gt;Test needs to act first.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;=&amp;gt; Test after Dev is a problem&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71oh&quot;&gt;Single ticket for multiple people&lt;/h4&gt;
&lt;p&gt;Somehow you just a have single ticket, but multiple people (can) work at in parallel. Maybe you use sub tasks, but you use them per sub topic and not per task / craft.&lt;br&gt;The people can be only developers, testers or a mixture of both. To which column would you put such ticket, especial at the mixed case?&lt;br&gt;And e.g. in Jira a ticket can only have a 1 assignee&lt;/p&gt;
&lt;p&gt;&lt;em&gt;=&amp;gt; Test after Dev is a problem&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71oj&quot;&gt;Summary&lt;/h3&gt;
&lt;p&gt;Testing and development are tasks that can generally be carried out in parallel. Just because no code has been written yet doesn&amp;apos;t mean that testers have nothing to do.&lt;/p&gt;
&lt;p&gt;Also they both are a feedback loop:&lt;/p&gt;
&lt;p&gt;Testing informs (at least) development and (at least) development gives testing something to interact with.&lt;/p&gt;
&lt;p&gt;This loop can be run several times in a few minutes.&lt;br&gt;Feedback is sooner better than later. If developers have already switched contexts, it takes them longer to get back on track.&lt;/p&gt;
&lt;p&gt;Every ticket in a issue tracker is a (simplified) model of a more complex reality.&lt;br&gt;Especial only one assignee possible is often far from reality of team work. &lt;/p&gt;
&lt;h3 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71ok&quot;&gt;Alternatives&lt;/h3&gt;
&lt;p&gt;Here are some ideas what to do instead.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Task oriented:
&lt;ul&gt;
&lt;li&gt;Add a list of tasks in the ticket and add names to them. Here goes the same for state.&lt;/li&gt;
&lt;li&gt;Use sub tasks and assign them. They have already a state field. I suggest to have a simple workflow here.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;People oriented:
&lt;ul&gt;
&lt;li&gt;Note in the ticket all people who are working on it.
&lt;ul&gt;
&lt;li&gt;You can add a state by a word or icon to show who is still working and who is finished.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Some ideas what task you could add for testing:
&lt;ul&gt;
&lt;li style=&quot;list-style-type: none&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Prepare X, Test Y, Review/Debrief Z
&lt;ul&gt;
&lt;li&gt;When testing covers multiple, separate topics and people you can add multiple test sub task.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When using Session-Based Test Management (&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://en.wikipedia.org/wiki/Session-based_testing&quot;&gt;Wiki&lt;/a&gt;, &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.satisfice.com/download/session-based-test-management&quot;&gt;Article&lt;/a&gt;) you can create a sub task for every session&lt;/li&gt;
&lt;li&gt;Need to prepare data ? Need to develop or enhance a tool? Need to learn the product? Need to … whatever? Add a task.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-mcetoc_1ia0vvic71ol&quot;&gt;Others say the same - further articles&lt;/h3&gt;
&lt;p&gt;There are multiple people advocating the same goal.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bart Vanherck: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://thetestingpirate.be/posts/2023/2023-10-31_youdontneedatestcolumn/&quot;&gt;You don&amp;apos;t need a test column&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ben Linders: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.infoq.com/news/2020/09/deliver-faster-kill-test-column/&quot;&gt;Deliver Faster by Killing the Test Column&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Daniel Knott: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.youtube.com/watch?v=UVmjXL8dUJU&quot;&gt;Delete The Test Column&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Katja Obring: &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://kato-coaching.com/kill-that-test-column&quot;&gt;Kill That Test Column&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://waynemroseberry.github.io&quot;&gt;Wayne Roseberry&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;A &amp;quot;testing&amp;quot; column represents testing as a monolithic black box. It says nothing of what the testing work is or offers any notion of how long it ought to take.&lt;br&gt;I like the way session-based test management breaks testing into visible, easy to schedule activities. I prefer testing being a mix of either be an assumed part of doing the development work, or the testing sessions on the schedule as explicit activities with their own card moving across the status columns.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.benfellows.co.uk&quot;&gt;Ben Fellow&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div id=&quot;article-tD30XMiOiQgRzrfg4YvorW3yg7Q-C8B4VJ78X-1778085648.166359-thread-list-Thread_1778684124.665189&quot; tabindex=&quot;-1&quot; role=&quot;listitem&quot; aria-setsize=&quot;-1&quot; data-qa=&quot;virtual-list-item&quot; data-item-key=&quot;1778684124.665189&quot;&gt;
&lt;div role=&quot;presentation&quot; data-qa=&quot;message_container&quot; data-qa-unprocessed=&quot;false&quot; data-qa-placeholder=&quot;false&quot; data-msg-ts=&quot;1778684124.665189&quot; data-msg-channel-id=&quot;C8B4VJ78X&quot;&gt;
&lt;div role=&quot;document&quot; aria-roledescription=&quot;Nachricht&quot; data-qa-hover=&quot;true&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div role=&quot;presentation&quot; data-qa=&quot;message_content&quot;&gt;
&lt;div&gt;
&lt;div data-qa=&quot;message-text&quot;&gt;
&lt;div data-qa=&quot;block-kit-renderer&quot;&gt;
&lt;div&gt;
&lt;div dir=&quot;auto&quot;&gt;
&lt;div&gt;&lt;em&gt;The test column often doesn&amp;apos;t make much sense when the dev column isn&amp;apos;t even the &amp;quot;dev&amp;quot; column, but &amp;quot;in progress&amp;quot;, like testing doesn&amp;apos;t mean the task in still in progress. It makes even less sense when you consider development still goes on in the &amp;quot;test&amp;quot; column due to bug fixes or further changes. If anything, the test column should be at least &amp;quot;testing and potentially some more development still&amp;quot;.&lt;/em&gt;&lt;br aria-hidden=&quot;true&quot;&gt;&lt;em&gt;Removing work items from the board altogether and reducing status columns to just &amp;quot;Todo &amp;gt; WIP &amp;gt; Done&amp;quot; with sub-tasks for all activities related to the work item is so much better, and allows multiple different activities assigned to different people in a team that can be completed at the same time.&lt;/em&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What would you add? &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.enteresc.net/why-a-test-column-on-boards-is-a-problem/#non-existing-post-with-id-10&quot; rel=&quot;noopener noreferrer&quot;&gt;Contact&lt;/a&gt; me how you want to. I would like to read any opinion.&lt;/p&gt;
&lt;p&gt;Published on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7056142187901632513/&quot;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;</summary><author><name>Sebastian</name></author><source gr:stream-id="feed/https://enteresc.net/feed.xml"><id>tag:google.com,2005:reader/feed/https://enteresc.net/feed.xml</id><title type="html">EnterEsc</title><link rel="alternate" href="https://www.enteresc.net" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778976000000"><id gr:original-id="https://qualitywithmillan.github.io/blog/ai/pipelines-for-reliable-ai-systems">tag:google.com,2005:reader/item/000008500000004d</id><category term="blog"></category><category term="quality-engineering"></category><category term="ai"></category><category term="machine-learning"></category><category term="ml-pipeline"></category><category term="data-engineering"></category><category term="model-training"></category><category term="model-monitoring"></category><category term="mlops"></category><category term="reproducibility"></category><category term="feature-engineering"></category><category term="deployment"></category><category term="data-drift"></category><title type="html">Machine Learning Pipelines: The Backbone of Reliable AI Systems</title><published>2026-05-17T00:00:00Z</published><updated>2026-05-17T00:00:00Z</updated><link rel="alternate" href="https://qualitywithmillan.github.io/blog/ai/machine-learning-pipelines-for-reliable-ai-systems.html" type="text/html"></link><summary type="html">&lt;p&gt;
 Written by -

    
    
    
        &lt;strong&gt;Millan Kaul&lt;/strong&gt;
    

&lt;/p&gt;

&lt;p&gt;Machine learning pipelines turn raw, messy data into deployable models through a repeatable set of automated steps. In practice, the pipeline is what makes ML usable in the real world, because it connects data ingestion, preprocessing, training, evaluation, deployment, and monitoring into one reliable flow.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Opinion&lt;/strong&gt;: Without a pipeline, ML is mostly experimentation. With one, it becomes engineering.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Core Pipeline Stages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://qualitywithmillan.github.io/assets/images/2026/05/ml_pipeline.png&quot; alt=&quot;Core machine learning pipeline stages&quot;&gt;
&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-why-ml-pipelines-matter&quot;&gt;Why ML Pipelines Matter&lt;/h3&gt;

&lt;p&gt;A data pipeline moves information. An ML pipeline goes further and operationalizes model development.&lt;/p&gt;

&lt;p&gt;That matters because ML systems break easily when preprocessing changes between training and inference, when experiments cannot be reproduced, or when models drift after deployment. A pipeline reduces those risks by making each step explicit, testable, and repeatable.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Automation removes manual glue code.&lt;/li&gt;
  &lt;li&gt;Consistency keeps training and inference aligned.&lt;/li&gt;
  &lt;li&gt;Scalability supports more models, more data, and more environments.&lt;/li&gt;
  &lt;li&gt;Reproducibility makes experiments easier to compare and debug.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-data-collection-and-ingestion&quot;&gt;Data Collection and Ingestion&lt;/h3&gt;

&lt;p&gt;This is where data enters the system from databases, APIs, files, logs, or streaming sources.&lt;/p&gt;

&lt;p&gt;The goal is not just to collect data, but to bring it into a centralized, reliable format that downstream stages can use without manual cleanup.&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-preprocessing-and-cleaning&quot;&gt;Preprocessing and Cleaning&lt;/h3&gt;

&lt;p&gt;Raw data is rarely model-ready.&lt;/p&gt;

&lt;p&gt;This stage handles missing values, duplicates, malformed records, outliers, and noisy entries. It also ensures the same cleaning logic can be reused later during inference.&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-feature-engineering&quot;&gt;Feature Engineering&lt;/h3&gt;

&lt;p&gt;Feature engineering turns raw fields into useful model inputs.&lt;/p&gt;

&lt;p&gt;That can include normalization, scaling, categorical encoding, text vectorization, aggregation, or domain-specific transformations. Good features often matter as much as the choice of algorithm.&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-model-training&quot;&gt;Model Training&lt;/h3&gt;

&lt;p&gt;This stage fits a model to the prepared data.&lt;/p&gt;

&lt;p&gt;In many workflows, it also includes hyperparameter tuning, cross-validation, and experiment tracking so teams can compare versions and understand what changed.&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-evaluation-and-validation&quot;&gt;Evaluation and Validation&lt;/h3&gt;

&lt;p&gt;A model is not ready just because it trains successfully.&lt;/p&gt;

&lt;p&gt;It must be tested on separate data to measure accuracy, robustness, and generalization. This is where teams catch overfitting, bias, and weak performance before deployment.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://qualitywithmillan.github.io/assets/images/2026/05/ml_pipelines_eval_and_validation.png&quot; alt=&quot;Evaluation and validation stage in an ML pipeline&quot;&gt;
&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-deployment&quot;&gt;Deployment&lt;/h3&gt;

&lt;p&gt;Once validated, the model is packaged and moved into production.&lt;/p&gt;

&lt;p&gt;Deployment can mean a real-time API, a batch scoring job, or an embedded service inside a larger system. The key is that the model now produces predictions for users or applications.&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-monitoring-and-maintenance&quot;&gt;Monitoring and Maintenance&lt;/h3&gt;

&lt;p&gt;Deployment is not the finish line.&lt;/p&gt;

&lt;p&gt;Models degrade as data changes, behavior shifts, and real-world conditions evolve. Monitoring checks for data drift, performance degradation, and pipeline failures, then triggers retraining or alerts when needed.&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-sample-ml-flow&quot;&gt;Sample ML Flow&lt;/h3&gt;

&lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;Raw data -&amp;gt; Cleaning -&amp;gt; Features -&amp;gt; Training -&amp;gt; Validation -&amp;gt; Deployment -&amp;gt; Monitoring
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://qualitywithmillan.github.io/assets/images/2026/05/ml_pipeline_data_flow.png&quot; alt=&quot;Sample ML pipeline data flow from raw data to monitoring&quot;&gt;
&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-code&quot;&gt;Code&lt;/h3&gt;

&lt;p&gt;Sample &lt;code class=&quot;language-plaintext language-highlighter-rouge&quot;&gt;ml_pipeline_flow.yaml&lt;/code&gt; would look something like this&lt;/p&gt;

&lt;div&gt;&lt;div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;# File: ml_pipeline_flow.yaml&lt;/span&gt;

&lt;span&gt;ml_pipeline&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
  &lt;span&gt;raw_data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
    &lt;span&gt;source&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;warehouse&lt;/span&gt;
  &lt;span&gt;cleaning&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
    &lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;remove_nulls&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;deduplicate&lt;/span&gt;
  &lt;span&gt;features&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
    &lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;normalize&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;encode_categories&lt;/span&gt;
  &lt;span&gt;training&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
    &lt;span&gt;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;xgboost&lt;/span&gt;
  &lt;span&gt;validation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
    &lt;span&gt;metrics&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;accuracy&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;f1_score&lt;/span&gt;
  &lt;span&gt;deployment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
    &lt;span&gt;target&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;api&lt;/span&gt;
  &lt;span&gt;monitoring&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
    &lt;span&gt;checks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;data_drift&lt;/span&gt;
      &lt;span&gt;-&lt;/span&gt; &lt;span&gt;performance_drop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A simple customer-churn pipeline might pull usage data, clean missing values, encode customer segments, train a classifier, validate it against holdout data, deploy it to score active users, and monitor whether predictions start drifting over time.&lt;/p&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-common-tools&quot;&gt;Common Tools&lt;/h3&gt;

&lt;p&gt;Different teams use different tooling depending on scale and complexity.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Scikit-learn for simple in-memory pipelines in Python.&lt;/li&gt;
  &lt;li&gt;Apache Airflow for orchestration and scheduling.&lt;/li&gt;
  &lt;li&gt;Google Vertex AI, Azure Machine Learning, and AWS Step Functions for managed cloud pipelines.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-what-good-looks-like&quot;&gt;What Good Looks Like&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A strong ML pipeline is modular, versioned, observable, and repeatable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Modular&lt;/strong&gt; means each step has a clear job.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Versioned&lt;/strong&gt; means data, code, and models are tracked.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Observable&lt;/strong&gt; means teams can see failures and performance changes.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Repeatable&lt;/strong&gt; means the same inputs produce comparable outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;article-FAlJPxPnaX9gmcNhiDNQggWaLF0-ml-pipeline-checklist&quot;&gt;ML Pipeline Checklist&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;input tabindex=&quot;-1&quot; type=&quot;checkbox&quot; disabled=&quot;disabled&quot; checked=&quot;checked&quot;&gt;Ingest data from trusted sources.&lt;/li&gt;
  &lt;li&gt;&lt;input tabindex=&quot;-1&quot; type=&quot;checkbox&quot; disabled=&quot;disabled&quot; checked=&quot;checked&quot;&gt;Clean and validate inputs before training.&lt;/li&gt;
  &lt;li&gt;&lt;input tabindex=&quot;-1&quot; type=&quot;checkbox&quot; disabled=&quot;disabled&quot; checked=&quot;checked&quot;&gt;Reuse preprocessing for inference.&lt;/li&gt;
  &lt;li&gt;&lt;input tabindex=&quot;-1&quot; type=&quot;checkbox&quot; disabled=&quot;disabled&quot; checked=&quot;checked&quot;&gt;Track experiments and model versions.&lt;/li&gt;
  &lt;li&gt;&lt;input tabindex=&quot;-1&quot; type=&quot;checkbox&quot; disabled=&quot;disabled&quot; checked=&quot;checked&quot;&gt;Validate on separate test data.&lt;/li&gt;
  &lt;li&gt;&lt;input tabindex=&quot;-1&quot; type=&quot;checkbox&quot; disabled=&quot;disabled&quot; checked=&quot;checked&quot;&gt;Deploy with a clear rollout strategy.&lt;/li&gt;
  &lt;li&gt;&lt;input tabindex=&quot;-1&quot; type=&quot;checkbox&quot; disabled=&quot;disabled&quot; checked=&quot;checked&quot;&gt;Monitor drift and performance continuously.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Machine learning pipelines are the backbone of reliable AI systems. They take ML out of the notebook and turn it into something teams can run, trust, and improve over time.&lt;/p&gt;

&lt;p&gt;A good model is important.
&lt;em&gt;&lt;strong&gt;A good pipeline is what makes that model dependable.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</summary><author><name>Millan Kaul</name></author><source gr:stream-id="feed/https://qualitywithmillan.github.io/feed.xml"><id>tag:google.com,2005:reader/feed/https://qualitywithmillan.github.io/feed.xml</id><title type="html">Quality With Millan</title><link rel="alternate" href="https://qualitywithmillan.github.io/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2026-05-13-contract-testing-review/">tag:google.com,2005:reader/item/0000105d0000009a</id><category term="book"></category><category term="testing"></category><category term="contract-testing"></category><category term="Reviews"></category><title type="html">Book Review: Contract Testing in Action</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2026-05-13-contract-testing-review/" type="text/html"></link><summary type="html">Review of &amp;quot;Contract Testing in Action: With Pact, PactFlow, and GitHub Actions&amp;quot; book written by Marie Cruz and Lewis Prescott</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2026-01-10-what-to-read-2025/">tag:google.com,2005:reader/item/0000105d00000099</id><category term="book"></category><category term="testing"></category><category term="engineering"></category><category term="Recommendation"></category><title type="html">What to read from testing and engineering (2025 edition)</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2026-01-10-what-to-read-2025/" type="text/html"></link><summary type="html">Best IT books I`ve read in 2025</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2026-01-10-step-to-use-ai-better/">tag:google.com,2005:reader/item/0000105d00000098</id><category term="learning"></category><category term="ai"></category><category term="Testing"></category><title type="html">One simple step to use AI more effectively as a tester</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2026-01-10-step-to-use-ai-better/" type="text/html"></link><summary type="html">One forgotten aspect of using AI for testing and learning</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2025-11-26-framework-vs-solution/">tag:google.com,2005:reader/item/0000105d00000097</id><category term="automation"></category><category term="Automation"></category><title type="html">Test Automation Framework or Test Automation Solution?</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2025-11-26-framework-vs-solution/" type="text/html"></link><summary type="html">What is the difference between framework and solution?</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2025-08-07-test-automation-books/">tag:google.com,2005:reader/item/0000105d00000096</id><category term="book"></category><category term="automation"></category><category term="Recommendation"></category><title type="html">What to read in test automation?</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2025-08-07-test-automation-books/" type="text/html"></link><summary type="html">A curated list of good books for test automation engineers</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2025-02-27-testing-research-challenges-review/">tag:google.com,2005:reader/item/0000105d00000095</id><category term="testing"></category><category term="paper"></category><category term="Reviews"></category><title type="html">Paper Review: Software Testing Research Challenges: An Industrial Perspective</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2025-02-27-testing-research-challenges-review/" type="text/html"></link><summary type="html">An overview of the current state of software testing and open research questions</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2025-03-25-why-we-fail-at-interviews/">tag:google.com,2005:reader/item/0000105d00000094</id><category term="interview"></category><category term="career"></category><category term="Interview"></category><title type="html">Why do we fail at interviews?</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2025-03-25-why-we-fail-at-interviews/" type="text/html"></link><summary type="html">Why do we fail at interviews and what we can do about it</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2025-02-26-ai-and-learning/">tag:google.com,2005:reader/item/0000105d00000093</id><category term="learning"></category><category term="ai"></category><category term="Learning"></category><title type="html">AI tools and how they kill learning</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2025-02-26-ai-and-learning/" type="text/html"></link><summary type="html">Pros and cons of using AI tools (for beginners)</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2024-10-07-choosing-what-to-learn/">tag:google.com,2005:reader/item/0000105d00000092</id><category term="learning"></category><category term="career"></category><category term="Learning"></category><title type="html">On choosing what to learn</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2024-10-07-choosing-what-to-learn/" type="text/html"></link><summary type="html">How I learn or treating learning as a project</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1778934442208"><id gr:original-id="https://testengineeringnotes.com/posts/2024-09-26-summer-2024-books/">tag:google.com,2005:reader/item/0000105d00000091</id><category term="book"></category><category term="Recommendation"></category><title type="html">What I read this summer - 2024</title><published>2026-05-16T12:27:22Z</published><updated>2026-05-16T12:27:22Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2024-09-26-summer-2024-books/" type="text/html"></link><summary type="html">Few books that I read during summer 2024</summary><author><name></name></author><source gr:stream-id="feed/https://testengineeringnotes.com/rss.xml"><id>tag:google.com,2005:reader/feed/https://testengineeringnotes.com/rss.xml</id><title type="html">Test Engineering Notes</title><link rel="alternate" href="https://testengineeringnotes.com/" type="text/html"></link></source></entry></feed>