Stream the Latest Episode
Listen and watch now on YouTube, Spotify and Apple . See the episode transcript at the top of this page, and a summary at the bottom.
Brought to You By
Sentry — Error and performance monitoring for developers.
The Software Engineer’s Guidebook: Written by me (Gergely) – now out in audio form as well.
—
In This Episode
In today’s episode of The Pragmatic Engineer, I am joined by former Uber colleague, Gautam Korlam. Gautam is the Co-Founder of Gitar, an agentic AI startup that automates code maintenance. Gautam was mobile engineer no. 9 at Uber and founding engineer for the mobile platform team – and so he learned a few things about scaling up engineering teams.
We talk about:
• How Gautam accidentally deleted Uber’s Java monorepo – really!
• Uber's unique engineering stack and why custom solutions like SubmitQueue were built in-house
• Monorepo: the benefits and downsides of this approach
• From Engineer II to Principal Engineer at Uber: Gautam’s career trajectory
• Practical strategies for building trust and gaining social capital
• How the platform team at Uber operated with a product-focused mindset
• Vibe coding: why it helps with quick prototyping
• How AI tools are changing developer experience and productivity
• Important skills for devs to pick up to remain valuable as AI tools spread
• And more!
Takeaways
Interesting parts of the conversation:
1. Submit Queue: Uber built a complex merge system to deal with the large number of commits, where each commit had to run long-running CI tests. It’s a problem that smaller and mid-sized companies don’t have, but Uber had: and so they scratched their own itch.
2. Local Developer Analytics (LDA): years ago, Uber started to measure the experience that devs had. Things like: how long did a build take, locally? How much CPU is used? They used this data to improve internal tooling.
3. Developer experience as a product team. Gautam’s team operated like a classic product team: except their customers were Uber’s internal developers. Gautam believes this is how all successful platform teams should work.
4. AI changing software development: this is happening. “Vibe coding” leads to faster prototyping. Gautam believes junior engineers will thrive with AI tools because they will hit the ground running faster, and will be free of biases that hold back more experienced developers.
The Pragmatic Engineer deepdives relevant for this episode
Timestamps
(00:00) Intro
(02:11) How Gautam accidentally deleted Uber’s Java Monorepo
(05:40) The impact of Gautam’s mistake
(06:35) Uber’s unique engineering stack
(10:15) Uber’s SubmitQueue
(12:44) Why Uber moved to a monorepo
(16:30) The downsides of a monorepo
(18:35) Measurement products built in-house
(20:20) Measuring developer productivity and happiness
(22:52) How Devpods improved developer productivity
(27:37) The challenges with cloud development environments
(29:10) Gautam’s journey from Eng II to Principal Engineer
(32:00) Building trust and gaining social capital
(36:17) An explanation of Principal Engineer at Uber—and the archetypes at Uber
(45:07) The platform and program split at Uber
(48:15) How Gautam and his team supported their internal users
(52:50) Gautam’s thoughts on developer productivity
(59:10) How AI enhances productivity, its limitations, and the rise of agentic AI
(1:04:00) An explanation of Vibe coding
(1:07:34) An overview of Gitar and all it can help developers with
(1:10:44) Top skills to cultivate to add value and stay relevant
(1:17:00) Rapid fire round
A summary of the conversation
Uber's engineering culture and tools
Gautam joined Uber in 2014 as an Android engineer. Back then, there were not even unit tests. Gautam wrote the first Android test, and set up Artifactory.
Uber built much of its engineering stack in-house because the cloud-native SaaS products were not built for their scale.
Even in the earlier years, Uber saw about one commit every minute – and the platforms at the time could not handle this (especially when considering that CI took 10-30 minutes to run!)
Build time was a problem. During the iOS and Android app rewrite in 2016, build times became very long. Gautam worked on getting it under control.
Submit Queue was a way to guarantee a green main. It serialised incoming commits to ensure they played nicely together. The company published a paper on this novel solution. Submit Queue tested changes and considered cross-dependencies between different commits. Machine learning models estimated potential failures and speculatively tried paths that might be green.
Monorepo: after starting as polyrepos, Uber moved to monorepos
Uber started with separate repos for Rider, Driver, and other apps (eg Eats). As the company grew, each team wanted its own repository, resulting in hundreds of repos. It became painful to upgrade and bump libraries.
The iOS team moved to a monorepo, followed by Android. The gains in productivity were massive because there was no need to bump libraries. This move really helped with standardisation.
The biggest initial pushback was that teams could no longer break an API without worrying about the consequences. There was concern about slower builds. In the end, the dev platform team solved these concerns.
Developer experience and dev productivity
Local Developer Analytics (LDA): an internal Uber system that ran on developers' machines and collected information about their systems. It integrated deeply into CLI tools and IDEs, tracked which files developers accessed most, and identified files with the most bugs. LDA helped identify bottlenecks in the development funnel.
Developer surveys: Uber ran these regularly. The dev tooling NPS went from negative 50 to positive 8 during Gautam’s tenure.
Things that made for a better developer experience: minimizing time to review code, time to build code, and reducing time spent in meetings.
DevPods: another internal Uber tool. These are basically cloud developer environments. They contain a container of code, build system artefacts and IDE indices in the cloud. DevPods make context switching quick.
Previously, onboarding involved running a bootstrapping script. The script was hard to maintain. Dev Pods moved the development stuff into a container. The containers can be huge.
Career growth to Principal Engineer
Going deep: getting into a niche and going deep can help over the long term, especially in areas others may not want to do.
Introspect regularly: Every two years, Gautam did some introspection to see if he was doing what he wanted and what could challenge him more.
Social capital and mentorship: these become very important at a big company. It helps to have connections. Helping people builds social capital. Gautam would drop everything to help people with their dev environment problems. He also held office hours on a regular basis, offering to help anyone who showed up.
Understand the business: Principal engineers need to understanding how engineering meets business, rather than just pure coding. It helps if you enjoy diving into this area – as well as if you like talking with people!
More of a peer relationship with your manager. As engineers grow in seniority, they become more like a peer to their manager and help their manager get stuff done. The relationship is more like a “peer” than a “boss”.
Tip for managers of senior+ devs: give them agency, check in often, and make sure they are unblocked.
The impact of AI on software development
Autocomplete: an obvious use case. It helps one type less and think more.
“Vibe coding”: AI allows you to explore more paths and experiment faster.
How AI impacts engineers
Controversial, but Gauam believes that junior engineers are going to thrive because they are coming up with new knowledge and new ways of working with AI tools. They do not have the biases of working a particular way.
The “generalist engineer” is going to be more in-demand, looking ahead
CS knowledge remains important.
When things go wrong, it is important to understand why they went wrong. This requires strong computer science fundamentals and system knowledge.
Where to find Gautam Korlam:
• LinkedIn: https://www.linkedin.com/in/gautamkorlam/
Mentions during the episode:
• Bypassing Large Diffs in SubmitQueue: https://www.uber.com/blog/bypassing-large-diffs-in-submitqueue/
• Jenkins: https://en.wikipedia.org/wiki/Jenkins_(software)
• Devpods: https://www.uber.com/blog/devpod-improving-developer-productivity-at-uber/
• JetBrains: https://www.jetbrains.com/
• Cloud Development Environments: https://newsletter.pragmaticengineer.com/p/cloud-development-environments
• Why are Cloud Development Environments Spiking in Popularity, Now?: https://blog.pragmaticengineer.com/why-are-cloud-development-environments-spiking-in-popularity-now/
• “The Coding Machine” at Meta with Michael Novati: https://newsletter.pragmaticengineer.com/p/the-coding-machine-at-meta
• Software Architect Archetypes: https://newsletter.pragmaticengineer.com/p/software-architect-archetypes
• The Platform and Program Split at Uber: A Milestone Special: https://newsletter.pragmaticengineer.com/p/the-platform-and-program-split-at
• What is Vibe Coding? How Creators Can Build Software Without Writing Code: https://alitu.com/creator/workflow/what-is-vibe-coding/
• WhatsApp: https://www.whatsapp.com/
• Rust: https://www.rust-lang.org/
• I am excited to introduce Jimy by Gitar - The agentic AI for building better software: https://www.linkedin.com/posts/gautamkorlam_i-am-excited-to-introduce-jimy-by-gitar-activity-7297713117927481344-0G4l/
• Cursor: https://www.cursor.com/
• Claude: https://claude.ai/
• Deepseek: https://www.deepseek.com/
• Head First Design Patterns: A Brain-Friendly Guide: https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124
—
Production and marketing by Pen Name. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.
Share this post