About a 4 minute read.
If you’ve ever heard of Betteridge’s law of headlines, you already know the answer to the question I ask in the sub head.
I’ve just been reading articles about Google’s open source Flutter cross platform tool. As I read the accolades and testimonials, I get a strong sense of deja vu. I’ve seen these before, it’s just that it was Xamarin instead of Flutter. Or was it React Native? Or both?
The argument goes like this: If you use a cross platform tool, you build one code base and cut your development in half.
The problem with this is that it grossly ignores (at best) or completely forgets (at worst), that programming is NOT the only part of software development. In fact, client programming is seldom even the only programming in a mobile app development project. Just because you develop two native apps, one for iOS and one for Android, doesn’t mean you double your effort. Many elements are common to both:
- Backend services
- QA Test suites
A well designed app will put as much logic on the server side as possible. (Granted, too often, service developers do the minimum they can get away with and leave the client side devs to clean it up, but that’s another discussion.)
Anyone who’s ever worked with product owners knows half the battle is getting the features decided and prioritized.
So, can you save time by using cross platform instead of native? Sure! Can you save 50%? Not very likely. And if you are saving 50%, you’re doing a whole bunch of other things wrong to begin with.
Can you really serve the exact same app on iOS and Android? Again, probably not 100%. As you read case studies, it’s not long before you get to a sentence along the lines of “And you can easily drop down to do some native code when you need to.” Seriously, every article I read touts this line, and that let’s me know that it’s only the most trivial of apps that are going to be 100% cross platform.
With all this said, I’m excited about the prospects of Google’s Flutter. I’ve never believed the Xamarin hype and I’ve heard a lot of complaints about React Native. Hopefully, Flutter has taken it to the next level. And unlike Xamarin, which is owned by Microsoft (who really don’t have any motivation to continue to innovate the product at this point since Windows Phone is dead), having a tool that is made by one of the actual two big players in the mobile phone operating system industry, is probably going to give it an advantage.
If I were developing in Xamarin right now, I’d seriously look at getting out of that situation. Microsoft has already stolen many of the resources from that team to put them on the Visual Studio Code project. And you have to ask yourself, what’s Microsoft’s incentive to continue the product? It’s not a revenue stream. No one is going to buy Visual Studio just for Xamarin. It’s really only people who are using VS anyway that will use it. So, no revenue. Versus, lot’s of costs because every time Android or iOS versions release, the Xamarin team have got to update the product. At some point, they’re goint to say “Damn, we gotta cut costs to pay for these LinkedIn and Github acquisitions. What can we cut?”
There’s one other cross platform tool I want to mention. It’s called C/C++. If companies really have a lot of crunching to do on the client side, many of them have turned to C/C++. For all the effort Facebook has put into React Native, their flagship app leverages C/C++ for common code. The beauty of this language is that it runs on everything.
Bottom line, I honestly believe cross platform is the future (because it’s also the present and the past. Thanks C/C++!). But don’t believe the hype about cutting projects in half. And I also still feel native will be strong through 2024 before it starts to take a significant hit. It won’t go away, but the need to drop down to native will diminish.
(Since so many people like to make New Year’s predictions, I thought about predicting the death of Xamarin, but it may cling to life for a couple more years. Will it still be around in January of 2022? Probably not. We’ll see if I’m right!)