Rust Job: Senior Software Engineer

Rust Job Added on

Company

Uber
United States of America

Location

Remote Position
(From Everywhere/No Office Location)

Job type

Full-Time

Rust Job Details

About the Team

Mobile Foundations and Developer Experience is a unique team that works on the foundational libraries, frameworks and dev tools that our ~600 mobile engineers use at Uber, and external companies via our open source libraries (Swift, Objective-C & Kotlin).

Our team has an unusually large amount of autonomy and a wide mandate compared to most teams in the industry, so there is always something interesting to work on. We are looking for highly passionate engineers or managers who care a lot about the practice of software development itself and who want to create a high amount of impact both within and outside of Uber.

Since we are an engineering infrastructure team, we are not really driven by product focused PMs telling us what to do. We look to our engineers to notice issues and think of solutions to such issues in our foundational libraries and things we can do to improve the developer experience at Uber. We are guided by what our engineers need, helped by various surveys and day to day interactions, but we still have to figure out the solutions to fulfill their needs. We work closely with other application platform teams as our main customers.

Major Goals of the Team

  • Fast build & iteration speeds for all Uber’s mobile engineers.
  • Remote development environments, somewhat similar to Gitpod.
  • Common frameworks and tooling to improve build speed, feature development speed and fun/developer morale, such as our Base UI mobile widget library.
  • Market mobile development at Uber via conferences, blog articles, twitter and open source software releases.
  • We also have sister teams with similar goals for other development platforms such as Web, Go and Java Backend.

How the Team Works

  • We are a US remote friendly team. If you live somewhere in the USA, we can hire you!
  • We don’t have a high meeting load, about 2 - 4 hrs/week for a typical engineer.
  • We are not a process heavy team, no weekly JIRA ticket scrums and story points for us!
  • Our on call is mostly a 9a-5pm support on call, you don’t have to worry about getting woken up in the middle of the night.
  • Our projects and our team is a marathon, not a sprint. We try to keep a sustainable working pace and hours to avoid burnout.
  • Our tech stack is fairly standard or usable at other companies, you will gain a lot of transferable skills if you work with us.
  • We are open source friendly. We’ve released multiple projects on github here at Uber in Swift, Objective-C & Kotlin.
  • In manager 1:1s we try to develop a mentor/coach type relationship and try to help you with your career or whatever else you want help developing on. We understand how promotion works and work to help you on that path if you are interested.
  • There is a ton of possible work to do and scope to take on, you are not limited by the scope of the team if you really care to work on ambitious projects! You will have a lot of influence on the future direction of the Uber mobile tech stack, which can reach out and influence the mobile industry as a whole as a result.
  • Uber is not a company that has strict siloing, engineers and teams can start and work on projects outside of the typical charter of their team, or work on projects that might be the charter of other teams.
  • The work you would do as a mobile platform developer is what I would call a ‘middle-end’ developer. Not a backend server developer, not a front end UI developer, but the person that works on the foundational parts of frontend apps. This means while you often are building mobile code, you often need to go beyond just the mobile stack and go into things like build systems and other software platforms and write things like networking libraries or UI toolkits.

Our Tech Stack

Uber’s mobile apps use a standard shared software architecture called RIBs, which is a simplified VIPER variant. We use ReactiveX streams heavily throughout our apps and all of our apps use a shared set of standard Uber libraries to do things like log uploading, networking or create Uber style widgets, called the Presidio library set. A large part of that library is our Base UI Mobile library (The mobile version is not public, only the web one, thus the link to the web one). We also use Dagger style dependency injection in our apps, using our own open source libraries called Motif & Needle.

We use Bazel as our build system and have a lot of custom IDE extensions and optimizations for our respective platforms. Our engineers still use their industry standard IDEs to develop code. We use Buildkite as our CI management system along with our home built SubmitQueue (slides) system. We use Phabricator for code review, but will be migrating to another platform in the future.


  • Android
    • Kotlin is the standard language to write new code.
    • We have a lot of Java code still in our Android codebase since adding Kotlin support is relatively new compared to iOS’s adoption of Swift.
    • Our minimum Android version is low, but we also use compatibility libraries to let you use the latest Android features.
    • We use RxJava + RxKotlin extensively in our apps, along with our Motif DI framework.
    • Jetpack Compose is fully supported in our apps and engineers can use it to make new UI screens now.
    • Most engineers use IntelliJ with Buck as the background build system, but we will have Android Studio support soon along with using Bazel.
    • Android engineers can spin up devpods, which are like gitpods, so they can do remote development with Jetbrains Projector / Gateway on large beefy rackmount machines.
  • iOS
    • Swift is our standard language.
    • We have some legacy Objective-C code but that isn’t modified much.
    • Our apps work with iOS 15 with an iOS 13 minimum deployment target.
    • We update our apps to the n+1 iOS version fairly quickly once they are public and stable. We then bump the minimum iOS version by n+1 too.
    • We use RxSwift extensively in our apps, along with our Needle DI framework.
    • We are prototyping SwiftUI and creating some pretty interesting libraries for it.
    • Most engineers use Xcode, we use Bazel as a background build system to further improve build times, but it’s fairly transparent to most engineers.
    • We are developing a vscode IDE called uCode so we can do a lot of cool things that wouldn’t be possible in Xcode and are investigating something like devpods for iOS.

What we are looking for from Engineering Candidates

  • The best kind of engineer on our team is a person who really cares about the practice of software development itself and has an interest in dev tools and foundational libraries.
  • We are looking for engineers who have experience with iOS or Android Mobile Software Development.
    • If you have this experience background, you will need to have worked on apps that have shipped to a respective app store.
  • AND / OR engineers who have experience with development tools or maintaining and extending a CI/CD system, which does not necessarily require mobile software development experience.
  • Dev tools / CI experience can be:
    • Build systems, such as xcbuild, gradle, bazel/buck/pants/blaze, etc.
    • Build farms, remote development environments.
    • IDEs, Text Editors, IDE/Editor extensions
    • CI: Jenkins, Buildkite, Github Actions or similar
    • Compilers, linters, static analysis tools, etc.
    • Git and other DVCS experience

  • Even though you might not come from the above backgrounds, if you are interested in dev tools and improving the practice of software development itself, then we will probably still be interested in you! Much of the dev tools we work with are fairly specialized, so we expect to train and onboard engineers onto that tooling anyway. Do you come from game dev, or really nerded out on things like rust as a hobby? Give us a shot anyway!
  • Our ideal candidate would be a mobile engineer with devtool experience and has worked in an iOS or Android dev tools team at a large tech company that ships large mobile applications, such as Airbnb, Twitter, Pinterest, Linkedin, Facebook, Apple, Google, etc.

What a Software Engineer will do on our Team

  • Create new software or improve our existing software systems.
  • Write design documents and general documentation
  • Answer support questions about our team's products to other engineers in the company.
  • Work with other engineers to create or improve our dev tools and foundational libraries.
  • Learn about new systems outside your initial region of expertise. (Ex: If you're an iOS engineer, learning about iOS dev tooling. If your a CI / dev tools engineer, learning about mobile software development, etc)


Basic Qualifications

  • iOS, Android, Developer Tools or CI/CD Software Engineering Experience
  • If you have iOS or Android software development, you will need have worked on an app that has been published to your respective app stores.
  • If you have CI/CD software engineering experience, you must have the ability to code and create CI/CD software systems, not just have ops experience.
Preferred Qualifications
  • Work experience on an architecture, foundations, platform, developer tools, developer experience, CI/CD, compliers, linters, release, build, IDE, code editor or other team of that type.
  • Have worked at a medium or large company on the above type of team.