<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gregory Harris</title>
    <description>The latest articles on DEV Community by Gregory Harris (@hd_gregory).</description>
    <link>https://dev.to/hd_gregory</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4063280%2F57f8dcf1-023a-4501-a5e3-7f20d34bcd4f.png</url>
      <title>DEV Community: Gregory Harris</title>
      <link>https://dev.to/hd_gregory</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hd_gregory"/>
    <language>en</language>
    <item>
      <title>I Freaking Love Breaking My Own Software</title>
      <dc:creator>Gregory Harris</dc:creator>
      <pubDate>Sun, 30 Aug 2026 20:23:23 +0000</pubDate>
      <link>https://dev.to/hd_gregory/i-freaking-love-breaking-my-own-software-27gd</link>
      <guid>https://dev.to/hd_gregory/i-freaking-love-breaking-my-own-software-27gd</guid>
      <description>&lt;p&gt;Validation testing is one of my favorite parts of the application lifecycle.&lt;/p&gt;

&lt;p&gt;I love, I mean I freaking love hammering away at code in search of bugs. There's a strange rush that comes from finding something you didn't expect, figuring out why it happened, fixing it, and then trying to break it all over again.&lt;/p&gt;

&lt;p&gt;I probably spend too much time in the evenings and weekends making apps and hammering away at them.&lt;/p&gt;

&lt;p&gt;I think the obsession started with a job I had as an application analyst.&lt;/p&gt;

&lt;p&gt;We had implemented a new PACS system, and users were reporting performance problems. They knew something wasn't right, but all they had was anecdotal evidence.&lt;/p&gt;

&lt;p&gt;The system had no built-in timers. Apparently, the makers simply hadn't thought that would be a thing we'd need.&lt;/p&gt;

&lt;p&gt;So I became the timer.&lt;/p&gt;

&lt;p&gt;For hours every day, broken into multiple sessions at different times of day and on different days of the week, I sat like a stone.&lt;/p&gt;

&lt;p&gt;One hand on the mouse. The other hovering above a stopwatch.&lt;/p&gt;

&lt;p&gt;Select an image. Start the stopwatch. Wait for it to load. Stop. Record.&lt;/p&gt;

&lt;p&gt;Again.&lt;/p&gt;

&lt;p&gt;And again.&lt;/p&gt;

&lt;p&gt;I shifted the testing pattern by one day each week over the course of months. I was trying to document what the users could only describe through experience.&lt;/p&gt;

&lt;p&gt;Before moving into application support, I'd spent a dozen years as a clinician. Maybe that had something to do with the sense of ownership I felt when I was essentially asked:&lt;/p&gt;

&lt;p&gt;Is there actually a performance problem? And if there is, can you find the pattern?&lt;/p&gt;

&lt;p&gt;I found the performance degradation.&lt;/p&gt;

&lt;p&gt;I didn't find the pattern.&lt;/p&gt;

&lt;p&gt;And that second result was just as important.&lt;/p&gt;

&lt;p&gt;There was a measurable problem. But the evidence didn't support pretending we knew why or when it would happen.&lt;/p&gt;

&lt;p&gt;Those days are long gone, but the rush I get when I break an application before an end user does isn't.&lt;/p&gt;

&lt;p&gt;I learned firsthand what happens when software reaches users with problems that should have been found earlier.&lt;/p&gt;

&lt;p&gt;So now I hammer away at everything I release. Do I find every bug in every possible real-world scenario?&lt;/p&gt;

&lt;p&gt;Of course not.&lt;/p&gt;

&lt;p&gt;Try as I may, there's always another edge case.&lt;/p&gt;

&lt;p&gt;What has changed dramatically is the number of tools I have available to look for those edge cases, including AI.&lt;/p&gt;

&lt;p&gt;Today I ask models from two different companies to come up with scenarios I missed. I can take those scenarios, turn them into controlled trials, run them against an application, document the results, make changes, and then run the tests again.&lt;/p&gt;

&lt;p&gt;I'm happy to do it.&lt;/p&gt;

&lt;p&gt;In fact, at this point, if I ship without AI assisting in validation, I feel like I've shipped a product without using all the tools at my disposal.&lt;/p&gt;

&lt;p&gt;But there's an important distinction there.&lt;/p&gt;

&lt;p&gt;I'm not asking an AI model:&lt;/p&gt;

&lt;p&gt;"Hey, is my application good?"&lt;/p&gt;

&lt;p&gt;That's not validation.&lt;/p&gt;

&lt;p&gt;I want it helping me find ways the application could fail.&lt;/p&gt;

&lt;p&gt;Give me the ugly inputs. The weird sequence of events. The thing I didn't think a user would ever do. Challenge the assumptions I made while building it.&lt;/p&gt;

&lt;p&gt;Then test what actually happens.&lt;/p&gt;

&lt;p&gt;That philosophy became especially important as I started building software for AI agents.&lt;/p&gt;

&lt;p&gt;An ordinary application can fail because of a bug in the application.&lt;/p&gt;

&lt;p&gt;An agent system has another problem: sometimes every part appear to have worked as designed.&lt;/p&gt;

&lt;p&gt;The API responded, the call returned successfully. The agent got its answer.&lt;/p&gt;

&lt;p&gt;Nothing crashed.&lt;/p&gt;

&lt;p&gt;And yet the result still shouldn't be trusted.&lt;/p&gt;

&lt;p&gt;That question eventually became interesting enough that I built an application specifically around it: &lt;a href="https://reliagent.net/ai-agent-tool-call-reliability" rel="noopener noreferrer"&gt;ReliAgent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;ReliAgent sits after an agent's tool call and examines the call, its parameters, response and metadata for reliability problems before the result continues downstream.&lt;/p&gt;

&lt;p&gt;But building the tool created another problem for me.&lt;/p&gt;

&lt;p&gt;How do I know the reliability tool is reliable?&lt;/p&gt;

&lt;p&gt;So the same instinct that once had me sitting in front of a PACS workstation with a stopwatch eventually turned into thousands of controlled trials against the software I was building.&lt;/p&gt;

&lt;p&gt;The tools have changed considerably.&lt;/p&gt;

&lt;p&gt;The obsession hasn't.&lt;/p&gt;

&lt;p&gt;I still want to break it before you do.&lt;/p&gt;

&lt;p&gt;Author's note: I built ReliAgent through HDGForge. The validation work referenced above is documented publicly in the &lt;a href="https://github.com/HDGForge-Labs/basanos?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Basanos research project&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>programming</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>I Ran 4,200 Trials Testing LLM Agent Reliability. Here’s What Broke.</title>
      <dc:creator>Gregory Harris</dc:creator>
      <pubDate>Sat, 15 Aug 2026 01:11:38 +0000</pubDate>
      <link>https://dev.to/hd_gregory/i-ran-4200-trials-testing-llm-agent-reliability-heres-what-broke-4dek</link>
      <guid>https://dev.to/hd_gregory/i-ran-4200-trials-testing-llm-agent-reliability-heres-what-broke-4dek</guid>
      <description>&lt;p&gt;We know when an AI agent gets a response from a tool, getting a response back doesn’t necessarily mean that response should be trusted.&lt;/p&gt;

&lt;p&gt;It can lose context, become repetitive, grow less confident, fill gaps with agreeable language, or return something that looks usable while creating problems downstream.&lt;/p&gt;

&lt;p&gt;I built ReliAgent to look for reliability signals like these in agent tool calls.&lt;/p&gt;

&lt;p&gt;Then I built Basanos, a validation program designed to test it adversarially.&lt;/p&gt;

&lt;p&gt;Across Basanos-2 and Basanos-3, I ran 4,200 trials. Some of the most useful results weren’t the successful ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  The benchmark found real problems
&lt;/h2&gt;

&lt;p&gt;I didn’t want Basanos to be a demonstration designed to produce good numbers.&lt;/p&gt;

&lt;p&gt;Testing uncovered genuine product issues that were corrected before publication. Later experiments also exposed problems in the experimental design itself and required corrective runs.&lt;/p&gt;

&lt;p&gt;Those corrections are part of the research record.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I changed the models
&lt;/h2&gt;

&lt;p&gt;Basanos-2 consisted of 1,800 trials, but it had an important limitation: it used a single model, Anthropic’s Sonnet 5.&lt;/p&gt;

&lt;p&gt;So Basanos-3 added 2,400 trials across 12 experiments using three additional model families:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5.6 Luna&lt;/li&gt;
&lt;li&gt;GPT-5.6 Terra&lt;/li&gt;
&lt;li&gt;Claude Haiku 4.5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s when I ran into an interesting problem with how benchmark results can be interpreted.&lt;/p&gt;

&lt;p&gt;One sycophancy experiment produced a much lower observed detection rate on Claude Haiku 4.5 than on the other models.&lt;/p&gt;

&lt;p&gt;At first glance, that looked like detector failure.&lt;/p&gt;

&lt;p&gt;But when I inspected the responses, Haiku frequently refused to behave sycophantically in the first place. It pushed back rather than agreeing with the premise presented to it.&lt;/p&gt;

&lt;p&gt;There wasn’t always a failure behavior for the detector to find.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;If you’re testing a system that detects model behavior, there are really two questions:&lt;/p&gt;

&lt;p&gt;Did the model produce the failure condition?&lt;/p&gt;

&lt;p&gt;If it did, did the detector recognize it?&lt;/p&gt;

&lt;p&gt;I learned that treating those as the same question can produce a misleading benchmark result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some results barely changed across models
&lt;/h2&gt;

&lt;p&gt;The language-dependent detectors showed variation between models.&lt;/p&gt;

&lt;p&gt;The two metadata-driven detectors evaluated in Basanos-3 — confidence collapse and context degradation — behaved differently. Both produced 1.00 TPR and 0.00 FPR across all three tested model families.&lt;/p&gt;

&lt;p&gt;Cross-provider testing also surfaced output differences and a configuration dependency that needed to be accounted for in deployment.&lt;/p&gt;

&lt;p&gt;Those are findings I wouldn’t have gotten from testing one model alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 4,200 trials changed for me
&lt;/h2&gt;

&lt;p&gt;A few principles came out of the work that I’ll carry into future benchmarks:&lt;/p&gt;

&lt;p&gt;Test mechanisms, not just metrics. Know what condition you’re actually creating before counting whether something detected it.&lt;/p&gt;

&lt;p&gt;Keep clean controls. A system that catches everything by flagging everything isn’t useful.&lt;/p&gt;

&lt;p&gt;Separate model behavior from detector behavior. A model failing to exhibit an expected failure mode isn’t automatically a detector false negative.&lt;/p&gt;

&lt;p&gt;Test across model families. A single-model benchmark tells you what happened in that environment, not necessarily what generalizes.&lt;/p&gt;

&lt;p&gt;Keep the mistakes. Superseded experiments and corrective runs are part of the research record too.&lt;/p&gt;

&lt;p&gt;And perhaps the biggest lesson:&lt;/p&gt;

&lt;p&gt;Design benchmarks you’re willing to lose.&lt;/p&gt;

&lt;p&gt;If the only acceptable outcome is proving your product works, you’re not really testing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to dig into the results
&lt;/h2&gt;

&lt;p&gt;Basanos is the validation program for ReliAgent, which I’ve been developing through HDGForge.&lt;/p&gt;

&lt;p&gt;I’ve made the study reports and non-reconstructive results public for anyone interested in looking more closely at the methodology, results, corrections, and limitations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/HDGForge-Labs/basanos" rel="noopener noreferrer"&gt;Basanos research&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reliagent.net" rel="noopener noreferrer"&gt;ReliAgent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hdgforge.com" rel="noopener noreferrer"&gt;HDGForge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ll share more from the experiments as I continue the work.&lt;/p&gt;

&lt;p&gt;Disclosure: I used AI assistance to help edit this article. The research, experiments, results, and conclusions described here are my own work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>testing</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
