I joined Uber as a mobile engineer in 2016. It’s been the most fun, challenging and impactful environment I’ve worked at so far, as a developer. And I’ve had plenty of experience in mobile, beforehand: I was a prolific Windows Phone developer, then one of the very early swift adopters at Skyscanner - earning a notable mention from Chris Lattner on my tutorial to move from Objective C to Swift.
As a mobile previous engineer at Uber in the past, and as a manager to several mobile developers, here are the main benefits I see of working at Uber, in Amsterdam, as one of the Silicon Valley companies with a large presence in Europe.
- Mentoring and mentorship is a big part of our culture. We have formal mentoring opportunities and encourage informal mentorship. Developers mentoring other developers and learning from each other is a big part of our culture. This culture allows us to hire less experienced people and invest in them. It also a great way to have experienced engineers further grow, by supporting others.
- A never-ending firehose of learning about architecture. Teams write up their design approach before starting projects, then distribute it widely. This is our engineering planning review process that provides transparency, lots of learning opportunities, and the ability to give feedback to teams across the globe.
- Cross-platform opportunities. Many of our mobile engineers onboard to the “other” platform (iOS and Android) - and we are supportive of this. RIBs architecture is similar on iOS and Android, our design documents usually capture both platforms, and we have internal training to learn one platform or the other. A large percentage of mobile engineers decide to contribute to both platforms, after some time.
- Exposure to large, distributed systems. As someone who started as a mobile engineer, I learned a lot about distributed systems by reading design documents and talking with backend engineers. We’ve had mobile engineers fascinated by these systems move to the backend, broadening their skills.
- Promotions. We have a clear career ladder and a transparent promotions process that we keep tailoring based on feedback from engineers and managers. My team has had a pretty good run with promotions the past few years. Professional growth is something managers and peers are deeply invested in.
- Technical managers and a path into management. All engineering managers come from an engineering background, having been developers for a good time, and are technical. We have an apprentice manager program and occasional opportunities for moving from engineering to management. I moved into management at Uber, and three other engineers in Amsterdam have also done this transition.
- Product-minded software engineers. Because most mobile engineers work closely with product managers, UX researchers, data scientists, and operations people, we have lots of opportunities for product input. We encourage developers to think as “product engineers”, bringing suggestions and tradeoffs to the table.
- Principles of engineering growth. Dan Heller is a former engineering manager in Amsterdam, now a staff software engineer in San Francisco. His ten principles for growth as an engineer capture how we encourage engineers at Uber to take ownership of their growth - and the environment we strive to create to do so.
- A Silicon Valley company in Europe. There is a lot to like about this kind of environment, that merges good things from both worlds.
Engineering Culture, Architecture and Scale
As a mobile engineer, I’ve had a hard time convincing stakeholders at other companies to adopt engineering best practices that benefit the team and the product, in the long term. At Uber, I had to push little: we are about pragmatic, sustainable, and world-class engineering.
- Scale. We build apps at scale and. Hundreds of mobile engineers work on our dozens of apps (some public, some yet to be revealed). We do this in a shared monorepo for iOS and Android.
- Testing and quality are core to how we work. We continuously test, at scale. We roll out features and bugfixes guarded by feature flags and use advanced experimentation, monitoring, and oncall tooling - for mobile, as well.
- Mobile developer experience team. We have a dedicated mobile developer experience team of over twenty engineers who build world-class tools to make building, deploying, and testing mobile apps faster. They built SubmitQueue to that keeps master green, at scale, added Swift support for buck, as well as things like our linting platform.
- Architecture. We architect at scale. We built RIBs as a more scalable solution to architecting large apps, with hundreds of collaborators. We keep iterating on this architecture, building novel approaches on top of it. We choose simple and clear design over jargon-filled software architecture.
- Open source. We open source many of the tools and frameworks we build and use. RIBs, Cyborg, NullAway, Autodispose, Uber Poet, and many others.
- Bold bets. We take on big, bold bets. We have rewritten our rider app and our driver app the past few years and are quite happy with our codebase quality and maintainability as a result.
Sounds interesting? Apply here and work with me, in Amsterdam.