Top 5 Bumble Android AMA
By: Anatoliy Varyvonchyk
Tags: Reddit, Kotlin, Android, Programming, Architecture

A few weeks ago, our Badoo and Bumble Android team hosted their first Ask Me Anything (AMA) session on Reddit. It was great!

Our Android apps are huge: they have over 1.3 million lines of code, over 210 million downloads on the Google Play store and an amazing team of 23 people who develop them. The AMA was a great opportunity for the community to find out more about how we develop.

Andrei, Anton, Arkadii, Ivan, Michael, Nick, Zsolt and I were very excited to have the chance to interact in such a way with external developers, and hope that the 163 answers we provided were helpful.

Over the three hours of live Q&A, the topics discussed were pretty varied. We covered architecture, tools, tips for the learners, approaches for delivering features and many more. It would be impossible to list them all, but here are the top 5 questions most voted by the Reddit community!

Top 5

Zhuinden asked about using Android Jetpack, Fragments and Activities, and what we are using instead.

Zsolt: Good question!

Limitations: some Jetpack approaches don’t scale well to a multi-app architecture domain. I realise this is a niche problem, but it’s actually a serious one for us.

LiveData: No. Instead of MVVM, we have MVI, and we’ve developed our own automatic scoping for it, a tool called the Binder. Right now it only exists as part of our library — MVICore, but it’s targeted for extraction to a separate lib. We find it to be more versatile than LiveData, as it can be used outside the context of Android too and it’s super easy to use (Kotlin one liners). You can read more about the concept here and here. It’s a really amazing tool. Check it out.

Navigation component: No. We have a Router pattern with our version of RIBs. Having to maintain global navigation in apps with shared components adds maintenance burden both on the app level as well as app-specific knowledge to the shared components. The latter, specifically, is a huge downside if you want to reuse a component in different apps. The component shouldn’t assume anything about the app it’s used in (e.g. what screens are available). In contrast, Routing is basically local navigation. It moves navigation down from a global concern to an implementation detail of a component, meaning you are free to plug them in anywhere without having to worry.

Fragments: No. We have something similar to a deeply nested Fragment tree with RIBs, but much better. We also solved the problem of constructor injection without hacks like FragmentFactory, in a compile-time safe way. The framework constructs your component for you, but you tell it how to do it.

As for why we’re going our own way instead of following mainstream, the answer is that the whole process started many years ago. Way before the Jetpack era there was a time when we tried following “the Google way”, and as a result, burnt ourselves with Fragments. We moved farther away, trying to figure out what alternative would be best for us. We have been among the first to adopt new tech on many occasions (we tried Clean architecture as early as 2016, RxJava 2016, Kotlin 2017, Redux-inspired MVI 2017), and such tooling/frameworks/libs were not that abundant either. By the time Jetpack was announced, we had already invested in our in-house tech stack. Overall, we’re quite satisfied with it compared to mainstream approaches.

Having said that, we are using Room and personally I’m super-excited about Jetpack Compose 🙂

It gives me great pleasure to say that Zsolt’s answer above got a Gold Award from the Reddit community ✌️