Behind the Scenes - Pairing Development Story

Pairing is a social network that depends heavily on your friends having the app as well. So having it available both for Android and iOS was really a must. We were exploring the different options. Even started development on native iOS 4 years ago. At some point we switched to React Native, and then finally we made another tough decision and switched to Flutter about a year ago. That’s when development really started taking off. The decision to go with Flutter was very good for us. It was what made this complex social app possible for both platforms in reasonable development time. Plus, maintenance is much easier thanks to the cross platform nature. Business wise, one needs to understand that flutter gives you a cross platform solution for 1) UI, UX - completely 100% shared on all platforms. Unlike react native, which is a bridge to native ui elements. 2) Business logic, math, algorithms, - 100% shared.

Not shared, has to be unique for each platform using plugins: 1) Anything that needs to talk to the operating system (eg getting phone contacts), has to be developed separately for each system. Of course, many common plugins already exist.

So, the bottom line is that most of the code is shared. Probably around ±85% for Pairing.

We are very satisfied with flutter, and believe it (or its future likes) is the future in mobile development. In fact, we now work on migrating all our existing native apps to flutter.

The results are great. Great UX, feels native to users.

Development: The development team grasped flutter in no time. They find developing on flutter very easy and enjoyable. It is based on Dart, a strongly typed language. Dart mostly resembles Java, which is a good thing. Learning flutter is also very easy due to the great documentation online plus the inherent documentation within the flutter code. Developing on flutter really feels as native development feels. The language is strong. The compiler catches errors. The IDE helps you code. And - just like in native - you get common views and UI elements (developed by the flutter team and are part of the framework - unlike react native, that does not have that)

The big difference from native development is the Widgets flutter introduced.

In other development frameworks UI is defined by some xml-like language. Here, all UI is part of the code. I find it both more comfortable and flexible. The fact that every scene is built from code gives you a very easy elegant way to update the view based on the app’s state, incoming data and user input. You don’t need to have an XML, and then in code hook it up. It’s inherently hooked to your model. It’s completely REACTIVE. It feels like the flutter team took the good parts from native development and combined it with the good parts react-native introduced, and further developed it from there based on react native’s lessons. So it feels like the best of both worlds.

Another huge pro for flutter is the instant run. You change code and it is immediately updated on your device. Not even a ‘flashing’ screen. That’s a big advantage over native development. Yet another pro - is Google’s support not only for the framework but for its ecosystem: documentation, github issues, and plugins (eg firebase plugins, files, etc.).

I really cannot think of significant cons. If your app is specifically designed ONLY for Android or ONLY for iOS, and it needs many interactions with the operating system - you are probably better off with native development. In all other cases we would go with flutter.

I am Ronen Rabinovici, from Tel Aviv, Israel. Pairing’s co-founder

What do you think? Post your thoughts here or on our facebook page, we'd love to hear from you.