<?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: Kent Alstad</title>
    <description>The latest articles on DEV Community by Kent Alstad (@kentkandiforge).</description>
    <link>https://dev.to/kentkandiforge</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%2F4145211%2F258f89d4-0a51-400e-bc3d-b91f7e7f512f.png</url>
      <title>DEV Community: Kent Alstad</title>
      <link>https://dev.to/kentkandiforge</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kentkandiforge"/>
    <language>en</language>
    <item>
      <title>A Case for Evidence Based Agentic Development</title>
      <dc:creator>Kent Alstad</dc:creator>
      <pubDate>Fri, 09 Oct 2026 19:31:50 +0000</pubDate>
      <link>https://dev.to/kentkandiforge/the-case-for-evidence-based-agentic-development-5glp</link>
      <guid>https://dev.to/kentkandiforge/the-case-for-evidence-based-agentic-development-5glp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;This is evidence that does not forget. It is not confused by the excitement of the moment. It is not absent because human witnesses are. It is factual evidence. Physical evidence cannot be wrong, it cannot perjure itself, it cannot be wholly absent. Only human failure to find it, study and understand it, can diminish its value.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Paul L. Kirk, 1953 [1]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kirk was writing about crime scenes. I think he was also writing about software built by agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where we are
&lt;/h2&gt;

&lt;p&gt;Software is more complicated and more feature rich than it has ever been. Agents did that. Point enough of them at a well-defined problem and you get working code, passing tests, and a system that looks almost done, in days.&lt;/p&gt;

&lt;p&gt;What we don't have is a viable way to stabilize it and release it.&lt;/p&gt;

&lt;p&gt;I found this out the way most people will. I realized I could run five projects at once. Five repos, five sets of agents, five streams of change, all day. It worked, in the sense that code appeared. It also became impossible to monitor every session. I could not read what was being produced, let alone judge it.&lt;/p&gt;

&lt;p&gt;That was the moment the framing changed for me. I don't want a co-pilot. I want five dev teams. And a dev team needs something a co-pilot never did: a way for the person in charge to know what is true about the product without having watched every line get written.&lt;/p&gt;

&lt;h2&gt;
  
  
  The phases of a product
&lt;/h2&gt;

&lt;p&gt;Every product I have built with agents goes through the same three phases, and the proportions are consistent enough that I'll put numbers on them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first 80% comes from the spec.&lt;/strong&gt; You describe what you want, the agents build it. This part is astonishing and it is the part everybody has seen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The next 15% is vibing.&lt;/strong&gt; Feedback, iteration, trying things. You use the app, you say "no, like this", the agent changes it. This is where most developers are when they are rapidly creating something. It is interactive, it is the closest to the old way we developed, and it is great for creative solutions. It is also where most people stop, because the app looks done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The last 5% is the hard part.&lt;/strong&gt; Bugfixes. Performance. Hardening. Integration across the pieces, and stabilization before release. The trick in this phase is not moving backwards, and not injecting too much change while you fix what is in front of you. Of the five phases a release goes through, integration and stabilize are the difficult ones, and they are the two the first 95% does nothing to prepare you for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The phases of how people approach it
&lt;/h2&gt;

&lt;p&gt;People's approach to agentic development goes through phases too. I went through all of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, the pair model.&lt;/strong&gt; For a long time, the pairing model that tools like Cursor promote seemed right. One developer, one agent, a conversation, a diff. But that model is steeped in helping us do it the way we used to do it, only faster. That doesn't work. You end up with more code to stabilize and no reasonable strategy to do it. The pair model is the 15% phase made permanent. It has a place. It is not a viable solution for stabilization, and it does not scale to factory size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then, more tests.&lt;/strong&gt; The next phase was to make the agents write tests for everything, and the problem became how to manage a large volume of change in a way where the tests really guard against going backwards. For the most part, the agent that writes the code also writes the tests. They helped, for APIs. But even there, I found that the complex ways the apps actually used those APIs let problems through that the API tests passed. And what the tests did not catch at all was the requirements mistakes. A test written by the author of the code checks the author's understanding of the requirement against itself. If the understanding is wrong, the test is wrong in the same way, and it passes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then, human review.&lt;/strong&gt; It really seemed like human review was essential. It also seemed impossible, because the volume of review is overwhelming. Five teams produce more pull requests in a day than a person can read in a week.&lt;/p&gt;

&lt;p&gt;So that is the situation. The volume and pace of change demands an oversight system that can keep up with "super" developer productivity. Not a faster reviewer. A different kind of gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do we know it is done?
&lt;/h2&gt;

&lt;p&gt;Before anything else, there has to be an answer to that question that was written down before the work started.&lt;/p&gt;

&lt;p&gt;For every change, an acceptance plan: the criteria that define done, and the evidence items that will prove each one. If the change has a user interface, the evidence has to narrate the workflow that must be demonstrated. Not "the login works". The fresh install, the one button on the launch screen, the tap, the page the app must open, the consent screen, the picker that appears after it.&lt;/p&gt;

&lt;p&gt;I'll describe what these plans look like in practice, because the details are the method.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The criteria are numbered, and each one is a testable statement about behaviour, not about code.&lt;/li&gt;
&lt;li&gt;Each evidence item names the criteria it covers and the artifact it produces: a log, a test report, a recording, a screenshot.&lt;/li&gt;
&lt;li&gt;Each item says who produces it, and the answer is never the agent that did the work. The wording in ours is blunt: produced only by the evidence service, after the build. No agent runs, copies or edits it.&lt;/li&gt;
&lt;li&gt;For a user interface, the item walks the workflow step by step. Every step has a test id. Every step that has to be stubbed is printed into the run log as a stub, so the recording can't pretend.&lt;/li&gt;
&lt;li&gt;Test data is a dedicated, human-provisioned test account. Never a production user.&lt;/li&gt;
&lt;li&gt;Honest limits are written into the plan. If a step is interactive and cannot run unattended, the plan says so and says how the evidence will be produced instead.&lt;/li&gt;
&lt;li&gt;A human accepts the plan before any code is written.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point matters more than it looks. The plan is accepted while nobody is attached to an implementation yet. It is the one moment in the process where "what does done mean" gets decided without a diff in the room.&lt;/p&gt;

&lt;h2&gt;
  
  
  The case: concrete evidence, human focused, end-user driven
&lt;/h2&gt;

&lt;p&gt;Here is the argument.&lt;/p&gt;

&lt;p&gt;Not only do we need concrete evidence to check each change against. The evidence has to be human focused and end-user driven. It has to show the product doing what a person would do with it.&lt;/p&gt;

&lt;p&gt;It may seem counter-intuitive, but when an agent is tasked with writing a test fixture that works the feature the way a user would, and that fixture captures a video, and another agent uses that video as the working evidence, the agents start to catch errors they could not find in the code. No person records anything. The video is just test output. What makes it different from a test report is its form: it is meaningful to the human who has to accept it, and it turns out to be meaningful to the agent that compares it. The question "has this video changed compared to the baseline?" is a different question from "is this code correct?", and agents are better at the first one. The interpretive skills they bring to comparing two recordings yield a better level of oversight: more attuned to human requirements, and to whether the app is actually usable.&lt;/p&gt;

&lt;p&gt;Two things I want to be clear about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is in addition to tests, not instead of them.&lt;/strong&gt; I have thousands of unit tests and I am keeping every one. Videos are strong exactly where unit tests are weak: the whole product, in use, end to end. Unit tests are strong where videos are weak: a single function, every edge case, in milliseconds. Evidence is both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The video proves more than what it shows.&lt;/strong&gt; For the fixture to record a user signing in and picking a repository, the build has to succeed, the device has to boot, the network has to be up, the backend has to answer, the data has to be right, and the whole thing has to finish inside the timeout. If any subsystem the user never sees is broken, there is no video. Often the issues the recording exposes are not in the frames at all. They are in the fact that the recording could not be made.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a recording is made, and what a baseline is
&lt;/h2&gt;

&lt;p&gt;The acceptance plan lists the criteria and the evidence items. An agent writes a test for each item. A separate service, not the agent that wrote the code, builds the branch and runs the test. The test produces the output: a recording, a log, screenshots. A reviewer accepts or rejects.&lt;/p&gt;

&lt;p&gt;Accepted output becomes the reference. That is the baseline, and this is the part I want people to take away. &lt;strong&gt;The baseline is produced when the evidence is accepted.&lt;/strong&gt; Nobody records a baseline by hand. Nobody decides in advance what the product should look like. The last thing a human accepted is, by definition, what the product should look like now.&lt;/p&gt;

&lt;p&gt;The next change to that area runs the same test, and the new output is compared with the reference. Because every change is issue driven, with an acceptance plan, and ends with evidence accepted, the agent knows what was supposed to change. So it can tell the difference between "this moved because the plan said it would" and "this moved and nothing said it should". It flags the evidence that needs to change as part of the process, and it flags the differences that nothing explains.&lt;/p&gt;

&lt;p&gt;People accept the reference. After that, the agents compare against it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the gates sit
&lt;/h2&gt;

&lt;p&gt;Quality sets the schedule, not the calendar. A version is in one phase at a time, and it moves to the next when the evidence says it can.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhhqg3f9a5p2m8u7b4idv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhhqg3f9a5p2m8u7b4idv.png" alt="The flow from acceptance plan to accepted evidence: plan and spec, agent writes the fixture and builds the change in isolation, the evidence service runs the fixture and produces the output, an agent compares it with the reference, a human reviews what passed, acceptance gates the merge, accepted output becomes the reference" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Before any code.&lt;/strong&gt; The acceptance plan, and a design spec reviewed by an Architect for the design and a Product Manager for the product. Nothing is built until both are approved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;During the build.&lt;/strong&gt; Each change is worked in isolation, on its own branch, in its own worktree. The way out is evidence: an artifact produced from a build of the code under test. A pull request is not evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At integration.&lt;/strong&gt; One change at a time. The evidence is reviewed and accepted by someone who is not the implementing agent, and then the change is merged. Acceptance gates the merge. Where a change can only be proven from an assembled build, because it spans repositories, the order flips: merge first, produce the evidence from the integrated build, and acceptance gates the version leaving integration instead. Either way, nothing leaves integration without accepted evidence, and integration testing runs after every merge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acceptance creates the baseline.&lt;/strong&gt; Evidence produced for review lives in a scratch area. Accepted evidence is committed as the reference. Recordings, logs and screenshots all take the same path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stabilize.&lt;/strong&gt; Slow the rate of change. Only the bugs the release needs. A risky feature gets flagged off rather than fixed under pressure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Released.&lt;/strong&gt; Each change is confirmed in the released build before the version is closed. Hotfixes only after that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Waivers exist. Sometimes a change does not need a recording, or does not need a plan. But a waiver is recorded, with a reason, by a person. It is never a silent skip.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the humans do
&lt;/h2&gt;

&lt;p&gt;The human still creates the specs and the product definition. That does not go away, and nothing in this method touches it.&lt;/p&gt;

&lt;p&gt;In the stabilization process, the human's job has three parts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Accept the evidence plan up front. Decide what done means before the work starts.&lt;/li&gt;
&lt;li&gt;Review the evidence that is ready for acceptance, after it has passed the agent gates. The agents pre-flight the review. They run the comparison against the reference, sweep out most of the problems, and send them back to be fixed before a person ever sees them. What reaches the human is evidence that has already passed, with the agent's account of what it checked.&lt;/li&gt;
&lt;li&gt;Review the repo news: the agent's report of the differences it flagged for investigation, with the narrative detail that lets you dig into only what is needed. You open the three recordings that changed when nothing said they should. You do not open the forty that didn't.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are two human roles in this. The one I just described is a Product Manager. The other is an Architect, for the technical issues: the design, the data, the things a recording cannot show. In general, every review is either a business review or a technical review, and the method routes each piece of evidence to the right one.&lt;/p&gt;

&lt;p&gt;I am not stuck on where humans participate. I will continue inserting an agent into the human role, prioritizing or helping with review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why would this be true?
&lt;/h2&gt;

&lt;p&gt;I came to this by running out of alternatives, not by reading papers. But the published work points the same way.&lt;/p&gt;

&lt;p&gt;Judges, human and machine, are more reliable when comparing two things than when rating one thing on its own. Thurstone showed it for people in 1927, and the finding has held up [2]. Surveys of language models used as evaluators find the same: pairwise comparison is more consistent and agrees with human judgement more often than absolute scoring [3].&lt;/p&gt;

&lt;p&gt;Asked to judge correctness from the code, models miss a lot. In one study a frontier model passed half of the incorrect implementations it was shown [4]. In a 2026 code-review benchmark, four of five models found zero performance bugs [5]. Telling the reviewer the change was bug-free cut its detection of real vulnerabilities by as much as 93 percent [6]. That last one is the agent saying "done".&lt;/p&gt;

&lt;p&gt;Tests written by agents are weak oracles. In a study of agent-authored test patches, four in five had weak or no explicit assertion: the test ran the code and checked nothing [7]. And models favour their own output. The more a model can recognise its own work, the more it prefers it, even when told the work is its own and it isn't [8]. The author's tests and the author's review are the same judge.&lt;/p&gt;

&lt;p&gt;None of that proves that comparing recordings of an app catches regressions. Nobody has published that study. It says the method is pointed in the direction the evidence already points. The proof is what the rest of this series is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am after
&lt;/h2&gt;

&lt;p&gt;I am an agent product developer trying to find a way to ship great products. The other side of this is the struggle to stabilize, and not shipping. I have been on that side.&lt;/p&gt;

&lt;p&gt;Value, for me, is a shipping product that people use. If this method yields that, without slowing down, and without introducing new costs or processes that can't be managed, then it is valuable. If it doesn't, it isn't, and I'll say so.&lt;/p&gt;

&lt;p&gt;So I'll end where I started, with Kirk. Evidence that cannot perjure itself, that is not absent because witnesses are, that is only diminished by our failure to look at it. When your agent tells you it is done, what do you have in your hand?&lt;/p&gt;

&lt;p&gt;Are others doing this? Is there a better way?&lt;/p&gt;




&lt;h2&gt;
  
  
  Notes and sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Paul L. Kirk, &lt;em&gt;Crime Investigation: Physical Evidence and the Police Laboratory&lt;/em&gt; (New York: Interscience, 1953), ch. 1, p. 4. Often misattributed to Edmond Locard.2. L. L. Thurstone, "A Law of Comparative Judgment", &lt;em&gt;Psychological Review&lt;/em&gt; 34 (1927); D. Laming, &lt;em&gt;Human Judgment: The Eye of the Beholder&lt;/em&gt; (2004).&lt;/li&gt;
&lt;li&gt;"A Survey on LLM-as-a-Judge", arXiv:2411.15594; Li et al., "A survey on LLM-as-a-judge", &lt;em&gt;ScienceDirect&lt;/em&gt;, 2025.&lt;/li&gt;
&lt;li&gt;"On the Effectiveness of LLM-as-a-judge for Code Generation and Summarization", arXiv:2507.16587.&lt;/li&gt;
&lt;li&gt;"Bigger Isn't Always Better: A Comparative Evaluation of LLMs for Automated Code Review", arXiv:2606.15689.&lt;/li&gt;
&lt;li&gt;"Measuring and Exploiting Confirmation Bias in LLM-Assisted Security Code Review", arXiv:2603.18740.&lt;/li&gt;
&lt;li&gt;"All Smoke, No Alarm: Oracle Signals in Agent-Authored Test Code", arXiv:2606.18168.&lt;/li&gt;
&lt;li&gt;Panickssery, Bowman and Feng, "LLM Evaluators Recognize and Favor Their Own Generations", NeurIPS 2024, arXiv:2404.13076.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Research notes: do agents judge differently when comparing than when verifying?
&lt;/h3&gt;

&lt;p&gt;Supports the claim:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comparing beats rating, for models. Surveys of LLM-as-a-judge find pairwise comparison more
consistent (less position bias) and better aligned with human judgement than absolute scoring
(arXiv 2411.15594; ScienceDirect S2666675825004564).&lt;/li&gt;
&lt;li&gt;Comparing beats rating, for humans. Thurstone (1927), Laming (2004): people are more reliable
at relative than absolute judgement. Comparative judgement in assessment rests on this.&lt;/li&gt;
&lt;li&gt;Models judging correctness from first principles do badly. GPT-4 passed 50% of wrong Java
implementations as correct (arXiv 2507.16587). In a 2026 code-review benchmark four of five
models had 0% recall on performance bugs (arXiv 2606.15689). Framing a change as "bug-free"
cut vulnerability detection by 16 to 93% (arXiv 2603.18740).&lt;/li&gt;
&lt;li&gt;Agent-written tests are weak oracles. 80.2% of agent-authored test patches had weak or no
explicit oracle (arXiv 2606.18168, "All Smoke, No Alarm"). Agent-written testing is "a
model-dependent process style rather than a dependable driver of success" (arXiv 2602.07900).&lt;/li&gt;
&lt;li&gt;Models favour their own output. Self-preference bias rises with self-recognition; models
preferred summaries merely labelled as their own (Panickssery, Bowman, Feng, NeurIPS 2024).
The author's tests and the author's review are the same judge.&lt;/li&gt;
&lt;li&gt;Vision models find non-crash functional bugs from screenshot sequences that crash-based
tools cannot: VisionDroid found 29 new bugs on Google Play, 19 confirmed and fixed
(Liu et al. 2024). Third-party reruns found far fewer (FuncDroid, GraphDroid), so setup matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cuts against, or limits, the claim:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pairwise judging is more vulnerable to distractors the judge happens to favour; absolute
scoring with a rubric was more robust to that manipulation (arXiv 2504.14716).&lt;/li&gt;
&lt;li&gt;Pairwise verdicts can be locally consistent and globally contradictory (arXiv 2602.16610).&lt;/li&gt;
&lt;li&gt;Video difference captioning is still hard. ViDiC-1K (1,000 video pairs, 3,720 checklist items)
shows "a significant performance gap in comparative description and difference perception"
across 17 multimodal models (arXiv 2512.03405). Same-or-different on image pairs: 17.6%
for an untuned 4B model (arXiv 2501.04670). Frontier models are better; nobody has published
numbers for app recordings.&lt;/li&gt;
&lt;li&gt;No published study measures multimodal models on UI regression from recordings against a
baseline. It is a gap to fill.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Build Stuff 2026
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Control Your Fate at the Metal&lt;/strong&gt;&lt;br&gt;
Wednesday 2 December, 15:00. 45 minutes.&lt;/p&gt;

&lt;p&gt;If you're coming, say hello. If you're not yet, &lt;code&gt;2026SPEAKER_20&lt;/code&gt; takes 20% off a ticket.&lt;/p&gt;

&lt;p&gt;#BuildStuff15 #buildstuffconf #AgeOfAgency @buildstuffconf &lt;a href="https://buildstuff.events" rel="noopener noreferrer"&gt;https://buildstuff.events&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>softwareengineering</category>
      <category>buildstuff</category>
    </item>
    <item>
      <title>We built a context system for our coding agents. They ignored it and used grep.</title>
      <dc:creator>Kent Alstad</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:58:19 +0000</pubDate>
      <link>https://dev.to/kentkandiforge/we-built-a-context-system-for-our-coding-agents-they-ignored-it-and-used-grep-58pk</link>
      <guid>https://dev.to/kentkandiforge/we-built-a-context-system-for-our-coding-agents-they-ignored-it-and-used-grep-58pk</guid>
      <description>&lt;p&gt;This is the first of a set of write-ups behind my Build Stuff 2026 talk, Control Your Fate at the Metal, Vilnius, 2 December. Details at the end.&lt;/p&gt;

&lt;p&gt;A year ago we started giving our AI coding agents something better than search. The idea is the obvious one, and probably the same one you've had: a coding agent wastes an enormous amount of its context window reading files to find out what's in them. So index the repository ahead of time. Write a short description of every file. Build a call graph. Give the agent a tool that answers "which files matter for this task?" in one call instead of twenty.&lt;/p&gt;

&lt;p&gt;We built all of it. Then we read 467 of our own agent sessions to see whether it was being used.&lt;/p&gt;

&lt;p&gt;What the transcripts said&lt;/p&gt;

&lt;p&gt;Over thirty days:&lt;/p&gt;

&lt;p&gt;What we counted (30 days)   Count&lt;br&gt;
Times agents ran grep or rg through a shell 46,177&lt;br&gt;
Times agents called our retrieval tool  ~600&lt;br&gt;
Sessions that called it even once   77 of 467 (16%)&lt;br&gt;
Agents reached for grep about 75 times as often. Five sessions in six never touched the thing we'd built at all.&lt;/p&gt;

&lt;p&gt;Three reasons, and none of them were "the model is dumb"&lt;/p&gt;

&lt;p&gt;It only got used when something told it to. Nearly every call we could trace back to a cause came from a prompt, a hook or a workflow that named the tool explicitly. Tools that nothing named got almost no calls, regardless of how good they were. Adoption didn't track quality. It tracked whether some upstream instruction said the tool's name out loud.&lt;/p&gt;

&lt;p&gt;If you've built an MCP server and wondered why nobody calls it, this is probably why. The agent sees a one-line description and chooses, right then, between a tool it has to reason about and a grep it already knows works.&lt;/p&gt;

&lt;p&gt;Our matching rule couldn't fire on real input. Each file had a short pre-written summary, and we matched a request against it by word overlap — roughly a third of the words in the request had to appear in a 280-character summary. Real requests don't look like that. Somebody types "the login redirect is broken on mobile." The summary says "Handles OAuth callback routing and session establishment." Zero overlap, zero results. On one repository, our index put the file the agent went on to actually edit in the top five results zero times out of fifty-five.&lt;/p&gt;

&lt;p&gt;We ranked on the summary instead of the thing it summarised. We had full descriptions of every file and were matching against the 280-character abstract of each one. When we scored both ways against real past tasks, ranking on the full text found the right file 17 times to 10.&lt;/p&gt;

&lt;p&gt;The part that should worry you&lt;/p&gt;

&lt;p&gt;An agent that greps isn't failing. It gets there. It opens four files instead of one, spends more of its window, takes a bit longer, and produces a reasonable answer. No error is thrown. Nothing in your logs looks wrong.&lt;/p&gt;

&lt;p&gt;That's the trap. A retrieval system doesn't fail loudly — it gets quietly skipped while every dashboard stays green. Ours reported 100% acceptance and "14× better than baseline" during the month I just described. Both were artifacts of how we'd computed them. The honest acceptance number was 6.7%.&lt;/p&gt;

&lt;p&gt;The "tokens saved" graph was worse. It was computed as what a naive agent would have read, minus what we returned. An empty result therefore booked almost the entire hypothetical saving. One tool claimed 16.9 million tokens saved in a month where three-quarters of its answers were empty. We were measuring an imaginary agent. The real one was grepping.&lt;/p&gt;

&lt;p&gt;What I'd do differently&lt;/p&gt;

&lt;p&gt;Build the thing that records what people actually ask before you build the index.&lt;/p&gt;

&lt;p&gt;We spent a year on the supply side — descriptions, graphs, ranking — and never looked at the demand side. We had no record of what our agents were actually asked to do, so we had nothing to test a change against. Every improvement was a guess.&lt;/p&gt;

&lt;p&gt;The fix was unglamorous: log each request alongside the files that session went on to read or edit. A backfill over ninety days gave us 5,415 requests and 1,578 request-to-file pairs. That's a test set. Now a change either moves the right file into the top five for real past tasks, or it doesn't ship.&lt;/p&gt;

&lt;p&gt;The recorder took a fraction of the effort the index did. We should have built it first.&lt;/p&gt;

&lt;p&gt;Talking about this at Build Stuff 2026&lt;/p&gt;

&lt;p&gt;The context system in this article is one of the subsystems we chose to own rather than rent. What it took to make it actually work is part of the argument in my talk at Build Stuff in Vilnius this December, the 15th edition, under the theme The Age of Agency.&lt;/p&gt;

&lt;p&gt;Control Your Fate at the Metal Wednesday 2 December, 15:00, Human OS Lab room. 45 minutes.&lt;/p&gt;

&lt;p&gt;Your tooling depends on somebody's pricing page, rate limiter, and product roadmap. That used to be unavoidable. We went the other way — our own models, our own inference, our own registry, our own protocol implementations — until the only thing under us was hardware. Here's what it costs, what it buys, and where the metal pushes back.&lt;/p&gt;

&lt;p&gt;If you're coming, say hello. If you're not yet, 2026SPEAKER_20 takes 20% off a ticket.&lt;/p&gt;

&lt;h1&gt;
  
  
  BuildStuff15 @buildstuffconf &lt;a href="https://buildstuff.events" rel="noopener noreferrer"&gt;https://buildstuff.events&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;We used agents to draft this article and document this project as we built.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>buildstuff</category>
      <category>agentskills</category>
      <category>ai</category>
    </item>
    <item>
      <title>The Last Mile Problem in Agentic Development</title>
      <dc:creator>Kent Alstad</dc:creator>
      <pubDate>Sun, 27 Sep 2026 08:21:01 +0000</pubDate>
      <link>https://dev.to/kentkandiforge/the-last-mile-problem-in-agentic-development-5768</link>
      <guid>https://dev.to/kentkandiforge/the-last-mile-problem-in-agentic-development-5768</guid>
      <description>&lt;p&gt;Agents have made the first 80% of building software fast. Point enough of them at a well-defined problem, and you get working code, passing tests, and a system that looks almost done, sometimes in hours.&lt;/p&gt;

&lt;p&gt;Then you hit the last 10 to 20%.&lt;/p&gt;

&lt;p&gt;That's where I think the biggest problem facing agentic developers lives today: getting from 80 or 90% done to 100%. Not generating code, but hardening an idea all the way to completion. Edge cases, integration seams, failure modes, the gap between "it works in the demo" and "it works."&lt;/p&gt;

&lt;h2&gt;
  
  
  The math stops working
&lt;/h2&gt;

&lt;p&gt;Here's the trouble. When hundreds of agents are building your system, they produce work at a scale no human can match. That's the point. But the last mile has traditionally been human work: review, verification, judgment about what "done" actually means.&lt;/p&gt;

&lt;p&gt;So you end up with hundreds of agents producing output and one person, or a small team, trying to do the finishing work for all of them. You don't have the time to do the work of the hundreds. The bottleneck isn't building anymore. It's completing.&lt;/p&gt;

&lt;p&gt;I hit this wall at KandiForge. Our agents had produced millions of lines of code across 20 repos, and I needed to ship. But how?&lt;/p&gt;

&lt;p&gt;It wasn't a knowledge problem. I understood the requirements. I understood the architecture. What I couldn't do was work through every final detail across a codebase that size. There were simply too many of them, and each one needed the kind of attention that doesn't scale with the number of agents producing the code.&lt;/p&gt;

&lt;p&gt;The agents had made building fast. They hadn't made finishing any faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "just review more" doesn't fully solve it
&lt;/h2&gt;

&lt;p&gt;My first move was the obvious one. I added more reviewers and more testers, both agents and people.&lt;/p&gt;

&lt;p&gt;The testers used agents to write tests, but generally after the code was already integrated. So the change gates weren't in the right place. By the time a test caught something, the change was already in.&lt;/p&gt;

&lt;p&gt;I don't think anyone has fully solved this yet, myself included. We're all still working on it. That's part of why I'm writing this series: to share what we're trying at KandiForge, and to hear what's working for others.&lt;/p&gt;

&lt;h2&gt;
  
  
  What comes next
&lt;/h2&gt;

&lt;p&gt;Over the next few posts, I'll share behind-the-scenes notes from how we're tackling this at KandiForge, where we build with an agent factory that follows an evidence-based SDLC across multiple repos. Some of it has worked. Some of it hasn't. I'll share both.&lt;/p&gt;

&lt;p&gt;This series leads up to my talk at #BuildStuff15 in Vilnius this December (&lt;a href="https://x.com/BuildStuffConf" rel="noopener noreferrer"&gt;@buildstuffconf&lt;/a&gt;, &lt;a href="https://buildstuff.events" rel="noopener noreferrer"&gt;buildstuff.events&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're building with agents: where does your last mile break down?&lt;/strong&gt; I'd like to hear how others are handling it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>softwareengineering</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
