Thoughts on Mobile App Development in 2019

According to Statista, the global mobile app market will be worth $190 billion in 2020. Currently, Android and iOS are two the most widely used mobile platforms in the world. This is why clients coming to Waverley for software development usually prefer mobile applications supporting both. For many years we have developed numerous hybrid applications. At the same time we also created native products. And we were never totally happy with the results. Here’s why.

In the case of a native approach, we had two code bases to support. Different development speed for each platform, some features are easy to implement on Android, while others are better supported on iOS. The design should be adapted to peculiarities of each of the platforms.

For many other projects, we used a Cordova-based hybrid approach as an alternative for native. It was easy to start developing and wasy to show the result to the client. I think, it is an ideal way for the POC or for the case when you need to quickly verify an idea despite certain time and budget limits. Creating a hybrid app is like a battle, a constant fight for performance. Your application is covered with many performance checkpoints. You have to write and run performance tests. You can get performance issues just because of the wrong CSS and layout. Even now, when our phones become more productive from year to year, we continue having these countless performance and memory issues in hybrid apps.

A few years ago, we started looking for alternatives. We needed an approach that would produce native code for both platforms from one single codebase, would have an easy migration procedure, would be easy to maintain, and would offer the ability to work with native futures. The first one that came to our attention was Fuse. It was a solution promising to enable building Android and iOS applications from the same code, using XML-like language for markup and subset of JavaScript for the business logic. It was pretty nice, we had plenty of JS developers and the only thing we need to learn was the new markup language.

The second one we looked into was React Native. We used React before on our projects and we were really happy with it. That’s why we gave it a try. It was a small project with some sort of a camera scanner. Nothing special, a List page, Details page, Help page, etc. But during the development process, we got a lot of problems with the camera, with third-party modules, React Native updates. We seemed to need a lot of tricks to make things work,. It was really hard to migrate to the new version of React Native for some reason. So we decided to never use it again until it is stable. News from AirBnB show that we are not alone in our feelings towards React Native. I know that now things are more or less stable in the React Native world, and I don’t deny that we might consider using it again.

After tons of experiments and struggles, we were really sceptic about the new Flutter trend. We were like: “What? Google releases the next mobile framework? Why Dart? Can’t wait till they drop it.” But we decided to try anyways, just for fun, you know, to see how it works. And I would like to say that it is amazing! Yes, it still has a baby problem but it is an incredible tool. It compiles to the native code. it has its own rendering mechanism. No separate thread for JS, no bridges between the native part and JavaScript. It is based on components, just like React. it allows to use Redux-like approach to store the application state. And, topping it all – we have first-class support from Google. Google uses Flutter in their own projects like Fuchsia, Google’s next operating system for mobile/IoT devices, Google Ads.

Conclusion

I think Flutter is a game changer. It allows to use the same code base to build applications for Android and iOS. It provides a good balance between reusability and performance. Of course, we can’t use it for every kind of projects, but the number of projects we build based on Flutter will undoubtedly grow.