Strava Engineering Team Blog

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.

Analytics at Strava

Just as our athletes are obsessed with tracking and analyzing their athletic pursuits, we here at Strava are obsessed with tracking our own performance; but instead of wattage and pace, we’re concerned with activity and engagement. In this post, I’ll talk a little bit about the infrastructure that powers our internal analytics and reporting.

View More.

The Bay Area’s Top Stops

Strava has done a lot of work figuring out how athletes move; we have global heatmaps, challenge heatmaps, personal heatmaps and even Strava Metro. But what about where people go to stop? I looked at 4.3 million rides in the San Francisco Bay Area to answer this question and found the best places to meet friends, have coffee or just check out the view.

View More.