How We Reduced Our Android Startup Time by 77%
Article Summary
Turo's Android team slashed their app startup time by 77%. Here's how they turned a sluggish launch into a lightning-fast experience.
The Turo Engineering team tackled one of mobile's toughest challenges: cold startup performance. Their approach combined eliminating blocking network calls, optimizing I/O operations, and leveraging Android's latest APIs to dramatically improve user experience.
Key Takeaways
- Removed blocking network requests during startup by deferring them asynchronously
- Eliminated custom SplashActivity and adopted Splash Screen API for better metrics
- Applied Baseline Profiles for 15% improvement in startup compilation
- Fixed SharedPreferences eager initialization causing disk reads on UI thread
- Ran 50/50 A/B test using local device hashing to measure impact
By removing synchronous network calls, optimizing disk I/O, and applying Baseline Profiles, Turo reduced cold startup time by 77% on average (84% at p50).
About This Article
Turo's Android app made multiple synchronous network requests when starting up to fetch feature flags and route users. This caused inconsistent startup experiences depending on whether someone was a guest, host, or unauthenticated user.
Pavlo Stavytskyi's team switched to asynchronous feature flag fetching. The app now shows a home screen skeleton while requests happen in the background and defaults to the home screen for most users instead of blocking on redirect scenarios.
Feature flag requests no longer block startup. They complete in the background using cached values, so subsequent app launches don't need to show loading skeletons at all.