Android Engineering Strategy for Global App Launch
Article Summary
Karthi from Mercari's Android team reveals why they ditched cross-platform frameworks for their global marketplace launch. The decision wasn't about native vs. hybrid ideology, it was about leveraging 10M+ downloads worth of battle-tested infrastructure.
Mercari built a new global e-commerce app serving multiple countries with a small team and aggressive timeline. Despite having Flutter and React Native experience across their product portfolio, they chose native Android with Jetpack Compose by making strategic bets on reusability over theoretical speed.
Key Takeaways
- Single global build serves all countries via BFF layer and remote config
- Monorepo with enforced boundaries using modules-graph-assert prevents dependency sprawl
- Switched from REST to gRPC with Wire for performance and type safety
- Reused proven architecture from Japan app (10M+ downloads) instead of rebuilding
- BFF layer enables country-specific experiences without separate builds
Mercari shipped a global Android app faster by strategically reusing their native foundation rather than starting fresh with cross-platform tools.
About This Article
Mercari needed to adopt gRPC across their global Android app while keeping REST APIs in shared services. This meant developers and QA had to debug two different client stacks at the same time.
Karthi's team picked Wire from Square for their gRPC implementation. Wire has an API similar to Retrofit and works with OkHttp, which let them build type-safe contracts and streamline how clients and backends talk to each other without needing custom validation.
Mercari used the modules-graph-assert plugin to enforce strict monorepo dependency rules. This stopped product modules from crossing boundaries and prevented library modules from depending on product code. The result is a clean architecture that can handle a growing codebase.