Scaling developer experience: How we improved Android Studio in a large monorepo
Article Summary
Grab's Android team turned 35-minute IDE syncs into a 2-minute flow. Their secret? A clever Gradle trick that required just three lines of code and zero workflow changes for 100+ engineers.
Grab's superapp monorepo grew to 2,000 Android modules and 11 million lines of code. AI-assisted development accelerated growth, but Android Studio syncs became a 35-minute bottleneck that consumed 10 GB of memory and frustrated 76% of developers.
Key Takeaways
- IDE sync time dropped from 35 minutes to under 2 minutes
- Memory usage fell from 10 GB to 2 GB per sync
- Pre-computed dependency graphs eliminated expensive Gradle configuration phase
- Groovy closure shadowing enabled zero-migration integration for all teams
- Custom IntelliJ plugin automated focus mode with one-click module selection
By building a custom Focus plugin that reuses their Bazel migration infrastructure, Grab cut Android Studio sync times by 94% without changing a single team's workflow.
About This Article
Gradle's full configuration phase evaluated all 2,000 modules every time, even when developers only needed a few. A single cold-start sync took over 35 minutes and used 10 GB of memory. This frustrated developers so much that 82% asked for a way to exclude modules.
Grab used their existing Grazel migration infrastructure to pre-compute dependency graphs as static JSON files during the migrateToBazel task. This removed the expensive Gradle configuration phase entirely and let developers focus on specific modules instantly.
Compose preview builds became faster with less indexing work. Developers working on typical UI modules with 5-10 dependencies now sync in under 2 minutes consistently, compared to the previous 26-minute p95 baseline.