Reflecting on my IC path, Part IIApr 8th, 2020
I left Microsoft to join Uber in October 2015. Applying the lessons from my Microsoft stint, I experienced accelerated growth at Uber’s Seattle office with the help of some amazing leaders and managers. In the second post, I continue to reflect on my journey there, and I am immensely grateful to everyone who guided me along the way.
“Leadership is not given, but earned”, said Jonah Cohen, my first manager at Uber. In a 1:1 with him in April 2016, six months into my Uber ride, I asked Jonah whether I was ready for the Senior Software Engineer role. He replied, “I think you have earned your leadership”.
I joined Uber to initially work on Driver Incentives, where they subsidize drivers to provide higher liquidity to riders in under-served markets. There was already a separate team owning the Driver Incentives product, which ran on a single-instance analytical database that left a lot to be desired. It only supported batch jobs which caused latency issues; it more often than not reported inaccurate results; and it ground to a halt as volume increased week over week. To solve these problems, my team’s mission was to build a streaming backend to power realtime incentive computation and eventually payout1.
I was the last engineer to join the team of four. I was also the most junior one as each of my three teammates was already a senior engineer with more than ten years of professional experience. To get me up to speed, my first task was to create a script to compare the results between the existing batch solution and the new streaming pipeline. It was not a “senior-shaped” project by any measure, if such thing exists in the first place. However, the job turned out to be a great opportunity for me:
- In order to do a meaningful comparison, I needed to know the existing product to the exact dollar spent. While doing that, I got to put on my product manager hat and became the interface between the two teams. I spent many joyful hours talking to people on the other side, many of them in Product, Design and Operation roles, to arrive at a shared understanding of the product.
- Having the data at hand, I was able to steer technical discussions within my own team. It happened quite a few times when my teammates had a heated discussion over a key tradeoff which, with the right set of data input, was not an issue at all. That earned me credibility from my peers, who would often come back to me and discuss their ideas. By listening to each one of them, I found that many times their seemingly different ideas shared the same common core, and I was glad to reconcile the differences and to reduce friction within the team.
- I stepped in to lead the production rollout coordinating the two teams, because I happened to be in a place where I understood the high level product and the implementation details on both sides. While doing that, I continued to refresh and expand my knowledge base in that area.
- It earned me trust from many adjacent teams shipping the new backend successfully. I was invited by Khang Tran, the Engineering Manager of the Driver Incentives product team, to participate in their product vision exercise for the next 12 months. My team worked with a couple of regional growth teams to expand the use cases of the streaming backend. I also got an opportunity to give a company-wide tech talk on behalf of the teams involved.
A different job
My Uber ride would continue for another year until the end of 2017. My second project was to build an internal tool for sales specialists to do customer outreach. One key use case was to help prospective drivers with the onboarding flow via integrated text messaging. The specialists would help them, among other things, upload ID and insurance documents, inspect their vehicles via video chats, and keep an eye on their background checks.
Zhi Li, my manager over the span of the entire project, empowered me with great trust and flexibility. I learned Go and built the initial backend. I learned React and architected the initial frontend. However, I think my most important value-add was to serve as the glue across teams. We did not have a Product Manager on our team for a while, so I flew down to our call center and interviewed the sales team to design the prototype. I made a second trip to train the specialists once our tool was ready to be tested. It was an iterative process where lots of incredible feedbacks were exchanged and incorporated in the product, and I was happy to do whatever I could to make the product useful and valuable.
When I looked back on my Uber ride, it became clear that I was indeed doing a different job as Rus had advised2. While I certainly made some technical contributions at Uber, and while I already had product management and customer support skills in my toolkit prior to Uber, my primary role was to lead projects. That meant setting or influencing directions on both the product and the technology fronts. That also meant consistently making forward progress regardless of the type of work I did.
I was not explicitly put in a place to lead. It would be absurd for my managers to do that in the first place. Luckily for me, I earned my leadership, which would continue to serve me well for my transition into Stripe.