Bumble Jonathan Crooke Mar 31, 2021

Scaling iOS at Bumble (Part 1)

Article Summary

Bumble's iOS team faced a critical choice: which build system could handle hundreds of modules and future growth without crushing developer productivity?

After identifying scaling problems in their iOS codebase, Bumble's engineering team conducted a rigorous evaluation of three build systems: Swift Package Manager, Tuist, and Bazel. They built full proof-of-concepts for each, measuring performance under simulated future growth scenarios.

Key Takeaways

Critical Insight

Each tool presented distinct tradeoffs between developer experience, performance characteristics, and implementation complexity, with no clear winner emerging from technical metrics alone.

The team's final decision came down to factors beyond raw performance data—Part 3 reveals which tool they chose and how the migration actually went.

About This Article

Problem

Bumble's SPM proof-of-concept had serious performance issues. The 'Create build description' stage would hang for over 200 seconds at first, and cached graph resolution caused 10+ second delays during routine file operations as the module count grew.

Solution

Jonathan Crooke's team built a custom module converter tool using their existing XcodeProj-based tooling. The tool automatically generated manifests for SPM, Tuist, and Bazel by leveraging their strong module uniformity. This let them iterate quickly across all three systems with adapters that output Swift or Starlark code.

Impact

Tuist's explicit 'tuist generate' operation scaled linearly in the worst case, similar to SPM, but avoided continuous graph resolution during development. Bazel showed real caching benefits, though it required significantly longer onboarding than the other two tools.