Modernising a Legacy Android App Architecture: Part Two - MVVM
Article Summary
Rob Pridham from BBC Sport ditched the trendy frameworks and went old school—callback listeners and view controllers—to modernize their Android app. Controversial? Maybe. Effective? Absolutely.
In part two of BBC Sport's Android modernization series, Pridham explains why his team rejected popular solutions like RxJava, LiveData, and Data Binding in favor of a simpler MVVM+C pattern. The approach prioritizes comprehension over cleverness, using humble callbacks and view controllers to connect fragments, viewmodels, and views.
Key Takeaways
- BBC Sport chose callback listeners over RxJava and LiveData for view-viewmodel communication
- MVVM+C pattern adds view controllers as explicit glue layer between components
- Simplicity enables faster onboarding: graduates grasp cookie-cutter patterns immediately
- Pattern proved successful on BBC Sounds before applying to Sport app
- View wrappers provide platform separation and easier unit testing with mocks
BBC Sport's deliberately simple MVVM+C architecture with callbacks outperformed complex reactive frameworks by making the codebase more maintainable and new developers productive faster.
About This Article
BBC Sport's Android codebase had accumulated multiple conflicting UI patterns across different development eras. MVC, MVVM, MVI, and MVP all coexisted, which left new developers confused about where presentation logic should actually live and made architectural standards unclear.
Rob Pridham's team implemented MVVM+C, an opinionated pattern that uses callback listeners and view controllers as explicit glue layers. They rejected RxJava's massive API surface area and avoided committing to LiveData early on, which helped them maintain hexagonal architecture principles.
The consistent pattern made it easier to onboard graduate developers. They could look at tangible examples across all feature implementations and understand the approach quickly. The simplified approach also reduced how much framework complexity new developers had to learn alongside Android, Kotlin, and domain knowledge.