Prior to this internship, my university’s professors, fellow students, and career counselors gave me a dystopian picture of developing software at a large company: a silent, gray room with no windows populated by rows of desks stretching to unseen walls, engineers spending eight uninterrupted hours poring over tedious work.
Fortunately, my experience at Uber was nothing like that.
From my first day in the office, I’ve found nothing but friendly folks and colorful, sunny spaces. This internship overturned my assumptions about the industry, as I was free to pursue projects that interested me without guilt, supported by a strong and welcoming community.
This summer, I’ve had the pleasure of being an intern on the Productivity Applications team. For my summer project, I’ve been working on a Slackbot to assist in searching Whober (Uber’s internal employee directory) and group/channel edits.
My first assignment was to learn Golang. In my college experience, we tend to explore the programming language in theory, following a series of projects that align with using specific theoretical concepts from the language in a particular context. The pressure to complete assignments on time limits our ability to explore further. Here, on the other hand, instead of a series of strict modules oriented toward Uber’s Go platforms, I had the freedom to explore the Go documentation and use the available materials in the OneLogin portal, and my mentor let me figure out how to learn the language in the way and timeframe that worked best for me. I even got to build a small-scale social media platform to practice my Go skills. After a couple of weeks, I was comfortable enough with Go that I was set up on the Go monorepo to work on testing suites and get a feel for what developing my summer project would be like.
For my first ticket, the Whober team had set up a new widget to display the chief of staff for employees that have one, and I got to design its unit tests. My mentor walked me through how the Go monorepo worked, how to generate coverage reports, and what the best practices were for setting up my environment and pushing my changes. Then I was let loose. I was allowed to figure out how to navigate the monorepo on my own, which helped me understand how the controllers, classes, and APIs all fit together to make development clean. After that, my new testing class was committed, approved by my reviewers, and sent to production. The moment my change landed was exhilarating. Even though I had only created a small testing class in the Go repository, I felt that I had made use of the skills I had only used theoretically or as part of my curriculum in college. Concepts such as testing, notation, and program structure were ideas that I had learned previously but never been able to apply independently, and my first few weeks allowed me to do so.
From that point onwards, I received more tickets. I was able to work within the web monorepo where I was able to change the chief of staff and assistant widgets order and fix a bug involving phone number entry. I learned the differences in development and production flow between the Go and web monorepos, how to develop components that would operate independently of one another so that the features on the site could grow, and how to read and understand the work of others before me.
Once I had a firm understanding of Go and how the monorepos worked, I was able to start working on my summer project: the Whober Slackbot (Whobot for short). The Whobot currently interfaces with Whober to pull profiles for search by email and Slack mention and display them. It is capable of creating interactive message blocks and formatting message content.
The first stage of my project was research, so I began by reading through the Slack API and looking at a similar implementation of a Slackbot built in Go, Urate, under the guidance of my mentor. Reading the documentation helped me develop a more full sense of a Slackbot’s capabilities and how to implement those features. I found the Go monorepo especially helpful in finding similar implementations. From these readings, I developed a sense of what it would take to send out messages from the Slackbot. I set up functions on how to format different messages and documented how to process the return values in an API for later use. With that knowledge, I was able to set up a series of Slack commands to figure out how to create interactive messages and formatting. Once I had figured out how to set those up, my team taught me how to make a gateway for requests to Whober, and then finally, I finished the function for searching and displaying employee information by request in Slack. Working on this project taught me a lot about how project development at a company works, how to learn freely and without fear of failure, and how important it is to work in a team.
Working with my team is what changed my worldview the most. I found constant support whenever I encountered an issue or had a question, meetings were engaging and fun, and they really helped me feel part of a group here at Uber. From them, I learned that I could offer suggestions, be part of the conversation, and ask questions about what’s going on or how something works. They also gave me a much clearer and wider view than I had ever received at college about how diverse a person’s professional career could be.
Working here at Uber has shown me that sometimes the mental image I have couldn’t be further from the truth. I came into Uber with a rather limited view of the industry but discovered an engaging environment full of friendly people, work that broadened the horizons of software I could build, and normalization of exploration and failure that I lacked at my university. Thank you so much to my team, my friends, and everyone else who made my experience so wonderful!
If you want to work on open, interesting projects in a welcoming environment, then please consider joining Uber as an intern this coming year! More information regarding the internship program can be found here!
“Traveling Light” by Ardenswayoflife is licensed under CC BY-SA 2.0.