Big Tech and startups, from the inside. The #1 technology newsletter on Substack. Sign up at pragmaticengineer.com. Podcast: pragmaticpodcast.com

How is Uber approaching AI spend? @udaykiran, Distinguished Engineer at Uber, on how they manage costs without restricting engineers: “We have this notion of spend tiers. By default, you get a certain tier. Once you're close to that tier, you can raise a request to go to the next tier and you just need a simple manager approval. So then you can discuss with the manager the ROI for that project, how are you spending? We don't want to restrict engineers. If it's going to the right project use, they should be able to spend whatever they need because ultimately we want to maximize the gain from this, but you also want to make sure there's a responsible use. We also have a plugin called CostCheck that will run across all of your sessions and give you personalized tips based on your usage to say, "Hey, this is the kind of thing, this much you're spending on this project and this session, these are the tips that you can use to further improve your cost profile."" Learn more about Uber's AI Infra on the podcast nitter.siddz.com/GergelyOrosz/status/21…
What do developer tools look like inside Uber, today? They are very different from what you would see at most places. We get a rare tour with one of Uber's longest-tenured engineers, Uday Kiran Medisetty (@udaykiran) - who was at Uber already when I joined in 2016! Timestamps: 00:00 Intro 02:48 Uday’s early days at Uber 05:40 Uber’s move to microservices 07:55 Uber’s engineering team, then and now 09:05 Developer tooling before AI 16:03 DevPods 19:28 Building for AI agents 29:27 MCP gateway 34:37 Agent Skills repo 38:46 The context graph and Cortana 47:54 PRD and ERD tool 50:45 Minion 54:46 Testing and code review with Bazel, Slate, and Capri 1:12:26 Edge Gateway, Shepherd, and Wisdom 1:21:33 The changing role of engineer and measuring productivity 1:30:40 Uday’s favorite new products Brought to you by: • @turbopuffer – The tpuf eng team is rebuilding their storage architecture from first principles to make search faster, cheaper, and more reliable at scale. Follow along at turbopuffer.com/v3 • @linear – the product development system for teams and agents. Check out Linear Diffs: a new feature to review PRs inside of Linear, with all the context in one place. linear.app/pragmatic • @WorkOS – how do you deal with agents and permissions? WorkOS built Airlock, the authorization layer for AI agents. Works with Claude Code, Codex and MCP gateways. workos.com/airlock Three things you probably did not know about Uber: 1. At Uber, cities are a first-class concept that go all the way down to physical infrastructure. One reason Uber had to build a lot of its custom tooling is how the concept of cities is a “basic primitive” that needs to be handled across systems like observability, feature flagging, deployments, and even service sharding. For example, in the early days, some services had their database sharded by cities. Even today, each city is pinned to a cloud region, and can fall over to another region at any time. 2. A single AI model gateway has paid lots of dividends. In 2023, Uber’s platform team made the decision that everything built with AI needs to be model- and harness-agnostic. They built Model Gateway to support switching between Anthropic, OpenAI, other vendor models, and now also supports open models they run. 3. Uber tags PRs by the type of work each of those PRs do. In the past, Uber measured “PR velocity:” how long it took for a PR (or, as Uber calls it: a “diff”) to get to production. With agents, doing so makes less sense, because it’s easy to create dozens or even hundreds of PRs, and many of those PRs might have no business impact on the product. ​So Uber now tags all PRs by type: feature, bugfix, maintenance, testing, or docs. ​They are seeing the percentage of “feature PRs” going up, and the percentage of “maintenance PRs” going down.​ I find this categorization to be a clever approach!
2
943
Uber's coding agent Minion writes ~15% of production PRs today. @udaykiran, Distinguished Engineer at Uber, walks us through: "Some PRs engineers want to do interactively, but we also want to make it really easy for you, once you have really good spec or want to do minimal steering, to hand off to a Minion. You can use it from web, you can use it from Slack. You can do a plan mode and then let it execute behind the scenes or you can give the prompt once and let it execute behind the scenes if it's a simple prompt. It can work across repositories and generate one PR or multiple PRs across repositories based on the plan and spec that you have. If you have a Slack thread with the PM, you can iterate on the design. If it's a simple thing, you can iterate and get alignment there and then say, "Hey, @Minion, follow this thread and can you create a PR?" And then it'll take the Slack thread context and create a PR for you."
4
1
17
2,794
How Uber went from two services to thousands of microservices. @udaykiran, one of Uber’s longest tenured engineers, recalls their microservices boom "When I joined, we had just two services at Uber: Dispatch, written in Node.js, and API, written in Python. Dispatch handled the rider and driver traffic. When the trip completed, we would hand off to API, which handled all of the post-trip processing: payments, receipts, etc. Going back to those days, the kind of hyper growth phase we were in, we were constantly expanding to new countries, expanding our product portfolio and we later started Uber Eats. We needed a mechanism for teams to build all kinds of functionality very quickly to match up to the scale at which the business was growing. And that created a boom cycle of microservices: we went from two services to the order of thousands of services. Over the years, in fact, we actually reduced some of the services to few services. So even now we have a similar ballpark number of services, even though our business is 10x larger. We are still running one single global tech stack across all the countries we operate in."
1
1
14
2,385
Uber built Code Inbox to help ease the review bottleneck. @udaykiran, Distinguished Engineer at Uber, shows us: "PR volume has gone up year over year so review has become a big bottleneck. It’s the same as any other company. We have this thing called Code Inbox, where any engineer can see all the PRs that are waiting for them to review and all the PRs that they created that are waiting for reviews. When an engineer sends a PR for code review, I can see all the things that have been done so far. So it makes it really easy for me see: #1 what’s been checked: the AI code review passed and here’s what it checked. This is the sanity test screenshot. I know there's a sanity test. I can see the build checks. #2 metrics to assess PR risk: risk score, the blast radius of this PR and so on. All of this gives engineers really good signals to figure out, okay, is the PR good to land and which parts of the PR should I focus on?"
4
13
2,653
It assigns a reviewer by looking at code ownership, compliance reqs, dev familiarity and time zones. If the assigned engineer doesn't respond in a certain time frame, it round robins to the next eligible engineer
1
1
826
Each PR is given an 'impact estimate' to bring attention to how risky a change could be. All screenshots are from our March Deepdive and you can see Uber's latest AI Infra on:
What do developer tools look like inside Uber, today? They are very different from what you would see at most places. We get a rare tour with one of Uber's longest-tenured engineers, Uday Kiran Medisetty (@udaykiran) - who was at Uber already when I joined in 2016! Timestamps: 00:00 Intro 02:48 Uday’s early days at Uber 05:40 Uber’s move to microservices 07:55 Uber’s engineering team, then and now 09:05 Developer tooling before AI 16:03 DevPods 19:28 Building for AI agents 29:27 MCP gateway 34:37 Agent Skills repo 38:46 The context graph and Cortana 47:54 PRD and ERD tool 50:45 Minion 54:46 Testing and code review with Bazel, Slate, and Capri 1:12:26 Edge Gateway, Shepherd, and Wisdom 1:21:33 The changing role of engineer and measuring productivity 1:30:40 Uday’s favorite new products Brought to you by: • @turbopuffer – The tpuf eng team is rebuilding their storage architecture from first principles to make search faster, cheaper, and more reliable at scale. Follow along at turbopuffer.com/v3 • @linear – the product development system for teams and agents. Check out Linear Diffs: a new feature to review PRs inside of Linear, with all the context in one place. linear.app/pragmatic • @WorkOS – how do you deal with agents and permissions? WorkOS built Airlock, the authorization layer for AI agents. Works with Claude Code, Codex and MCP gateways. workos.com/airlock Three things you probably did not know about Uber: 1. At Uber, cities are a first-class concept that go all the way down to physical infrastructure. One reason Uber had to build a lot of its custom tooling is how the concept of cities is a “basic primitive” that needs to be handled across systems like observability, feature flagging, deployments, and even service sharding. For example, in the early days, some services had their database sharded by cities. Even today, each city is pinned to a cloud region, and can fall over to another region at any time. 2. A single AI model gateway has paid lots of dividends. In 2023, Uber’s platform team made the decision that everything built with AI needs to be model- and harness-agnostic. They built Model Gateway to support switching between Anthropic, OpenAI, other vendor models, and now also supports open models they run. 3. Uber tags PRs by the type of work each of those PRs do. In the past, Uber measured “PR velocity:” how long it took for a PR (or, as Uber calls it: a “diff”) to get to production. With agents, doing so makes less sense, because it’s easy to create dozens or even hundreds of PRs, and many of those PRs might have no business impact on the product. ​So Uber now tags all PRs by type: feature, bugfix, maintenance, testing, or docs. ​They are seeing the percentage of “feature PRs” going up, and the percentage of “maintenance PRs” going down.​ I find this categorization to be a clever approach!
3
11
3,869
“At Uber, we are talking about not just diff velocity, but feature velocity. How much of all of this additional throughput is going towards unlocking new features? You can create a hundred diffs but if they’re not all feature diffs, then maybe it’s not increasing the value that we can provide to users. One of the things we did is tagging all of our PRs: is it a feature PR, bug fix, maintenance, testing, documentation. We can see year over year how that mix is changing. Right now our percentage of feature PRs is going up, our percentage of maintenance PRs is going down.” Uday Kiran Medisetty @udaykiran, Distinguished Engineer at Uber
What do developer tools look like inside Uber, today? They are very different from what you would see at most places. We get a rare tour with one of Uber's longest-tenured engineers, Uday Kiran Medisetty (@udaykiran) - who was at Uber already when I joined in 2016! Timestamps: 00:00 Intro 02:48 Uday’s early days at Uber 05:40 Uber’s move to microservices 07:55 Uber’s engineering team, then and now 09:05 Developer tooling before AI 16:03 DevPods 19:28 Building for AI agents 29:27 MCP gateway 34:37 Agent Skills repo 38:46 The context graph and Cortana 47:54 PRD and ERD tool 50:45 Minion 54:46 Testing and code review with Bazel, Slate, and Capri 1:12:26 Edge Gateway, Shepherd, and Wisdom 1:21:33 The changing role of engineer and measuring productivity 1:30:40 Uday’s favorite new products Brought to you by: • @turbopuffer – The tpuf eng team is rebuilding their storage architecture from first principles to make search faster, cheaper, and more reliable at scale. Follow along at turbopuffer.com/v3 • @linear – the product development system for teams and agents. Check out Linear Diffs: a new feature to review PRs inside of Linear, with all the context in one place. linear.app/pragmatic • @WorkOS – how do you deal with agents and permissions? WorkOS built Airlock, the authorization layer for AI agents. Works with Claude Code, Codex and MCP gateways. workos.com/airlock Three things you probably did not know about Uber: 1. At Uber, cities are a first-class concept that go all the way down to physical infrastructure. One reason Uber had to build a lot of its custom tooling is how the concept of cities is a “basic primitive” that needs to be handled across systems like observability, feature flagging, deployments, and even service sharding. For example, in the early days, some services had their database sharded by cities. Even today, each city is pinned to a cloud region, and can fall over to another region at any time. 2. A single AI model gateway has paid lots of dividends. In 2023, Uber’s platform team made the decision that everything built with AI needs to be model- and harness-agnostic. They built Model Gateway to support switching between Anthropic, OpenAI, other vendor models, and now also supports open models they run. 3. Uber tags PRs by the type of work each of those PRs do. In the past, Uber measured “PR velocity:” how long it took for a PR (or, as Uber calls it: a “diff”) to get to production. With agents, doing so makes less sense, because it’s easy to create dozens or even hundreds of PRs, and many of those PRs might have no business impact on the product. ​So Uber now tags all PRs by type: feature, bugfix, maintenance, testing, or docs. ​They are seeing the percentage of “feature PRs” going up, and the percentage of “maintenance PRs” going down.​ I find this categorization to be a clever approach!
5
1,995
Why Cognitive Surrender is a problem with us, not AI. From @samnewman, author of Building Microservices & Building Resilient Distributed Systems: "Cognitive Surrender: that's not really a problem with LLMs, that's a problem with us. If you are, say, an oncologist, a cancer specialist, there's a big difference between: #1: an LLM doing detection of the scans you're looking at going, "Oh, you should look over there. By the way, you might have missed that", versus #2: the LLM-powered AI going, "Here's all the scans I've looked through. Here's the ones I need you to sign off." The last one, the second one, takes the expert out of the loop and makes them an approver. Often, in that context, they've got rid of a bunch of other oncologists. You've got one person at the end of the funnel, but that's a cost saving that's going to lead into issues. So much of our current use of AI is not freeing us up from critical thinking. It's causing more context switching. It's causing less time for thinking. People are working longer hours. We've got studies that show this now. And it's like, come on, that's not necessarily AI's fault. It's just how we're using it.”
1
4
14
2,222
What makes something a microservice? @samnewman, Author of Building Microservices & Building Resilient Distributed Systems, with two rules: #1: “most important, is that your microservices need to be independently deployable. Your unit of deployment, unit of change, needs to be a single microservice boundary. It needs to be a single service boundary, rather than I'm deploying everything together” #2: "...your default way for defining your service boundaries is around your business domain. A lot of SOA architectures were dominated to an extent by technical decomposition: the classic n-tier, layered architectures, where you've picked your service decomposition based on the tech rather than the business functionality."
3
4
2,427
Find out more about building resilient distributed systems, microservices and how engineers can resist “cognitive surrender”, with Sam Newman on The Pragmatic Engineer podcast: • YouTube: piped.video/a0sZV0qIbI0 • Spotify: open.spotify.com/episode/0XQ… • Apple: podcasts.apple.com/us/podcas… • Summary and transcript: newsletter.pragmaticengineer…
888
Resilient systems + AI = ?? @samnewman, Author of Building Microservices & Building Resilient Distributed Systems: "The macro level is that none of it stacks up financially. OpenAI and Anthropic don't have a viable path to sustainability. Conservative analysis by economists are showing that they need to be generating 2.6 trillion in revenue to justify their CapEx expenditure by 2030. The entire software market is 1.4 trillion. So macro level, I don't know how that gets sorted. I'm not smart enough. I also don't have any shares in those companies, but that's a separate conversation. What I can start thinking about is, okay, if that's the world I'm operating in, how do I deal with that? What I can do, if I'm taking a view to resiliency, is being very careful about how I use AI. Longer term, if you are building AI into your product, there's some simple hedging things you can do: being multi-vendor, being multi-model and rather than having a single agent, breaking that down into more workflow models where you can take bits of your workflow and realize actually this could now be swapped out for a bit of deterministic code that I write that could run more efficiently. We can at least deal with our world."
3
11
2,341
Find out more about building resilient distributed systems, microservices and how engineers can resist “cognitive surrender”, with Sam Newman on The Pragmatic Engineer podcast: • YouTube: piped.video/a0sZV0qIbI0 • Spotify: open.spotify.com/episode/0XQ… • Apple: podcasts.apple.com/us/podcas… • Summary and transcript: newsletter.pragmaticengineer…
2
877
The Pragmatic Engineer retweeted
My keynote at LDX3 New York, "The state of the tech industry in 2026". is out now. Timestamps: 00:00 Introduction 00:53 What changed 12:29 What's not changed 16:14 What broke 22:53 What’s next And for notes + slides, see: newsletter.pragmaticengineer… Hope it's useful!
23
47
405
31,213
What are the three rules of distributed systems? From @samnewman, author of Building Microservices & Building Resilient Distributed Systems: “When you strip it all down, there's really only three things that cause all the other problems: Rule #1: You can't send information instantaneously from point A to point B. Rule #2: Sometimes the thing you want to talk to isn't there. Rule #3: Resource pools are not infinite. You can run out of computing resources, CPU, memory, IO, whatever. The vast majority of the time when you have a system outage, it's down to Rule #3. Some resource has been totally saturated somewhere. That's the killer."
2
2
8
2,185
Find out more about building resilient distributed systems, microservices and how engineers can resist “cognitive surrender”, with Sam Newman on The Pragmatic Engineer podcast: • YouTube: piped.video/a0sZV0qIbI0 • Spotify: open.spotify.com/episode/0XQ… • Apple: podcasts.apple.com/us/podcas… • Summary and transcript: newsletter.pragmaticengineer…
1
4
705
"I've seen a few people talking about pairing with their AI assistant. It's not a human. Stop pretending it is. And so you're all going off, you're doing more in a different direction. That shared mental model of the program is breaking down. AI was supposed to free us from drudgery. It isn't for most software developers because we're doing more work, we've got more context switching, we're losing that big picture." - @samnewman, Author of Building Microservices & Building Resilient Distributed Systems
When does it still make sense to use microservices, what are mental models to keep in mind when building resilient distributed systems, and how is much of the tech world fundamentally misunderstanding AI? With @samnewman. Timestamps: 00:00 Intro 03:16 Sam’s path into tech 09:32 Thoughtworks 20:55 The rise of microservices 33:37 Are specs becoming more important than code? 45:22 Building Resilient Distributed Systems (Sam’s new book) 52:35 Three rules of distributed systems 56:16 Observability 1:02:20 Resilience tradeoffs 1:07:54 Idempotency 1:15:58 Thundering herds 1:21:03 Business context and resilience decisions 1:25:51 Resilience engineering: four concepts 1:32:42 AI and resilience 1:36:26 AI’s limitations and where to use it 1:40:06 Cognitive debt and cognitive surrender 1:45:02 Modular architecture and AI software factories 1:51:53 Resources for learning software architecture 1:55:30 Where to find Sam Brought to you by: @turbopuffer - – vector and full-text search built on object storage: fast, 10x cheaper, and extremely scalable. Under the hood, the team are rewriting the tpuf storage engine. Follow along until it hits prod: turbopuffer.com/v3 @EntireHQ - Git hosting, rebuilt for the agentic era. Entire hosts your code in-region, and is up to 89x faster than any other competitor. Mirror from GitHub with a single click – I’ve already done so. entire.io/pragmatic @AntithesisHQ - Get a free introduction to property-based testing: through a rare, live webinar hosted by @hillelogram , author of Logic for Programmers. RSVP here: pages.antithesis.com/webinar… So, what does much of the tech world misunderstand about LLMs? Sam says: “I think the tech world in general is quite naive about AI and fundamentally misunderstands what an LLM is. For example: why did the LLM delete my database? Well, because it has no concept of causality. They have no concept that if I do A, B happens. LLMs are not world models. World models have been around for a long time. They predate LLMs. So if you had the appropriate model and the appropriate inputs, world models could at least get to the point of ‘if I do X, then Y happens and I’ve been told not to do Y.’ I think we expect LLMs to do more than they actually can do, because they seem so smart. This leads us to overestimate their capabilities a bit too much. But the nature of LLMs is why all the guardrails around LLMs are really not going to be the right long-term solution.”
1
20
15,713