<?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>4672924418127</gr:continuation><updated>2026-05-25T20:21:53Z</updated><entry gr:crawl-timestamp-msec="1779729534000"><id gr:original-id="https://qualityeng.substack.com/p/linky-no-32">tag:google.com,2005:reader/item/00000b1e00000075</id><title type="html">Linky #32 - The practice is not the principle</title><published>2026-05-25T17:18:54Z</published><updated>2026-05-25T17:18:54Z</updated><link rel="alternate" href="https://qualityeng.substack.com/p/linky-no-32" type="text/html"></link><link rel="enclosure" href="https://api.substack.com/feed/podcast/199171875/b6044fbb15cdafd60393fa24999f7e39.mp3" type="audio/mpeg"></link><media:content url="https://api.substack.com/feed/podcast/199171875/b6044fbb15cdafd60393fa24999f7e39.mp3" type="audio/mpeg"></media:content><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_!H-cX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.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_!H-cX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png 424w, https://substackcdn.com/image/fetch/$s_!H-cX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png 848w, https://substackcdn.com/image/fetch/$s_!H-cX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png 1272w, https://substackcdn.com/image/fetch/$s_!H-cX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.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/33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.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;:427193,&amp;quot;alt&amp;quot;:null,&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/199171875?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png&amp;quot;,&amp;quot;isProcessing&amp;quot;:false,&amp;quot;align&amp;quot;:null,&amp;quot;offset&amp;quot;:false}&quot; alt data-orig-srcset=&quot;https://substackcdn.com/image/fetch/$s_!H-cX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png 424w, https://substackcdn.com/image/fetch/$s_!H-cX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png 848w, https://substackcdn.com/image/fetch/$s_!H-cX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png 1272w, https://substackcdn.com/image/fetch/$s_!H-cX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.png 1456w&quot; src=&quot;https://substackcdn.com/image/fetch/$s_!H-cX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33844a2e-3968-46e3-885e-23064e4d0bcc_2998x1682.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;This week’s links had me thinking about something that is foundational to a lot of quality engineering work:&lt;/p&gt;&lt;p style=&quot;text-align: center&quot;&gt;&lt;strong&gt;Are our practices still serving the principles behind them?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Because it is easy for teams to inherit the practices, rituals, tools, boards, ceremonies, and the language, without always keeping hold of why those things mattered in the first place.&lt;/p&gt;&lt;p&gt;That becomes a problem when the conditions change.&lt;/p&gt;&lt;p&gt;A practice that helped one team learn faster can become a habit that slows another team down. A process that created clarity in one context can create friction in another. A metric that once helped expose a problem can become the thing people optimise around.&lt;/p&gt;&lt;p&gt;Quality is not created by process alone. It is shaped by how people understand the work, how they respond to uncertainty, how they make trade-offs, and how willing they are to adapt when the system around them changes.&lt;/p&gt;&lt;p&gt;This week’s links look at that from a few different angles: the Product Operating Model, first principles, flexible team interactions, change as a social process, AI increasing output, and why understanding the system still matters.&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;h2&gt;Latest post from the QE Newsletter&lt;/h2&gt;&lt;div data-attrs=&quot;{&amp;quot;nodeId&amp;quot;:&amp;quot;fe278ee9-b421-458c-bb7c-c7fd6238a387&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;More software organisations are adopting the Product Operating Model, inspired by companies such as Amazon, Apple, Netflix, Stripe and Spotify.&amp;quot;,&amp;quot;cta&amp;quot;:null,&amp;quot;showBylines&amp;quot;:true,&amp;quot;size&amp;quot;:&amp;quot;md&amp;quot;,&amp;quot;isEditorNode&amp;quot;:true,&amp;quot;title&amp;quot;:&amp;quot;Where does quality fit in the Product Operating Model?&amp;quot;,&amp;quot;publishedBylines&amp;quot;:[{&amp;quot;id&amp;quot;:13661790,&amp;quot;name&amp;quot;:&amp;quot;Jit Gosai&amp;quot;,&amp;quot;bio&amp;quot;:&amp;quot;Working in software testing for over 20 years, I currently work as the Principal Tester, supporting teams to create high-quality products by fostering a Culture of Quality. I share my experiences at conferences throughout Europe and in my newsletter&amp;quot;,&amp;quot;photo_url&amp;quot;:&amp;quot;https://substack-post-media.s3.amazonaws.com/public/images/ffc95e6c-1b0c-45d8-aff6-8755a38dd5c0_1125x1125.jpeg&amp;quot;,&amp;quot;is_guest&amp;quot;:false,&amp;quot;bestseller_tier&amp;quot;:null}],&amp;quot;post_date&amp;quot;:&amp;quot;2026-05-17T17:19:05.502Z&amp;quot;,&amp;quot;cover_image&amp;quot;:&amp;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&amp;quot;,&amp;quot;cover_image_alt&amp;quot;:null,&amp;quot;canonical_url&amp;quot;:&amp;quot;https://qualityeng.substack.com/p/where-does-quality-fit-in-the-pom&amp;quot;,&amp;quot;section_name&amp;quot;:null,&amp;quot;video_upload_id&amp;quot;:null,&amp;quot;id&amp;quot;:197994609,&amp;quot;type&amp;quot;:&amp;quot;newsletter&amp;quot;,&amp;quot;reaction_count&amp;quot;:1,&amp;quot;comment_count&amp;quot;:0,&amp;quot;publication_id&amp;quot;:1213367,&amp;quot;publication_name&amp;quot;:&amp;quot;Quality Engineering Newsletter&amp;quot;,&amp;quot;publication_logo_url&amp;quot;:&amp;quot;https://substackcdn.com/image/fetch/$s_!hE0U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3687517-683c-46b0-896e-b404c986e06a_1280x1280.png&amp;quot;,&amp;quot;belowTheFold&amp;quot;:true,&amp;quot;youtube_url&amp;quot;:null,&amp;quot;show_links&amp;quot;:null,&amp;quot;feed_url&amp;quot;:null}&quot;&gt;&lt;/div&gt;&lt;p&gt;Over the last couple of months, I’ve been deep diving into the Product Operating Model (POM), which a few software organisations are moving towards.&lt;/p&gt;&lt;p&gt;What stood out to me was that quality engineering could be an incredible enabler for it.&lt;/p&gt;&lt;p&gt;One advantage I see with the POM is that it gets organisations more focused on outcomes rather than outputs. That feels increasingly valuable when AI is accelerating output, but not necessarily helping us understand whether we are creating the right outcomes.&lt;/p&gt;&lt;p&gt;For me, this is where quality engineering has a lot to offer.&lt;/p&gt;&lt;p&gt;Not in testing the thing at the end, but in helping teams ask better questions earlier:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;What are we trying to learn?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What feedback do we need?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What risks are we carrying?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What assumptions are we making?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;How will we know if this is working?&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I have a feeling we’ll be hearing more and more about the POM as time goes on, and I think there is a real opportunity for quality engineering to help shape how organisations make that shift in practice.&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;h2&gt;Getting back to first principles&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;The Agile Manifesto remains the best place to start. Not because it explains everything, it doesn’t, and the world is more complicated than four values and twelve principles.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;But it’s first principles. Everything else, the practices, the ceremonies, the tooling, only makes sense in light of it. Without that foundation you’re just copying other people’s answers.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The Agile Manifesto is the foundation you build your agile practices on top of.&lt;/p&gt;&lt;p&gt;But I think this is where a lot of teams can get stuck. They inherit the practices, rituals, boards, ceremonies, and language, but not always the principles underlying them.&lt;/p&gt;&lt;p&gt;So when the environment changes, they struggle to adapt.&lt;/p&gt;&lt;p&gt;The practice becomes the thing to protect, rather than the principle that helped make the practice useful in the first place.&lt;/p&gt;&lt;p&gt;That matters for quality engineering because quality practices are the same. Testing, automation, exploratory testing, pairing, CI/CD, retrospectives, risk conversations, incident reviews, definitions of done. None of these are good just because we do them.&lt;/p&gt;&lt;p&gt;They are useful when they help us learn, reduce uncertainty, surface risk, improve decisions, and build better software.&lt;/p&gt;&lt;p&gt;Continuous improvement is meant to be a core part of the work, but in practice, it is often the thing teams drop when delivery pressure rises.&lt;/p&gt;&lt;p&gt;And that is usually the moment when they need it most. Via &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/posts/robertbowley_every-time-i-introduce-modern-delivery-practices-share-7460349683924836354-NIxM/&quot;&gt;Agile Foundation: Beyond Practices to Shared Understanding | Rob Bowley&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;h2&gt;Adapting to the conditions&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;In Team Topologies, we frequently discuss setting up teams for flow, clarity, and managing cognitive load. It’s not just about picking one structure and sticking to it. Teams need to shift how they interact, depending on what’s happening.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Sometimes you need someone calling the shots, other times, you want to hear from everyone and learn as a group.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The example cited in the post is from the US Navy SEALs.&lt;/p&gt;&lt;p&gt;In the field, they operate with a clear hierarchy because mistakes can lead to serious injury or death. In that context, clear commands and people following through are critical.&lt;/p&gt;&lt;p&gt;But back at base, during debriefs, the dynamic changes. The structure becomes flatter because the purpose has changed. It is no longer about immediate coordination. It is about learning.&lt;/p&gt;&lt;p&gt;That distinction feels really relevant for engineering teams.&lt;/p&gt;&lt;p&gt;During a live incident, the priority is minimising harm to users, the business, and the team. In that moment, a more command-and-control approach can make sense. You need coordination, clarity, and quick decisions.&lt;/p&gt;&lt;p&gt;But during a post-incident review, the purpose is different.&lt;/p&gt;&lt;p&gt;You need to understand what happened, how it happened, what the system made easier or harder, and what you could improve next time. That requires openness, curiosity, and the &lt;em&gt;willingness&lt;/em&gt; to hear different perspectives.&lt;/p&gt;&lt;p&gt;The mistake is thinking one way of working should apply everywhere.&lt;/p&gt;&lt;p&gt;Quality is not created by blindly applying the same process to every situation. It is created by understanding what the situation needs and adapting how we work around that.&lt;/p&gt;&lt;p&gt;During an incident, you need coordination.&lt;/p&gt;&lt;p&gt;After an incident, you need learning.&lt;/p&gt;&lt;p&gt;Via &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/posts/matthewskelton_the-most-successful-teams-dont-stay-flator-share-7460623235420712960-0U6L&quot;&gt;Navy SEALs’ Flexible Leadership Approach to Team Dynamics | Matthew Skelton&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;h2&gt;Change happens one conversation at a time&lt;/h2&gt;&lt;p&gt;One from me this time:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;... change happens person by person. Conversation by conversation. Standard by standard. Not all at once. Not because one heroic person fixes everything. But because enough people keep caring, talking, acting, and nudging the system in a better direction.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;We work in big, complex adaptive systems, and trying to change them so quality is built in can feel almost impossible.&lt;/p&gt;&lt;p&gt;But in some ways, maybe that is not what we are trying to do.&lt;/p&gt;&lt;p&gt;We are not trying to fix the whole system in one heroic move. We are trying to change it little by little.&lt;/p&gt;&lt;p&gt;Through conversations, decisions, team habits, better feedback loop and when someone chooses to ask a better question instead of accepting the default.&lt;/p&gt;&lt;p&gt;That might sound small, but I think this is how a lot of quality work actually happens.&lt;/p&gt;&lt;p&gt;Quality engineering is not only about tools, pipelines, automation, or test strategies. It is also about helping people notice what the system is doing and nudging it towards something better.&lt;/p&gt;&lt;p&gt;That kind of change is slow, but it compounds.&lt;/p&gt;&lt;p&gt;And over time, enough small changes can start to move the whole system. Via &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/posts/jitgo_there-are-some-days-when-i-think-whats-ugcPost-7462776738566230016-xtYx&quot;&gt;There are some days when I think, what’s the point? | Jitesh Gosai&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Quality Engineering Newsletter is reader-supported. If these posts help you think more clearly about quality, teams, systems, and how better software gets built, you can subscribe for free or become a paid subscriber.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Free subscriptions help more people find the newsletter. Paid subscriptions help me keep making time for the reading, writing, reflection, audio versions, and practical resources that go into it.&lt;/em&gt;&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;:&amp;quot;button-wrapper&amp;quot;}&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;h2&gt;Quality is not proportional to quantity&lt;/h2&gt;&lt;p&gt;AI is very focused on more output…&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Producing a garbage product faster benefits nobody; never has. It’s good outcomes (e.g., happy customers, painless improvements) that we need, not more output.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Which is a good point.&lt;/p&gt;&lt;p&gt;Just producing more does not mean producing more quality.&lt;/p&gt;&lt;p&gt;But I also think there is a useful nuance here. More attempts can create more opportunities to learn, try things, test assumptions, and find what might work.&lt;/p&gt;&lt;p&gt;The problem is when organisations confuse that activity with value.&lt;/p&gt;&lt;p&gt;More ideas, more prototypes, more code, more documentation, and more tests are not automatically useful. They become useful when they help us learn something, make a better decision, or move closer to an outcome that matters.&lt;/p&gt;&lt;p&gt;Then, once you have found something valuable, the work changes.&lt;/p&gt;&lt;p&gt;You need to productionise it. Make it scalable, performant, maintainable, and suitable for your context. You need to understand the risks. You need to build the feedback loops that tell you whether it is still working.&lt;/p&gt;&lt;p&gt;So quantity can help, but only if the system around it is good at learning.&lt;/p&gt;&lt;p&gt;Otherwise, all you have done is create more stuff to manage. I wrote about this in &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/when-quantity-leads-to-quality&quot;&gt;When quantity leads to quality&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Quote via &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://blog.holub.com/p/value-is-not-proportional-to-quantity&quot;&gt;Value Is Not Proportional to Quantity | Allen Holub&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;AI is increasing inventory, not value &lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;AI is reducing the cost of creating inventory. And inventory is only valuable when it helps us learn, validate, deliver, or change customer and business outcomes. Until then, it is potential value at best. At worst, it is risk.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;As Jacob mentions in his post, inventory can be things like code, tests, documentation, designs, tickets, and ideas.&lt;/p&gt;&lt;p&gt;AI makes it easier to create more of all of that.&lt;/p&gt;&lt;p&gt;But more inventory does not mean more value. We can do things faster, but that does not mean we are creating better outcomes faster.&lt;/p&gt;&lt;p&gt;This is where the system matters.&lt;/p&gt;&lt;p&gt;If your organisation is optimised for output, then that is what you are going to get. More code, tickets, PRs, documents and more visible signs of activity.&lt;/p&gt;&lt;p&gt;But if your organisation has built strong practices for learning and validation, then AI could be used very differently. It could help teams explore, compare options, surface risks, improve understanding, and test assumptions more quickly.&lt;/p&gt;&lt;p&gt;The difference is not the tool but what the surrounding system rewards, notices, and learns from.&lt;/p&gt;&lt;p&gt;So maybe the question is not simply “how much more can AI help us produce?”&lt;/p&gt;&lt;p&gt;Maybe the better question is:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What kind of learning does all this extra output create?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Via &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/posts/imjacobclark_ai-has-made-output-cheap-moving-the-constraint-share-7461178951877623809-np-C&quot;&gt;AI has made output cheap, moving the constraint from production to validation. | Jacob Clark&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;It’s never been about speed, but building quality in&lt;/h2&gt;&lt;p&gt;I don’t usually post two posts from the same person, but Rob’s been on fire these last few weeks.&lt;/p&gt;&lt;p&gt;He’s been looking back as far as the 1940s, showing that the bottleneck in software has never really been about speed...&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Maurice Wilkes, one of the pioneers of stored program computing, later reflected in Memoirs of a Computer Pioneer his realisation in the late 1940s, that “a good part of the remainder of my life was going to be spent in finding errors in my own programs.” From the very beginning, debugging and verification, not writing code, dominated effort.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Rob cites another seven examples showing that speed has rarely been the real issue.&lt;/p&gt;&lt;p&gt;The harder work has always been making sure what we have built actually does what we thought it would do.&lt;/p&gt;&lt;p&gt;That is quality work and its about reducing uncertainty in how our software systems behave.&lt;/p&gt;&lt;p&gt;This is why building quality in matters. It can feel slower at first because you are investing in the system around the work: better tests, better feedback loops, clearer design, smaller changes, stronger collaboration, more testable systems, and earlier conversations about risk.&lt;/p&gt;&lt;p&gt;But over time, that investment changes what the team is capable of.&lt;/p&gt;&lt;p&gt;You spend less time being surprised by the system, on finding issues, on untangling problems you could have made visible earlier.&lt;/p&gt;&lt;p&gt;So building quality in is not really about slowing down to be careful.&lt;/p&gt;&lt;p&gt;It is about creating a system that can move with more confidence because it is better at learning. Via &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://blog.robbowley.net/2026/01/05/coding-has-never-been-the-bottleneck/&quot;&gt;Coding has never been the bottleneck | Rob Bowley&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;Are we heading for an AI disaster?&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;...whole swath of software engineers have forgotten why we ever cared about good code in the first place. It’s fine if your prototype is slop, but good code compounds over time so slop only really becomes a problem over time in a compounded nature, when it’s far too late.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This feels like one of the bigger quality engineering challenges we might be walking into with AI.&lt;/p&gt;&lt;p&gt;Not because AI is bad, but because AI may make it much easier to create software faster than we can understand it.&lt;/p&gt;&lt;p&gt;Metrics like MTTR are useful. They help teams embrace failure, detect problems, minimise harm, and recover from production incidents.&lt;/p&gt;&lt;p&gt;Throughput metrics like cycle time and deployment frequency are useful too. They help teams understand whether work is flowing.&lt;/p&gt;&lt;p&gt;But there is a potential trap here.&lt;/p&gt;&lt;p&gt;A team can be shipping frequently, recovering quickly, and still slowly losing comprehension of the system.&lt;/p&gt;&lt;p&gt;They might understand less about:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;how the system actually works&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;why certain decisions were made&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;where the dependencies are&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;how components interact under stress&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;what assumptions the system is relying on&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The system keeps evolving, but fewer people understand it deeply.&lt;/p&gt;&lt;p&gt;That is dangerous because some problems do not show up straight away. They accumulate quietly. Complexity, coupling, weak assumptions, and messy boundaries can sit unnoticed for a long time because everything still appears to be working.&lt;/p&gt;&lt;p&gt;Until one day, the conditions line up in just the wrong way.&lt;/p&gt;&lt;p&gt;The &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/crowdstrike-outage-case-study&quot;&gt;CrowdStrike outage&lt;/a&gt; is a good example of how a relatively small issue can cascade into something much larger when systems are deeply interconnected.&lt;/p&gt;&lt;p&gt;I think we are going to need better ways of noticing whether our understanding of a system is increasing or decreasing over time.&lt;/p&gt;&lt;p&gt;That’s quality engineering work to me.&lt;/p&gt;&lt;p&gt;Not just checking whether the system works today, but helping teams stay close enough to the work that they can understand, question, adapt, and intervene when things go wrong.&lt;/p&gt;&lt;p&gt;Because if AI helps us produce more while quietly reducing our shared understanding, then we may be improving output while weakening the system’s ability to learn. Via &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/posts/christopher-grounds-361b9511b_llms-xp-share-7461314457848315904-Gm0e/?rcm=ACoAAAKGfp8BZByMzM2mW0xDlTP_LHkoZ6wQb8s&quot;&gt;Software Engineers Forget Good Code at Their Own Risk | Christopher Grounds&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;p&gt;As always, I’d love to know what you think. You can reply directly to one of my emails, leave a comment, or &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/jitgo/&quot;&gt;message me on socials&lt;/a&gt;.&lt;/p&gt;&lt;p data-attrs=&quot;{&amp;quot;url&amp;quot;:&amp;quot;https://qualityeng.substack.com/p/linky-no-32/comments&amp;quot;,&amp;quot;text&amp;quot;:&amp;quot;Leave a comment&amp;quot;,&amp;quot;action&amp;quot;:null,&amp;quot;class&amp;quot;:&amp;quot;button-wrapper&amp;quot;}&quot; data-component-name=&quot;ButtonCreateButton&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/linky-no-32/comments&quot;&gt;&lt;span&gt;Leave a comment&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;And if this post made you think of a team conversation you need to have, send it to someone and use it as a starting point.&lt;/p&gt;&lt;p&gt;Maybe ask them:&lt;/p&gt;&lt;p style=&quot;text-align: center&quot;&gt;&lt;em&gt;&lt;strong&gt;Which of our practices are still helping us, and which ones are we just carrying forward out of habit?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p data-attrs=&quot;{&amp;quot;url&amp;quot;:&amp;quot;https://qualityeng.substack.com/p/linky-no-32?utm_source=substack&amp;amp;utm_medium=email&amp;amp;utm_content=share&amp;amp;action=share&amp;quot;,&amp;quot;text&amp;quot;:&amp;quot;Share&amp;quot;,&amp;quot;action&amp;quot;:null,&amp;quot;class&amp;quot;:&amp;quot;button-wrapper&amp;quot;}&quot; data-component-name=&quot;ButtonCreateButton&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityeng.substack.com/p/linky-no-32?utm_source=substack&amp;amp;utm_medium=email&amp;amp;utm_content=share&amp;amp;action=share&quot;&gt;&lt;span&gt;Share&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h1&gt;Past Linkys&lt;/h1&gt;&lt;div data-attrs=&quot;{&amp;quot;nodeId&amp;quot;:&amp;quot;026ea554-86f5-4cbd-82a1-1254f061cfcc&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;This week’s links remind me of a topic I think about often:&amp;quot;,&amp;quot;cta&amp;quot;:null,&amp;quot;showBylines&amp;quot;:true,&amp;quot;size&amp;quot;:&amp;quot;md&amp;quot;,&amp;quot;isEditorNode&amp;quot;:true,&amp;quot;title&amp;quot;:&amp;quot;Linky #31 - Be careful what you optimise for&amp;quot;,&amp;quot;publishedBylines&amp;quot;:[{&amp;quot;id&amp;quot;:13661790,&amp;quot;name&amp;quot;:&amp;quot;Jit Gosai&amp;quot;,&amp;quot;bio&amp;quot;:&amp;quot;Working in software testing for over 20 years, I currently work as the Principal Tester, supporting teams to create high-quality products by fostering a Culture of Quality. I share my experiences at conferences throughout Europe and in my newsletter&amp;quot;,&amp;quot;photo_url&amp;quot;:&amp;quot;https://substack-post-media.s3.amazonaws.com/public/images/ffc95e6c-1b0c-45d8-aff6-8755a38dd5c0_1125x1125.jpeg&amp;quot;,&amp;quot;is_guest&amp;quot;:false,&amp;quot;bestseller_tier&amp;quot;:null}],&amp;quot;post_date&amp;quot;:&amp;quot;2026-05-03T17:22:47.212Z&amp;quot;,&amp;quot;cover_image&amp;quot;:&amp;quot;https://substackcdn.com/image/fetch/$s_!2Y_p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5df412f-ecc4-4d54-b638-4c573a6bf4a7_2544x1421.png&amp;quot;,&amp;quot;cover_image_alt&amp;quot;:null,&amp;quot;canonical_url&amp;quot;:&amp;quot;https://qualityeng.substack.com/p/linky-no-31&amp;quot;,&amp;quot;section_name&amp;quot;:null,&amp;quot;video_upload_id&amp;quot;:null,&amp;quot;id&amp;quot;:196207980,&amp;quot;type&amp;quot;:&amp;quot;podcast&amp;quot;,&amp;quot;reaction_count&amp;quot;:1,&amp;quot;comment_count&amp;quot;:2,&amp;quot;publication_id&amp;quot;:1213367,&amp;quot;publication_name&amp;quot;:&amp;quot;Quality Engineering Newsletter&amp;quot;,&amp;quot;publication_logo_url&amp;quot;:&amp;quot;https://substackcdn.com/image/fetch/$s_!hE0U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3687517-683c-46b0-896e-b404c986e06a_1280x1280.png&amp;quot;,&amp;quot;belowTheFold&amp;quot;:true,&amp;quot;youtube_url&amp;quot;:null,&amp;quot;show_links&amp;quot;:null,&amp;quot;feed_url&amp;quot;:null}&quot;&gt;&lt;/div&gt;&lt;div data-attrs=&quot;{&amp;quot;nodeId&amp;quot;:&amp;quot;9d79c6d0-6d41-4e21-a726-6be9c71782c6&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;This week’s links all got me thinking about the same thing: quality does not just come from effort, talent, or speed. It depends heavily on the learning environment around the work.&amp;quot;,&amp;quot;cta&amp;quot;:null,&amp;quot;showBylines&amp;quot;:true,&amp;quot;size&amp;quot;:&amp;quot;md&amp;quot;,&amp;quot;isEditorNode&amp;quot;:true,&amp;quot;title&amp;quot;:&amp;quot;Linky #30 - Quality depends on the learning environment &amp;quot;,&amp;quot;publishedBylines&amp;quot;:[{&amp;quot;id&amp;quot;:13661790,&amp;quot;name&amp;quot;:&amp;quot;Jit Gosai&amp;quot;,&amp;quot;bio&amp;quot;:&amp;quot;Working in software testing for over 20 years, I currently work as the Principal Tester, supporting teams to create high-quality products by fostering a Culture of Quality. I share my experiences at conferences throughout Europe and in my newsletter&amp;quot;,&amp;quot;photo_url&amp;quot;:&amp;quot;https://substack-post-media.s3.amazonaws.com/public/images/ffc95e6c-1b0c-45d8-aff6-8755a38dd5c0_1125x1125.jpeg&amp;quot;,&amp;quot;is_guest&amp;quot;:false,&amp;quot;bestseller_tier&amp;quot;:null}],&amp;quot;post_date&amp;quot;:&amp;quot;2026-04-19T17:19:08.851Z&amp;quot;,&amp;quot;cover_image&amp;quot;:&amp;quot;https://substack-video.s3.amazonaws.com/video_upload/post/194495024/7780f27b-eb0a-4ac3-a8d4-542f3648952d/transcoded-1776593245.png&amp;quot;,&amp;quot;cover_image_alt&amp;quot;:null,&amp;quot;canonical_url&amp;quot;:&amp;quot;https://qualityeng.substack.com/p/linky-no-30&amp;quot;,&amp;quot;section_name&amp;quot;:null,&amp;quot;video_upload_id&amp;quot;:null,&amp;quot;id&amp;quot;:194495024,&amp;quot;type&amp;quot;:&amp;quot;podcast&amp;quot;,&amp;quot;reaction_count&amp;quot;:1,&amp;quot;comment_count&amp;quot;:0,&amp;quot;publication_id&amp;quot;:1213367,&amp;quot;publication_name&amp;quot;:&amp;quot;Quality Engineering Newsletter&amp;quot;,&amp;quot;publication_logo_url&amp;quot;:&amp;quot;https://substackcdn.com/image/fetch/$s_!hE0U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3687517-683c-46b0-896e-b404c986e06a_1280x1280.png&amp;quot;,&amp;quot;belowTheFold&amp;quot;:true,&amp;quot;youtube_url&amp;quot;:null,&amp;quot;show_links&amp;quot;:null,&amp;quot;feed_url&amp;quot;:null}&quot;&gt;&lt;/div&gt;&lt;div data-attrs=&quot;{&amp;quot;nodeId&amp;quot;:&amp;quot;939ccaa1-9b93-490e-95ef-476003883388&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;The more I read about AI and software delivery, the more I think the bigger shift is not just speed, but volume.&amp;quot;,&amp;quot;cta&amp;quot;:null,&amp;quot;showBylines&amp;quot;:true,&amp;quot;size&amp;quot;:&amp;quot;md&amp;quot;,&amp;quot;isEditorNode&amp;quot;:true,&amp;quot;title&amp;quot;:&amp;quot;Linky #29 - Why quality may matter even more&amp;quot;,&amp;quot;publishedBylines&amp;quot;:[{&amp;quot;id&amp;quot;:13661790,&amp;quot;name&amp;quot;:&amp;quot;Jit Gosai&amp;quot;,&amp;quot;bio&amp;quot;:&amp;quot;Working in software testing for over 20 years, I currently work as the Principal Tester, supporting teams to create high-quality products by fostering a Culture of Quality. I share my experiences at conferences throughout Europe and in my newsletter&amp;quot;,&amp;quot;photo_url&amp;quot;:&amp;quot;https://substack-post-media.s3.amazonaws.com/public/images/ffc95e6c-1b0c-45d8-aff6-8755a38dd5c0_1125x1125.jpeg&amp;quot;,&amp;quot;is_guest&amp;quot;:false,&amp;quot;bestseller_tier&amp;quot;:null}],&amp;quot;post_date&amp;quot;:&amp;quot;2026-04-05T17:16:46.925Z&amp;quot;,&amp;quot;cover_image&amp;quot;:&amp;quot;https://substack-video.s3.amazonaws.com/video_upload/post/193155243/42516be3-4f7d-41e0-b1f8-af7d7508efc6/transcoded-1775383873.png&amp;quot;,&amp;quot;cover_image_alt&amp;quot;:null,&amp;quot;canonical_url&amp;quot;:&amp;quot;https://qualityeng.substack.com/p/linky-no-29&amp;quot;,&amp;quot;section_name&amp;quot;:null,&amp;quot;video_upload_id&amp;quot;:null,&amp;quot;id&amp;quot;:193155243,&amp;quot;type&amp;quot;:&amp;quot;podcast&amp;quot;,&amp;quot;reaction_count&amp;quot;:3,&amp;quot;comment_count&amp;quot;:0,&amp;quot;publication_id&amp;quot;:1213367,&amp;quot;publication_name&amp;quot;:&amp;quot;Quality Engineering Newsletter&amp;quot;,&amp;quot;publication_logo_url&amp;quot;:&amp;quot;https://substackcdn.com/image/fetch/$s_!hE0U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3687517-683c-46b0-896e-b404c986e06a_1280x1280.png&amp;quot;,&amp;quot;belowTheFold&amp;quot;:true,&amp;quot;youtube_url&amp;quot;:null,&amp;quot;show_links&amp;quot;:null,&amp;quot;feed_url&amp;quot;:null}&quot;&gt;&lt;/div&gt;&lt;p style=&quot;clear: both&quot;&gt;&lt;/p&gt;&lt;p data-bqr-info=&quot;attachment&quot;&gt;&lt;audio style=&quot;display: block; width: 100%&quot; controls preload=&quot;none&quot; playsinline=&quot;true&quot; webkit-playsinline=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;source src=&quot;https://api.substack.com/feed/podcast/199171875/b6044fbb15cdafd60393fa24999f7e39.mp3&quot; type=&quot;audio/mpeg&quot;&gt;&lt;/audio&gt;&lt;span class=&quot;downloadLink&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://api.substack.com/feed/podcast/199171875/b6044fbb15cdafd60393fa24999f7e39.mp3&quot; title=&quot;https://api.substack.com/feed/podcast/199171875/b6044fbb15cdafd60393fa24999f7e39.mp3&quot;&gt;b6044fbb15cdafd60393fa24999f7e39.mp3&lt;/a&gt;&lt;/span&gt;&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="1779721946000"><id gr:original-id="http://randomtechthoughts.blog/?p=6070">tag:google.com,2005:reader/item/000003770000009b</id><category term="Data processing"></category><category term="Quality"></category><title type="html">The cool chain of data</title><published>2026-05-25T15:12:26Z</published><updated>2026-05-25T15:12:26Z</updated><link rel="alternate" href="https://randomtechthoughts.blog/2026/05/25/the-cool-chain-of-data/" type="text/html"></link><summary type="html">&lt;p&gt;Perishable goods like milk and some medicine need to be kept cool otherwise they go bad.  With something like milk, if it has gone bad enough you can tell from the smell.  However, this will probably be after you’ve paid for it and brought it home from the shop, so you have wasted time and money.  Medicine is worse – you often can’t tell if is ineffective or dangerous without specialist equipment.&lt;/p&gt;



&lt;p&gt;Things are made more complicated for both because there are many steps involved in getting them to you, and these steps can involve many different companies, technologies, risks etc.  All these steps need to link together in an unbroken chain, hence the name &lt;em&gt;cool chain&lt;/em&gt;.  It doesn’t matter if the milk is kept refrigerated at the dairy farm, in the tanker, in the shop and in your fridge if it’s kept in an unrefrigerated warehouse along the way.&lt;/p&gt;



&lt;figure&gt;&lt;img width=&quot;640&quot; height=&quot;427&quot; data-attachment-id=&quot;6072&quot; data-permalink=&quot;https://randomtechthoughts.blog/2026/05/25/the-cool-chain-of-data/milk_churns_on_stand_hollybed_street_-_geograph-org-uk_-_833701/&quot; data-orig-file=&quot;https://randomtechthoughts.blog/wp-content/uploads/2026/05/milk_churns_on_stand_hollybed_street_-_geograph.org_.uk_-_833701.jpg&quot; data-orig-size=&quot;640,427&quot; data-comments-opened=&quot;1&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;8&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;Canon EOS 350D DIGITAL&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;1212318476&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;24&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;400&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0.00625&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}&quot; data-image-title=&quot;Milk_churns_on_stand,_Hollybed_Street_-_geograph.org.uk_-_833701&quot; data-image-description data-image-caption data-large-file=&quot;https://randomtechthoughts.blog/wp-content/uploads/2026/05/milk_churns_on_stand_hollybed_street_-_geograph.org_.uk_-_833701.jpg?w=640&quot; alt data-orig-srcset=&quot;https://randomtechthoughts.blog/wp-content/uploads/2026/05/milk_churns_on_stand_hollybed_street_-_geograph.org_.uk_-_833701.jpg 640w, https://randomtechthoughts.blog/wp-content/uploads/2026/05/milk_churns_on_stand_hollybed_street_-_geograph.org_.uk_-_833701.jpg?w=150 150w, https://randomtechthoughts.blog/wp-content/uploads/2026/05/milk_churns_on_stand_hollybed_street_-_geograph.org_.uk_-_833701.jpg?w=300 300w&quot; src=&quot;https://randomtechthoughts.blog/wp-content/uploads/2026/05/milk_churns_on_stand_hollybed_street_-_geograph.org_.uk_-_833701.jpg&quot;&gt;&lt;figcaption&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://commons.wikimedia.org/wiki/File:Milk_churns_on_stand,_Hollybed_Street_-_geograph.org.uk_-_833701.jpg&quot;&gt;Photo&lt;/a&gt; by Bob Embleton, under &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://creativecommons.org/licenses/by-sa/2.0/deed.en&quot;&gt;Creative Commons Attribution-Share Alike Generic Licence 2.0&lt;/a&gt;&lt;br&gt;&lt;strong&gt;20 gallons of unpasteurised sales data&lt;/strong&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;A cool chain is also a useful metaphor for data pipelines (&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://randomtechthoughts.blog/2020/10/14/mental-models-for-data-processing/&quot;&gt;I’ve written about other metaphors elsewhere&lt;/a&gt;).  Data usually goes through a series of steps that transform it into some desired state, similar to the many steps involved in getting milk from farm to fridge.&lt;/p&gt;



&lt;p&gt;As soon as a step is defective – letting the milk or data go bad in some way – that’s often it.  You can’t unspoil the milk or easily fix all data problems.  If there are problems with the data pipeline, often the best you can hope for is spotting problems as soon as they happen, to minimise the amount of data that has gone off.&lt;/p&gt;



&lt;p&gt;That leads to another issue: How confident are you that you can detect problems?  Are you doing the equivalent of merely looking at the milk, or are you smelling it or even checking its chemical composition?  You might be processing data that has came from elsewhere.  Before you go to the trouble of doing lots of processing, have you checked its quality?  How much can you trust the earlier stages of the cool chain?&lt;/p&gt;



&lt;p&gt;So far I’ve been talking about the data engineering kinds of data processing, but cool chain type thinking also applies to the more statistics kind of data processing.  There are ways to summarise data where the output is only as strong as the weakest link, similar to worrying about the least cool step of the cool chain.  This is things like how many decimal places can be in the answer if there are several steps of multiplication, division etc.&lt;/p&gt;



&lt;p&gt;This has implications for things like when you round numbers e.g. to the nearest 1 decimal place, when you &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://randomtechthoughts.blog/2021/02/09/the-compounding-value-of-information/&quot;&gt;throw away values if they represent groups of people that are small enough to hit data privacy issues&lt;/a&gt; etc.  If possible, you should round values, apply data privacy filters etc. as late as possible.  Stretching the analogy a bit, they correspond to a relatively warm step in the cool chain, in that they define the maximum quality of the output regardless of what steps follow and how cool they are.&lt;/p&gt;



&lt;p&gt;For example, if I have numbers that I need to sum to 1 decimal place, I could round each number to 1 decimal place and then add them.  This would guarantee that the answer is to 1 decimal place, but it would be less accurate than if I add them unrounded and then round the sum.&lt;/p&gt;



&lt;p&gt;If we take 9 lots of the value 0.11:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;0.11 + 0.11 + 0.11 + 0.11 + 0.11 + 0.11 + 0.11 + 0.11 + 0.11 = 0.99 -&amp;gt; round to 1.0&lt;/li&gt;



&lt;li&gt;0.11 -&amp;gt; round to 0.1 -&amp;gt; 0.1 + … + 0.1 = 0.9&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;There is a 10% difference between the two answers, and I would argue that this is because the second answer is incorrect by 10%.&lt;/p&gt;



&lt;p&gt;Thinking about your data processing as a cool chain, whether that’s data engineering or statistics, could help you design it better and assess the quality of the data it produces in a cost-effective way.&lt;/p&gt;</summary><author><name>Bob</name></author><source gr:stream-id="feed/https://randomtechthoughts.blog/feed/"><id>tag:google.com,2005:reader/feed/https://randomtechthoughts.blog/feed/</id><title type="html">Random Tech Thoughts</title><link rel="alternate" href="https://randomtechthoughts.blog" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779719585000"><id gr:original-id="https://medium.com/p/121940dcd79c">tag:google.com,2005:reader/item/000008a600000020</id><category term="ai-agent"></category><category term="agentic-ai"></category><category term="content-creation"></category><category term="ai-pipelines"></category><title type="html">You Don’t Need More AI Tools. You Need a Pipeline That Actually Pays.</title><published>2026-05-25T14:33:05Z</published><updated>2026-05-25T14:33:05Z</updated><link rel="alternate" href="https://sajithatharaka.medium.com/you-dont-need-more-ai-tools-you-need-a-pipeline-that-actually-pays-121940dcd79c?source=rss-3af8e7cc568a------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://sajithatharaka.medium.com/you-dont-need-more-ai-tools-you-need-a-pipeline-that-actually-pays-121940dcd79c?source=rss-3af8e7cc568a------2&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://cdn-images-1.medium.com/max/1024/1*OOBob2FFgdkEhi844xbQKA.png&quot; width=&quot;1024&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Most creators have ten tools and zero systems. Here is how to fix that.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://sajithatharaka.medium.com/you-dont-need-more-ai-tools-you-need-a-pipeline-that-actually-pays-121940dcd79c?source=rss-3af8e7cc568a------2&quot;&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;&lt;/div&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="1779712203000"><id gr:original-id="https://qualityremarks.com/?p=6802">tag:google.com,2005:reader/item/00000463000004be</id><category term="Software Testing"></category><title type="html">Checking Isn’t Testing. Soon It Won’t Be Employment Either</title><published>2026-05-25T12:30:03Z</published><updated>2026-05-25T12:30:03Z</updated><link rel="alternate" href="https://qualityremarks.com/checking-isnt-testing-soon-it-wont-be-employment-either/" type="text/html"></link><summary type="html">&lt;p&gt;The debate in the software testing industry over “checking versus testing“ has always annoyed the right people. The ones who say it’s just semantics. The ones who say it is elitist. The ones who say normal people don’t care about a “distinction without a difference”.&lt;/p&gt;



&lt;p&gt;I mean, I get it, nobody likes being told that the thing they’ve been calling testing is the equivalent of a green check, but that distinction is about to become an economic reality that most testers won’t survive.&lt;/p&gt;



&lt;p&gt;And the sad part won’t be that AI is taking that work, it’ll be that so many testers were told by the “anti-checking” crew that what they were doing was testing.&lt;/p&gt;



&lt;div&gt;
&lt;div&gt;&lt;div&gt;
&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.satisfice.com/download/elements-of-excellent-testing&quot; rel=&quot; noreferrer noopener&quot;&gt;&lt;img width=&quot;640&quot; height=&quot;537&quot; data-recalc-dims=&quot;1&quot; fetchpriority=&quot;high&quot; decoding=&quot;async&quot; data-attachment-id=&quot;6805&quot; data-permalink=&quot;https://qualityremarks.com/checking-isnt-testing-soon-it-wont-be-employment-either/screenshot-2026-05-25-at-10-40-40-2/&quot; data-orig-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-10.40.40-1.png?fit=1502%2C1260&amp;amp;quality=20&amp;amp;ssl=1&quot; data-orig-size=&quot;1502,1260&quot; data-comments-opened=&quot;1&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}&quot; data-image-title=&quot;Screenshot 2026-05-25 at 10.40.40&quot; data-image-description data-image-caption data-large-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-10.40.40-1.png?fit=640%2C537&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/Screenshot-2026-05-25-at-10.40.40-1.png?resize=1024%2C859&amp;amp;quality=20&amp;amp;ssl=1 1024w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-10.40.40-1.png?resize=300%2C252&amp;amp;quality=20&amp;amp;ssl=1 300w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-10.40.40-1.png?resize=768%2C644&amp;amp;quality=20&amp;amp;ssl=1 768w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-10.40.40-1.png?w=1502&amp;amp;quality=20&amp;amp;ssl=1 1502w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-10.40.40-1.png?w=1280&amp;amp;quality=20 1280w&quot; src=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-10.40.40-1.png?w=1502&amp;amp;quality=20&amp;amp;ssl=1&quot;&gt;&lt;/a&gt;&lt;figcaption&gt;&lt;em&gt;RST: Elements of Excellent Testing&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;



&lt;div&gt;
&lt;p&gt;Let’s face it: AI can already do checking.&lt;/p&gt;



&lt;p&gt;Not perfectly. Not without some risk. But well enough to replace a great deal of the current population in our business. It doesn’t even need to be excellent. &lt;/p&gt;



&lt;p&gt;It only needs to become cheaper, faster, and plausible enough to kick the teeth in of a large part of the software testing job market.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Once that problem gets close to being solved (a problem being worked on RIGHT NOW by your friends in the test tool industry), those jobs are going away and not coming back.&lt;/p&gt;



&lt;p&gt;And a big part of why they aren’t coming back is because that money is moving.&lt;/p&gt;



&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Research and Markets values the AI model evaluation market at $2.36 billion in 2026 and forecasts it to reach $6.24 billion by 2030, with a 27.5 percent compound annual growth rate. &lt;/p&gt;



&lt;p&gt;The market described in that report includes model validation, monitoring, benchmarking, compliance and governance, trending towards continuous validation, bias and fairness auditing,  and explainable AI assessments.&lt;/p&gt;
&lt;/div&gt;



&lt;div&gt;
&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.researchandmarkets.com/reports/6231841/ai-model-evaluation-platform-market-report?utm_source=GNE&amp;amp;utm_medium=PressRelease&amp;amp;utm_code=hlz5l3&amp;amp;utm_campaign=2223216+-+AI+Model+Evaluation+Platform+Market+Research+Report+2026%3a+AWS%2c+Google%2c+Microsoft+and+IBM+Set+Industry+Standards+for+Performance+and+Reliability+-+Long-term+Forecast+to+2030+and+2035&amp;amp;utm_exec=chdomsai&quot; rel=&quot; noreferrer noopener&quot;&gt;&lt;img width=&quot;600&quot; height=&quot;400&quot; data-recalc-dims=&quot;1&quot; decoding=&quot;async&quot; data-attachment-id=&quot;6806&quot; data-permalink=&quot;https://qualityremarks.com/checking-isnt-testing-soon-it-wont-be-employment-either/image-67/&quot; data-orig-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-5.png?fit=600%2C400&amp;amp;quality=20&amp;amp;ssl=1&quot; data-orig-size=&quot;600,400&quot; data-comments-opened=&quot;1&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}&quot; data-image-title=&quot;image&quot; data-image-description data-image-caption data-large-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-5.png?fit=600%2C400&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-5.png?w=600&amp;amp;quality=20&amp;amp;ssl=1 600w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-5.png?resize=300%2C200&amp;amp;quality=20&amp;amp;ssl=1 300w&quot; src=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/image-5.png?w=600&amp;amp;quality=20&amp;amp;ssl=1&quot;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;The irony of all this is that this should have been the testers time to shine. Who should be better placed to test complex systems that behave unpredictably, depend on data, interact with humans, produce variable outputs, degrade over time, and fail in ways that are subtle, contextual, and expensive?&lt;/p&gt;



&lt;p&gt;Testers!&lt;/p&gt;



&lt;p&gt;Testers are investigators. Testers are system thinkers. Testers are people who understand that risk emerges from relationships between the system, the user, the environment, the business, the data, and time.&lt;/p&gt;



&lt;p&gt;That’s why the “checking versus testing” argument was never about vocabulary, it was asking permission to stop thinking. If you define testing as checking, then AI is your competitor. If you define testing as skilled investigation, AI is a tool. And it only gets worse for the checking business from here.&lt;/p&gt;



&lt;div&gt;
&lt;div&gt;
&lt;p&gt;A &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://venturebeat.com/orchestration/ai-agents-are-quietly-generating-chaos-engineering-failures-enterprises-dont-track-yet&quot;&gt;VentureBeat&lt;/a&gt; article on AI agents and chaos engineering describes a category of incident enterprises are not tracking well yet: autonomous agents taking technically reasonable actions from incomplete context that cause cascading problems in their infrastructure. &lt;/p&gt;



&lt;p&gt;The article gives examples of agents restarting services, rerouting traffic, scaling resources, or modifying configurations in response to anomalies. In isolation, the action may make sense. &lt;/p&gt;
&lt;/div&gt;



&lt;div&gt;
&lt;figure&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://venturebeat.com/orchestration/ai-agents-are-quietly-generating-chaos-engineering-failures-enterprises-dont-track-yet&quot; rel=&quot; noreferrer noopener&quot;&gt;&lt;img width=&quot;640&quot; height=&quot;584&quot; data-recalc-dims=&quot;1&quot; decoding=&quot;async&quot; data-attachment-id=&quot;6814&quot; data-permalink=&quot;https://qualityremarks.com/checking-isnt-testing-soon-it-wont-be-employment-either/screenshot-2026-05-25-at-12-43-12/&quot; data-orig-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-12.43.12.png?fit=958%2C874&amp;amp;quality=20&amp;amp;ssl=1&quot; data-orig-size=&quot;958,874&quot; data-comments-opened=&quot;1&quot; data-image-meta=&quot;{&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}&quot; data-image-title=&quot;Screenshot 2026-05-25 at 12.43.12&quot; data-image-description data-image-caption data-large-file=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-12.43.12.png?fit=640%2C584&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/Screenshot-2026-05-25-at-12.43.12.png?w=958&amp;amp;quality=20&amp;amp;ssl=1 958w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-12.43.12.png?resize=300%2C274&amp;amp;quality=20&amp;amp;ssl=1 300w, https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-12.43.12.png?resize=768%2C701&amp;amp;quality=20&amp;amp;ssl=1 768w&quot; src=&quot;https://i0.wp.com/qualityremarks.com/wp-content/uploads/2026/05/Screenshot-2026-05-25-at-12.43.12.png?w=958&amp;amp;quality=20&amp;amp;ssl=1&quot;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;In the actual system state, with dependencies under pressure and other teams making changes, the action becomes a chaos event you can’t “check”.&lt;/p&gt;



&lt;p&gt;Which brings me back to my point: most testers will not be laid off because AI is too smart. They will be laid off because they accepted a stupid definition of their own craft by people who don’t even work in our business!&lt;/p&gt;



&lt;p&gt;The “checking versus testing” debate is dead. Bury it next to “best practices” and whatever has become of “shift left”.  AI gets checking and testers get the future. &lt;/p&gt;



&lt;p&gt;Layoffs in testing have only been nibbling round the edges, so take a class in &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://rapid-software-testing.com/&quot; rel=&quot;noopener&quot; title&gt;RST&lt;/a&gt; and buckle up, the next leg down is going to be bumpy!&lt;/p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://qualityremarks.com/checking-isnt-testing-soon-it-wont-be-employment-either/&quot;&gt;Checking Isn’t Testing. Soon It Won’t Be Employment Either&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="1779710622000"><id gr:original-id="http://testerninja.wordpress.com/?p=336">tag:google.com,2005:reader/item/0000060c00000015</id><category term="Uncategorized"></category><title type="html">Who’s in your “team”?</title><published>2026-05-25T12:03:42Z</published><updated>2026-05-25T12:03:42Z</updated><link rel="alternate" href="https://testerninja.wordpress.com/2026/05/25/whos-in-your-team/" type="text/html"></link><summary type="html">&lt;p&gt;This based on my personal thoughts. &lt;/p&gt;



&lt;p&gt;Life is great when things are going well. For me that’s I’m doing well at work, family is happy and healthy and I’m able to go to the gym and run. It’s all good. &lt;/p&gt;



&lt;p&gt;The issue comes when things start to get challenging. Maybe  injuries set you back, or family members need help. Or work could have gone better. &lt;/p&gt;



&lt;p&gt;It’s at points like this  it’s handy to have people in your “team” who you can turn too. &lt;br&gt;I’m lucky I have a supportive family (wife and daughter are amazing) I also have a physio in &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/lara-inge-58385460/&quot; rel=&quot;noopener&quot;&gt;Lara&lt;/a&gt; and a life coach in &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.linkedin.com/in/laura-alessi-998164337/&quot; rel=&quot;noopener&quot;&gt;Laura&lt;/a&gt; who help me get back in the game and work through my challenges. I also have trusted colleagues at work who help me on what I need to be doing. &lt;/p&gt;



&lt;p&gt;Some have a mentor to help show them a path and encourage learning and development and reflect back on outcomes and things to try next. This could equally be a boss or a someone outside work that can do this. &lt;/p&gt;



&lt;p&gt;Why does this matter?  &lt;br&gt;For me sometimes you need experts to help you work through and be objective about the things you need to do. They’re not connected by being family so can look at things for what they are.&lt;/p&gt;



&lt;p&gt;So if like me you think it’s useful having a “team” have a think who could be in it. &lt;/p&gt;</summary><author><name>testerninja</name></author><source gr:stream-id="feed/https://testerninja.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/https://testerninja.wordpress.com/feed/</id><title type="html">TestNinja</title><link rel="alternate" href="https://testerninja.wordpress.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779667200000"><id gr:original-id="https://testengineeringnotes.com/posts/2026-05-25-testing-strategies-review/">tag:google.com,2005:reader/item/0000105d0000009c</id><category term="book"></category><category term="testing"></category><category term="Reviews"></category><title type="html">Book Review: Software Testing Strategies</title><published>2026-05-25T00:00:00Z</published><updated>2026-05-25T00:00:00Z</updated><link rel="alternate" href="https://testengineeringnotes.com/posts/2026-05-25-testing-strategies-review/" type="text/html"></link><summary type="html">My insights from &amp;quot;Software Testing Strategies: A Testing Guide for the 2020s&amp;quot; book by Matthew Heusser and Michael Larsen</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="1779654707036"><id gr:original-id="https://www.thegreenreport.blog/?t=1779655149">tag:google.com,2005:reader/item/0000086100000099</id><category term="ai/ml"></category><category term="promptfoo"></category><category term="qa"></category><category term="strategy"></category><title type="html">Test-Retest Reliability: Is Your Rubric Consistent Run-to-Run?</title><published>2026-05-24T20:31:47Z</published><updated>2026-05-24T20:31:47Z</updated><link rel="alternate" href="https://www.thegreenreport.blog/articles/test-retest-reliability-is-your-rubric-consistent-run-to-run/test-retest-reliability-is-your-rubric-consistent-run-to-run.html" type="text/html"></link><summary type="html">QA engineers spend a lot of energy hunting down flaky tests in their code pipelines, but almost no one checks whether their LLM rubric gives the same verdict twice on the...</summary><author><name></name></author><source gr:stream-id="feed/https://www.thegreenreport.blog/resources/xml/feeds.xml"><id>tag:google.com,2005:reader/feed/https://www.thegreenreport.blog/resources/xml/feeds.xml</id><title type="html">The Green Report | Quality Assurance Blog</title><link rel="alternate" href="https://www.thegreenreport.blog/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779580800000"><id gr:original-id="https://www.softwaretester.blog/the-video-of-my-seleniumconf-valencia-talk-is-now-available/">tag:google.com,2005:reader/item/000005f300000081</id><category term="talk"></category><category term="selenium"></category><category term="open source software"></category><title type="html">The video of my SeleniumConf Valencia talk is now available</title><published>2026-05-24T00:00:00Z</published><updated>2026-05-24T00:00:00Z</updated><link rel="alternate" href="https://www.softwaretester.blog/the-video-of-my-seleniumconf-valencia-talk-is-now-available/" type="text/html"></link><summary type="html">&lt;p&gt;Here is the video recording of my SeleniumConf Valencia talk &amp;quot;Reinventing the wheel&amp;quot; about our open source reporting software &amp;quot;Cluecumber&amp;quot;.&lt;/p&gt;
        &lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://www.softwaretester.blog/the-video-of-my-seleniumconf-valencia-talk-is-now-available/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;</summary><author><name></name></author><source gr:stream-id="feed/https://www.softwaretester.blog/blog.rss"><id>tag:google.com,2005:reader/feed/https://www.softwaretester.blog/blog.rss</id><title type="html">Benjamin Bischoff, Test Automation Engineer</title><link rel="alternate" href="https://www.softwaretester.blog/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779546973000"><id gr:original-id="http://dragonsforelevenses.com/?p=329">tag:google.com,2005:reader/item/000004f70000000d</id><category term="leadership"></category><category term="Software"></category><category term="development"></category><category term="teams"></category><category term="agile"></category><category term="agentic"></category><category term="ai"></category><category term="waterfall"></category><category term="organsiation"></category><title type="html">Modern professional software development is more akin to sport than anything else</title><published>2026-05-23T14:36:13Z</published><updated>2026-05-23T14:36:13Z</updated><link rel="alternate" href="https://dragonsforelevenses.com/2026/05/23/modern-professional-software-development-is-more-akin-to-sport-than-anything-else/" type="text/html"></link><summary type="html">&lt;p&gt;For too long we’ve accepted one failed metaphor or another to help define developing software professionally. All models are fallible but the one I believe breaks least often is: software development is a contact team sport. One shared clear goal, smaller milestones to progress to that goal, filled with opportunities for success and failure to learn from and adapt and when on the pitch, it doesn’t matter what your ‘position’ is, you have one responsibility: make your team win.&lt;/p&gt;



&lt;p&gt;John Cutler recently asked “What is a team?” in his post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://cutlefish.substack.com/p/tbm-423-why-defining-teams-is-so&quot;&gt;TBM 423: Why Defining Teams Is So Hard&lt;/a&gt;. What I took from his piece aligns a lot with my experience: organisations are messy. &lt;/p&gt;



&lt;p&gt;We have one very strong source of inspiration for what real teams are, from sport. There are a number of different ‘teams’ in sport. There are examples of individual sports where the ‘team’ exists but is less apparent in direct competition, such as tennis or golf. Formula 1 is an individual sport but which cannot reach the extreme heights of innovation and excellence unless there’s an acceptance that success is impossible without the team around them. Then there’s the sports where the team is in competition together, in real time e.g. football and rugby. &lt;/p&gt;



&lt;p&gt;It is my belief that ‘teams’ which have a shared goal, made up of more than 2 people, operate closer to football and rugby, than F1, golf or tennis. If a team doesn’t see themselves in this way now, making this subtle change in perspective will be transformative.&lt;/p&gt;



&lt;p&gt;As a Manchester City fan, the announcement that Pep Guardiola is leaving is a hard one to process but it does instigate a moment to reflect. Pep’s Barcelona team is generally accepted to be the best football team created in the modern era. His strong beliefs, derived from his inspiration Johan Cruyff’s Total Football, applied to a squad of exceptional players, with one standout legend in Lionel Messi. This team dominated football matches from start to finish. I still don’t believe I’ve seen a better single performance from a football team than their 3-0 victory over Manchester United in the Champions League final. &lt;/p&gt;



&lt;p&gt;It wasn’t until he became Manchester City manager that I started to delve deeper into his methods. Over the 10 years of his tenure as manager, I’ve watched countless press conferences, documentaries and interviews, attended more games home and away than my bank balance would like to admit and watched even more on TV. One thing about Guardiola stood out more for me than his tactics or beliefs.&lt;/p&gt;



&lt;h2&gt;The Pep Guardiola Effect&lt;/h2&gt;



&lt;p&gt;It’s easy to see why Pep’s teams do so well. Without going into too much detail, Pep’s teams have a number of very specific quality attributes: the team moves up and down the pitch with the ball; when the ball is lost the team have to get it back immediately; the individual skill level of every player is incredible to enable them to maintain the ball under intense pressure; there’s always a free player to pass to. It’s simple when written down, but only Pep has really been able to implement it consistently, season after season, at 3 major clubs. I asked myself why and I think I found it: responsibility.&lt;/p&gt;



&lt;p&gt;The Pep Guardiola effect is evident most in the interviews and press conferences he does when City have lost or even more so, when they’ve won but not played well. He doesn’t hold his players accountable, he takes responsibility and makes the players responsible.&lt;/p&gt;



&lt;p&gt;Accountability is often displayed in questions focussed on the past: why did this happen, why didn’t you do this?&lt;/p&gt;



&lt;p&gt;Responsibility is best displayed in questions focussed on the future: what can I do differently, how can we be better?&lt;/p&gt;



&lt;p&gt;Pep helps them be responsible for themselves, to be their best but more importantly, be responsible to their team, the fans and the club. Fear can drive you in short bursts, but responsibility is the internal fire that powers us. Pep is able to build incredible levels of responsibility into the players in his teams. That responsibility blurs the once static understanding of positions: goalkeepers just stop the ball, defenders stop attacks, midfielders collect the ball, wingers get the ball to the strikers, strikers score. This is now and forever more no longer true. In a Pep team, the goalkeeper has to play football as well as midfielder, strikers have to be able to retrieve the ball in an attacking position as well as any defender in their own penalty area. This responsibility, a responsibility to work for the team with a single shared goal, to win every game. This is what creates the virtuous feedback loop for excellence. That feedback loop or continuous learning is a relentless pursuit of the perfection of implementation of the beliefs. Some of the most successful players at Manchester City joined the club and were pretty terrible in their first season. But they stayed. They believed in themselves. They improved. Until Erling Haaland it’s arguable that Pep’s City had never signed a complete superstar. Every other player who turned out to be world class, became world class at City. But how can Pep build that level of responsibility into people?&lt;/p&gt;



&lt;h2&gt;The Pep Guardiola Approach&lt;/h2&gt;



&lt;p&gt;Pep thinks in systems. The pitch is a constraint and there are many others. He doesn’t accept all of those constraints as immovable, but he accepts them in the moment. That acceptance gives Pep a canvas to push those constraints to their absolute limits. There is one constraint he embraces more than any other: that his team is made of human beings. Humans have feelings, they have lives, they have limitations. We are all flawed. Pep is flawed. Pep knows this and he does one thing I don’t think I’ve seen anyone else do close to as well as him, other than Jurgen Klopp: he cares about those players as humans. Not as an extended family, there are clear boundaries of responsibility in place. But he cares about all of them as individuals. He signs players who he believes have a desire to reach the very top of their potential. He gets them there not through fear but by giving a damn about the success of each of them. This can’t be faked. Humans have excellent instincts to detect fakeness. Maybe not initially, but when it really matters. It is impossible for Pep to turn huge potential into world class, season after season, unless he is authentic. And you can see it in his behaviour. &lt;/p&gt;



&lt;p&gt;We’ve all been told how psychological safety is important for excellence. Excellence is an emergent property of the ability to adapt following failure. Pep is able to build such a high level of trust in him from his team, that despite intense pressure, individuals feel the responsibility to take the circumstances, not the moments, the circumstances and lift themselves and each other to improve, over and over and over again.&lt;/p&gt;



&lt;p&gt;People have written about this. Countless white papers of research, conference talks and many a book. One in particular Radical Candour. &lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;“Care personally for your colleagues while also challenging them directly.’”&lt;/p&gt;
&lt;cite&gt;Matt Rutherford&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;The feeling of being cared for can only come from someone else’s action. Saying you care for someone only survives if you behave like it. Not perfectly, that’s not possible, but proportionally more often than not. It’s in the moments of highest stress when that care has to come to the fore. No one messes up on purpose. Football is a complex game, with a huge surface area for mistakes. Software development is no different. But excellence can only come from learning from those mistakes and to learn from those mistakes, the people who could scorn you, who could hold you accountable, have opportunities to demonstrate their level of care by accepting their responsibility in the failure or offering words of encouragement and reassurance. &lt;/p&gt;



&lt;p&gt;And this is why that sustained level of care is necessary. Pep has said himself on a number of occasions that he overstepped challenging directly, during or after a game. You can watch some of the changing room exchanges online. As an outsider they’re uncomfortable to watch. But in that group, the players know it’s not personal, it’s just frustration. And because that frustration doesn’t boil over into accountability, even in this most intense of environments, players can feel safe that tomorrow, when the frustration is gone, responsibility kicks in again.&lt;/p&gt;



&lt;p&gt;Almost everyone I’ve heard talk about this book falls into the ‘fake care’ problem. They fail to understand that the success of challenging directly is directly proportional to the amount of care the person receiving the feedback feels they have from the person providing it. These people will only be involved in creating and achieving genuine excellence, through luck.&lt;/p&gt;



&lt;p&gt;Excellence in the world of AI&lt;/p&gt;



&lt;p&gt;As building software becomes even more commoditised, everyone gets the lift up. Pep changed football, now every club, from junior to senior, try to emulate what Pep achieved, not because they solved that problem themselves, but because they’re standing on the shoulders of a giant. If everyone tries to play the same way you have two options for success: do it better than everyone else or be better than everyone else. &lt;/p&gt;



&lt;p&gt;The organisations and teams of any reasonable scale will succeed in the era of AI by playing Pep’s football. Blur roles, build individual excellence, one shared problem to solve but solve it together. But that’s not enough, you need to be better. Being better is a tomorrow problem. Tomorrow can only be better if people take responsibility for it. &lt;br&gt;&lt;br&gt;This isn’t about reading a book and looking for a recipe or process to follow. You’ve already failed if you do. Now as humans more than ever we have to stand out. That means looking inside ourselves and finding the humanity. That’s going to be the differentiator. You don’t have to completely overhaul an org overnight, you don’t need to do an all-hands. You start tomorrow by changing you. Take the next situation you’re perceived to be a leader for and demonstrate care, demonstrate responsibility. If it’s an incident review, look forward and find a path together. If it’s slipping schedule, look forward and find a path together. If it’s a feature that’s not living up to expectations, look forward and find a path together. Not in a slide deck or slack message but around a desk or in an online call, with the problem in front of you. Start together, end together. Drag each other over the finish line. &lt;/p&gt;



&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;clear: both&quot;&gt;&lt;/p&gt;&lt;p data-bqr-info=&quot;attachment&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://dragonsforelevenses.com/wp-content/uploads/2026/05/pep-guardiola-waving-goodbye.jpg&quot; alt=&quot;pep-guardiola-waving-goodbye&quot;&gt;&lt;/p&gt;</summary><author><name>dragonsforelevenses</name></author><source gr:stream-id="feed/https://dragonsforelevenses.com/feed/"><id>tag:google.com,2005:reader/feed/https://dragonsforelevenses.com/feed/</id><title type="html">Dragons for Elevenses</title><link rel="alternate" href="https://dragonsforelevenses.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779537115000"><id gr:original-id="https://medium.com/p/cc4f7deaf74a">tag:google.com,2005:reader/item/0000091b00000071</id><category term="programming"></category><category term="software-testing"></category><category term="typescript"></category><category term="coding"></category><category term="test-automation"></category><title type="html">Data Driven API Testing in Playwright TypeScript: Part 1</title><published>2026-05-23T11:51:55Z</published><updated>2026-05-23T11:51:55Z</updated><link rel="alternate" href="https://levelup.gitconnected.com/data-driven-api-testing-in-playwright-typescript-part-1-cc4f7deaf74a?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/data-driven-api-testing-in-playwright-typescript-part-1-cc4f7deaf74a?source=rss-d56167afca7d------2&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://cdn-images-1.medium.com/max/1920/1*Jhf3Ixz1Yo9FZiPxz-exmA.jpeg&quot; width=&quot;1920&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Learn how to implement data-driven API testing in Playwright with TypeScript using static test data and reusable tests.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://levelup.gitconnected.com/data-driven-api-testing-in-playwright-typescript-part-1-cc4f7deaf74a?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="1779537115000"><id gr:original-id="https://medium.com/p/cc4f7deaf74a">tag:google.com,2005:reader/item/00000a8300000070</id><category term="programming"></category><category term="software-testing"></category><category term="typescript"></category><category term="coding"></category><category term="test-automation"></category><title type="html">Data Driven API Testing in Playwright TypeScript: Part 1</title><published>2026-05-23T11:51:55Z</published><updated>2026-05-23T11:51:55Z</updated><link rel="alternate" href="https://levelup.gitconnected.com/data-driven-api-testing-in-playwright-typescript-part-1-cc4f7deaf74a?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/data-driven-api-testing-in-playwright-typescript-part-1-cc4f7deaf74a?source=rss-d56167afca7d------2&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://cdn-images-1.medium.com/max/1920/1*Jhf3Ixz1Yo9FZiPxz-exmA.jpeg&quot; width=&quot;1920&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Learn how to implement data-driven API testing in Playwright with TypeScript using static test data and reusable tests.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://levelup.gitconnected.com/data-driven-api-testing-in-playwright-typescript-part-1-cc4f7deaf74a?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="1779479440000"><id gr:original-id="https://medium.com/p/07e79898d55a">tag:google.com,2005:reader/item/0000091b00000070</id><category term="writing"></category><category term="work"></category><category term="short-story"></category><category term="humor"></category><category term="agile"></category><title type="html">The Agile Circus</title><published>2026-05-22T19:50:40Z</published><updated>2026-05-22T19:50:40Z</updated><link rel="alternate" href="https://medium.com/illumination/the-agile-circus-07e79898d55a?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://medium.com/illumination/the-agile-circus-07e79898d55a?source=rss-d56167afca7d------2&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://cdn-images-1.medium.com/max/2600/0*gLRLKGAe4l1r9-b1&quot; width=&quot;6016&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;A humorous story exposing fake Agile culture, endless meetings, toxic leadership, and workplace chaos in a modern corporate team.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://medium.com/illumination/the-agile-circus-07e79898d55a?source=rss-d56167afca7d------2&quot;&gt;Continue reading on ILLUMINATION »&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="1779479440000"><id gr:original-id="https://medium.com/p/07e79898d55a">tag:google.com,2005:reader/item/00000a830000006f</id><category term="writing"></category><category term="work"></category><category term="short-story"></category><category term="humor"></category><category term="agile"></category><title type="html">The Agile Circus</title><published>2026-05-22T19:50:40Z</published><updated>2026-05-22T19:50:40Z</updated><link rel="alternate" href="https://medium.com/illumination/the-agile-circus-07e79898d55a?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://medium.com/illumination/the-agile-circus-07e79898d55a?source=rss-d56167afca7d------2&quot;&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://cdn-images-1.medium.com/max/2600/0*gLRLKGAe4l1r9-b1&quot; width=&quot;6016&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;A humorous story exposing fake Agile culture, endless meetings, toxic leadership, and workplace chaos in a modern corporate team.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://medium.com/illumination/the-agile-circus-07e79898d55a?source=rss-d56167afca7d------2&quot;&gt;Continue reading on ILLUMINATION »&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="1779424714000"><id gr:original-id="https://scrolltest.com/selenium-vs-playwright-2026-benchmark-data/">tag:google.com,2005:reader/item/00000444000001d4</id><category term="Selenium"></category><category term="Test Automation"></category><category term="Testing"></category><category term="agile test automation"></category><category term="API Testing with Playwright"></category><category term="Automation Testing Framework Using Selenium"></category><category term="benchmark"></category><category term="migration"></category><title type="html">Selenium vs Playwright 2026: The Benchmark Data Every Migration Team Needs</title><published>2026-05-22T04:38:34Z</published><updated>2026-05-22T04:38:34Z</updated><link rel="alternate" href="https://scrolltest.com/selenium-vs-playwright-2026-benchmark-data/" type="text/html"></link><summary type="html">&lt;p&gt;Playwright now leads Selenium by 23x in npm downloads. See real benchmark data, migration traps, and an 8-week roadmap for teams considering the switch in 2026.&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com/selenium-vs-playwright-2026-benchmark-data/&quot;&gt;Selenium vs Playwright 2026: The Benchmark Data Every Migration Team Needs&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com&quot;&gt;Software Testing &amp;amp; Automation&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Promode</name></author><source gr:stream-id="feed/https://scrolltest.com/feed/"><id>tag:google.com,2005:reader/feed/https://scrolltest.com/feed/</id><title type="html">Software Testing &amp; Automation</title><link rel="alternate" href="https://scrolltest.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779424455000"><id gr:original-id="https://scrolltest.com/n8n-qa-automation-no-code-playwright-pipelines/">tag:google.com,2005:reader/item/00000444000001d3</id><category term="DevOps"></category><category term="Test Automation"></category><category term="Testing"></category><category term="API Testing with Playwright"></category><category term="CI/CD"></category><category term="n8n"></category><category term="no-code automation"></category><category term="QA pipeline"></category><title type="html">n8n for QA Automation: Build No-Code CI Pipelines That Run Playwright Tests</title><published>2026-05-22T04:34:15Z</published><updated>2026-05-22T04:34:15Z</updated><link rel="alternate" href="https://scrolltest.com/n8n-qa-automation-no-code-playwright-pipelines/" type="text/html"></link><summary type="html">&lt;p&gt;Learn how QA teams can build no-code CI pipelines with n8n and Playwright. Step-by-step tutorial covering triggers, JUnit parsing, Slack alerts, and Jira bug creation without writing YAML.&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com/n8n-qa-automation-no-code-playwright-pipelines/&quot;&gt;n8n for QA Automation: Build No-Code CI Pipelines That Run Playwright Tests&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com&quot;&gt;Software Testing &amp;amp; Automation&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Promode</name></author><source gr:stream-id="feed/https://scrolltest.com/feed/"><id>tag:google.com,2005:reader/feed/https://scrolltest.com/feed/</id><title type="html">Software Testing &amp; Automation</title><link rel="alternate" href="https://scrolltest.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779422400000"><id gr:original-id="https://glebbahmutov.com/blog/dom-state-clarity-with-cy-depends/">tag:google.com,2005:reader/item/0000097e00000274</id><category term="process"></category><category term="cypress"></category><title type="html">DOM State Clarity With cy.depends Command</title><published>2026-05-22T04:00:00Z</published><updated>2026-05-22T04:00:00Z</updated><link rel="alternate" href="https://glebbahmutov.com/blog/dom-state-clarity-with-cy-depends/" type="text/html"></link><summary type="html">&lt;p&gt;Imagine a simple web application scenario: you click on a button. App tries to load some data. The data might load, or the backend might return an error. You write a Cypress test:&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;cy.&lt;span&gt;visit&lt;/span&gt;(&lt;span&gt;&amp;apos;cypress/fetch-fails-sometimes.html&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;cy.&lt;span&gt;contains&lt;/span&gt;(&lt;span&gt;&amp;apos;button&amp;apos;&lt;/span&gt;, &lt;span&gt;&amp;apos;Fetch data&amp;apos;&lt;/span&gt;).&lt;span&gt;click&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span&gt;cy.&lt;span&gt;contains&lt;/span&gt;(&lt;span&gt;&amp;apos;#data&amp;apos;&lt;/span&gt;, &lt;span&gt;&amp;apos;Fetched data: &amp;quot;List of items&amp;quot;&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;The test is green, but there are a couple of downsides.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;test is slow&lt;/strong&gt; Loading the data might take a while. In our case it takes almost 8 seconds, so your test must wait.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/fetch.png&quot; alt=&quot;The test is slow&quot;&gt;&lt;/p&gt;&lt;ol start=&quot;2&quot;&gt;&lt;li&gt;&lt;strong&gt;mismatch in speeds&lt;/strong&gt; Network call might fail and the test times out waiting for the &lt;code&gt;#data&lt;/code&gt; element. The network error itself is fast: it returns 500 status code after only half a second. But since the successful data load is slow, we have to keep waiting and waiting for &lt;code&gt;#data&lt;/code&gt; element.&lt;/li&gt;&lt;/ol&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;span&gt;7&lt;/span&gt;&lt;br&gt;&lt;span&gt;8&lt;/span&gt;&lt;br&gt;&lt;span&gt;9&lt;/span&gt;&lt;br&gt;&lt;span&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;it&lt;/span&gt;(&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;handles occasional backend error&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;// longer command timeout to allow for slow data load&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;  { &lt;span&gt;defaultCommandTimeout&lt;/span&gt;: &lt;span&gt;15_000&lt;/span&gt; },&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;() =&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    cy.&lt;span&gt;visit&lt;/span&gt;(&lt;span&gt;&amp;apos;cypress/fetch-fails-sometimes.html&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;    cy.&lt;span&gt;contains&lt;/span&gt;(&lt;span&gt;&amp;apos;button&amp;apos;&lt;/span&gt;, &lt;span&gt;&amp;apos;Fetch data&amp;apos;&lt;/span&gt;).&lt;span&gt;click&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span&gt;    cy.&lt;span&gt;contains&lt;/span&gt;(&lt;span&gt;&amp;apos;#data&amp;apos;&lt;/span&gt;, &lt;span&gt;&amp;apos;Fetched data: &amp;quot;List of items&amp;quot;&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;  }&lt;/span&gt;&lt;br&gt;&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/error-timing.png&quot; alt=&quot;The failed test waited 30x longer than necessary&quot;&gt;&lt;/p&gt;&lt;ol start=&quot;3&quot;&gt;&lt;li&gt;&lt;strong&gt;errors are not observed&lt;/strong&gt; The test does not report the &amp;quot;error&amp;quot; element shown. Instead the test times out looking for the &amp;quot;#data&amp;quot; element. It would be nice to write a test like this:&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;click on the button&lt;/li&gt;&lt;li&gt;wait for the &amp;quot;#data&amp;quot; element to appear and check its text&lt;/li&gt;&lt;li&gt;while waiting, if the &amp;quot;#error&amp;quot; element appears, fail the test with a clear message&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Of course, we could rewrite the test to observe the network call - but not every action has a clear observable &amp;quot;single point&amp;quot;. Instead many tests have to consider several possible outcomes at once.&lt;/p&gt;&lt;h2&gt;&lt;span id=&quot;article-XptPcoEBhyFOYPHndY8ZaO_mtCI-dom-states&quot;&gt;DOM states&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;In our application, the app is simple. From the starting state (before we click the button), the app goes into &amp;quot;loading data&amp;quot; state, followed by the &amp;quot;successful data load&amp;quot; OR &amp;quot;failed data load&amp;quot; states. We can ignore the &amp;quot;loading data&amp;quot; state, since our app does not really show anything observable on the page (and we ignore the network call for now). At the end of the loading state, the app might show an element with ID &amp;quot;data&amp;quot; or an element with ID &amp;quot;error&amp;quot;. Nothing else (unless things go really wrong)&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/error-element.png&quot; alt=&quot;The #error element on the page&quot;&gt;&lt;/p&gt;&lt;p&gt;In this blog post, I will show my new query command &lt;code&gt;cy.depends&lt;/code&gt; from the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://github.com/bahmutov/cypress-if&quot;&gt;cypress-if&lt;/a&gt; plugin that lets you consider multiple possible DOM states at once. This command can wait for &lt;em&gt;all&lt;/em&gt; given selectors and then perform actions depending on the first matched selector.&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/state-diagram.png&quot; alt=&quot;cy.depends command can query multiple element selectors at once&quot;&gt;&lt;/p&gt;&lt;p&gt;Let&amp;apos;s write a test and wait simultaneously for success and error states. For now, let&amp;apos;s just print a message for each outcome.&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;cy.&lt;span&gt;contains&lt;/span&gt;(&lt;span&gt;&amp;apos;button&amp;apos;&lt;/span&gt;, &lt;span&gt;&amp;apos;Fetch data&amp;apos;&lt;/span&gt;).&lt;span&gt;click&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;// simply report success or failure&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;cy.&lt;span&gt;depends&lt;/span&gt;({&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#data&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;Data loaded&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#error&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;Failed to load data&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;})&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;When the network load succeeds, we see 2 items logged into the Command Log: the query command waits for &lt;em&gt;all&lt;/em&gt; selectors using &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/Selector_list&quot;&gt;all matching CSS selector&lt;/a&gt;. Once &lt;em&gt;some&lt;/em&gt; elements are found, &lt;code&gt;cy.depends&lt;/code&gt; matches the elements &lt;em&gt;again&lt;/em&gt; to the find the &lt;em&gt;first&lt;/em&gt; individual selector and performs the actions specified in the arguments object. For example, if the value is a string, it simply logs it.&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/depends-success.png&quot; alt=&quot;cy.depends for successful data load&quot;&gt;&lt;/p&gt;&lt;p&gt;Let&amp;apos;s say the network fails. Notice the &lt;code&gt;cy.depends&lt;/code&gt; matched the &lt;code&gt;#error&lt;/code&gt; element and the test finished immediately after the network load. No need to wait for &lt;code&gt;#data&lt;/code&gt; element for 15 seconds when the app is clearly in the &amp;quot;error loading&amp;quot; state.&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/depends-error.png&quot; alt=&quot;cy.depends for failed data load&quot;&gt;&lt;/p&gt;&lt;h2&gt;&lt;span id=&quot;article-XptPcoEBhyFOYPHndY8ZaO_mtCI-handle-each-state&quot;&gt;Handle each state&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;We can print log messages for each state. Or we can fail the test for some states. When the test finds the &amp;quot;#error&amp;quot; element, we want to fail the test immediately, which we can by giving an Error instance.&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;cy.&lt;span&gt;contains&lt;/span&gt;(&lt;span&gt;&amp;apos;button&amp;apos;&lt;/span&gt;, &lt;span&gt;&amp;apos;Fetch data&amp;apos;&lt;/span&gt;).&lt;span&gt;click&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;// report success, fail on error&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;cy.&lt;span&gt;depends&lt;/span&gt;({&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#data&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;Data loaded&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#error&amp;apos;&lt;/span&gt;: &lt;span&gt;new&lt;/span&gt; &lt;span&gt;Error&lt;/span&gt;(&lt;span&gt;&amp;apos;Failed to load data&amp;apos;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span&gt;})&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/throws-error.png&quot; alt=&quot;cy.depends can throw the given Error instance&quot;&gt;&lt;/p&gt;&lt;p&gt;Again, the test is fast and clear. If we see an element matching &lt;code&gt;#error&lt;/code&gt; CSS selector, we want to throw the Error object. We can go beyond simply throwing an error. We could perform custom assertions on the found elements. The &lt;code&gt;cy.depends&lt;/code&gt; command yields the matched selector and found elements to the callback function&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;span&gt;7&lt;/span&gt;&lt;br&gt;&lt;span&gt;8&lt;/span&gt;&lt;br&gt;&lt;span&gt;9&lt;/span&gt;&lt;br&gt;&lt;span&gt;10&lt;/span&gt;&lt;br&gt;&lt;span&gt;11&lt;/span&gt;&lt;br&gt;&lt;span&gt;12&lt;/span&gt;&lt;br&gt;&lt;span&gt;13&lt;/span&gt;&lt;br&gt;&lt;span&gt;14&lt;/span&gt;&lt;br&gt;&lt;span&gt;15&lt;/span&gt;&lt;br&gt;&lt;span&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;cy.&lt;span&gt;contains&lt;/span&gt;(&lt;span&gt;&amp;apos;button&amp;apos;&lt;/span&gt;, &lt;span&gt;&amp;apos;Fetch data&amp;apos;&lt;/span&gt;).&lt;span&gt;click&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span&gt;&lt;span&gt;// do something depending on the matched selector&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;cy.&lt;span&gt;depends&lt;/span&gt;({&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#data&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;data loaded&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#error&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;load error&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;}).&lt;span&gt;then&lt;/span&gt;(&lt;span&gt;(&lt;span&gt;{ selector, elements }&lt;/span&gt;) =&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;if&lt;/span&gt; (selector === &lt;span&gt;&amp;apos;#data&amp;apos;&lt;/span&gt;) {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;expect&lt;/span&gt;(elements, &lt;span&gt;&amp;apos;data element&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;      .&lt;span&gt;to&lt;/span&gt;.&lt;span&gt;have&lt;/span&gt;.&lt;span&gt;length&lt;/span&gt;(&lt;span&gt;1&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;      .&lt;span&gt;and&lt;/span&gt;.&lt;span&gt;to&lt;/span&gt;.&lt;span&gt;have&lt;/span&gt;.&lt;span&gt;text&lt;/span&gt;(&lt;span&gt;&amp;apos;Fetched data: &amp;quot;List of items&amp;quot;&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;  } &lt;span&gt;else&lt;/span&gt; &lt;span&gt;if&lt;/span&gt; (selector === &lt;span&gt;&amp;apos;#error&amp;apos;&lt;/span&gt;) {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;expect&lt;/span&gt;(elements, &lt;span&gt;&amp;apos;error element&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;      .&lt;span&gt;to&lt;/span&gt;.&lt;span&gt;have&lt;/span&gt;.&lt;span&gt;length&lt;/span&gt;(&lt;span&gt;1&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;      .&lt;span&gt;and&lt;/span&gt;.&lt;span&gt;to&lt;/span&gt;.&lt;span&gt;have&lt;/span&gt;.&lt;span&gt;text&lt;/span&gt;(&lt;span&gt;&amp;apos;Fetch failed: Network response was not ok&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;  }&lt;/span&gt;&lt;br&gt;&lt;span&gt;})&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;By the way, if none of the &lt;code&gt;cy.depends&lt;/code&gt; selectors match, the query command times out and the test fails.&lt;/p&gt;&lt;h2&gt;&lt;span id=&quot;article-XptPcoEBhyFOYPHndY8ZaO_mtCI-conditional-actions&quot;&gt;Conditional actions&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Querying multiple states helps solve conditional testing problems without nesting multiple &lt;code&gt;IF/ELSE&lt;/code&gt; paths. Think of &lt;code&gt;cy.depends&lt;/code&gt; as a &lt;code&gt;switch&lt;/code&gt; statement; yes, it could be equivalent to multiple &lt;code&gt;if/else&lt;/code&gt; statements, but having one &lt;code&gt;switch&lt;/code&gt; usually beats multiple branches.&lt;/p&gt;&lt;p&gt;For example, let&amp;apos;s say we have a page with a dialog that might be open, and we always want it closed. If we don&amp;apos;t have a good programmatic way of controlling the dialog (I know, I know, but we are in the real world), then:&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;span&gt;7&lt;/span&gt;&lt;br&gt;&lt;span&gt;8&lt;/span&gt;&lt;br&gt;&lt;span&gt;9&lt;/span&gt;&lt;br&gt;&lt;span&gt;10&lt;/span&gt;&lt;br&gt;&lt;span&gt;11&lt;/span&gt;&lt;br&gt;&lt;span&gt;12&lt;/span&gt;&lt;br&gt;&lt;span&gt;13&lt;/span&gt;&lt;br&gt;&lt;span&gt;14&lt;/span&gt;&lt;br&gt;&lt;span&gt;15&lt;/span&gt;&lt;br&gt;&lt;span&gt;16&lt;/span&gt;&lt;br&gt;&lt;span&gt;17&lt;/span&gt;&lt;br&gt;&lt;span&gt;18&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;it&lt;/span&gt;(&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;closes dialog if open&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;() =&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    cy.&lt;span&gt;visit&lt;/span&gt;(&lt;span&gt;&amp;apos;cypress/close-dialog.html&amp;apos;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;    cy.&lt;span&gt;depends&lt;/span&gt;({&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;apos;dialog[open]&amp;apos;&lt;/span&gt;: &lt;span&gt;(&lt;span&gt;$dialog&lt;/span&gt;) =&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;        cy.&lt;span&gt;wrap&lt;/span&gt;($dialog).&lt;span&gt;find&lt;/span&gt;(&lt;span&gt;&amp;apos;button#close&amp;apos;&lt;/span&gt;).&lt;span&gt;click&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span&gt;      },&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;apos;dialog:hidden&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;dialog is already closed&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;    })&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;    &lt;span&gt;// check if the dialog is open&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;    cy.&lt;span&gt;depends&lt;/span&gt;({&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;apos;dialog[open]&amp;apos;&lt;/span&gt;: &lt;span&gt;new&lt;/span&gt; &lt;span&gt;Error&lt;/span&gt;(&lt;span&gt;&amp;apos;dialog should be closed&amp;apos;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;span&gt;&amp;apos;dialog:not([open])&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;closed dialog&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;    })&lt;/span&gt;&lt;br&gt;&lt;span&gt;  },&lt;/span&gt;&lt;br&gt;&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;img class=&quot;bqrUnknownImgSize&quot; src=&quot;https://glebbahmutov.com/images/cy-depends/dialog-is-closed.png&quot; alt=&quot;Too complicated way of closing a Dialog that might be opened&quot;&gt;&lt;/p&gt;&lt;p&gt;Of course, you can have more than two states, just list the CSS selectors ordered from the most discriminating to the least discriminating to properly determine the correct state.&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;1&lt;/span&gt;&lt;br&gt;&lt;span&gt;2&lt;/span&gt;&lt;br&gt;&lt;span&gt;3&lt;/span&gt;&lt;br&gt;&lt;span&gt;4&lt;/span&gt;&lt;br&gt;&lt;span&gt;5&lt;/span&gt;&lt;br&gt;&lt;span&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;// conditional state depending on the number of items in the list: 3, 2, or 1&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;cy.&lt;span&gt;depends&lt;/span&gt;({&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#fruits li:eq(2)&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;Found 3 items&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#fruits li:eq(1)&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;Found 2 items&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;span&gt;&amp;apos;#fruits li:eq(0)&amp;apos;&lt;/span&gt;: &lt;span&gt;&amp;apos;Found 1 item&amp;apos;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;})&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;Embrace and extinguish the ambiguity by handling every possible page state in your end-to-end tests.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;🎁 Find the &lt;code&gt;cy.depends&lt;/code&gt; query command in my &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://github.com/bahmutov/cypress-if&quot;&gt;cypress-if&lt;/a&gt; plugin.&lt;/p&gt;&lt;/blockquote&gt;</summary><author><name>Gleb Bahmutov</name></author><source gr:stream-id="feed/https://glebbahmutov.com/blog/atom.xml"><id>tag:google.com,2005:reader/feed/https://glebbahmutov.com/blog/atom.xml</id><title type="html">Better world by better software</title><link rel="alternate" href="https://glebbahmutov.com/blog/" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779421259000"><id gr:original-id="https://scrolltest.com/docker-compose-test-automation-playwright-selenium-api-one-file/">tag:google.com,2005:reader/item/00000444000001d2</id><category term="DevOps"></category><category term="Docker"></category><category term="Testing"></category><category term="agile test automation"></category><category term="api testing"></category><category term="API Testing with Playwright"></category><category term="DevOps vs Software Testing"></category><category term="docker-compose zalenium"></category><category term="zalenium selenium grid"></category><title type="html">Docker Compose for Test Automation: One File to Run Playwright, Selenium Grid, and API Tests in 2026</title><published>2026-05-22T03:40:59Z</published><updated>2026-05-22T03:40:59Z</updated><link rel="alternate" href="https://scrolltest.com/docker-compose-test-automation-playwright-selenium-api-one-file/" type="text/html"></link><summary type="html">&lt;p&gt;Run Playwright, Selenium Grid, and API tests from one docker-compose.yml. Production-ready Docker Compose test automation setup for 2026 with health checks and CI/CD.&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com/docker-compose-test-automation-playwright-selenium-api-one-file/&quot;&gt;Docker Compose for Test Automation: One File to Run Playwright, Selenium Grid, and API Tests in 2026&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com&quot;&gt;Software Testing &amp;amp; Automation&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Promode</name></author><source gr:stream-id="feed/https://scrolltest.com/feed/"><id>tag:google.com,2005:reader/feed/https://scrolltest.com/feed/</id><title type="html">Software Testing &amp; Automation</title><link rel="alternate" href="https://scrolltest.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779421207000"><id gr:original-id="https://scrolltest.com/manual-tester-to-ai-engineer-90-day-roadmap-india-2026/">tag:google.com,2005:reader/item/00000444000001d1</id><category term="Career Guide"></category><category term="Testing"></category><category term="AI testing"></category><category term="api testing tools python"></category><category term="career growth"></category><category term="India QA"></category><category term="LangChain"></category><title type="html">From Manual Tester to AI Engineer: The 90-Day Roadmap for Indian QA Professionals in 2026</title><published>2026-05-22T03:40:07Z</published><updated>2026-05-22T03:40:07Z</updated><link rel="alternate" href="https://scrolltest.com/manual-tester-to-ai-engineer-90-day-roadmap-india-2026/" type="text/html"></link><summary type="html">&lt;p&gt;The exact 90-day roadmap for Indian QA professionals to transition from manual testing to AI engineering. Includes real salary data from PayScale, the tools to learn, and a portfolio project that gets you hired.&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com/manual-tester-to-ai-engineer-90-day-roadmap-india-2026/&quot;&gt;From Manual Tester to AI Engineer: The 90-Day Roadmap for Indian QA Professionals in 2026&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com&quot;&gt;Software Testing &amp;amp; Automation&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Promode</name></author><source gr:stream-id="feed/https://scrolltest.com/feed/"><id>tag:google.com,2005:reader/feed/https://scrolltest.com/feed/</id><title type="html">Software Testing &amp; Automation</title><link rel="alternate" href="https://scrolltest.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779400800000"><id gr:original-id="https://scrolltest.com/?p=7349">tag:google.com,2005:reader/item/00000444000001d0</id><category term="Career Guide"></category><category term="Testing"></category><title type="html">The QA Career Pivot Guide 2026: From Testing Features to Owning Quality Intelligence</title><published>2026-05-21T22:00:00Z</published><updated>2026-05-21T22:00:00Z</updated><link rel="alternate" href="https://scrolltest.com/qa-career-pivot-quality-intelligence-2026/" type="text/html"></link><summary type="html">&lt;p&gt;QA is evolving from testing features to owning quality intelligence. The career pivot guide for 2026: new skills, new role titles, and how to make the transition.&lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com/qa-career-pivot-quality-intelligence-2026/&quot;&gt;The QA Career Pivot Guide 2026: From Testing Features to Owning Quality Intelligence&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; rel=&quot;nofollow&quot; href=&quot;https://scrolltest.com&quot;&gt;Software Testing &amp;amp; Automation&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Pramod Dutta</name></author><source gr:stream-id="feed/https://scrolltest.com/feed/"><id>tag:google.com,2005:reader/feed/https://scrolltest.com/feed/</id><title type="html">Software Testing &amp; Automation</title><link rel="alternate" href="https://scrolltest.com" type="text/html"></link></source></entry><entry gr:crawl-timestamp-msec="1779376240000"><id gr:original-id="https://lisacrispin.com/?p=4301">tag:google.com,2005:reader/item/000004400000004f</id><category term="AI"></category><category term="Uncategorized"></category><category term="AI capabilities"></category><category term="DORA"></category><category term="improving quality"></category><category term="measurement"></category><category term="metrics"></category><category term="small experiments"></category><title type="html">Measuring for AI success and quality improvement</title><published>2026-05-21T15:10:40Z</published><updated>2026-05-21T15:10:40Z</updated><link rel="alternate" href="https://lisacrispin.com/2026/05/21/measuring-for-ai-success-and-quality-improvement/" type="text/html"></link><summary type="html">&lt;p&gt;I’ve worked primarily in a tester and quality engineering role for a few decades now. “Metrics” have always been the magic beans of improving quality. People ask me “What metrics should we use?”, as if they will reach their quality goals by measuring the right things. They want something easy, like code coverage and bug counts.&lt;/p&gt;
&lt;h4&gt;Small experiments&lt;/h4&gt;
&lt;p&gt;In my experience, it works best the other way. My teams worked to achieve one improvement goal at a time. Having agreed on the next goal, we tried experiments to move towards it step-by-step.  Then we’d figure out some way to measure whether each experiment was working. For example, one team I was on wanted to shorten our cycle time, from when we started working on a user story to when we got it into production.&lt;/p&gt;
&lt;p&gt;We decided to try &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://medium.com/@mattwynne/introducing-example-mapping-42ccd15f8adf&quot;&gt;example mapping&lt;/a&gt; to get better shared understanding of each story in the planning stage. This practice should help us cut down on re-work when acceptance testing found issues. What metrics would track the success of our experiment? Besides cycle time, we could measure the percentage of stories rejected in acceptance testing. When it was reduced by half in two iterations, we kept up the example mapping.&lt;/p&gt;
&lt;h4&gt;Measuring progress in your AI journey&lt;/h4&gt;
&lt;p&gt;Today, we have AI tools to help us achieve our quality goals. The principles of building quality in throughout the whole development life cycle remain the same. AI assistance gives us new software tools that help us work smarter. Research shows that AI amplifies the strengths of high-performing organizations, and the problems of dysfunctional ones.&lt;/p&gt;
&lt;p&gt;In my view, approaching AI adoption step-by-step, iterating through small improvement experiments, is a good way to enjoy the benefits and avoid the pitfalls. Measuring appropriately to track each experiment is key.&lt;/p&gt;
&lt;p&gt;Enter the DORA AI Capabilities Model. I encourage you to go download the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://dora.dev/ai/capabilities-model/report/&quot;&gt;DORA AI Capabilities Model Report&lt;/a&gt;. Open it in your PDF viewer of choice. Now, do a “find” on the word “measure”. Found on 23 pages! Wow! Go back to the start of the document. Check out the seven key capabilities on page 4.&lt;/p&gt;
&lt;figure id=&quot;article-B70uyijEn-jhV3LAUEeK4U1PM5Q-attachment_4303&quot; aria-describedby=&quot;caption-attachment-4303&quot; style=&quot;width: 506px&quot;&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://lisacrispin.com/wp-content/uploads/2026/05/Screenshot-2026-05-19-at-2.27.30-PM.jpg&quot;&gt;&lt;img width=&quot;506&quot; height=&quot;410&quot; fetchpriority=&quot;high&quot; decoding=&quot;async&quot; alt=&quot;seven ai capabilities from the DORA AI Capabilities Model&quot; data-orig-srcset=&quot;https://lisacrispin.com/wp-content/uploads/2026/05/Screenshot-2026-05-19-at-2.27.30-PM-1024x830.jpg 1024w, https://lisacrispin.com/wp-content/uploads/2026/05/Screenshot-2026-05-19-at-2.27.30-PM-300x243.jpg 300w, https://lisacrispin.com/wp-content/uploads/2026/05/Screenshot-2026-05-19-at-2.27.30-PM-768x623.jpg 768w, https://lisacrispin.com/wp-content/uploads/2026/05/Screenshot-2026-05-19-at-2.27.30-PM.jpg 1233w&quot; src=&quot;https://lisacrispin.com/wp-content/uploads/2026/05/Screenshot-2026-05-19-at-2.27.30-PM.jpg&quot;&gt;&lt;/a&gt;&lt;figcaption id=&quot;article-B70uyijEn-jhV3LAUEeK4U1PM5Q-caption-attachment-4303&quot;&gt;The Seven Key Capabilities&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Now read page 5, where you will learn that the report gives you details on how to get started on each of the seven capabilities. Keep reading. As you explore the detailed section for each capability, and why that capability matters for AI, you’ll learn how to improve that capability day-by-day. And, hooray, the report explains specific ways to &lt;em&gt;measure your progress&lt;/em&gt;. You’ll also find the common obstacles to successfully adopting capability.&lt;/p&gt;
&lt;p&gt;There’s a lot to digest here. You’ve got so much information here for your team to discuss. But where do you start? We’re only human, we can’t grow seven capabilities at once.&lt;/p&gt;
&lt;p&gt;No worries, the report provides detailed sections on techniques to help your team prioritize which capability to work on first. This takes an investment of time, for sure. Then your team will be ready to start iterating on those small experiments to improve the highest-priority capability. The best part is you will now know some good ways to measure your progress towards improving that capability.&lt;/p&gt;
&lt;h4&gt;Making the investment&lt;/h4&gt;
&lt;p&gt;I know this sounds overwhelming. Most people do look pretty overwhelmed by the challenges that AI brings along with its benefits. We humans tend to not make decisions based on scientific research. Yet the potential rewards of successful AI adoption, and the potential disasters of unsuccessful AI adoption, should motivate this investment. So now, go download DORA’s &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://dora.dev/ai/roi/report/&quot;&gt;ROI of AI-Assisted Software Development report&lt;/a&gt;. It shows the initial investment needed to reap the eventual exponential growth that AI assistance enables.&lt;/p&gt;
&lt;p&gt;Be patient, take baby steps, do one or two small experiments at a time. Make them short enough so that you know in a week or two if the experiment is working – based on those appropriate metrics you chose. At some point, your team will get past “J-curve of AI value realization” and start saving time. Rather, making time for humans to do what humans do best, while the robots do our grunt work. As the ROI of AI-Assisted Software Development report concludes,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Invest in engineering excellence today to ensure AI acts as an amplifier of value rather than a catalyst for downstream chaos.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You’ve got the recipe books here, thanks to DORA. Invest the time now, and enjoy tracking your quality – and your enjoyment – improving faster and faster over time.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The post &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://lisacrispin.com/2026/05/21/measuring-for-ai-success-and-quality-improvement/&quot;&gt;Measuring for AI success and quality improvement&lt;/a&gt; appeared first on &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://lisacrispin.com&quot;&gt;Holistic Testing with Lisa Crispin&lt;/a&gt;.&lt;/p&gt;</summary><author><name>Lisa Crispin</name></author><source gr:stream-id="feed/https://lisacrispin.com/feed/"><id>tag:google.com,2005:reader/feed/https://lisacrispin.com/feed/</id><title type="html">Agile Testing with Lisa Crispin</title><link rel="alternate" href="https://lisacrispin.com/" type="text/html"></link></source></entry></feed>