hardDesignScenarioSeniorStaff
You're asked to break up a five-year-old iOS app that has become one enormous Xcode target - how would you approach modularising it, and what does it cost you?
4 min readUpdated 2026-08-15
Answer
Short answer
Modularising means carving the app into Swift packages along feature and layer boundaries so build graphs and ownership become explicit, at the cost of slower initial builds, careful dependency direction, and real discipline about what each module exposes publicly.
Was this answer helpful?
Likely follow-ups
- How would you decide whether a shared UI-component module belongs at the top of the dependency graph or should not exist at all?
- What breaks if two feature modules both need to navigate to each other's screens?
- Why can splitting into local Swift packages sometimes make clean-build time worse before it makes incremental builds better?
- How would you migrate one feature out of the monolith target without freezing feature work on it for months?
Related questions
- How do you design the dependency graph, handle shared resources, and optimise build times when breaking down a massive iOS monolithic application into a modular architecture using Tuist?hardAlso on ios and architecture3 min
- How do you execute the Inverse Conway Maneuver on a 200-person engineering org that accidentally built a distributed monolith mirroring their dysfunctional silos?hardAlso on architecture3 min
- How do you implement local-first collaborative editing without the unbounded memory growth inherent to CRDTs crashing the client?hardAlso on architecture2 min
- How do you architect and implement Dynamic Feature Modules in an Android application to reduce initial download size and deliver features on demand?hardAlso on architecture3 min