This Year in Uber’s AI-Driven Developer Productivity Revolution
AI Summary
Title: Experimenting with AI in Software Development at Uber
Presenters: Adam (Senior Engineering Manager) and Ty
1. Introduction
- Overview of Uber’s scale and complexity and the author’s experience.
- Focus on positioning the organization to be AI-driven.
2. Developer Experience
- Emphasis on developer experience over just delivering tools (IDEs, documentation).
- Measurement of developer experience through net promoter scores.
3. Current Challenges
- Managing technical debt in six monorepos, containing over 100 million lines of code.
- Need for better test coverage and simplified migration processes.
4. Adopting AI
- Formation of the AI Developer Experience team with ML experts to harness AI tools.
- Shift from exploratory projects to tools with real impact, influenced by hackathons.
5. Agentic Design with AI
- AI tools leverage LangChain and LangGraph for integrating AI in workflows.
- Detailed the process of applying AI in development, including testing automation.
6. Case Studies
a. Internal IDE Coding Assistant
- Building an in-house product as an alternative to Copilot, aimed to fine-tune AI models to Uber’s context.
- Initial development faced challenges regarding speed, acceptance, and maintenance, leading to its temporary halt.
b. Test Generation with AI
- Development of a tool called Auto Cover to generate unit tests to increase test coverage intelligently.
- Methods to validate and iterate tests, led to high acceptance among skeptical developers.
c. Migrating Java to Kotlin
- Migration strategy involving existing manual processes and tools.
- Working toward automation with the help of AI to expedite the migration.
7. Measuring AI Impact
- Discussed metrics for measuring developer productivity and tool efficacy.
- Qualitative feedback more favorable but a need for standardized quantitative measures.
Conclusion: Focus on learning from attempts, iterating AI integration into workflows, and prioritizing developer experience while maintaining high-quality output.