← All AI Engineer talks

AI Engineer World's Fair 2026

Harness Engineering is not Enough: Why Software Factories Fail

Read the talk

Harness Engineering Is Not Enough: Why Software Factories Fail

Coding agents can shorten implementation while leaving maintainability unmeasured. Safer acceleration starts with understanding the training signal, then moving human judgment earlier in the development process.

From a talk by Dex Horthy

Before you start: Familiarity with pull requests, automated tests, and coding agents will help; the reinforcement-learning workflow is explained as it appears.

When faster coding meets production

What happens when a team stops reading the code its agents produce? StrongDM’s software factory offers an ambitious example: agents implement and validate software without human code review. Humans still specify intent and constraints, but the surrounding narrative pushes further—spend more tokens, remove the human bottleneck, and ship more.

Production introduces a harder test. Dex Horthy recalls Mario’s warning at AI Engineer Europe that coding-agent mishaps were causing outages at companies that should know how to avoid them. He also cites Faros AI’s engineering findings, describing more and longer review comments, more unreviewed merges, and rising incidents and bugs per developer. These are reported warning signs, not proof that coding agents caused every deterioration.

Slide titled “Production quality is declining,” with red bars and percentage increases for incidents and bugs.
Faros report slide showing increases in production incidents and bugs.

The promise Horthy challenges is 10–100× faster development with high quality and no human code review; it is not a measured result. Better prompts, more loops, and adversarial review bots may improve a workflow, but a harness cannot by itself repair a missing training objective. To understand the limit, follow the software factory from its feedback loops into the reward signals used to train coding models, then back into a workflow that preserves human ownership.

0:471:06
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:47 · section reference included

The factory already had loops

Horthy traces the term software factory to a 1968 NATO conference, but starts his working model with an ordinary team before widespread AI coding. Engineers, product managers, and leadership decide what should happen. A tracker such as Linear or Jira records that work as a state machine. Someone selects a task and implements it, with automated or manual testing along the way.

A pull request introduces another checkpoint: automated checks, human code review, and sometimes someone pulling down the change to test it. Failures send the work back to implementation. Once deployed, the change reaches users, whose bug reports and feature requests return to the team. Monitoring provides another feedback path, including the incident that wakes an engineer during the night. Production is part of the development loop, not its endpoint.

In Horthy’s baseline, implementation and review can each take hours or days. That makes discovering disagreement during review expensive. Architecture proposals, sprint planning, and team discussion move decisions earlier, reducing the likelihood of rework and the amount of reasoning a reviewer must reconstruct from the finished code. The next wave of factory claims—companies saying agents now produce 75% of their code—changes who implements the work, but does not automatically remove this need for alignment.

Diagram connecting team roles, implementation, testing, pull requests, production, users, and monitoring, with planning loops and build and review durations.
The software factory diagram adds architecture proposals and sprint planning to its feedback loops.
3:373:44
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

3:37 · section reference included

Automation moves the bottleneck

Replace the human implementation step with an agent backed by orchestration, a harness, a sandbox, a model, and perhaps computer use. In Horthy’s comparison, agent implementation takes minutes or hours while human review and testing still take hours or days. Agentic code review and regression testing speed up the checking stage, but review can remain the limiting step.

The same factory can accept more inputs automatically. Monitoring can route an incident into a coding task, allowing an engineer to wake up to a proposed fix rather than an untouched alert. User feedback can go straight into the implementation queue. Neither path establishes that the resulting patch is correct: the remaining human work is deciding how much to request and how quickly to review and test the results.

The lights-off proposal, which Horthy introduces with a credit to Dan Shapiro, removes code reading from that remaining work. Investment shifts toward testing, monitoring, rollout controls, and the other systems surrounding implementation. If those safeguards are sufficient, throughput becomes a question of how much work people can ask the agents to do. The maintenance problem appears when those safeguards fail to reveal what the codebase is becoming.

6:016:12
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

6:01 · section reference included

The cost of returning to unread code

The constraints matter. Horthy invokes Addy’s distinction between a small side project and an established enterprise system: advice that works for one may be irrelevant to the other. His concern at HumanLayer is solving hard problems in complex, existing codebases. Such a codebase need not be an old Java application. Horthy suggests that rapidly changing repositories can become difficult for agents after three to six months, an observation from his experience rather than a universal threshold.

HumanLayer tried full lights-off development in July 2025. Horthy describes the eventual recovery problem: an issue resists better prompting, research, and attempts to reproduce it, so a person must investigate code they stopped reading months earlier. While users experience downtime, the engineer has to recover both system behavior and lost familiarity with its implementation. The time saved by skipping review can return as difficult incident work.

Maintainability means being able to change one part of a system without unexpectedly breaking others. Horthy connects the problem to Martin Fowler’s shotgun surgery code smell and points toward software-design work such as John Ousterhout’s. His diagnosis is that models do not reliably maintain or improve codebase quality over time without substantial human steering.

Better performance on an isolated bug or a new marketing site does not establish better long-term maintenance. Horthy explicitly acknowledges that he cannot prove his broader quality claim with the available benchmarks. It is an experience-based diagnosis and an evaluation gap: the tests that show agents improving at individual tasks do not yet settle what happens to a repository after sustained autonomous development.

7:257:34
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

7:25 · section reference included

Why training in the harness matters

Consider Claude Code’s rise. Horthy cites $4 billion and, tentatively, $9 billion in revenue within a year, without specifying an accounting basis. Those figures serve as a growth anecdote, not a verified business comparison. His technical question is more useful: why did this agent stand out when Aider and Codebuff already offered tools for reading, writing, editing, searching with grep, and running bash?

Horthy attributes the difference to training a model against the same harness distributed to users. In his account, Claude Code marked the first such integration by a model lab. The advantage is not merely having the right tool names; training can make the model better at choosing and sequencing those tools in an agentic loop. He cites an OpenAI talk arguing that a harness builder unable to update model weights through reinforcement learning is disadvantaged relative to a builder controlling both the model and its environment.

Using slides credited to Calvin French-Owen, Horthy reduces each agent step to its essential interface: the context window enters the model, and the next action emerges. The harness controls the environment and what comes back into context. Training changes which actions the model is likely to choose. That distinction makes the reward attached to a successful coding attempt consequential.

10:1310:24
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

10:13 · section reference included

What passing tests teaches

A simplified coding-agent reinforcement-learning loop generates multiple attempts at the same problem, records their traces, and scores the results. Weight updates make rewarded behavior more likely and unsuccessful behavior less likely. Horthy introduces SWE-bench Multilingual as an example of this task shape. He characterizes its tasks as roughly 15-minute problems with binary rewards for fixing the issue without regressions, mentioning repository work such as Redis, jq, and Django.

The worked example is a Ruby issue in fastlane: a missing nil check causes a failure and stack trace. Horthy walks through the following evaluation procedure:

  1. Check out the base commit from before the historical human fix.
  2. Keep both the reference solution and the behavioral test patch hidden from the model.
  3. Let the agent attempt the fix and save its patch.
  4. Undo the agent’s edits to test files, preventing it from obtaining success by weakening or commenting out tests.
  5. Apply the held-out test patch and run both the existing and new tests.
  6. Award the reward only if both sets pass.

The reference solution and the held-out tests have different roles: the agent proposes the implementation, while the evaluator checks behavior using tests the agent did not control.

This reward procedure measures passing behavior, not the future cost of changing the implementation. A patch can satisfy the tests without receiving any penalty for poor program design or eroded maintainability. Horthy’s examples are unnecessary exception handlers and expedient type casts, with the latter credited to Vaibhav. These shortcuts illustrate the gap between making a test green and making the system easier to work in.

11:2111:33
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

11:21 · section reference included

Architecture sends its bill later

An execution failure can appear during the coding episode. Bad architecture may impose its largest costs months or years later, when another change exposes tangled dependencies or forces widespread edits. Horthy describes verifying maintainability as far harder than checking whether code runs and tests pass. The difficulty is also one of credit assignment: how should a later maintenance failure alter the reward for a particular earlier coding decision?

Timeline with a training episode and passing tests at left, connected by a dotted line to “REAL COST” and “MONTHS LATER” at right.
A short training episode is separated from architectural costs discovered months later.

Longer and richer evaluations begin to address this gap. Benchmarks and training verifiers must use separate datasets, as Horthy acknowledges; their similar task structures nevertheless help explain what kinds of behavior can be evaluated. His examples progress from longer tasks to more demanding acceptance criteria.

EvaluationWhat it adds in Horthy’s account
SWE-Marathon, from Abundant AIVery long tasks and richer reward channels
DeepSWE, from DatacurveLarge, original tasks in open-source repositories
FrontierCode, from CognitionMulti-PR tasks, test checks, and quality judgments

Horthy describes SWE-Marathon through roughly 400-hour tasks and an Excel-feature-cloning example; these are his characterizations of its scope. DeepSWE’s tasks are written afresh rather than taken from completed historical changes. That originality addresses one route to contamination, although it does not independently establish what every model has seen during training.

FrontierCode adds a particularly useful check: agent-written tests should fail against the pre-patch code. Otherwise, the tests have not demonstrated that they detect the behavior the patch is meant to repair. A judge model also assesses adherence to code-quality rules. Horthy remains skeptical that model judgments alone can resolve the maintenance problem: review agents and extra tokens can raise the floor, but their ceiling still depends on what models can learn from the available training signals.

13:1113:29
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

13:11 · section reference included

Turn review back on, then move decisions earlier

Future models may overcome these limitations. For current work, Horthy’s response is to restore human code review and make it less expensive through earlier planning. The objective is not to abandon automation: use AI to prepare the decisions that would otherwise surface as objections to a completed patch.

Start with product review. Establish the problem, the desired behavior, and any mockups needed to make that behavior concrete. Horthy shows a recent feature mockup as an example of this level of discussion. Small changes can still go directly to the agent; the workflow does not require a large design exercise for every edit.

Next, review system architecture: component contracts, data models, constraints, and how the systems fit together. An architecture document creates a shared high-level picture before implementation. But agreeing on that picture does not settle all the design decisions the agent will face inside the program.

14:4815:01
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

14:48 · section reference included

Design the program before slicing the implementation

Program design fills the gap between architecture and code. Inspect the types, method signatures, program layout, call stacks, and interactions that will realize the architecture. Horthy emphasizes that getting the high-level architecture right is not enough to leave all remaining choices to the model. He cites Dylan Mulroy’s use of call graphs in planning as a concrete way to examine those interactions.

Then plan vertical slices: the implementation order, coordination across repositories, and checks between phases. The plan should explain how the work will progress across the system and how each stage will be tested. Horthy contrasts this with the horizontal plans models often produce, referring to his AI Engineer Miami talk for the fuller treatment. In this recording, the examples focus on documents that make the tests and intermediate steps explicit.

Horthy’s practical estimate is that 30 minutes of planning and alignment can save hours of review, not a controlled measurement of the workflow. The mechanism is straightforward: resolve consequential choices while they are still cheap to change, so reviewing the implementation becomes checking agreed decisions rather than discovering and debating them for the first time. That makes reading every line more feasible.

15:5916:09
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

15:59 · section reference included

Review overload is also a rework problem

A queue of pull requests is not just a volume problem. A well-aligned PR lets the reviewer recognize the decisions already discussed and verify their implementation. A misaligned one forces both reviewer and author back into design work. Horthy uses a PR needing 20% rework as an illustrative case of substantial intellectual and emotional burden, not a measured average. Even a mostly usable patch can be expensive if the remaining changes require difficult negotiation and reconstruction.

AI-assisted planning can shorten alignment by gathering the relevant information. Prior agreement can shorten review, and agents can shorten implementation. These gains reinforce one another when the stages fit together: humans still read the changes and own the code, but they spend less time repairing avoidable misunderstandings after implementation.

17:0117:15
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

17:01 · section reference included

Build within the constraints

The engineering task remains to solve problems under the constraints that actually exist. Models are strong at some parts of development and weak at others. Horthy’s closing advice is to use loops where they help, seek ways to multiply engineering effort, and keep tackling difficult problems without assuming that automation has removed the need for judgment.

He presents HumanLayer as an AI IDE and collaboration platform supplying building blocks for this kind of software factory. Its shared workspace is compared to Figma for Claude Code and Codex, with workflows intended to support the planning and review process described here. Better software-quality verifiers are presented as forthcoming, not as a demonstrated solution already in place.

Slide headed “HumanLayer is,” followed by three statements about collaboration, a faster and safer software factory, and software quality verifiers.
HumanLayer’s slide describes an AI IDE and collaboration platform, software factory building blocks, and better software quality verifiers.

At the close, Horthy invites design partners and founding engineers in San Francisco, says the slides are available, and describes HumanLayer as free for small teams at the time of the talk. The proposed direction is collaborative, model-assisted engineering: make hard changes in complex codebases while retaining enough understanding to maintain what gets shipped.

17:5418:06
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

17:54 · section reference included

Resources

From the talk

  • StrongDM describes its approach to agent implementation, scenario validation, and replacing human code review.

  • A telemetry-based summary of throughput, review burden, bugs, and production incidents across AI-adoption periods.

  • Introduction to a benchmark of software issue-resolution tasks across nine programming languages.

  • SWE-MarathonPaper13:53

    A benchmark of 20 long-horizon technical tasks with human reference solutions and multilayer verification.

  • DeepSWEDocumentation14:04

    Datacurve's benchmark of original engineering tasks, with task examples, methodology, and a live leaderboard.

  • Cognition explains evaluation of code mergeability through tests, scope constraints, and quality rubrics.

  • An AI coding workspace for collaborative research, design, planning, and implementation.

Read the complete timestamped transcript
  1. 0:00

    [upbeat music]

  2. 0:25

    What's up, everybody? How we doing? [audience cheering] Guys, give it up for all the great speakers today so far. [audience applauding]

  3. 0:33

    Um, all right. This is, uh, Harness Engineering is Not Enough and Why Software Factories Fail. And we're gonna click maybe. Ooh.

  4. 0:47

    Oh, that's way too many slides. Hold on, guys. Okay. Um, so we're all racing to put AI coding into production, and, uh, there's been lots been said about loop engineering, and, uh, we should probably write more loops, and, uh, yeah, I don't know, I guess we're doing loops now. [laughing]

  5. 1:06

    Uh, StrongDM built a lights-off software factory where nobody even reads the code, and the prevailing narrative is we should just spend more tokens. You are the bottleneck. The models are good enough.

  6. 1:18

    Code is free. Just ship more stuff. But at the same time, we are starting to see the cracks. Our friend, uh, Mario at AI Engineer Europe begged us to slow down because companies that should not be having outages because of coding agents are having outages due to coding agent mishaps.

  7. 1:37

    Um, codebases are falling apart faster than they ever have before. And our friends at Faros AI actually even did a report since we all picked up all these AI coding tools in January, maybe February.

  8. 1:48

    Um, pull request, code review quality is way down. We're having more comments, longer comments, and tons of PRs being merged without any review at all. Incidents are way up, bugs per developer are way up, and, uh, many people will tell you that you're holding it wrong.

  9. 2:04

    That's the only reason. You're not. Well, maybe you are- [laughing] ... but that's not the point. Um, I've spoken a lot about how to hold it better when it comes to working with AI.

  10. 2:15

    Uh, probably a million views on YouTube at this point across a bunch of different talks. Um, and the basic thing is, like, as engineers, we've been told that if token maxing isn't working, then it's a skill issue.

  11. 2:27

    You just need to spend more tokens. Uh, let go of reading the code. That with enough harness engineering, if we maybe sprinkle some magic words, adversarial review, on enough of our, uh, PR bots, that we can get the best of both worlds.

  12. 2:42

    Ten to a hundred x faster, high quality, and nobody has to do that thing we all hate called code review. Uh, I'm here to convince you today that this is in fact not a skill issue, that no amount of harness engineering or loops maxing can solve what is fundamentally a model training issue.

  13. 3:00

    That's why we say the harness is not enough. Um, and to understand this, we kind of have to grapple and dig into how coding models are trained. I'm gonna talk about what I think the shortcomings are with some of the current benchmarks and what better ones might look like, and we'll talk about how to move faster safely

  14. 3:16

    in the meantime. Um, it's gonna sound like a rant, uh, but there is hope here. Uh, I'm gonna talk about our journey and a bunch of the landmines we've hit, uh, building in this world, a bunch of exciting new techniques that we've been working with, uh, a lot of our users and customers to de- develop, and I

  15. 3:29

    think how we all as a community get to the next chapter of agentic engineering after whatever this thing that we're in. Um, so we use a lot of words here.

  16. 3:37

    I'm gonna zoom out a little bit. I wanna give you kind of like a brief history of the software factory. Um, and there's actually... I don't-- I, I, I just learned this last week.

  17. 3:44

    Uh, it was-- the term software factory was defined at a NATO conference in nineteen sixty-eight. Uh, we're gonna start around twenty twenty-two, like right before AI started coming around.

  18. 3:53

    Um, and basically in a typical twenty twenty-two software factory, you will have some people building stuff. You'll have engineers, you'll have PMs, maybe you have some sort of leadership team that is driving the vision here, and they all decide that stuff needs to get done.

  19. 4:07

    And so you put it in a Tracker, a Linear, a Jira, a Beads, some sort of state machine that tracks what needs to be done, and then someone goes and grabs something off of there, and they build the thing.

  20. 4:17

    And there may be some automated testing in that process, maybe some ma- manual testing in that process. At a certain point, we make this pull request thing. Says, "Okay, cool, we gotta run a bunch of checks, automated stuff.

  21. 4:27

    A human's gonna review the change and review the code, and perhaps we might even have, uh, a human pull it down and test it somehow." And if anything goes wrong here, we loop back to someone builds the thing, uh, and eventually we're ready for prod.

  22. 4:39

    And so we ship it to production, and once it's in prod, it makes contact with our users. And users do, uh, a thing that, uh, we all love. Uh, users love to complain.

  23. 4:51

    I, I love our users. Uh, but yeah, they're gonna ask for things, they're gonna find bugs, they're gonna file feature requests, uh, and that goes back to your team.

  24. 4:58

    You might also add monitoring. And so, uh, you know, what do we want more than anything else? We wanna wake up engineers at three in the morning when something breaks, so they can get dragged out of bed to try to go fix it.

  25. 5:08

    Uh, and we go on and on in this loop, uh, and we ship a bunch of code. Um, and one thing that we noticed here is that, uh, teams figured this out decades ago, is that this someone builds the thing step is usually going to take hours or days in most cases.

  26. 5:24

    And the review part will also take hours or days for large things. And so teams started doing these upfront planning, architecture proposals, sprint planning, and they would collaborate this o- on, on these things as a team, uh, with the hopes that we might decrease the percent chance that something would need to be reworked, that we would be

  27. 5:41

    able to re- reduce the time spent in reviewing every line of code because we aligned on everything ahead of time. This brings us to the agentic software factory. Uh, every company and their mother is talking about how they built a coding agent factory that ships seventy-five percent of their code now.

  28. 5:59

    Uh, literally everybody.

  29. 6:01

    Uh, and so if we look at the software factory from 2022, uh, we just replace someone builds the thing with an agent builds the thing, and we have an orchestration and a harness and a sandbox and a model and computer use, and I'm not gonna get into, like, the details of that.

  30. 6:12

    You can watch 100 talks about that this week, I'm sure. Um, but now the building part takes minutes or hours, but this human part still takes hours or days if you're gonna review the code and you're gonna test the changes.

  31. 6:23

    And so we bring in agentic code review, and we bring in agentic regression testing, uh, and it makes this part faster, but it's probably still the bottleneck. But we can do more loops here.

  32. 6:32

    Why not? Let's do some more loops. So we can route all incidents straight into the factory. Why does someone need to get woken up, uh, and try to fix it when they could just wake up to a pull request and, uh, maybe that fixes the issue for you?

  33. 6:43

    You can take all the user feedback and just stick it straight into the factory so that, uh, people ask for stuff and it gets built. And now your only job is how much things can you stuff into the queue of stuff to do, and how fast can you review and test the changes?

  34. 6:58

    Which brings us, of course, to I'm sure you know, the lights-off software factory, where basically Dan Shapiro coined this, is we no longer read the code. We say, "You know what?

  35. 7:06

    This is going great. That code review thing, no thanks. We're just not gonna do that anymore." Uh, and we invest into all these other parts of the system, your, your testing, your monitoring, your rollout, everything else.

  36. 7:17

    We just write more code and build those systems better, and now our job really is just how m- how much stuff can we ask the agent to build?

  37. 7:25

    I am going to posit that this does not work, uh, and this is why software factories fail. Um, as, as an aside, what I'm going to say has nothing to do with vibe coding.

  38. 7:34

    So Addy had this, uh, great post. I'm gonna just go literally take his quote verbatim, "A developer vibe coding a side project a dozen people will ever run, and a team keeping a 10-year-old enterprise system alive for another quarter share almost no constraints worth naming.

  39. 7:50

    And most of what you hear on the internet is one of these groups of people telling the other group of people how to live their lives."

  40. 7:56

    So if you love vibe coding, please go on. Um, at HumanLayer, what we care about is how do we help people solve hard problems in complex codebases? Um, we use the word brownfield a lot, which historically has meant, like, some 10-year-old Java thing.

  41. 8:10

    I actually think agents really start to struggle after maybe three to six months, especially with the pace at which we can ship now. Um, you can ask me how I know this, and I will tell you that it is because in July 2025, we tried this.

  42. 8:22

    We went full lights off and, uh, if you have tried this seriously for a number of months, you probably found at least one issue that the agent couldn't solve.

  43. 8:31

    Even with your most advanced prompting, you do research, you do reproductions, you just-- you have to go and dig into that codebase that you stopped reading three months ago to try to figure out what's broken.

  44. 8:42

    And in the meantime, your site was down, your users were pissed, and you were-- if you were like me, you were probably miserable reading all this slop code that you let s- s- slip into your system.

  45. 8:51

    And what I wanna get to is basically models have a shortcoming. Um, they can't maintain and improve codebase quality over time, not without a, a decent amount of human steering.

  46. 9:01

    Um, and when I say maintainability, I'm basically talking about issues like it becomes really, really hard to make a change in one part of the codebase without breaking other parts of the codebase.

  47. 9:10

    This is Martin Fowler's shotgun surgery textbook code smell. Um, I'm not gonna say much more about maintainability. There's a bunch of books that you can go read about it.

  48. 9:17

    In fact, John Ousterhout is actually here speaking this week, so you can go ask him in person about the philosophy of software design if you want to. Um, but it brings us to this question of, like, why can't models do software maintainability?

  49. 9:28

    Um, and you may also be saying, "But Dex, you know, surely the models have gotten much better since then." Um, they've gotten better in some ways, but they're still about the same in others.

  50. 9:37

    Um, if you wanna solve one-off problems or vibe code a new mar- marketing site, yes, they got way better since 2025 and 2024. But as far as improving codebase quality, I think, uh, they have not gotten much better.

  51. 9:49

    Now, I cannot prove this because there are no good benchmarks for a model's ability to maintain codebase quality, and I'll get into, like, where we're going with that. Um, but if you've worked with coding agents for a while, a lot of people are posting about this, it's just like you probably have this vibe that they, they generally

  52. 10:04

    make things worse over time and make the codebase harder to work in. And to figure out why this happens, I wanna zoom out to the first great coding agent.

  53. 10:13

    Why did Claude Code go from nothing to four billion, and I think now they're at nine billion in revenue in under a year? 'Cause there were great CLI agents before Claude Code.

  54. 10:24

    You had Aider, you had Codebuff. There was a bunch of tools in this category. They had all the same tools, read, write, edit, grep, bash. Um, so what was the difference?

  55. 10:31

    The difference was, was that the-- this was the first time that a model lab trained a model against the harness that they were gonna distribute it to users in.

  56. 10:40

    Um, and it got really, really good at-- this is just some of the tools, but it got really, really good at calling these sorts of tools in an agentic loop.

  57. 10:47

    In fact, the OpenAI team did a talk in November about basically if you are a, uh, harness builder and you don't own the model weights and you can't RL the model in your harness, you will always be at a disadvantage compared to somebody who owns both the model and the harness.

  58. 11:05

    Um, and I'm gonna cite a couple slides from my buddy Calvin French-Owen, who was a MTS on Codex during the initial launch. Um, but LLMs are just next-token predictors.

  59. 11:13

    Uh, this is a slide from over a year ago where basically as you're doing your agentic loop, context window goes in, next step comes out. And, uh, we're gonna try to do this.

  60. 11:21

    I haven't actually timed this, but we're gonna see if we can do coding agent reinforcement learning in 60 seconds. So what we're gonna do if we wanna train a model to get better at tool calling, better at solving software problems, we're gonna generate a bunch of-- we're gonna give it a problem, and we're gonna generate a bunch

  61. 11:33

    of traces. Try to solve the problem a bunch of different times. We're gonna score them all on correctness and did the test pass and all this stuff. Uh, and then we're gonna reinforce.

  62. 11:41

    We're gonna make the bad behavior less likely, and we're gonna update the weights to make the good behavior more likely. Um, this, one of the classic ones here is SWE-bench Multilingual.

  63. 11:50

    Uh, they're about 15-minute tasks. They're from open source repos like Redis, jq, and Django and all this stuff, and they have binary one or zero rewards on did you fix the problem you were trying to fix, and did you do it without breaking anything else?

  64. 12:03

    Um, and we look at actually a real problem from one of these benchmarks. This is fastlane, which is a Ruby project. Um, basically there was some issue where we weren't checking for nil, and we have a stack trace blow up because you have a null pointer exception.

  65. 12:13

    And in this, um, in this benchmark, you have a base commit that we're gonna check out before the issue was solved by a human in the past. We're gonna give it a test patch that says, "Here's what the behavior should be afterwards."

  66. 12:25

    We have a golden patch. Both these are hidden from the model. Uh, and so we have the agent go try to solve the problem. We store its patch. We undo all the changes it made to any test files, 'cause I'm sure you've seen models comment out tests just to get things working.

  67. 12:38

    And then, um, we're going to apply our golden test patch, uh, and then we're gonna run the test. Old test and did the new test pass, and if they both pass, then, uh, then we get the reward.

  68. 12:48

    Otherwise we don't. Um, and so models are trained to get the test to pass. There's no way in this system that we can penalize it for poor program design or for eroding the maintainability of our systems.

  69. 12:57

    That's why we get things like this, try-catches around things that probably don't need a try-catch, or things like this. I think Vaibhav gave us this example earlier of casting things to other things just so the model can just, just, it just wants to get the test to pass.

  70. 13:11

    Um, and so if you can't verify the, uh, maintainability of the code, it gets way harder to train on this stuff. Um, so you remember this picture. Verifying code quality and maintainability is orders of magnitude harder than the code runs and the test pass because the cost function of bad architecture is measured in months and years.

  71. 13:29

    If you have a coding episode and then you only find out months later that like, oof, somebody vibed this a little bit too hard, it's really hard to propagate that reward signal back across the gap.

  72. 13:39

    And now the frontier is getting better slowly, and since I know someone's gonna be in the YouTube comments about this, yes, I know benchmarks and verifiers are different and they actually have to be separate data sets, but they're shaped the same and the, the structure of these benchmarks is directionally correct, so we're gonna look at these as

  73. 13:53

    like, what is the future of evaluating code maintainability? Um, there's a really cool one called SWE-Marathon from Abundant AI where they do like four hundred hour tasks of like clone all of Microsoft Excel, every single feature.

  74. 14:04

    Uh, and they have some sophisticated reward channel stuff. Uh, DeepSWE from Datacurve is also like large tasks on OSS repos that are not actually in the training set 'cause they were never actually built in the real world.

  75. 14:16

    Uh, and then you have Frontier Code from Cognition, um, which is multi-PR tasks. They do interesting things like, hey, if the model writes tests that don't fail on the pre-patch code, then it gets penalized.

  76. 14:26

    And then we have a judge model that says, "Okay, uh, did this follow all of our code quality rules?" Um, so we're getting better, but I think models judging quality can only go so far.

  77. 14:34

    Uh, 'cause if the new model-- if the model knew what good code looks like, it would probably write it in the first place. Uh, and review agents and throwing more tokens at the problem, it can raise the floor, um, but we're still constrained by what we can teach during RL.

  78. 14:48

    Um, and so I will, I will posit that for now we're stuck reading the code, uh, but we can still move pretty fast. And of course, there's a world where this is solved, uh, in the future, and if you wanna just keep YOLOing prompts until you get to GPT-7 and you don't have to think about this, by

  79. 15:01

    all means, please. Uh, but bitter lesson be damned, we've got some problems to solve, so let's engineer our way out of this. Um, so turning the lights back on, we're gonna put the code review back.

  80. 15:11

    Uh, we're gonna embrace this approach of like how do we plan up front to reduce the chance that we have a long or a difficult review process. We're gonna find leverage.

  81. 15:19

    We're gonna use AI to help with this. Um, the first thing we're gonna do is we're gonna do some sort of product review, understanding what problem we're solving, what's the desired behavior, maybe looking at mock-ups.

  82. 15:28

    Here's a product review I was working on yesterday with a mock-up of a new feature. Um, once we have our product review, we're gonna... And by the way, we don't-- small stuff still just goes straight to the agent.

  83. 15:37

    Um, but once we have the product review, we're gonna also do architecture, system architecture. A lot of people have been doing this for a while, component contracts, data models, constraints.

  84. 15:45

    Um, this is an example of a doc that we build to understand how these systems are gonna fit together and what's like the high-level picture of it. From there, we do something, uh, that I think is really under-emphasized in, uh, agentic coding these days, which is program design.

  85. 15:59

    I think people assume that once you get the architecture right, the model can just cook. Um, but we're all-- I-- we often look into the types and the method signatures, the program layout, and the call stacks.

  86. 16:09

    And so here are some examples. I don't think you'll be able to read this one, but this is like the level of abstraction we're at, is how are we actually gonna lay this stuff out and how are these systems gonna interact?

  87. 16:17

    Uh, Dylan Mulroy from Cloudflare talks a lot about how he's using these call graphs as part of his planning process. I think this is exactly right. Um, and then once we've done the proto- program design, we can do this thing called vertical slices, um, which is the order of implementation, multi-repo coordination, how are we gonna build this

  88. 16:33

    across our entire system, and how are we gonna check it along the way? I've talked a little bit about how models have horizontal plans. I won't go too deep into it.

  89. 16:40

    If you want to learn more about this, you can go watch our talk from AI Engineer Miami. Um, couple shots of a doc like this going through the tests and the steps in between each phase.

  90. 16:49

    Um, the main idea here is thirty minutes over here in pre-planning and alignment can save you hours in review. And so it's actually feasible to still read every line of code.

  91. 17:01

    Um, we'll skip this part. Uh, basically the, the summary here is like you don't have too many PRs. If you're drowning in PRs, you actually have too many bad PRs, um, because a good PR is a joy to, to review.

  92. 17:15

    It's, it's-- you're just reading through it like, "Yep, this is great. This is what we discussed. This is what we talked about." Um, but even if a PR needs twenty percent rework, which is generous for a lot of AI, AI vibe coded slop, um, it's an em- it's an emotional and intellectual burden on both the reviewer and

  93. 17:31

    the submitter. Um, and so if you use model-assisted planning and alignment, your alignment is shorter 'cause you used AI to get all the information at once, your code review is faster because you aligned up front, and your coding is faster 'cause AI did it.

  94. 17:44

    And so you're now you're actually really moving faster, but you're still reading everything and you're still owning the code. So closing advice, um, it's easy to hear all this and be a little bummed out.

  95. 17:54

    Uh, I really like the world where we just YOLO everything and we can just like not have to ever read code ever again. But, uh, we're engineers, and these are just constraints, and models are good at certain things, and they're not good at other things.

  96. 18:06

    And so go figure out how to solve problems given a set of constraints. Uh, use loops. They're great. Go solve hard problems. Seek leverage. Um, if you want help with this, um, we're building HumanLayer.

  97. 18:17

    HumanLayer is an AI IDE and collaboration platform. It's building blocks for your software factory, um, and soon to be better vi-verifiers for software quality. Um, we've got sort of a Figma for Claude Code and Codex style collaborative workspace.

  98. 18:31

    It walks you through the workflows for doing this sort of work. And, uh, we are talking to design partners. We are hiring founding engineers here in San Francisco. And, uh, these slides are live.

  99. 18:43

    You can go get them right now. You can try HumanLayer at humanlayer.com. Uh, it's free for small teams. Go solve hard problems and complex codebases. Thank you all for your energy. [audience applauding] [upbeat music]