With the advent of cross-platform toolings such as React Native and Flutter, does it make sense for companies to invest in multiple native apps on iOS and Android?
That's the reason why such questions have arisen-
"Will native apps die?
"Is native app development a dead-end career path?"
"Is native app development dying?"
And, more.
Well, we've got answers to all such questions.
In the mobile development space, there are many going all out with Flutter and React Native. Most of them claim that it could save up to 30–35% of your time (and thus costs) by working with Flutter or React Native. Let's analyze as to how much of this is really true, and does this apply to you?
TL; DR
It probably won't die - but will face fierce competition.
Long Version
We have developed more than 100 mobile apps in the past five years, many of which have gone viral, got funded, and ranked in top #10 lists. We started developing apps in 2010 with Objective-C in iOS and Java with Android and transitioned to Swift and, in recent years, to Kotlin.
We were satisfied with the tooling and didn't pick up Hybrid Apps (built on Cordova or any Web layer) as they reduced the User Experience to a great extent. We had started using AngularJS (1.x) in 2015 much before v1.0 was launched and then came along React - as it matured, we embraced it and are using it to power most of our frontend systems, including our website (built on GatsbyJS).
With React already being used in our production systems and clients wanting us to work in React Native, we decided to give it a go. While we were working on RN, in Dec 2018 - Flutter was launched!
The approach that flutter took was different from React Native, and it held a strong premise of overcoming the pitfalls that React Native (and other Cross-Platform apps had in general). Thus, I guess it's time to debunk some myths and establish some facts around mobile app development.
Myth #1: Your code can be 100% in React Native/Flutter
This is wishful thinking. Just like how humans are social animals, mobile apps these days can't be an island. Depending upon the product features, one will need to interface with a lot of third-party solutions to integrate within the apps - more so for cross-platform apps than native.
There are different libraries for error tracking, performance monitoring to very specialized tasks such as video conferencing, and chat tools. Most of these libraries provide first-class support for Native libraries, and then, if they deem essential - create wrappers for cross platforms.
Due to the very nature of how features are created and support is rolled out, cross-platforms continue to be second class citizens. Thus, if you're working on a cross-platform app, you will need to integrate with third-party SDKs. In doing so, you will need to write native code to interface with iOS and Android.
Depending upon your approach, you will have to choose between writing parts of your applications in native code or in Flutter/React - at times, causing more pain than ease.
Myth #2: Flutter is here to stay, now and forever
Huge corporations such as Google will never have a single strategy, and it has a history of knocking down projects (some even successful by many standards) if it doesn't live up to their expectations. Also, frontend libraries and frameworks are notorious for having a short life cycle.
In early 2016, Microsoft acquired Xamarin for $500–600 Million - and in my opinion, it wasn't a wise move (we can all be Warren Buffets in hindsight 😉). Microsoft dropped Xamarin like a hot potato in recent years and has instead moved its focus on Machine Learning.
Google's beloved AngularJS, once considered revolutionary came into existence, got a lot of fanfare, adoption, and then criticism all within a span of a few years.
Google is simultaneously also backing Kotlin, a language created by Jetbrains. Kotlin can create not only cross-platform native apps (like Flutter) but also can work on Web (Flutter supports it too) and backend systems too. A true promise of writing with one language on all platforms.
Considering the above, I would advise that if you're in a business wherein, you have a very long and extensive product roadmap, you should ideally choose something that will stand the test of time. But if you're a startup that can move fast, iterate, fail, and re-invent - I would suggest going with a framework that can save your time (and costs) - at least in the short run.
Myth #3: You will always save costs upwards of 30% while working with Flutter/RN
Yes, there are cost and time savings when it comes to working with cross-platform apps - not just in development, but also in QA and Project Management. But these benefits are assuming that you don't rely on too many third-party frameworks that have little to no support for your SDKs.
For example, because Google is promoting Flutter, Firebase as a native SDK, but giants such as Twilio and Stripe are yet to come out with official SDKs for Flutter.
There are some animation effects, gradients, and such which are not available in React Native despite it being in existence for a long time.
So sometimes getting these to work with your apps can be a pain but if you're looking to build apps that aren't heavily dependent on these services or if these SDKs form a minor portion of the app then yes, you will still save money working with Flutter/RN
Myth #4: My Flutter/RN team need not know any native development
O how I wish this were true! It would be foolhardy to take a beginner, not knowing any native development to work directly on Flutter/RN. If you're starting mobile development, learn Kotlin/Swift first - get a firm grip and then move on to Flutter/RN. (also to know RN, you will first need to get acquainted with React - not a short learning curve, eh!)
Again, depending on your application, you could do away with this requirement, but if you need support - you will have to get your hands dirty in native code or get help from other native developers on your team (if you're lucky to have some!)
And now, time for some facts!
Fact #1: Your Flutter app will be as performant as a native app
Flutter was built for performance, and our recent experience in building flutter apps has been a resounding success. We recently launched a Flutter app for the fifth-largest marine player in the world!
The only downside you can see upfront is the size of the apps developed in Flutter. They are usually 30MB+ (though it's not a deal-breaker for most considering increased bandwidth and internet penetration around the globe)
Fact #2: You will be able to ship apps faster
While it might look to a developer at a macro level that he's spending more time than needed sometimes while working with React Native/Flutter as opposed to native development - they do save time overall.
With Flutter, you're able to ship apps quicker, which means you can pack in more features in every sprint, so everyone's usually happy! :)
Fact #3: You can add Flutter to existing apps!
With the launch of v1.12 of Flutter, the "add to app" functionality has finally gone mainstream. Even within Solutelabs (and I'm sure other products too) - we have started pitching to clients about creating new features in Flutter.
Adding Flutter to existing apps would mean that your native development team would have to reskill themselves in Flutter. This could be a deterrent factor for some teams and might not be for some.
Conclusion
If you already have a native iOS or Android app and don't need many external SDKs, try adding flutter to the mix, it's easy to learn, and there are some excellent tutorials on Flutter out there!
And if you're starting from scratch, have a look at your app and see if it's heavily dependent on SDKs that don't have a Flutter/RN SDK. If not, and if you're starting - go for Flutter.
If you're already investing in RN or have invested a considerable amount in time, costs, and building a team on native development - stay on course!
Top comments (33)
Why do you feel Microsoft has "dropped" Xamarin? I haven't used it myself but this is not the impression I've got from watching the overall Microsoft space.
On the separate issue of how wise it was to buy Xamarin, it is important to consider that cross platform Android/iOS development was only part of the reason for the acquisition. Experience and technology from Xamarin were crucial for creating .Net Core and thus making sure .Net remains relevant going forward.
I personally belive buying Xamarin has paid off tremendously.
I agree on using Xamarin experience for creating .Net Core but recent updates and version upgrades from Xamarin, IMHO, haven't been up to the mark.
Also, while I might have gone hyperbole on dropping it like a hot potato - it's hasn't received the kind of attention that other products like Azure or 365 are getting - both in terms of the advertisement or quality of builds. Compare it with tools like React, Angular or those on the lines.
"Microsoft dropped Xamarin like a hot potato in recent years and has instead moved its focus on Machine Learning."
I don't think you thought this one through friend. Makes no meaningful sense.
Notice how many people you triggered by this weird statement.
.NET Core and C# developers are potentially the most valuable in the market with Xamarin.Forms in the Microsoft arsenal.
As a business, it makes sense not to hire single trick ponies (native only, mobile only, web only etc.) and instead invest in upskilling my .Net/C# team to target a plethora of platforms with the mature Microsoft tech stack.
Xamarin is very mature and actually outperforms Flutter/React in many ways, and even native platforms in certain aspects. You read that right. Google is your friend to confirm.
Happy new year to all 🥳🥳🥳
Great article, well written, thanks for posting. Agreed , React Native and more recently Flutter are great Cross Platform technologies.
However, you made one false statement: “ Microsoft dropped Xamarin like a hot potato in recent years and has instead moved its focus on Machine Learning. “ . Microsoft has in fact invested more effort in the last year in Xamarin like never before to close the gaps. Hot Reload, Xamarin Form 4.x.
I think Xamarin popularity is in fact picking up.
Native won't die.
That's it.
True, it won't - all frontend frameworks we've seen so far have been a fad, some longer than others.
I liked the article overall but strongly disagree with your comment on Xamarin. Xamarin in my opinion offers the best of all the cross platform dev platforms. If you like the flutter approach, take that in Xamarin using Skia or use the amazing Xamarin Forms or even go fully native with better tooling! I think the biggest advantage with Xamarin is the huge collection of pre built packages already built for you!
I remember being young and naive making outrageous tech claims. It's one thing to be a fanboy and another to truly understand markets outside your own and business needs.
Not disrespecting your article. I do wish you the best on your ventures ahead. And keep an open mind.
Back in 2012 I started learning Android but faced frustration due to Sencha, Cordova, and hibrid apps using Angular. Until end of 2015 I went deep into Native while doing web developpment during the day. This possibility of alternative technologies taking over soon had alarmed new native developers since then.I dont regret my decision. I can feel confortable if I have to learn now Flutter whose language was a hipster back in 2012 with the rise of Angular, or learn Nativescript which is known for hitting Native libraries directly. Anyways there is room for any learning goal, just dont get trapped like in my case. All technologies are meant to die just like Adobe Flash and Flex. We need to be always flexible
True, your best bet is to learn and implement what is most suitable at the moment.
But because Native Development is not going away anytime soon, nothing is safer than that :)
I like the kotlin multi platform part but I wish you would have written a whole section about it.
Simon, you're right. Kotlin Multi Platform deserves much more mentioning - I'm currently doing some of my own digging on the same and would probably come up with some blog dedicated to just that in the coming weeks.
But thanks for pointing it out and thanks for reading my blog :)
That sounds great. I'm looking forward to it :)
My post comparing Kotlin Multiplatform (KMP) to Flutter, React Native, and Xamarin is a bit old now (KMP and Flutter are improving quickly) but I think it is still relevant dev.to/touchlab/how-does-kotlin-mu...
Please also have a look at other articles we've written focused on KMP dev.to/touchlab.
Thanks for the article, it was a good read.
Greetings to you guys at Touchlab. Some time ago Kevin Galligan introduced me to the KotlinXcodeSync plugin.
Every Expo SDK release (and the growth of the React Native community in general when it comes to packages with native as well as pure JS integrations) makes it easier and easier to never worry about writing native code. Add in Expo updates or CodePush, and you don't have to upload new IPAs/APKs to app stores and await their approval processes for updates which only touch non-native code.
Throw in React Native Web (already in Expo since SDK 33, though only truly useful IMO since 36 or 37) and Electron (at least until a desktop alternative can stick around to match in feature parity and stability, and easy to add to Expo), and you can build not only Android/iOS apps, but also PWAs and Windows/MacOS/Linux. For RN CLI or bare Expo projects, there is also Microsoft's React Native for Windows and MacOS (or you can build MacOS apps with Catalyst). NodeGui and Proton Native are options for all three desktops, mapping to native desktop UI primitives similarly to how RN does to mobile primitives.
I have built several projects with 100% JavaScript codebase (custom code, obviously not native community modules or the native scaffolding that you get just like you would with Flutter as I understand it) and up to 95% of it shared between all platforms.
As for Flutter, I have no interest in trying to hunt down or train Dart devs, just as I have no interest fragmenting my team into separate languages for each platform. I can go MUCH faster and cheaper than a 30% reduction with a tiny team of junior devs I can quickly ramp up, from the largest available talent pool (JS devs) on Earth.
I started mapping out simple examples for nodegui react too if anyones interested in getting started :P dev.to/jswhisperer/nodegui-react-c...
Nice.
Thank you, Bryan, for your kind words :)
I agree with you on PWAs, but unless iOS rolls out first-class support - native apps can't be ruled out. Things like having limited storage space, removing the space used if other apps start taking too much space, not having a default - add to home screen button and more. This could prove to be a non-starter for many.
Also, I believe it's not in Apple's best interest to support PWAs wholeheartedly else they will lose out on the service revenue that they are banking on since the dip in sales of iPhones. Let's see what the future holds :)
No, but I hope click bait will start to die.
😂