DEV Community

Cover image for Leaving Uber in 2022 was the best thing I did for myself 🚶💼
Jayant Bhawal for Middleware

Posted on

Leaving Uber in 2022 was the best thing I did for myself 🚶💼

tl;dr 📖

I had a cushy job at Uber—decent work, great people. But the red tape was overwhelming. Too many approvals and permissions made it hard to get things done. I wanted to build and deliver great stuff, not wait for basic approvals from a dozen people every time something needed to get done. And Uber’s dev productivity measures at the time didn't make sense either.

When talking to managers didn't help and I couldn't make an impact soon enough, I decided to leave and tackle it from the outside.

“Free of the shackles!” They say…

free at last

Now, the longer version…

The Comfort of Uber 🛌

Once upon a time… as a tech lead, I had everything: Good income, interesting work, and recognition. But something was missing. The work, while important, wasn't fulfilling enough. It often took too long to deliver most things. And the metrics used to measure developer productivity felt gameable and inadequate, and didn't always reflect true impact.

Leaving that cushy, high-paying job at Uber was one of the toughest decisions I've ever made (I took months to decide).

The Uber Office S01E01 🏢

My first project at Uber was kickass, and all my managers at Uber were great. In fact, in my personal experience I loved all the people that I got to work with. Friendly. Skilled. Considerate.

And the project was something that I had to build with my small team almost from scratch. It had a great focus on accessibility, a lot of design effort behind it, just the kind of project I would love to be a part of.

And because it was something being built from scratch, there wasn’t a lot of past baggage to carry along. Not many “approvals” were needed from outside the core team. The planning, design, execution was contained within the “inner circle”. That meant collaboration was super fast, and so was the execution.

parkour

But it wasn’t meant to last.

And then the honeymoon period ended…

Not everyone’s experience was similar, and my subsequent projects were not that interesting either. For most people it was minor features or maintenance work. Even if they were mid-sized features, I was one among thousands of other devs and the initial awe wore off pretty quickly. It felt like if I was missing for a couple of says, or on leave for a week nothing would really be affected significantly. I didn’t like that.

It’s not like I was underperforming either. I must be performing great because it reflected uniformly in my feedback cycles, appraisals, and the fact that I was given an “impact award”.
It just felt like despite all that, I wasn’t doing the kind of thing I wanted to do.

jim dead

The Red Tape 🔴

A large company is like a large heavy ship. It’ll go where it needs to but it’ll take time, and it’ll definitely change course super slowly.

At Uber, they had THOUSANDS of codebases. Over time the internal “reviewer” configuration would be updated to add new reviewers to the list, often without removing the older ones or those that aren’t relevant or involved in that codebase anymore only being handled on a case-by-case basis.

Uber also has the amazing concept of ERDs (not unique to them of course). Which are basically PRDs but very engineering and implementation specific. But this idea too was slowed down by the bureaucratic processes and the number of people that needed to be involved eventually.

late

Things would spend WEEKS in this phase! Sure, this allowed for some very solid and thought through implementations, and a company like Uber could suffer the delay for a more robust implementation. Except…

There was no one to verify if the implementation actually matched the documentation.
Good intention, but not well adhered to.

“One day, I want to be the kind of dev who goes through 5 steps of red-tape before delivering code!” — Said no one ever.

Everything changed when the Metrics Nation attacked 🔥

In the first half of my time there, annual reviews took a while to happen. Managers and other team leads would form a panel and manually try to gather data to evaluate devs by the numbers.
I did not know at this point what the metrics were, or how much they were weighted. What I know is that there wasn’t much in the way of automations involved, it was a fairly manual process (this changed later).

Interpersonal feedback and direct evaluation by the manager held a significant weight, and the whole process in general felt fairly transparent. I was okay with that. But then, efforts were made to automate this process…

Dashboards were created to track the stats of individuals across various teams.

And… One of the things being measured was line count and number of PRs per month. 😱
Yeah… it’ll take you 0.01234 microseconds to realize how this is a bad idea. Within days devs were artificially inflating PR count, splitting PRs when they didn’t need to be to inflate this count.

I don’t blame them. 🤷

dead inside

So, I tried to sort it out 💪

I’ve always liked solving problems. I do puzzles in my free time, often play strategy games on my PC (when I’m not shooting Nazis in Wolfenstein, or save my cabbage patch in Stardew Valley).

cod

I often solved problems that affected me or my team in terms or developer experience, productivity, documentation, etc. usually by going out of my way. I found it fun. 🤷

And I’ve always been a pretty passionate dev. I care about what I build, and I care about my fellow devs. Naturally that extended into caring about the evaluation process.

When automated dashboards came into play for evaluating us devs, naturally we started talking about it, increasingly frequently over time because the metrics used for that matter felt so flawed. And talking to leadership about it changed nothing in the time I remained at Uber.

Gameable Metrics

🗓️ At this point, we’re in the 2nd half of 2021 🗓️

The metrics used to measure developer productivity often felt more like a game than a true reflection of work quality. Promotions were sometimes based on these flawed indicators, leading to frustration. I felt super tempted to make smaller related changes in separate PRs when normally I may have not. It felt fake.

Some specific things measured were:

  1. Number of PRs per month
    • Devs started making smaller than needed or more frivolous PRs
    • Devs started making PRs for older low priority things if their PR count was running low
    • Some PRs started to be approved by friendly devs in the same team to inflate PR count
  2. Line count per PR
    • Devs started writing more verbose code
    • Extra newlines
    • Unnecessary refactors

saw that coming

Of course, not all devs were okay with doing this. But some were, especially those that had low numbers on these stats. Often the numbers might be low because they are working on something that involves more planning, design, or documentation involvement. But that wasn’t captured on these dashboards.

We talked to leadership about it, specifically about how this is possibly more harmful and the previous way of doing things seemed better and while it seemed like they agreed, nothing really changed.

And this was a time when I was already increasingly dissatisfied with my time at Uber…

no future

That brings us to 2022 🗓️

The Idea of Middleware

Around this time, Dhruv pitched me the idea for Middleware. The concept was intriguing: a platform designed to enable developers to ACTUALLY do their work, highlight what prevents them from doing what they love, bottlenecks, process blockers, etc.

The first thing that jumped to my mind was…
“If I had something like this to show insights to my manager, it would be so much more helpful than whatever they are doing right now.”

After several months of discussions and consideration, in August 2022 I finally decided decided to take the leap and join the man on this journey. The decision wasn't easy, but it felt right. 🚀
This was just 2 days after my birthday too! 🎂

The Office Meme: Jim Halpert looking at the camera with a knowing smile

The Startup Hustle

Building a product from scratch is tough. We had to sift through tons of data and present it clearly. We understood that not every metric matters; only show what's useful and actionable.

Our goal was straight-forward?
Build something our past engineer-selves would find sensible.

Building the right team was crucial, and a continuous effort. Big lessons in leadership, team dynamics, and company culture were learnt. Turns out, NERF was the answer to almost everything. 😂 jk, jk.
Growing a company meant dealing with finances, marketing, compliances, and of course customers. It was a huge learning curve beyond my Uber days.

The Office Meme: Pam Beesly saying 'Not a bad day'

Reflecting on this journey, I can confidently say it was tough but gratifying. Building something meaningful outweighs the comfort I left at Uber, yet it would have been a LOT MORE DIFFICULT without the support from my wife, Mehak.

And yes, I'd do it again in a heartbeat. 💗


Psst.
If you want to check out what we've been building, here you go. It'll mean a LOT to me if you could leave a star on the repo. 😄

GitHub logo middlewarehq / middleware

✨ Open-source DORA metrics platform for engineering teams ✨

Middleware Logo

Open-source engineering management that unlocks developer potential

continuous integration Commit activity per month contributors
license Stars

Middleware Opensource

Introduction

Middleware is an open-source tool designed to help engineering leaders measure and analyze the effectiveness of their teams using the DORA metrics. The DORA metrics are a set of four key values that provide insights into software delivery performance and operational efficiency.

They are:

  • Deployment Frequency: The frequency of code deployments to production or an operational environment.
  • Lead Time for Changes: The time it takes for a commit to make it into production.
  • Mean Time to Restore: The time it takes to restore service after an incident or failure.
  • Change Failure Rate: The percentage of deployments that result in failures or require remediation.

Table of Contents

Top comments (20)

Collapse
 
eforeshaan profile image
Eshaan

When engineers are boxed into corporate scut-work, that's when innovation starts dying. We create, because we can!

Collapse
 
jayantbh profile image
Jayant Bhawal

Same as Martin, couldn't have said it better. ❤️

Collapse
 
martinbaun profile image
Martin Baun • Edited

Couldn't have said it any better Eshaan! To be an engineer is to be wild with ideas.

Collapse
 
sashaov profile image
Sasha • Edited

Hi Jayant, thanks for the article. I totally get your disgust with vanity metrics (#PRs and #LOC), but a bit surprised that you use these metrics to rank contributors to your own project: github.com/middlewarehq/middleware... . How about dogfooding DORA instead?

Collapse
 
jayantbh profile image
Jayant Bhawal

Amazing catch, @sashaov. That's indeed an oversight.
We should change our widgets to show Dora relevant stats instead!

Collapse
 
mateush profile image
Matéush

Great article. The issue with corporates is whenever they implement new process is super difficult to change it.

Side question: Did you manage to sell your SaaS to Uber?

PS. I read your article on my YT channel - youtu.be/CVsWUwchabU

Collapse
 
jayantbh profile image
Jayant Bhawal

We've not tried yet.
Someday perhaps, but right now we're making sure it works for relatively smaller companies, and it seems like it does! 😄

It's not for everyone. Every engineering team works in a different way.
But engineering work itself is fairly similar, and that's what the goal is, to enable every dev to do what they love without being bottlenecked by the processes of their orgs.

Collapse
 
shivamchhuneja profile image
Shivam Chhuneja

Epic & an interesting read Jayant, as always!

Collapse
 
manittecool profile image
Manit Tanwar

When I was younger, I was always drawn to the allure of working in a large firm like Uber. But I’d heard loads of people say that they didn’t like this and even heard of people quitting cushy jobs not unlike yourself. I was never able to understand why, and this piece really helped bridge this gap to some extent. Thank you and all the best!

Collapse
 
nyangweso profile image
Rodgers Nyangweso

awesome content, : this is very true "not every metric matters; only show what's useful and actionable."

Collapse
 
jayantbh profile image
Jayant Bhawal

Absolutely! We've seen many people and alternative products show everything they possibly could, just because they could. We have been tempted to do the same because some of the data can be presented in such a fancy/pretty way. Isn't easy to hold back, but we try. 😄

Collapse
 
narven profile image
Pedro Luz

Yeah... I completely understand the feeling. Good luck.

Collapse
 
jayantbh profile image
Jayant Bhawal

Thank you. :)

Collapse
 
cvam01 profile image
shivam singh

@jayantbh Should I join Uber?

Collapse
 
jayantbh profile image
Jayant Bhawal

🤣 well, now is a good time to introduce them to Middleware.

Collapse
 
juanemilio31323 profile image
Juan Emilio

Wow, reading this post bring me so much calm. I've recently started working on a “big” company. I was expecting to learn how to write better code and a more polish way to track devs performance (compare to the previous places where I worked). And I'm living a really similar experience to you. I guess this is a pattern that repeats all across the industry. Thanks for sharing your experience

Collapse
 
jayantbh profile image
Jayant Bhawal

Yeah, I've heard similar stories in terms of getting things done from almost all my peers in the larger companies. Glad it resonated with you. :)

Collapse
 
samadyarkhan profile image
Samad Yar Khan

I remember one of my first meetings with you, asking if Uber was the best place to work at (because thats how I saw it back then). This article sums of the issues we discussed in that meeting along with why Middleware exists in the first place. If you use nonsensical metrics to track devs, they will always be gamed :")

Collapse
 
afzalhussein profile image
Syed

The mentality on devs to be glorified code labour is to blame. The management thinks of them as labours to churn out code that does what they want, and then use them to keep it going profitably, while trying to cut labour costs... go figure

Collapse
 
jayantbh profile image
Jayant Bhawal

That mindset is a bit more common than many people realize.

Though, I'd like to think that's not what a large portion of the engineering leadership at Uber thinks, but they did have a lot of process issues that made it difficult to incorporate feedback to their process changes.