Software Engineer II - Android
Android engineer on Uber's Mobile Observability team in Bengaluru, building low-overhead SDKs that monitor crashes, ANRs, memory issues, and performance across Uber's apps (Rides, Eats, Freight). Day-to-day involves debugging production issues, root-cause analysis, and writing performant Kotlin/Java platform code with some C/C++/NDK work.
- Compensation
- Not disclosed
- Location
- Bengaluru, Karnataka, India
- Work setup
- Remote
- Seniority
- Middle
- Employment
- Full time
- Experience
- Not specified
- Category
- Mobile
- Posted
Skills
Must have
- Bachelor's degree or equivalent in Computer Science, Engineering, Mathematics or related field OR 3 years full-time software engineering work experience
- 3 years total technical software engineering experience in areas such as programming languages (e.g. Kotlin, Java, C/C++)
Nice to have
- 3+ years of Android development experience with strong proficiency in Kotlin and Java
- Experience shipping production Android features in a large codebase
- Solid understanding of Android internals: app and process lifecycle, main thread Looper/Handler model, Android framework
- Working knowledge of Android memory management (garbage collection, heap usage, Context/Activity leaks) and concurrency (Kotlin coroutines, threads, executors, RxJava)
- Hands-on experience debugging crashes, ANRs, and memory leaks using Android Studio Profiler, heap dumps, and LeakCanary
- Experience building libraries or SDKs used by other teams
- Exposure to native code (NDK, C/C++), native crash tombstones, or system tracing tools such as Perfetto or simpleperf
- Familiarity with mobile observability and crash reporting tools (Android vitals in Play Console, Firebase Crashlytics, or similar)
- Experience working on apps with tens of millions of users or more
- Ability to own well-scoped components of platform projects through to production
- Strong focus on writing performant, testable, and resource-efficient code
Full description
About the Role
Uber's applications are a critical part of daily life for hundreds of millions of users globally. Ensuring a seamless, stable, and high-performance experience across a diverse range of devices, OEMs, Android versions, and network conditions is a monumental challenge. This is where the Mobile Observability team comes in. We build the foundational Android SDKs that provide deep, real-time insight into the health of all Uber applications (Rides, Eats, Freight, and more). Our mission is to proactively detect, diagnose, and resolve critical issues like crashes (JVM and native), ANRs, out-of-memory errors, memory leaks, jank, and performance bottlenecks before they impact our users. You will help engineer the lightweight, highly efficient observability tools that are embedded within every Uber Android app. These SDKs are the "flight recorder" for our mobile fleet, capturing the diagnostic data needed to identify and fix the most complex bugs that happen in production. If you enjoy solving low-level problems, like debugging hard issues, and want to build tools that directly improve stability for hundreds of millions of users, this is the team for you.
What You'll Do
- Design, develop, and maintain components of the core Android observability SDKs for crash reporting, ANR detection, performance monitoring, and bug diagnostics.
- Write performant, low-overhead code. Our SDKs run in the critical path of every Uber app and must have minimal impact on startup time, runtime performance, battery life, and app size.
- Investigate crashes, ANRs, memory issues, and performance bugs from across Uber's Android apps, perform root cause analysis, and implement platform-level fixes.
- Build tooling and heuristics to automatically detect and classify bugs, from UI glitches to multi-threaded race conditions.
- Detect and diagnose OEM-specific and Android-version-specific issues across the device landscape.
- Work with backend engineers on the data ingestion pipelines and dashboards that process terabytes of diagnostic data from our mobile fleet.
- Support feature teams across Uber with guidance, tooling, and best practices on Android stability and performance.
- Uphold rigorous standards for code quality, testing (especially unit and integration testing for an SDK), and on-call practices for a Tier-0 service.
What You'll Need
- Bachelor's degree or equivalent in Computer Science, Engineering, Mathematics or related field OR 3-years full-time Software Engineering work experience, WHICH INCLUDES 3-years total technical software engineering experience in one or more of the following areas: Programming language (e.g. Kotlin, Java, C/C++)
- Note the 3-years total of specialized software engineering experience may have been gained through education and full-time work experience, additional training, coursework, research, or similar (OR some combination of these). The year of specialized experience is not necessarily in addition to the years of Education & full-time work experience indicated.