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: