# Scaling developer experience: How we improved Android Studio in a large monorepo

[Grab](https://yomu.fyi/company/grab) · Rifqi Fahmi · May 15, 2026

## Summary

Grab's passenger Android monorepo contains roughly 2,000 modules and 11 million lines of code, leading to IDE sync times exceeding 35 minutes on cold starts. While Bazel handles application builds, Android Studio relies on Gradle sync to construct its project model, requiring Gradle to evaluate every module during configuration. To solve this bottleneck, the team built a custom Focus plugin that restricts IDE syncing to target modules and their direct dependencies. The architecture reuses a static dependency graph generated during existing Gradle-to-Bazel migration tasks to eliminate the Gradle configuration phase during module selection. An IntelliJ extension and a Groovy method-shadowing technique in settings.gradle allow developers to configure focused modules directly through a graphical user interface.

## Takeaways

- Shadowing Gradle's native include method with a local closure in settings.gradle enables custom module filtering without altering module declaration files across the repository.
- Persisting module dependency graphs to a static JSON file during existing migrateToBazel runs avoids the overhead of Gradle's configuration phase during focus operations.
- The Android Studio integration uses IntelliJ's GradleResolverExtension and GradleTaskManagerExtension extension points to automatically inject sync arguments into project imports and Gradle tasks.

**Tags:** [Android](https://yomu.fyi/topic/android), [Developer Experience](https://yomu.fyi/topic/developer-experience), [Performance](https://yomu.fyi/topic/performance), [Scalability](https://yomu.fyi/topic/scalability)

[Read original post](https://engineering.grab.com/how-we-improved-android-studio-in-large-monorepo)
