Flutter — evolution of cross-platform app development

When it came to mobile app development at Bornfight, cross-platform always played second fiddle to native Android and iOS development… well, at least until Flutter entered the game.

We gotta be honest, up until a year ago, mobile app development at Bornfight was practically a synonym for native app development. Yes, we played with cross-platform frameworks from time to time to test out their capabilities — we worked with React Native and Xamarin… and these frameworks were good. But they were never native-level good.

Every version of those cross-platform frameworks had a weakness or a con that we couldn’t let slide, and that made us default back to developing apps natively for iOS and Android development. That was what we were good at, that was what we built our mobile teams around and that was what gave us the best results.

Well… in comes Flutter!

What is Flutter

OK, before we jump into the story of how we started using Flutter at Bornfight and what we’re planning to do with it, let me just quickly explain what Flutter actually is — for all of you who might not have used or heard about it until now.

At its core, Flutter is a UI software development kit that’s used for cross-platform development… and this basically means that you can create native-like applications for Android and iOS from a single codebase. Flutter supports a few other platforms, but we use it primarily for Android and iOS, so I’ll stick to that. The key word in all of this is “native-like” as apps created with it, or any other cross-platform framework for that matter, never provide the exact experience of a true natively developed application because you’re using one codebase to create applications for two very different mobile platforms. But with Flutter, that experience is coming extremely close to that native look and feel that we’re always looking to achieve.

Another thing you need to know about Flutter is that it was created by Google in 2018 and it quickly started putting the pressure on React Native, which currently still reigns supreme when it comes to cross-platform development frameworks. In addition to that, it uses Dart as a programming language (as opposed to React Native’s JavaScript), and it has a rapidly growing community that’s constantly developing new libraries and upgrading the overall system. Talk about the benefits of being created and supported by Google.

OK, let’s get back to the main story…

Flutter at Bornfight

As I said in the beginning, we were a native-first company up until a year ago. That is when a few of our clients asked us if we could develop their apps with Flutter instead of taking the native approach. And their reasons were different — one of them already had an app that was built in Flutter and needed developers who could upgrade it, one of them quickly needed a fairly small application for both iOS and Android, some were limited by time, others by budget…

Because of this, we started taking cross-platform more seriously, and given that Flutter was universally praised by the development community and that our first tests put it fairly ahead of React Native… we decided to give it a proper shot.

Over the next couple of months, we created a couple of internal apps with it to see exactly how it holds up against native development — where it performs well and where it fails, what its limitations are and how can we implement it into our workflow, what kind of apps is it good for and what is still better when developed natively…

And when all of the testings were done, Flutter passed with flying colors… but with a serious asterisk. You see, Flutter is great if you need a simpler application that is more lightweight and has a limited number of standard functionalities. But if you need a heavy application that has lots of custom features, is very reliant on phone hardware, or interacts heavily with the OS itself, then the native is a much better and more efficient approach.

All in all, Flutter is an excellent framework for mobile development, you just have to know when and for what to use it, and when to stick with native. We see it as a great addition to our native development expertise that will help us in those projects where native just wouldn’t be the most effective option.

Benefits of Flutter for developers and clients

So, what makes Flutter a great option for mobile app development? The simple answer is — a number of clear benefits for both development teams as well as for clients. Here are a few of the most impactful ones.

#1 Streamlined development

Flutter comes with a wide variety of tools developers might need during production, and that streamlines the entire process and makes development faster and cleaner. But because the framework is still relatively new and not every aspect is fully fleshed out like in native, app development can sometimes take a little longer.

#2 High performance

Because of Flutter’s architecture and the way it handles code, the performance of applications created with this framework is almost indistinguishable from natively developed apps.

#3 Native-like experience

Flutter comes with a wide variety of libraries, modules and widgets needed to create the almost native iOS and Android look and feel — everything from simple design elements to app physics. But keep in mind that when you get to rendering or focus on some specific details, you may experience some deviations from the true native version.

#4 Simple customization

Flutter’s toolkit gives developers the option to use numerous libraries and connect native code with their Flutter codebases, which means that every element of the app is customizable — from functionalities to design.

#5 Faster time to market

Developers who use Flutter can create apps for multiple platforms from one codebase, which means that apps can not only be developed faster, but also launched in sync.

#6 Reduced production costs

Writing one codebase for two applications instead of two codebases usually makes the creation of cross-platform apps more cost-effective than native development.

Why Flutter and not React Native

Now that you know a little bit more about why and how we implemented Flutter into our workflow, you might ask yourself why we never embraced React Native which is more mature and has a stronger community around itself.

Well, the main reasons were the performance of the apps we worked on and the ease of implementing the framework into our existing workflow. When it comes to mobile apps, user experience is an extremely important component because users can feel when something is even a bit off or isn’t performing as it should — and the thing is, applications we created by using React Native tend to feel a bit off, no matter how much we optimized them. Because of the framework’s limitations, its internal architecture and the way it handles code, we were always being hard-capped or made to fit within its boundaries.

On the other hand, the apps we created with Flutter ran smoothly and almost perfectly simulated the experience and the physics of a native application. Because Flutter comes bundled with a wide variety of modules, UI rendering components, device APIs, loads of libraries… you basically have all of the required tools and technologies in that single package, and that greatly increases the overall experience and performance of the created applications.

Can/will Flutter be the end of native development?

This is a tough prediction to make…

While it is true that more and more companies are looking for cross-platform solutions, and some are explicitly asking for Flutter, native is still the best way to develop mobile applications. You can take this with a grain of salt, but our short-term answer would be NO – Flutter probably won’t be the end of native development in the next couple of years as it still can’t provide the real native experience. Although apps created with Flutter are constantly getting more and more advanced and the entire framework is continuously being upgraded, it’ll take some time before we can say that Flutter apps and native apps become indistinguishable from one another.

What we can be certain is that Flutter will continue to rapidly grow and attract even more developers because the temptation and convenience of writing one codebase to create apps for multiple platforms is just too strong to pass up on.

Now in the long run… this is where anything can happen, but we see cross-platform and native living side by side. In the long run, differences between native and cross-platform Flutter-based solutions will be minimal, so the choice of one approach or the other will probably depend on the type of application that is being created and specific aspects that aren’t related to development — like a client only wanting an app for iPads or looking for some very specific/unique functionalities.

The future of Flutter at Bornfight

Well… we certainly see Flutter as one of the key aspects of mobile development at Bornfight — one we’ll continue to upgrade and expand upon. What we can say at this time is that we’ll continue to work on cross-platform development through Flutter, and offer it as a service alongside native mobile app development. This means ironing out the processes, defining optimal workflows and ensuring that these two approaches to mobile development can support each other and seamlessly function together.

In addition to that, we’ll move forward with our plan to scale up the mobile team with new developers who are skilled in Dart and have experience in creating mobile apps with Flutter. Although the framework itself is quite new, the impact it already had on cross-platform development, the potential it brings and the community that is being built around it give us enough conviction to bet big on Flutter.