Of Software and Strive at Strava
By: Nikhil Yerasi
Tags: Software Engineering, iOS, Strava, Internships

Hey! My name is Nikhil and I spent this past summer as an iOS Software Engineering Intern at Strava.

I’ll be graduating from UC Berkeley this year with a major in Data Science and emphasis in human-computer interaction. I used Strava throughout my days as a runner in high school and reinstalled the app last year on a whim. Like many of Strava’s athletes, I was in search of motivation and a sense of community. In a world of endless scrolling and farming clicks, Strava seemed to offer something different. Eleven weeks of fulfilling work, opportunities for personal and professional growth, as well as an electrifying culture, showed me that my intuition held true not just for Strava’s athletes, but for the company’s employees as well.

The engineers of #sfinterns

I was placed on the Growth team, which focuses primarily on registering, onboarding, and motivating the platform’s newest athletes. I’ve been able to work on projects ranging from increasing user notification accept rates to preparing the application for iOS 13; I also helped build an entirely new surface for content discovery.

Being thrust into the iOS codebase was both terrifying and exhilarating. With more commits than hours of sleep I’ve gotten in the last decade, as well as an ever-shrinking set of internal and external dependencies, it was difficult not to feel overwhelmed. My sidekick Tim, who I’ve come to refer to as “sensei,” started me off with small tasks like UI tweaks and copy changes. The Growth team uses frequent A/B testing to determine the efficacy of changes to the app both minor and major, and I was able to take part in this experimentation by rolling out a variant of the onboarding flow after the experiment had reached statistical significance!

I took on my first large-scale project during Guild Week, a time for Strava’s engineers to plan and execute work designed to eliminate technical debt, boost performance, and update dependencies for their respective platforms. I was tasked with overhauling the Login screen, which was previously written in Objective-C, in Swift using the View Controller-Interactor-Presenter architecture pattern.

*Presenting* the new Login scene during the intern tech talks

The advantage of the pattern is that by separating massive view controllers into three primary components — the display logic, business logic, and presentation logic — developers can easily add and test functionality as the user experience evolves. VIP, or Very Insistent Pain-in-my-ass, came to dominate my life for the next two and a half weeks. At times, progress was painfully slow and I began to question my initial assumptions, finding flaws in my approach as I added Google and Facebook authentication to the screen.

I was essentially struggling to rewrite code a more experienced developer had built years ago. Before their changes are merged into the codebase, software engineers first submit pull requests for other engineers to review and offer feedback on. My PR for the Login scene eventually accumulated 76 comments, and after an iOS engineer Slack-messaged me to ask if I was intent on breaking a Strava record, it became tough to convince myself that I was contributing to my team.

That week, a tech talk by my team’s senior engineering manager, who literally wrote the book on developing production-quality web applications, delved into the imposter syndrome. Defined as “feelings of inadequacy that persist despite evident success,” the phenomenon can often cripple the confidence of even the most decorated professionals. The presentation was illuminating, and after voicing my concerns to my manager during our one-on-one that afternoon, I was assured that my confidence would grow day-by-day. I dedicated myself to working on more focused portions of the project, securing feedback more frequently. Before I knew it, the unit tests were completed and the final pull request approved. The work paid dividends during the final weeks of my internship when the Growth team began implementing Apple’s proprietary sign-in solution, creatively titled Sign In with Apple. I then refactored Strava’s Sign Up scene in VIP, reducing the development cost necessary to implement the new authentication method client-side. I was able to quickly build a new Interface Builder file according to the specifications of our designer without worrying about overwriting existing IBOutlets and IBActions for a view controller vital to new athlete registration.

A chart I made to show the unidirectional flow of control in the Explore feed

The onboarding refactorization paved the way for the summer’s main event: the Explore tab. My team embarked upon a seven-week sprint to build a brand-new screen designed to bring athletes the best content on Strava, including popular segments, nearby clubs, activity lookbacks and photos from friends. I was able to provide feedback during the design stage, build the view controller to house the feed, and work on entry modules for the tab. A seven-week sprint for a project as large as Explore was unheard of, but my manager Jason had faith we could do it. I jumped headfirst into the work, utilizing my newfound knowledge of VIP to build an animated loading state and error handling for the modular feed. One of my fondest memories at Strava came during the seventh week of the project when I stayed late one Thursday evening — much to the chagrin of my manager — grinding through updating a server-driven module in the feed to fit our designer’s specifications. The dynamic was electric and in that moment I truly felt like part of the team.

Despite the Growth Activation team’s decision to focus exclusively on Explore for the duration of the seven-week sprint, I was encouraged to participate in this quarter’s edition of Jams, the company’s cross-functional hackathon. I met and worked with engineers on other vertical teams, eventually settling on the task of building a richer, more fulfilling ski activity experience. I had the opportunity to lead employees through a brainstorming and wireframing session as well as gain server-side experience customizing the Activity Detail page. I presented my work in front of the company and shared the stage with Yandong, Strava’s CTO, to talk about a project we worked on to improve activity-specific routes with techniques like matrix factorization and simple recommender systems.

An action shot taken by the talented Ben de Jesus during the kickball game

Working with the Growth team and with cross-platform engineers during Jams are just two examples of how interpersonal relationships at Strava have made my internship experience one I’ll never forget. From day one, interns were welcomed with open arms into the company’s culture of strive, encouraged to pursue our interests both in and out of the office. Whether at a viciously competitive kickball game against our managers at the Summer Picnic to runs through the Marin Headlands, the friendships quickly became as fulfilling as the work itself. I’m grateful for all I’ve learned, not simply about architecture patterns and A/B testing, but about myself as well. Strava’s given me a taste of what it means to be a software engineer and the company’s given me a network of people I’m sure to keep in touch with for years to come.

The Ninja loop was something out of Jurassic Park

Special thanks to my sidekick Tim Miko, my manager Jason Van der Merwe, Christopher DuBois, and my fellow interns.