Android Launch Performance
Article Summary
Strava's Android team cut app launch time in half by treating performance optimization like athletic training: consistent measurement, strategic improvements, and relentless focus on efficiency.
David Rozsnyai from Strava Engineering shares how the team systematically improved cold start performance. They tracked three key metrics: app initialization, Feed screen appearance, and content display time. The work revealed surprising insights about what actually slows down mobile apps.
Key Takeaways
- Replaced problematic third party dependency with custom solution for stability and speed
- Delayed initialization of non critical tasks to prioritize user facing content
- Removed ViewPager after data showed 90% of users clicked tabs instead of swiping
- Thread scheduling delays hit bottom 50% of users hardest (220ms at p75)
- Granular tracing exposed dependency injection as the biggest initialization bottleneck
Performance optimization requires continuous measurement and willingness to challenge assumptions, even removing features that seem core to the experience.
About This Article
Strava's Android team found that performance wasn't distributed evenly across devices. The bottom 50% of users hit serious thread scheduling delays, with the 75th percentile reaching 221ms when subscribing to shared RxJava observables for feed content.
David Rozsnyai's team swapped out the shared observable for basic event listeners. This gave them direct control over thread scheduling and removed the unpredictable delays that came from RxJava's thread management.
Lower-end devices no longer had the performance gap. Feed content now rendered consistently without the multi-hundred millisecond delays that had affected half the user base.