{"id":2513,"date":"2026-03-17T20:56:58","date_gmt":"2026-03-17T20:56:58","guid":{"rendered":"https:\/\/technicalley.com\/central\/?p=2513"},"modified":"2026-04-01T00:06:01","modified_gmt":"2026-04-01T00:06:01","slug":"the-red-herring-in-the-machine-how-expectations-can-sabotage-system-testing","status":"publish","type":"post","link":"https:\/\/technicalley.com\/central\/blog\/2026\/03\/17\/the-red-herring-in-the-machine-how-expectations-can-sabotage-system-testing\/","title":{"rendered":"The Red Herring in the Machine: How Expectations Can Sabotage System Testing"},"content":{"rendered":"\n<p>In my 18 years of blogging at <strong>The Technic Alley<\/strong>, I\u2019ve shared countless technical fixes. But recently, while testing a new chip our team developed, I was reminded that the most difficult &#8220;bugs&#8221; to fix aren&#8217;t in the silicon\u2014they are in our own cognitive processes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Setup: A New Hardware Feature<\/h2>\n\n\n\n<p>My task was to test a specialized hardware feature I had implemented. Its job is simple: if the hardware detects a fault (like a voltage dip), it captures diagnostic data in a specific memory location.<\/p>\n\n\n\n<p>To test it, I had to:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Enable Feature A<\/strong> (The Hardware Monitor).<\/li>\n\n\n\n<li><strong>Enable Software B<\/strong> (The &#8220;Mailbox&#8221; that allows us to read the memory).<\/li>\n\n\n\n<li><strong>Induce a Failure<\/strong> and see if the message appeared.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">The &#8220;Aha!&#8221; Moment (That Wasn&#8217;t)<\/h2>\n\n\n\n<p>I ran the test with both A and B enabled. The test failed as planned, and when I checked the memory, <strong>there was a message.<\/strong> I felt a surge of &#8220;Technic Alley&#8221; pride. It worked! Or so I thought. There was one nagging detail: the message format didn&#8217;t look like what I expected. However, I quickly pushed that doubt aside because of two &#8220;confirming&#8221; pieces of data:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The &#8220;Success&#8221; Signal:<\/strong> Others on my team ran the same failing test with the feature <em>disabled<\/em> and saw nothing in memory.<\/li>\n\n\n\n<li><strong>The Narrative:<\/strong> My brain told me: <em>&#8220;I turned it on and saw a message; they turned it off and saw nothing. Therefore, the message must be from the feature.&#8221;<\/em><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The &#8220;Surprise&#8221; Variable<\/h2>\n\n\n\n<p>Because the message format was weird, I decided to do one more run. I disabled my hardware feature (A) but left the software setting (B) on.<\/p>\n\n\n\n<p><strong>Surprise!!<\/strong> The message was still there.<\/p>\n\n\n\n<p>How could the hardware capture a message if the hardware feature was off? I went to the software developer, and the mystery was solved. The message I was seeing wasn&#8217;t a &#8220;Fault Captured&#8221; signal\u2014it was just a &#8220;Software Initialized&#8221; heartbeat added by Setting B.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Mystery Solved<\/h2>\n\n\n\n<p>The variables looked like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The Team:<\/strong> Used neither A nor B. (Result: No message).<\/li>\n\n\n\n<li><strong>Me (Run 1):<\/strong> Used A and B. (Result: Saw the &#8220;B&#8221; message, attributed it to A).<\/li>\n\n\n\n<li><strong>Me (Run 2):<\/strong> Used only B. (Result: Saw the &#8220;B&#8221; message, realized the truth).<\/li>\n<\/ul>\n\n\n\n<p>The message was a <strong>Red Herring<\/strong>. I had spent a day &#8220;confirming&#8221; my feature worked based on a message that had nothing to do with it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Lesson: Debugging the Mind<\/h2>\n\n\n\n<p>This experience was a perfect storm of three specific cognitive biases:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/technicalley.com\/central\/blog\/2025\/08\/23\/the-echo-chamber-effect-how-confirmation-bias-shapes-our-reality\/\">Confirmation Bias<\/a>:<\/strong> I wanted the feature to work, so I interpreted the first piece of &#8220;evidence&#8221; (the message) as proof of success, ignoring the &#8220;contradictory&#8221; evidence (the weird format).<\/li>\n\n\n\n<li><strong>The Illusion of Causality:<\/strong> Because the message appeared after I enabled the feature, I assumed the feature <em>caused<\/em> the message. I mistook <strong>correlation<\/strong> for <strong>causation<\/strong>.<\/li>\n\n\n\n<li><strong>Observer-Expectancy Effect:<\/strong> My expectation of seeing a result made me less critical of the data right in front of my eyes.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">How to Fight Your Own Biases<\/h2>\n\n\n\n<p>In hardware and software testing, the best defense is the <strong>Negative Test Case<\/strong>. Don&#8217;t just test to see if it <em>works<\/em>; test to see if it <em>fails<\/em> when it&#8217;s supposed to.<\/p>\n\n\n\n<p>If I hadn&#8217;t run the &#8220;impossible&#8221; test (running the failure with the feature off), I might have shipped code that didn&#8217;t actually do anything at all. In the high-stakes world of chip design, a &#8220;False Positive&#8221; is often more dangerous than a &#8220;Hard Failure.&#8221;<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my 18 years of blogging at The Technic Alley, I\u2019ve shared countless technical fixes. But recently, while testing a new chip our team developed,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50,11,53],"tags":[98,123,159],"class_list":["post-2513","post","type-post","status-publish","format-standard","hentry","category-cognitive-biases","category-eedesign","category-engineering","tag-behavioral-economics","tag-cognitive-bias","tag-featured","wpcat-50-id","wpcat-11-id","wpcat-53-id"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/posts\/2513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/comments?post=2513"}],"version-history":[{"count":2,"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/posts\/2513\/revisions"}],"predecessor-version":[{"id":2609,"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/posts\/2513\/revisions\/2609"}],"wp:attachment":[{"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/media?parent=2513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/categories?post=2513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/technicalley.com\/central\/wp-json\/wp\/v2\/tags?post=2513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}