AI Engineer Summit 2025
Building Self-Coding Agents
Read the talk
Building an Agent That Helps Write Its Own Code
Augment’s self-coding agent connects repository context, tools, human corrections, and test feedback to implement integrations, diagnose bottlenecks, and improve its own code.
From a talk by Colin Flaherty
Before you start: Familiarity with repository workflows, subprocesses, unit tests, and basic concurrency will help you follow the examples.
What does it mean for an agent to build itself?
How much of a coding agent can the agent itself help implement? At Augment Code, Colin Flaherty’s team explored that question while building tools for software engineering organizations. The backdrop was a rapid change in interaction: autocomplete in 2023, broader adoption of chat in 2024, and, in Flaherty’s 2025 forecast, agents becoming the next major focus. The team had spent the preceding few months building its own agent. Flaherty reports that over 90% of its approximately 20,000-line codebase was written by the agent with human supervision. Here, self-coding means supervised development of the agent’s software, not autonomous retraining of its foundation model.
The first concrete example is adding integrations. To work within an engineering organization, the agent needed access to Slack, Linear, Jira, Notion, Google Search, and the repository itself. Humans implemented the first few integrations, giving the agent examples of where integrations belonged and which interfaces they followed. Asked to add Google Search, it could inspect those patterns, locate the appropriate file, and implement another integration.
That new capability then helped build the next one. The foundation model did not know the Linear API, so the agent used the Google Search integration it had previously written to find documentation and implement the Linear integration. The useful feedback loop was concrete: an implemented tool expanded what information the agent could obtain for subsequent development.
The team also asked it to add unit tests for Google Search. Writing the tests required more than file editing: the agent needed tools to start subprocesses, interact with them, read their output, and avoid hanging indefinitely if a generated test entered an infinite loop. Execution tools turn generated tests into usable feedback.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Using the agent to diagnose its own slowness
Feature generation and test generation were familiar demonstrations. Optimization posed a different question: could the agent investigate behavior before deciding what to change? When the team noticed that its agent was slow, it asked the agent to profile itself. The investigation followed a short loop:
- Add print statements to its own codebase.
- Run subcopies of itself.
- Inspect the resulting output.
- Identify repository file loading and hashing that happened synchronously.
- Introduce a process pool and add a stress test to check the change.
The agent used its editing and execution tools to move from an observed symptom to a specific implementation change. Flaherty describes the optimization but supplies no measured speedup.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Instrument, execute, clarify, and remember
The walkthrough begins with deliberately simple tasks that the agent handles reliably. Asked whether it can search Google, the planning agent finds a Google Search tool, sends the query tests, and reports seeing the first ten results. This separates two responsibilities: the agent decides what to do, while tools let it act on external services and repository files.
The next request asks it to instrument its Google Search tool with logs and generate an example. Repository retrieval resolves that natural-language request to services/integrations/thirdparty/google_search_tool.py. The file-editing tool adds print statements there. The agent then runs a subcopy of itself to exercise the instrumented integration and obtain the requested output.
Execution exposes a missing piece of context: the agent believes Google credentials are unavailable. Instead of continuing with an unsupported assumption, it invokes a clarification tool and offers two alternatives—stub the Google API or guide the user through credential setup. Flaherty supplies a third answer: credentials already exist at .augment/googleapi.json; the agent simply missed them.
The agent then uses a memory tool to retain the credential location for future work. This is a concrete form of learning from interaction: a user correction becomes retrievable information, rather than a change to model weights. With that context, the agent produces logs for the query Python programming language, including returned domains python.org and wikipedia.org. The full task combines search, repository retrieval, editing, execution, clarification, and memory. No single tool performs the whole job; the planning agent connects them as new information arrives.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
The infrastructure behind the tool loop
Augment did not begin by building an agent. Its earlier completion and chat work concentrated on a scalable enterprise context engine, alongside interface design that made human collaboration practical. Those investments supplied the foundation for building the agent in a couple of months. The clarification step in the logging demonstration illustrates why both matter: retrieval helps find relevant information, while the interaction design gives the user a way to repair missing context.
Flaherty identifies three essential capabilities:
- Context access: retrieve relevant information from the codebase and organizational sources such as Slack.
- Foundation-model reasoning: use a capable model to plan and decide how to act on that information.
- Code execution: safely run commands within a customer’s environment and observe what happens.
Context informs an action, reasoning selects it, and execution supplies evidence for the next decision.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Measure capability by complexity
A polished demonstration of an agent generating an entire website can suggest senior-engineer, or L5, capability. But professional development rarely starts from an empty repository. Existing systems contain conventions, dependencies, and messy environments that a greenfield demonstration can avoid. Agents can be useful in that setting without yet matching the broad competence implied by a senior engineering role.
That distinction changes how to organize the capability roadmap. Rather than assuming an agent will first solve back-end work, then front-end work, then testing, Augment found it more useful to think about levels of task complexity across domains. A general-purpose agent can handle some front-end, back-end, security, and testing work, with improvements raising its capability across those areas together.
Human job categories also encourage misleading expectations about strengths and weaknesses. Flaherty gives the example of an agent that struggles with mathematics yet implements a front-end feature very quickly. A weakness in one task does not imply the same cluster of weaknesses that it might suggest in a human engineer. Evaluate the work the agent can actually perform, rather than assigning it a human-shaped skill profile.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Teach organizational conventions through retrieval
An unfamiliar development tool exposes the limits of relying on model knowledge alone. Flaherty asks the agent to create a stack of two pull requests for a new reasoning module using Graphite. The model does not know how Graphite works, so it substitutes Git and invokes git checkout. That produces an action, but not the requested workflow.
Waiting for a foundation-model provider to retrain on the organization’s tools would not solve the immediate problem. Instead, the team adds a searchable knowledge base. A Markdown document explains Graphite, common commands such as gt create, and actions to avoid. Other documents describe the tool stack, test procedures, and style guide. The agent can dynamically retrieve these documents when it encounters something unfamiliar.
With that documentation available, the same request leads the agent to read about Graphite and invoke gt create. The demonstrated improvement is selecting the intended tool after retrieval. In the current Graphite CLI, gt create creates a branch and commit; gt submit publishes pull requests, with --stack available for a stack. The visible command invocation therefore does not establish that both requested pull requests were completed.
Onboarding is part of agent engineering. A new human hire would receive explanations and documents, not just instructions to stare at the repository until everything made sense. An agent likewise benefits from being able to ask questions, with the resulting answers feeding back into organizational documentation.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Cheaper implementation expands what is worth trying
The integrations also changed the team’s product decisions. Initially, it was unclear which integrations, such as Linear or Slack, deserved priority. Ordinarily, the team would make educated guesses, implement a few, and learn from them. Agent assistance made it possible to build the integrations together, reducing the pressure to choose their implementation order. As implementation becomes cheaper, more ideas become practical to explore, and product insight and design can become the limiting factors.
Repository awareness lowers the cost of specifying that work, too. The earlier logging request did not name a file or give precise editing instructions. The agent resolved the intent to the appropriate integration through its knowledge of the codebase. The user could describe the desired change at the level of an engineering task.
The same context supports work beyond code editing. In another example, the team asks the agent to inspect recent pull requests and draft an announcement, which the team then posts to Slack. The announcement describes new CLI-agent tools, including Slack notifications and Linear integrations. The agent also creates the plot of interactive-agent lines of code against date shown earlier in the talk. These tasks draw on different sources and operations: repository changes, communication context, and code history.
The broader point is that context sources can complement one another. Understanding a repository helps identify what changed; access to organizational communication makes those changes useful in another workflow. Flaherty describes combined codebase and Slack access as four times as useful as either alone, an illustration of complementary context rather than a measured multiplier.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
A write lock can still lose updates
The testing example exposes a more subtle failure than choosing the wrong tool. Multiple agents store information for their runs in a shared cache location. The agent-generated save function locks around the JSON dump, so concurrent agents do not write simultaneously and cause an obvious write failure. But it does not read the current shared cache before saving. Each writer can therefore overwrite information another agent has already saved. Serializing writes does not make stale state current.
Consider a small illustration of that failure. Agents A and B both start with an empty cache. A adds {"a": "ready"} locally and saves it. B adds {"b": "ready"} to its own still-empty snapshot, then saves after A releases the lock. The writes happen one at a time, yet the final shared cache contains only B’s entry. The vulnerable Python operation has this shape:
python
import json
def save_cache(path, local_cache, lock):
with lock:
with open(path, "w", encoding="utf-8") as cache_file:
json.dump(local_cache, cache_file)
For this example, the critical section would need to protect reading the current shared state, incorporating the new entry, and writing the result. A lock around only the final dump cannot preserve A’s entry when B’s input never contained it.
A serialized save overwrites another agent’s entry
Constructed example: Agent labels A and B, an initially empty cache, the keys a and b, the value ready, and the exact save order are teaching values illustrating the reported lost-update mechanism.
{"b": "ready"}Operation: Agent B acquires the lock after Agent A finishes, dumps its local cache to the shared file, and releases the lock.
Agent A’s local snapshot
{"a": "ready"}{"a": "ready"}Agent B’s local snapshot
{"b": "ready"}{"b": "ready"}Shared cache file
{"a": "ready"}{"b": "ready"}Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Tests provide the feedback that autonomy needs
Unexpected runtime behavior exposed the cache bug. The team had no test for the relevant concurrency case, so the agent received no test signal that its implementation was wrong. A useful regression test for the illustrated case would give both agents the same initial snapshot, let each save a distinct entry, and assert that both entries survive. Testing only that a save completes or that the resulting JSON parses would miss the lost update. Caches and parallel execution need tests that check preservation of state, not just absence of exceptions.
Augment’s internal bug-fixing benchmark gives a second view of why feedback matters. Flaherty compares changing the foundation model with enabling repeated test-guided attempts:
| Change | Reported score improvement |
|---|---|
| Foundation-model upgrade spanning about six months | 4% |
| Four iterations of proposing a fix, running tests, and using feedback | 20% |
These are reported gains on the internal benchmark. The talk does not identify the models, baseline scores, or whether the percentages mean relative changes or percentage-point increases. The mechanism behind the larger reported gain is explicit: the agent can inspect test failures, revise its proposed fix, and try again.
Better tests enable more autonomy because they give the agent actionable evidence and give engineers a stronger basis for trusting the result. A test harness is therefore part of the agent’s problem-solving environment, not merely a final gate after it finishes writing code.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Code remains; the engineering work changes
Flaherty closes by contrasting the agents’ recent usefulness with their earlier limitations. When agents help implement their own tools and improvements, development can compound: a new capability becomes available for the next task. Code still matters as a specification of the system, even as engineers spend less of their effort producing every line directly.
That shift makes strong test harnesses more valuable and poorly tested parts of a codebase more consequential. It also changes product development: cheaper implementation increases the importance of deciding what to build, gathering customer feedback quickly, and turning that feedback into insight. At the time of the talk, Augment’s agent release was still forthcoming. The working prototype already showed the engineering pattern behind it—context to understand the task, tools to act, human input to resolve gaps, and tests to expose mistakes.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
From the talk
Official instructions for querying and updating Linear data through its GraphQL API.
A walkthrough of creating stacked branches, submitting pull requests and updating them during review.
Further reading
Colin Flaherty and Tongfei Chen explain their benchmark agent, model ensembling, experiments and limits of benchmark coverage.
An open-source coding agent with file editing, command execution, Docker evaluation and candidate-solution ensembling. Setup requires model API access.
Updates since the talk
The April 2025 announcement introduces Augment Agent, persistent Memories, terminal access and external integrations.
Read the complete timestamped transcript
- 0:00
[on hold music] Hi, everyone.
- 0:17
Thanks for coming today. So I wanna talk to you about something that sounds like science fiction, but very much is reality. An AI coding agent that helped build itself.
- 0:27
My name's Colin. I'm an AI researcher at Augment Code, a company building AI-powered dev tools for software engineering orgs, and I wanna share with you a little bit about my-- our journey working on AI coding agents.
- 0:41
So zooming out, AI dev tools is a fast-changing space. Everyone remembers in twenty twenty-three, we were all talking about autocomplete models, GitHub Copilot being the one that probably really comes to mind.
- 0:54
In twenty twenty-four, chat models really started to penetrate software engineering orgs.
- 1:00
In twenty twenty-five, though, we think AI agents are gonna dominate the conversation about h- how software engineering is changing.
- 1:09
So naturally, a few months ago, we started building our own agent at Augment. I wanna show you a sneak peek of what we built and share some hard-learned lessons about how this tech works.
- 1:20
And I just wanna, you know, reiterate, I've been really amazed to see the extent to which this agent has helped build itself. Uh, on the kind of fun statistic, so we have about twenty thousand lines of code in our, uh, agent code base, and over ninety percent of that was written by our agent with, with human supervision.
- 1:39
So what does it mean for the agent to write itself? Implementing core features, so one of the first things we ha- we had to add was third-party integration. So our agent, you know, if it's gonna work like a software engineer, it needs to interact with Slack, Linear, Jira, Notion, search Google, um, muck around in your code base.
- 1:59
And so we wanted to have the agent help us build these features. Uh, we had it-- uh, we found after we added the first few ourselves, when we a-asked it to, you know, give it an instruction, like add a Google Search integration, it was able to go look in our code base for the right file to add
- 2:13
it in, uh, figure out the right interface to use, and go add it. Uh, one kind of fun an-anecdote is when we were adding the Linear integration, uh, it didn't know the Linear API docs.
- 2:25
The foundation model we're using, uh, didn't have those memorized. And so it used the Google Search integration, which it had written previously, to go look up the Linear API docs, and then was able to add that.
- 2:38
Uh, we used it to write tests. So we found if we a-asked it something like, "Add unit tests for the Google Search integration," it was able to go add those.
- 2:48
Uh, in order to do this, we just had to give it some basic process management tools, things like running a subprocess, interacting with it, uh, not hanging if there's an infinite loop in some test it wrote, and, uh, reading output.
- 3:02
Um, I think this is super interesting, so everyone's seen the Twitter demos of these agents writing features and writing tests, but I haven't yet seen a compelling example of them performing some kind of optimization.
- 3:15
Well, over the course of our project, we no-noticed the agent was pretty slow, and we weren't sure why. So we asked it to profile itself, and what it ended up doing, using all these tools we'd given it, was add some print statements to its own code base, run essentially subcopies of itself, look through these print statements, and
- 3:32
it figured out there was a part of our code base where we were loading up all the files in the user's repository, uh, synchronously and hashing them synchronously. And then it added a process pool for these to speed it up and a stress test to confirm it was all working.
- 3:47
And by the end of this, we reached about twenty thousand lines of code, and again, over ninety percent of that was written by the agent with, with our help and supervision.
- 3:57
So let's walk through a quick examples-- a, a couple quick examples to see how the agent works. I focus on simple examples where it's reliable, so you can, uh, follow along easily.
- 4:10
So here I ask the agent, "Are you able to search Google?" And then it notes that it found a tool called Google Search. For those who aren't familiar with the notion of tools, I'm, I'm sure most of you are, but I'll just kinda quickly reiterate.
- 4:21
The idea is we have this kinda master-level agent that's doing all the planning, and it has access to certain tools that it can use to interact with its, its environment, whether that's the third-party integrations I talked about, like Google, or it's editing a file in the user's repository.
- 4:36
And then it wants to confirm this-- that this Google Search tool is working, so it sends a query to it of tests. And the agent, uh, uh, responds to us, "Yes, I can search Google, and I see the first ten results."
- 4:48
Let's try something a little bit more complicated. I ask it, "Instrument agent's Google Search tool with logs, and then generate an example." Then it uses our retrieval tool, which is, you know, al-allows you to search, uh, the local, uh, code base, and it's looking for a file related to Google Search integrations.
- 5:04
It finds this file deep in our directory hierarchy at services/integrations/thirdparty/google_search_tool.py. And then it calls its file editing tool to quickly and performantly edit that file to add those print statements.
- 5:20
Uh, this is a continuation of the last example. So it added those print statements, and now it wants to run, uh, a subcopy of itself, so it can look at the output of those print statements, uh, 'cause we asked it for example logs.
- 5:33
Uh, but in doing so, it finds that we don't have Google, uh, credentials authorized, so it uses its clarify tool to ask for clarification from the user. It asks, "I don't see Google credentials.
- 5:43
Would you like me to, one, add stub for Google API, or two, guide you through setting up credentials?" I know that the credentials are actually stored in .augment/googleapi.json. It, it had just missed this.
- 5:57
And then here's a, a really cool extra feature we have, which is we want the agent to continuously learn as it interacts with humans.
- 6:05
And so here it thought, well, it's probably a good idea to remember where the Google credentials are stored. So it called this memory tool to create a memory of the-- where, where the Google credentials are stored to save that for later.
- 6:17
This is another example of if you have that really good context engine, uh, it- it's really critical to getting the agent to, to work well. And so now we get our output.
- 6:26
So it prints out these logs that it searched with an example string, Python programming language, and it gives some, uh, uh, example URLs that were returned by Google, python.org, and wikipedia.org.
- 6:37
So we had the agent add logs to itself, run itself, learn from user feedback, and it used all kinds of tools: Google Search, codebase retrieval, file editing, clarification from the user, and, and memorizing, uh, useful learnings.
- 6:51
So let's fast-forward and talk through some of our lessons building this. Uh, I just wanna note, you know, we've been working on AI coding tools for a couple years now, and we didn't set out to build agents.
- 7:02
We've worked on things like completion models and chat and so forth, but our focus the whole time was around building a super powerful, scalable, enterprise-ready context engine because we knew no matter what, no matter how good these LLMs get, you're going to need that context.
- 7:18
And we also thought a lot about how do you build great UI/UX so AI can seamlessly, um, interoperate with humans. It turns out this context engine and all these thoughts around design provided a great foundation for us to quickly build this agent in just a couple months.
- 7:33
The three most important things were that access to context, so that context engine with all those different types of context sources, whether it's Slack or the codebase, the reasoning capabilities from a best-in-class, uh, foundation model, and that code execution environment, so you can safely run, uh, commands in a, a customer's, uh, environment.
- 7:54
So let's talk through a couple assumptions that we frequently fall into-- we, we have frequently fallen into and remedied and, and some of you might encounter as well.
- 8:04
Uh, so the first one is that, you know, L5 agents are here. The senior soft-- agents are at senior software engineering level. Uh, if you look at the Twitter demos, it, it oftentimes can seem like this.
- 8:14
You have an agent write an entire website all on its own.
- 8:18
In reality, professional software engineering is where-- rarely zero to one, and the environments that we're coding in are, are a lot messier than what those demos, uh, show you.
- 8:28
As a result, these tools, you know, aren't quite there yet, but they're still super useful.
- 8:35
Um, the way pe-- One framework I've seen people think through when they're trying to figure out, you know, how to use these agents and how to build them is they think agents will take over entire categories of tasks.
- 8:45
So first you build an agent that will, uh, solve back-end programming, and then you build an agent focused on front-end, and maybe one focused on testing. In reality, this technology is very general purpose.
- 8:58
And so instead of thinking about categories of tasks, we found it more helpful to think through levels of complexity. So our agent's, you know, kinda good, decently good at tasks across front-end, back-end, security, and so forth, and, and we're, we're improving the capability level along all those fronts at once 'cause, you know, again, it's a very general
- 9:17
purpose technology. Um, we've also seen people anthropomorphize agents, so they think they're just like human software engineers, and they map the characteristics of a weak software engineer to what they think a weak agent would look like and vice versa for strengths as well.
- 9:34
In reality, agents have different strengths and weaknesses than humans, and so you may have an agent that can't do math, but it can implement a whole front-end feature way faster than any human could, and it's important that we keep this in mind.
- 9:48
Uh, let's talk through a couple reflections and lessons.
- 9:53
Uh, so here I ask Augment, "Can you create a stack of two PRs for the new reasoning module using Graphite?" Unfortunately-- Uh, so Graphite is a, a version control tool for working with Git.
- 10:03
You can, like, stack PRs. It makes it a lot easier to review. Unfortunately, foundation models have not memorized how Graphite works, so our general agent responds, "I don't know what Graphite is, so I'll use Git," and then it calls our terminal tool to run a command running Git checkout.
- 10:18
Well, what do we do here? We wanted it to use Graphite. We can't necessarily go tell OpenAI or Anthropic to retrain the model to understand Graphite overnight. So what we came up with was this notion of a knowledge base, which is essentially a set of, a, a, a, a sort-- a set of information that we want the
- 10:35
agent to understand that it currently doesn't. We can kinda patch holes. Um, one thing we wanted to add to it was this Graphite knowledge, so we created this markdown file describing Graphite, how to, you know, run common commands, things like how to create a PR, use gt create, some things not to do.
- 10:51
Um, we created other files in our knowledge base for things like details on our tool stack, how to run tests, the style guide. And then we added this into the context for the agent, so it can dynamically go search in this, um, knowledge base when it doesn't understand something.
- 11:07
And, uh, once we added this, then, you know, we go ask it, "Can you create a stack of two PRs for the new reasoning module using Graphite?" And it calls that knowledge graph, reads about Graphite, and then can run the gt create command.
- 11:20
So what's the learning here? Well, onboarding the agent to your organization is crucial. The analogy I like to think about is if you just hired a, a new, a new hire software engineer, you wouldn't go tell them to just stare at the codebase for three days to figure out how your tech stack works.
- 11:34
You'd let them ask you questions. Maybe there's some things they didn't understand, and you add some additional documents to your notion. Uh, we should think similarly about agents.
- 11:45
Uh, recall I was talking about how we had all these, uh, third-party integrations we added, whether it's Linear tools or Slack tools and so forth. But when we, when we were working on these, we weren't really sure of which ones to prioritize and start with on our product roadmap.
- 11:59
In a normal world, we'd make some educated guesses, we'd implement a couple of them and go from there. But with the agents, we were able to iterate them, um, uh, build them all at once.
- 12:08
And so this starts to change the calculus around how product management works. Uh, if you can build everything at once, well then, maybe, um, maybe, uh, engineering hours aren't the bottleneck on what we build, and it starts to, uh, we start to be bottlenecked a little bit more on good product insights and good design.
- 12:28
So when code is cheap, you know, you can explore more ideas.
- 12:32
Uh, also recall earlier, we were talking through this example of, you know, instrumenting the agent's Google Search tool with logs, uh, and it was able to go find the file to edit.
- 12:41
Notice here how we didn't have to give a very precise instruction to the model. We just told it in natural language, like how we'd talk to another engineer to instrument the agent's Google Search tool, and it was able to go figure out the file to edit.
- 12:53
This only worked because we had that really good, uh, code-based awareness.
- 12:58
Um, we can also use the agent for tasks outside of writing code, but still within the software development life cycle. So here, we asked it to look at the latest PRs, uh, in our code base and generate an an- an announcement on them, and then we posted it to Slack.
- 13:12
And so, uh, it was titled New Tools for this, uh, CLI Agent, and we talked about some things around Slack notifications and linear re- uh, linear integrations. This only works as we had that Slack integration and, and understood our code base well.
- 13:27
This, uh, figure may look familiar from the beginning of the talk. Um, we actually had the agent make this as well. So we asked it, "Make me a plot of the interactive agent's line of code as a function of the date."
- 13:40
Um, and so good context is critical. In all three of these tasks, we needed to pull in some different context from some different sources, and it's not just the code base.
- 13:49
Context comes in many forms. And also note that it's multiplicative, so having access to the code base and having access to Slack is four X as useful as just having access to one of those.
- 14:01
Finally, I wanna, uh, switch over and talk about, uh, testing.
- 14:07
So, uh, here's a really, uh, hard-to-test edge case in our code. The agent actually wrote this, um, and we only caught it because of some unexpected runtime behavior. So we have these caches that the agents store relevant information for their runs in.
- 14:22
Uh, we can run multiple agents in parallel, and they all write to the same cache location. And the agent wrote this save function to save to that location. And it had this lock around the JSON dump, so there were no race conditions that would explicitly fail if you had multiple agents all writing to this cache at the
- 14:41
same time. But notice here how there's no read before writing to the cache, and as a result, you could hit a race condition where if multiple agents are running in parallel, they're all overwriting each other's caches.
- 14:54
And when the agent wrote this save function, why did it miss this issue? Well, these agents sometimes make mistakes, and this is a hard-to-test situation. There's some parallel programming.
- 15:04
There's a cache involved. And so we didn't have a test, and because we didn't have a test, the agent messed up. My learning here is we need to be very careful about having sufficient tests.
- 15:17
Um, we have this pretty incredible statistic. So we have a internal bug fixit- bug-fixing benchmark. Uh, we found when we upgraded our foundation model by about six months, our scores from this benchmark improved by 4%.
- 15:32
But when we added, uh, the, uh, ability to run tests so the agent could suggest a fix for the bugs, run tests, look at the feedback, suggest another fix, run tests, and do that four times, that led to a 20% gain on this benchmark.
- 15:47
So what's the lesson? Well, better tests enable more autonomy. You can trust these agents more, and it just makes them smarter.
- 15:58
What does software engineering look like in a world of agents? Well, agents didn't work last year, but now are pretty good. If you'd asked me two years ago if we'd be working on this tech, I frankly wouldn't have guessed it.
- 16:11
There's a compounding effect where these agents are starting, starting to help build themselves, and that's only going to accelerate the pace at which they improve. Code isn't going away because it's a spec of our systems, but our relationships to it is changing.
- 16:25
Good test harnesses are becoming more important than ever, and we need to be es- especially careful about those parts of our code bases that tend to be less well-tested.
- 16:35
And the calculus of product development is changing. If code becomes super cheap to write, then the focus-- our focus is more on good product work, gathering customer feedback quickly, building insights.
- 16:49
We're really excited for how this tech's going to positively transform our industry, and we'll be releasing our agent soon, so I'm really excited to share that with you. Uh, find me after the talk if you wanna discuss any more.
- 17:00
Thanks. [upbeat music]