Mitali Palekar was a summer 2017 intern on Uber’s Site Reliability Engineering (SRE) team. In this article, she discusses her internship experience and shares lessons learned from her time here.
Internships can be intimidating, especially when they are at one of the most well-known companies in technology.
As a rising junior pursuing a degree in computer science, my internship at Uber represented the realization of a long-term goal. Aspiring engineers like myself dream about working on high impact, high visibility projects at companies that are impacting the way we live. As an intern on the Site Reliability Engineering (SRE) team, I was given an opportunity to learn from and collaborate with real-world engineers on features and improvements that impact their daily lives, including my flagship internship project, a tool to support rack distribution analysis with our cluster lifecycle management (CLM). In this article, I reflect on this project and the Uber intern experience at large, as well as outline key takeaways from my time at Uber.
Internship project: developing rack distribution analysis support within CLM
When I started my internship at Uber, I was excited to contribute to the changing landscape of a company whose products I regularly use and am genuinely excited about. Personally, I wanted to work on a project that allowed me to build a service or tool that benefited my team’s goals and future direction. Simultaneously, I wanted to delve into the day-to-day issues that my team faces and understand the full-time experience of a site reliability engineer at Uber.
Uber Compute, a division within the Core Infrastructure team, is responsible for scaling and supporting Uber’s internal services. As an SRE intern, I developed rack distribution analysis support for our cluster lifecycle management solution, a tool used for maintenance and remediation of our clusters and data centers.
This project gleans service, server, and rack-based information to provide insights into service placements on hosts and service-level agreement (SLA) adherence, both of which are foundational to Uber’s service reliability initiatives. The support interface and metadata enables engineers to better understand SLAs from a rack perspective as well as implement rack-aware service scheduling.
Architecting this system to allow for long-term service reliability, sustainability, and faster performance meant that we spent the majority of our time designing and iterating over system needs and user contracts. In the end, our hard work paid off in the form of an actionable model to bidirectionally graph relationship associations between services, servers, racks, and clusters, allowing users to query different objects based on specific use cases.
Through this project, I was challenged to think about industry design decisions related to scalability, reliability, performance, and sustainability—considerations that are imperative to sustainable engineering. Equally beneficial, Uber gave me the opportunity to own a project from end-to-end that is impactful for Uber’s future reliability initiatives.
Finding meaning at work beyond work
As I grow in my career, I have very quickly realized the importance of shaping my identity as an engineer beyond code. As a strong diversity advocate and experienced writer, I was extremely keen on developing and leveraging my perspectives through my summer internship—and Uber provided me with platforms to do just that.
I volunteered to speak at intern open houses, wrote for the Uber Eng Blog, attended numerous on-site events, and participated in employee resource groups (ERGs) such as LadyEng, Uber’s women in Engineering group. These experiences have helped me develop a strong sense of identity, belonging, and community at Uber.
My time here is a reflection of the “the more you put into it, the more you get out of it” ethos. These experiences have enabled me to gain a stronger understanding of my core values and the people that I want to surround myself with as an engineer. Moreover, through this community, I have inculcated important non-technical skills and identified key takeaways that will help me grow in my career post-graduation. Below, I outline some of these lessons learned:
Ask (the right!) questions
At school, one of the major pieces of advice from my senior classmates is to “ask questions because it’ll save you tons of time.” This line of thought has definitely helped me when I am unsure of how to use certain Uber-specific technologies or been faced with fixing obscure bugs.
However, more importantly, I have realized that it is also important to ask the right questions. Make sure you do your background research—it will help you present your problem coherently, and show your manager that you have spent some time trying to figure out what the problem is and why it exists. Moreover, it indicates that you have the tenacity to solve hard problems, but also know when to ask for help. You are an intern—and you are not expected to know everything—so good communication always helps.
Be open, be flexible
During an engineering internship, there is a lot of iterating, especially in terms of design decisions and implementation details. However, when your internship is at a fast-growing company like Uber, ever-changing needs and service contracts must be factored in. Over the span of my internship, my project went through several iterations and I soon realized that it was imperative to be open and flexible to change. While it was frustrating at times, my manager gave me advice that will inform my outlook on iteration moving forward: “At any company, things are constantly changing and nothing is ever completely static. If you can deal with this changing landscape positively and still make progress on your project, that will determine whether or not software engineering is for you.”
Progress is not always linear—and that is okay
Every engineering internship is unique and different, and no matter the flavor, you will be pushed to solve new problems, be faced with a different set of bugs, and complete projects at a different pace. There will be days when you make rapid progress and push out hundreds of lines of code; other days, you will spend hours trying to debug a single line—and that is okay. Internships are a journey, and you have to accept that it is normal, if not expected, for progress to be “buggy.” It is all worth it when, after weeks or even months of work, you push your project to production and realize its impact.
Remember to have fun
While you are here to learn and contribute to your team, remember to take a step back and soak in the experience. It is very easy to get wrapped up in the nitty-gritty of your internship project and forget about the bigger picture. Make sure to get to know your team, your managers, your recruiters—and most importantly, your fellow interns. Some of the most interesting conversations I have had with my colleagues have been learning about their backgrounds, their journeys as engineers, and their experiences at Uber. Dig deep, because the people that you meet today may shape the path that you take tomorrow.
Time really does fly by, but if there is one thing that I have learned this summer, it is this: even as an intern, you—your opinions, your experiences, and your ideas—matter.
Mitali Palekar was a summer 2017 intern on Uber SRE’s Platform Infrastructure team. She is currently an undergraduate student studying computer science at the University of Washington.
Learn more about the Uber Engineering intern experience by checking out other articles from our interns: