AI Engineer World's Fair 2026
Agentic SDLC at Uber - Building Blocks for Uber’s Software Factory
Read the talk
Building Uber’s Agentic Software Factory
Uber’s software factory connects governed model access, shared tools, ready-to-run environments, and operational knowledge to a feature workflow that validates changes before CI.
From a talk by Uday Kiran Medisetty and Adam Huda
Before you start: Familiarity with pull requests, CI, model context windows, and MCP as a way to expose tools to agents will help.
What changes when agents generate most pull requests?
With a few thousand engineers across twelve global tech sites, Uber is already dealing with the consequences of widespread agent use. Uday Kiran Medisetty reports that more than 70% of PRs now involve local or cloud agents, and lines of code per engineer doubled year over year. Uber also reports more than 250 automated migrations, cumulatively covering nine million lines of code. These measure adoption, output, and toil reduction; they do not by themselves establish software quality.
The infrastructure foundation predates the agents. Six years of investment in monorepos and Bazel gave Uber a common base on which to automate engineering work. Medisetty introduces six building blocks, before Adam Huda combines them into an end-to-end feature example. The components are at different stages of maturity and rollout: the walkthrough describes a developing software factory, not a uniformly deployed system.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
A shared boundary for model requests
The Model Gateway begins with three requirements: keep PII from leaving Uber’s perimeter for vendors by default, strictly bound the latency added by guardrails, and attribute every request to its user, project, and team. Internal applications, coding harnesses, and external use cases all go through one OpenAI/Anthropic-compatible endpoint. This makes the gateway the common place to enforce those requirements.
Requests pass through identity and authentication middleware using SPIRE, followed by a data anonymizer and an AI guard. SPIRE supplies workload identity; that should not be confused with the full identity and delegation history of an agent. Medisetty reports redaction of more than twenty PII types, five specialized safety and policy models, and execution of the described middleware in under 100 milliseconds. The talk does not specify a latency percentile.
Caching and token optimization sit at the same boundary. Each request maps to a project in Uber’s catalog, with caller, user, and team attribution available both in real time and in the data lake. That accounting supports portfolio-wide spend tiers and guardrails. Audit logs and session traces also feed benchmarking and self-improvement work, so the gateway is both an enforcement point and a source of evaluation data.
For an engineer, the intended interface is a vanilla client configured with a project ID; the platform handles the surrounding controls. Medisetty reports more than 800 internal projects and more than 100 million model requests per day through the gateway. It routes to frontier and open-source models, hosted either inside Uber or by vendors.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Make tools accessible without filling the context
Model access did not automatically make Uber’s systems usable by agents. Thousands of internal APIs initially lacked agent-accessible interfaces, while SaaS tools each brought their own authentication and setup. Exposing enough MCP tools also imposed a token tax. The MCP Gateway consolidates access: an automated crawler projects internal APIs into MCPs with a configuration change, while the gateway hosts SaaS MCPs for services such as Google, Slack, and Jira and handles token exchange. Engineers get one entry point and a common installation path.
Uber then changed how agents consume that tool surface, in successive steps:
| Calling pattern | What changes |
|---|---|
| Direct MCP | Agents access MCPs directly. |
| OmniMCP | One installed MCP discovers and invokes others in the gateway. |
| CLI projection | Tool responses need not all enter model context. |
| Code-mode skill | Generated Python scripts optimize expensive tool workflows. |
Discovery reduces the need to expose everything up front. CLI and code-mode approaches also address the response side: intermediate data can be processed outside the model’s context, with only the useful result returned.
A small Python filter illustrates that last operation. Given a JSON array of tool-result records on standard input, it retains only identifiers and names before returning the result to the agent:
python
import json
import sys
records = json.load(sys.stdin)
selected = [
{"id": record["id"], "name": record["name"]}
for record in records
]
json.dump(selected, sys.stdout, ensure_ascii=False)
sys.stdout.write("\n")
The important boundary is where the reduction happens: Python sees the full payload; the model receives the selected fields. Uber’s code-mode skill generates scripts for its highest-token tool use cases.
Medisetty reports more than 1,000 MCP tools and over 40% fleetwide savings from the optimization efforts. He does not specify the savings denominator, baseline, or measurement window, so this is not a general token- or cost-reduction benchmark.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Give agents an environment that is already prepared
Once agents have models and tools, they need somewhere to work. Uber already used DevPods, remote development environments built for monorepos containing millions of lines of code. Adapting them for agents adds requirements for long runtimes, isolation, rapid startup, many concurrent environments, and availability across global sites.
Uber keeps pre-provisioned Kubernetes balloon pods ready for allocation. Repository snapshots and search indexes are already present, so an agent does not have to prepare its workspace from scratch. Medisetty says agents can begin working within seconds.
The workspace boundary also changes. Earlier DevPods came in language flavors such as Go, Java, and Android. Agents and engineers increasingly need to cross those boundaries, so a mega DevPod brings all repositories into one environment for autonomous coding. Simplified startup also lets non-engineer employees begin using agent harnesses without assembling a development environment themselves.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Manage skills as a lifecycle
As engineers began writing skills across repositories, three problems appeared: duplicated work, difficult discovery and configuration, and uneven quality. Uber responded with a managed skills marketplace containing both core and domain-specific skills. Lint checks and automated reviews establish a baseline before those skills reach agents.
A single command supports plugin discovery and installation. Persona-based defaults go further by installing relevant skills automatically, allowing an agent to select them without requiring each engineer to configure them first. The next layer is feedback: traces, comments, and continuous evaluations return evidence to skill authors so they can improve behavior. Medisetty describes this as an active investment and reports 2,500 skills with more than 20,000 skill executions per day across the fleet.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Connect the context agents repeatedly rediscover
Execution traces exposed another source of wasted work: agents spent substantial time finding basic context. Before changing a service, they needed its location, dependencies, owner, and implementation conventions. That information was scattered across twenty to thirty systems, each requiring its own skills or MCPs. Repeated discovery consumed tokens, added latency, and made outcomes less predictable.
Uber consolidates those relationships in a context graph. Medisetty reports 150 unique node and edge types and forty million entries. The graph connects mobile applications, backend systems, the data lake, design documents, Jira, and incidents. Skills for on-call root-cause analysis, planning, data analysis, and security scans are being connected to this shared source of context.
Consider the example question: how many mobility trips in India are cash trips? Answering it requires more than generating plausible SQL. The agent must resolve the business concepts, identify the relevant tables, and determine which common table expressions to construct. In early internal comparisons with and without the graph, Medisetty reports improvements in token use, turns, and latency, but supplies no numerical effect sizes. The graph’s role is to make those dependencies easier to resolve before the agent builds the query.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Expose the same capabilities in Slack, CLI, and web
Cortana, Uber’s internal AI assistant, packages skills, MCPs, and graph context into Slack, CLI, and web interfaces. An employee can ask a question, and the assistant can retrieve context, invoke a skill, and inspect code across codebases. The surface changes; the underlying capabilities remain available.
Employees can personalize Cortana with custom prompts and skills, then connect the resulting persona to a team’s Slack channel. Multiple people can collaborate in that channel, including on the earlier India cash-trip question. Medisetty reports 300 unique personas created in the preceding month and more than 20,000 sessions per day.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
From a stadium pickup idea to a design
Huda’s feature walkthrough starts with a rider leaving a busy World Cup stadium. Could the app suggest a better pickup location away from the crowd? The team discusses the idea in Slack and tags Cortana. With access to the context graph, the assistant helps investigate the business opportunity, then carries the work into its web interface. Research considers previous large venue events and candidate stadiums.
The example then moves through requirements and design:
- Propose a North America rollout for the stadium feature.
- Create initial Figma mockups with two variants whose button strings differ.
- Plan an A/B experiment to compare those variants.
- Identify existing app screens and backend capabilities that can be reused, along with the code changes needed.
This is a proposed feature workflow, not evidence of a completed rollout or an experiment result. Huda contrasts the potentially weeks-long alignment process with reaching a prototype quickly, without giving a measured new duration.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Hand off implementation, but stop before CI
Cortana hands the design to Minion, Uber’s cloud coding agent. Minion supports both interactive and autonomous operation. Its DevPod provides a full build environment and access across repositories, allowing the stadium feature’s frontend and backend changes to be developed together.
The demonstrated workflow stops at a draft PR, without immediately sending it to CI. The boundary is deliberate. Generating changes works well for many toil tasks, but an end-to-end feature needs behavioral validation before it consumes shared CI resources. Earlier validation is part of capacity management, as well as a way to catch mistakes closer to generation.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Validate the feature inside the agent’s working loop
Uber separates the agent’s inner loop from the outer loop where CI normally runs, then moves more checks inward. The validation sequence extends beyond static analysis:
- Detect and repair static-analysis issues.
- Use a skill to launch the app in a simulator and capture a screenshot.
- Compare the screenshot with the Figma specification.
- Start the backend service in staging and validate frontend/backend integration.
For the stadium feature, this lets the workflow examine both the visible interface and the connection to its service before advancing to CI. Staging validation remains distinct from production deployment.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Use CI and review to add evidence
Inner-loop validation does not eliminate CI failures. Once a change enters the outer loop, Uber’s self-healing CI can repair many issues encountered there. Code review is also split across the two loops: a smaller, faster model reviews earlier, while a more powerful model uses reasoning and a review skill for deeper outer-loop review.
For an autonomous Minion diff, the human reviewer needs to see what happened after the first generation. The PR carries a table of the checks performed, including screenshots. That evidence makes the agent’s validation and improvement work inspectable; it does not guarantee correctness or remove the need for human judgment.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Schedule maintenance within shared capacity
More generated code increases the importance of maintenance. Features and services can enroll in maintenance skills. Returning to the stadium example, once variant B is no longer needed, a feature-flag cleanup skill can remove the obsolete variant and its associated branching logic. The example assumes that cleanup decision has been made; it does not establish which variant won an experiment.
These jobs run through a managed loop, rather than thousands of independent, unbounded schedules. A shared configuration surface can place work on Sunday, when CI has more available capacity, and limit how many resulting diffs engineers face on Monday. Scheduling execution and controlling review volume are separate requirements: spare compute does not imply unlimited reviewer attention.
The maintenance loop also produces learning signals. Review comments and whether a generated diff lands become labeled data for improving the skill that proposed it. At roughly a monthly cadence, Uber looks through incident reviews for lessons that can become new maintenance skills and be applied across services. Maintenance therefore feeds both individual code changes and the next version of the automation.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
The next limits are experiments and decisions
The workflow extends beyond the stages shown—Huda also mentions monitoring—but increased implementation throughput creates new constraints. More code places more strain on infrastructure, making CI capacity and foundational investment increasingly consequential.
Experiment capacity is finite too: the organization cannot feasibly test every feature it can generate. Decision-making becomes another bottleneck. Once building a feature is relatively easy, implementation feasibility no longer settles the product question. The factory still needs people to decide whether that feature should be built.
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
How SPIRE attests nodes and workloads and issues cryptographic workload identities through its server and agents.
Further reading
Explains SPIRE-backed workload identity, scoped token exchange, delegation chains and policy enforcement across Uber's AI and MCP gateways.
Describes Uber's multistage review-comment pipeline and its approach to false positives, usefulness and developer feedback.
Read the complete timestamped transcript
- 0:00
[upbeat music] Hey, uh, let's get started. Uh, good morning, everyone.
- 0:15
I'm Uday. I'm here with my colleague, Adam. We'll talk about our journey towards managed software factory. And in the beginning, in the first part of the talk, I'll talk about the key building blocks that we are investing in, and later, Adam's gonna to-talk about how we take all of these blocks to build an end-to-end cohesive solution for
- 0:32
our engineers. To set some context, we have a few thousand engineers across twelve global tech sites. Over the last year, all of the investments we made in agentic AI have led to more than seventy percent of our PRs now either by local or cloud agents.
- 0:49
And all of this led to twice the number of lines of code per engineer year over year. And this extends way beyond coding, and we see it in every aspect of the engineering life cycle today.
- 1:00
And we are also accelerating toil at a-- toil reduction at a massive pace. Uh, we handled more than two hundred and fifty automated migrations, cumulatively nine million lines of code automatically for our engineers.
- 1:12
And before even the building blocks, um, you know, one-- all the investments we made over the last six years on moving to monorepos, moving to Bazel, all of that also laid a really solid foundation for us to accelerate this.
- 1:27
So the first, I'll cover all of these six building blocks, and Adam's gonna talk about a specific example and show how that feature can be built end-to-end, uh, with all of these.
- 1:38
And all of these are in various stages of maturity and rollout within Uber, but we want to give everyone a sneak peek of what we are up to.
- 1:46
So let's go to the building blocks, the six building blocks one by one. The first one is Model Gateway. This is one of our earlier investments. The three things that we wanted to mensure-- ensure was no PII ever leaves our perimeter to any of the vendor by default.
- 2:02
And any guardrail that we add here, the latency of that is strictly bounded. And every request that goes through this, whether it's, uh-- and we need to be able to attribute per user, per project, and per team.
- 2:15
So we have a Model Gateway, and we made sure all of our internal use cases, our coding harnesses, our external use cases, they all go through one single OpenAI Anthropic-compatible endpoint.
- 2:25
It goes through a series of middlewares. The first one is iden-identity and authentication using Spire. Uh, we have a data anonymizer that redacts twenty plus PII types. We have a AI guard that has five specialized models that handles various parts of safety and policy that we want to ensure, and all of that runs under a hundred milliseconds.
- 2:46
We also are investing in all kinds of caching and token optimization strategies at this layer. And every request that goes through this, we are able to attribute to a specific project in our catalog, and we can attribute per caller, per user, per team, both in real-time but also in our data lake.
- 3:05
This enables us to create all kinds of spend tiers and guardrails in a holistic way across our portfolio. We also use this layer for capturing audit log session traces, which are then plugged into our benchmarking and all kinds of sim-- self-improvement loop efforts.
- 3:23
And for an engineer at Uber, you take the vanilla client, you set the project ID, and we, and we take care of everything else. Today, we have eight hundred plus projects internally going through this, cumulatively handling more than a hundred million model requests per day.
- 3:38
This includes both the frontier models and also open source models, whether that is hosted in our infrastructure or some of our vendors.
- 3:46
The next is how do we provide tools to all of these models? Last year when we started on this journey, we had thousands of internal APIs, but none of them are agent accessible out of the box.
- 3:57
And we had so many other SaaS tools, and each one of them have different way to authenticate, different way to set up, which is a lot of hassle for, uh, for everyone.
- 4:06
And once you end up with enough MCPs, they'll all add up to and c-- they-- and have a massive token tax.
- 4:14
Similar to Model Gateway, we have an MCP Gateway that handles whole bunch of middlewares for, for engineers, and we have an automated crawler that looks at our internal APIs and projects all of these into MCPs with one single config change.
- 4:29
And we do the same thing even for our SaaS MCPs. Whether it's Google, Slack, Jira, all of this, they go to the MCP gateway. We ha-- we host them, we do the token exchange.
- 4:39
So for all the engineers, they go through one single entry point, one common way to install any MCPs. This simplified a lot for all of our engineers and employees.
- 4:49
And then the whole bunch of token optimization strategies. We initially had direct MCP pattern. Earlier this year, we created OmniMCP, which is one single MCP that you install, which can discover and invoke any MCPs within the gateway.
- 5:05
And couple of months ago, we projected all of these MCPs into CLI pattern so that even the response doesn't eat up in your context. And of late, we also have a, a codemod skill which is auto-installed, which on the fly creates Python scripts to hyper-optimize some of the top MCP token consumer-- consuming use cases.
- 5:27
And all of this led to like now we have thousand plus MCP tools and, uh, just with these optimization efforts, we've saved more than forty percent fleetwide savings.
- 5:41
So once we have the models and the tools, we need a place to run all of this. For many years we had DevPod, which is our cloud, uh, remote environments.
- 5:51
We, we, we had this because we had like large monorepos with millions of lines of code, and this is how engineers work at Uber. And now we took what we had with DevPods and we a-agentified that.
- 6:02
Now we need An environment for agents to run for a longer period of time. They need to be quick, they need to be isolated. We can install any number of them and they need to be globally available across all of our sites.
- 6:15
So we have a pre-provisioned Kubernetes balloon ports. When an agent requires a new environment to run, it can take one of that, which is already pre-provisioned. It has all of the repositories already snapshotted.
- 6:26
The search index is already built, so the agents can start working within a matter of seconds.
- 6:32
The next thing we noticed is the, the, the roles of engineers are getting blurred. We used to offer a DevPod per language flavor for Go, Java, Android and so on.
- 6:44
Now, we need agents to work across repositories and engineers also to work across repositories. So we have a mega DevPod that has all of the repositories in one, one common place, and this is what we use for our autonomous coding agents now.
- 6:57
And even for our non-engineer employees, we are providing a simple way for them to get started with any of the agent harnesses in matter of seconds.
- 7:09
Then now we get to knowledge part of it, and we jumped on this bandwagon earlier this year. Uh, we started noticing engineers building tons of skills across many repositories.
- 7:19
Um, and three problems we noticed was there's a lot of duplication, same skill being built by different engineers in different repos, and discovery and configuration was a huge hassle, and a lot of skills were of subpar quality.
- 7:33
So what-- We built entire lifecycle around skills. So we have core se- core skills and domain-specific skills. All of that go into a managed skills marketplace. We have two thousand five hundred skills there right now.
- 7:45
Um, and it goes through a whole bunch of lint checks, automated reviews, which ensures a baseline skill quality for any skills that we have.
- 7:54
And we also simplified the installation and discovery. So there is one single command to discover and install any plugin in our ecosystem. And based on the engineer personas, we even auto-install some of the default skills so the agents automatically can pick up the right skill.
- 8:09
You don't even have to even install them.
- 8:13
And of late, we started working on collecting traces and comments and capturing continuous evals so that we can go give feedback back to the skill authors for skill improvements.
- 8:24
And this is an area of big investment for us right now. And we have two thousand five hundred skills and cumulatively more than twenty thousand skill executions per day a-across our fleet.
- 8:37
The next piece of knowledge is context graphs. Uh, we st- we started noticing in our execution traces, agents spending a lot of time even trying to find basic context, especially in our large monorepos.
- 8:48
You need to identify where the service is located, what are the dependencies, um, who owns it, what kind of patterns I need to follow. And all of this context is gathered across scattered sy-systems across Uber.
- 9:01
There's twenty to thirty different systems. Each needs its own skill-skills, its own MCPs to in- to gather the context. And this burns tokens, this adds a lot of latency, and it creates more unpredictable outcomes.
- 9:15
So we have one context graph. We took all of the information of how Uber runs into one context graph. This has one hundred and fifty unique node and edge types.
- 9:24
We have forty million entries there right now. It captures all the way from how our mobile apps are built to our back-end, to our data lake, all the design docs, Jira, incident bugs, everything is connected.
- 9:35
And this enables agents to quickly find the right context within our ecosystem. We are now plugging all of our skills and use cases into the graph, whether it's our on-call RCAs, whether it's our planning or data analysis or security scans, and we see across all of this that we are improving, uh, the skills by a lot.
- 9:55
And I'm just showing a very simple example of asking a simple question of how many mobility trips in India are, are cash. This needs to understand the concepts of each of these, which tables, what kind of, uh, CTAs you need to create for the SQL.
- 10:08
With and without graph, we see massive improvement in tokens, turns, and latency. And we see that across any early eval that we did, uh, within our infrastructure.
- 10:19
And the last thing is, how do we package all of this for everyone in the company to use? So we have, uh, our AI assistant called Cortana. All of the things that I mentioned so far, whether it's skills, MCPs and context graph, they're all plugged into that in every surface possible, whether it's on Slack, CLI, web.
- 10:37
So anyone in the company, they can ask a simple question. It can look up the context graph, invoke any skill, check any code, check any code in any code base, and give an answer across any of these surfaces.
- 10:49
And now we started allowing employees to even personalize that. You can hook up your custom skills, custom prompt, and hook it up into your team Slack channel so that it, it knows all of the things about that team and works like a-- the, the, that teammate.
- 11:07
And this, this is a simple example of how you can invoke the same question before in Slack, um, and ma-- all of the employ-- m, m, more, like one or more people can even collaborate on the same Slack channel.
- 11:19
And we have just in the last one month, three hundred unique personas created and more than twenty thousand sessions per day. I'll now pass on to Adam, who will talk about how we take all of this and build, uh, take, uh, and ship a feature end-to-end.
- 11:33
All right. Thank you, Uday. All right, as Uday said, we've got those building blocks. We're gonna use those to power our software factory. So we're gonna take a feature here and show it going end-to-end through this.
- 11:46
All right, first up, right, we need to have an idea, right? A good idea probably for this moment would be something around the World Cup, right? Would it be awesome if you were a rider and you were leaving a busy stadium if there was a better pickup location to get you away from the crowd?
- 11:59
So that's the idea, right? We can have our idea. We're jamming on it in Slack here. Let's tag in Cortana, right? That's our AI assistant to help us with that idea.
- 12:08
Cortana with that context graph can help us determine whether this is a good business opportunity to go after. So we can go here from Slack and now open Cortana into a web interface,
- 12:20
and you'll see an example here of what that business research could look like, right? What other large-scale venue events have happened before? What are some stadiums that would make sense here?
- 12:31
From there, we start to think about the product requirements, right? This should be probably just a North America rollout since that's where the stadiums are. We can even then bring in Cortana to help us think about, uh, the Figma designs.
- 12:42
We can create some initial mock-ups, right? Do two variants here. We wanna run an experiment, A and B. So the, the button strings here are different between the two.
- 12:50
So let's test those two variants and see which one performs better.
- 12:54
Now we'll start to think a little bit about the design, and Cortana too can help us think about what code changes we need to happen, right? What can we leverage that's in the app already, what screens, and what can we leverage on the back end?
- 13:05
Right. So this process before could take a long time. It could take weeks to get everyone aligned. Now we can compress this into a very short amount of time now, right?
- 13:14
And get to a prototype here very quickly.
- 13:17
All right, so now we gotta go build this. So we, we hand off from that Cortana agent to what we have at Uber. We have a Minion agent. It's, uh, Uber's cloud coding agent solution.
- 13:28
All right, so you can use Minion in an interactive mode, or you can run it in an autonomous mode as well. So I'm gonna show you what this looks like.
- 13:35
Um, Uday mentioned the DevPod building block, so this is powered by that DevPod, so it's got a full build environment and it can work across repos. So we're doing back-end changes and the front-end changes here too as well.
- 13:46
We're gonna see Minion kind of progress here, and it's gonna stop at just creating a draft PR, and it's not gonna push it to CI yet. The reason being is that we were seeing, um, uh, uh, that this is great for doing like toil sort of workloads, but to build more advanced like end-to-end features, we really need
- 14:02
to be able to validate, uh, the feature first, and we want to prevent, uh, a lot of extra load coming onto CI. So if we can validate, um, sooner before we push to CI, um, that would be a big benefit.
- 14:14
So that's what we're gonna see here next on validation. Right, in the SDLC, we have an inner loop. We have the outer loop, of course. We can have these be agentified, where we're shifting more checks now to happen in this inner loop.
- 14:27
All right, so some of the checks that initially happened that we've had there pre-previously is like the, the static analysis sort of checks. When those are detected, now we fix those.
- 14:35
But we can shift things to happen in inner loop, things like visual validation. So we can launch, uh, in a simulator with a skill, grab a screenshot from the simulator, compare it to the Figma specs.
- 14:45
We can also bring up the service in our back-end staging environment and compare the front end and the back-end integration together.
- 14:53
So now that we've moved a, um... Now that we've done, uh, that part, uh, we move to the outer loop where CI, uh, typically happens. Errors can still happen on CI, right?
- 15:05
Uh, so self-healing CI is something that we've implemented here where we can fix a lot of the issues that you hit on CI. Um, code review is another thing that happens in the outer loop, but this is another thing that we've shifted.
- 15:16
We've moved parts of code review to happen in the inner loop, right? The outer loop code review can have a powerful model, use reasoning, a skill to do a deeper review, and in the inner loop, we can have a smaller model that runs, uh, faster with the, with the, with the medium model.
- 15:30
Now, another key thing here, right, is this, if this is an autonomous diff coming from Minion, we want to give a human reviewer some confidence that this diff has gone through a lot of self-improvement already, right?
- 15:40
That does-- not just touching that initial generation that happened, but all these other steps have happened. And so on the PR, you will have a table attached that says all these different checks that it went through, including the screenshots.
- 15:53
All right, so we've got a lot more code coming through the software factory now, right? Let's talk about maintenance, right? Maintenance is even more important. Um, what we have set up now is we can actually enroll our feature or skill into, um, our feature or serve, uh, service into maintenance, uh, skills.
- 16:10
So these are, uh, some examples of those skills that we have. Uh, feature flag cleanup, right? We had two variants of that World Cup, uh, modal. Now that the, the B, the variant is no longer needed, we can have that scheduled on a loop.
- 16:24
So the key thing here is that this is actually a managed loop that you go to, right? We don't want thousands of loops being set, uh, set up across the company without any bounds.
- 16:33
You have a managed surface that you go to to set up the loop, so it runs on Sunday when we know we have better, uh, CI capacity available. Um, we also don't want to overwhelm engineers that Monday morning with a bunch of extra diffs.
- 16:45
We want to control how many diffs they're seeing on Monday as well.
- 16:49
Another cool key thing here is that when that ski, uh, skill runs and makes those diffs, those diffs will get comments and either get landed or not landed. That's all good labeled data that we can use to improve the skill itself.
- 17:00
And then at a kind of monthly cadence, we're looking to see what skills can we now learn, um, from in our incident reviews and turn those into new maintenance skills that we can apply to all of our services.
- 17:14
All right, so you've seen, uh, these parts of the SDLC that we have agentified. There's other parts too, like monitoring. You've seen the, uh, building blocks that you can use to power those and the architecture underneath them.
- 17:27
One of the other things that we're really thinking about now is bottlenecks, right? Where now we're putting more strain on our infrastructure, so we're trying to anticipate where our CI capacity needs to be and make the right foundational investments there.
- 17:39
There's only so many experiments that we can feasibly run as well, so that's another bottleneck. And then lastly too, right, decision-making, right? It's not about, you know, can we build?
- 17:47
We know we can probably build it now. It's more of a question of should we build it?
- 17:52
All right, so that's what we have for you today. And the next talk is gonna be actually from Uber as well. And if you want to learn more about our agentic code review, uh, Amaya and Will will be presenting that next, uh, in this room.
- 18:04
Thank you. [audience applauding] [upbeat music]