Strava Engineering Team Blog

Futures/Promises in the Land of Golang

These days a common bottleneck in execution time is the network. It simply takes a long time to make the round trip (several milliseconds, versus a 100th of that to process the result). So, if you're doing multiple network requests, it makes sense to do them in parallel to reduce the overall latency. Futures/promises are a technique to accomplish this.

View More.

Closing the Gap - Musing from a Female Engineer

Women in technology – or the lack thereof – is a hot topic. Googling "women in tech" generates enough content to keep anyone busy; the internet raged with backlash to Barbie’s botched engineering career, and Always spent millions empowering women with their Super Bowl ad. Until recently, I was the only female engineer at Strava. By reflecting on my experiences I can better understand the gender gap, and by sharing my success I hope to prove to other women that they belong in technology.

View More.

Improving Auto-Pause for Everyone

Every time an athlete uploads an activity to Strava, the server analyzes the activity and calculates various metrics for it. For each activity, the server calculates "elapsed time" (the time between the athlete starting the recording and ending it), and "moving time" (a measure of how long the athlete was actually moving). Moving time is then used to calculate additional statistics such as splits and pace data for runs.

View More.

Pace Graphs - Up Is the New Down

In our research, we found that runners are divided on which direction is more intuitive for pace charts, and they hold those opinions strongly. We received volumes of feedback on the redesign, and the axis direction of our pace charts was a hot topic of dispute.

View More.

Finagle Compatible Service Discovery in Golang

What we all know and love about Strava is running on a mostly Rails code base. However, as we've grown we've slowly been moving to a more service-oriented architecture. Almost all new features are being implemented as their own service and a few existing features, like the feed, have also been migrated. Most of these services are written in Scala and use Finagle/Thrift for their RPC communication layer. A growing number of services are starting to use Go and it's becoming necessary to cross communicate. A big hurdle in this process has been service discovery, i.e. how clients determine the IP and port for a service that can exist on multiple hosts.

View More.

Conquering Our Android Crash Count

At Strava, we strive to produce quality software to serve and motivate the world's athletes. As part of that mission, we are constantly updating and refining our user experience. And few things make for a worse user experience than the app crashing.

View More.

Fitness & Freshness Updates

The Fitness and Freshness chart, first released in March 2013 is one of the many powerful training tools available to Strava premium members. Cyclists can use this feature to monitor their fitness and fatigue levels. According to the underlying model, both fitness and fatigue increase with each ride, by an amount proportional to the intensity of the ride. Between rides, both quantities decay exponentially.

View More.

Internationalizing Strava

Internationalization is the kind of problem whose solution is comparable to replacing the wheels of a moving train – it’s not acceptable to slow down the product development cycle while it is happening. In nature, Internationalization is not a feature of a product: it’s a process that becomes part of how your company operates. Marketing, product, support, design, business development, engineering: every single person and team was involved in the effort. Even our database admins had to recently update the schema of some tables to support the full range of the UTF-8 charset.

View More.