“What are you doing this summer?”
“I’m working for Uber this summer!”
“You’re driving with Uber?” my friend asks, puzzled.
“No,” I smile, “I’m doing software development!”
This past summer I joined Supply Engine, the engineering team at Uber in charge of developing scalable solutions for the onboarding process for new driver partners. Like an engine, the work we do is integral to Uber under-the-hood.
My main project was engineering the backend for generating and storing the consent wording that driver partners agree to when they partner with us, accommodating for hundreds of international cities and for services besides moving people places (i.e., uberX), such as UberEATS and UberRUSH.
I landed my first diff of code, adding owner names to a document. Boom! I couldn’t help but smile as I saw the upgrade button spin around and around. My change was now a part of the master branch. As I headed home that first Thursday night, I was amazed at the trust and speed at Uber. Here, you hustle and get things done. Week by week, I became accustomed to industry coding standards, code reviews, and the tools and packages Uber uses. I picked up Python, made services talk to each other via Thrift endpoints, queried databases, used Redis caches, and unlike college, earned paychecks throughout the whole learning process.
Not everything went smoothly. In the middle of my internship, I had an endpoint complaining: Type Error. I banged my head for two and a half days, stepping through each line, writing test cases, changing bits here and there. The cause of the bug? Leftover files from using a tool’s update feature. In my head, I sighed a bit of relief and frustration, thinking “it wasn’t my fault…,” but it didn’t matter. I still had to fix it. I learned to work it out with the team in charge of the tool, realizing that communication across teams is just as important as within them.
August 19 at 10:57am, I pushed out the first half of my project to the world. But instead of the lovely green signifying successful deployment, soon afterward red infested the screen. Services threatened to shut down. Emails flooded my inbox. One by one, deployments rolled back to their previous working state—Level 5 Outage.
Did I cause a Level 5 Outage?! “Looks like there’s an outage,” my teammate muttered. I could feel the sweat break out on my forehead, but before I had a chance to ask why, another email popped up. “Back to normal.” The timing was entirely coincidental and not even related to my code. Sigh. Yet that experience gave me a reality check; here, engineers have the power to make or break the system in a matter of moments. With this ability comes responsibility.
I concluded my internship on a high note, rolling out my project to the world. In over 300 cities worldwide, drivers signing up to partner with Uber were interacting with the consent wording my code generated and stored. Since I worked on the back end, drivers would never necessarily know anything had changed. (In fact, this is our goal of creating a seamless experience even as we upgrade.) But I would know that the part of the system I helped build was working in the present, and will be present for the future.
Uber gave me the opportunity to become a better engineer, but the best part of my internship was getting to know amazing people. On the first day of my internship, when we onboarded, Thuan Pham, our CTO and Head of Engineering, gave an Engineering Values talk that was so thoughtful and stimulating I filled page after page of notes. What a cool guy, I thought.
Afterward, as I introduced myself, he surprised me by asking, “Has an executive ever made you coffee?” “Um no,” I stammered. He smiled and started telling me about his day as he casually whipped together Vietnamese coffee sweetened by a dollop of condensed milk. I left that meeting inspired by great conversation and honored that he took time out of his busy schedule for an intern.
I am also so thankful for my software engineering mentor Dan Bercht. I was new to Python but he walked me through the specialties of the language and ways to be especially Pythonic. I learned as much from coding myself, as I did reading through his thorough comments and looking through his diffs.
With so many cool projects going on at Uber and even cooler people working on them, I decided to put together a series of posts on what it’s like to intern at Uber. Periodically on Uber’s Engineering Blog, you’ll find a post written by or a Q&A done with an intern that will give you a glimpse into what engineering interns do at Uber and who we are.
So if you like what you’re reading and are learning software development, consider joining Uber as an intern next year yourself; be on the lookout for specific listings in early 2016, which we’ll also put on our Uber Engineering Twitter feed.
In the words of Thuan, it’s an opportunity you won’t want to miss.