Why Cross-Platform Development, will always be the future of Apps

Omid Bicker
7 min readJust now

--

Ah, cross-platform development — the phrase that used to make my skin crawl like a cat in a room full of Roombas. But, oh, how the tables have turned.

Let’s take a little stroll down memory lane, shall we?

My coding journey began in the murky depths of C++. Eventually, I found myself in the shiny, Apple-scented world of native iOS development, slinging Objective-C and Swift. I was one of those die-hard native development fanboys.

You know the type: “Yeah, bro, nothing beats native development. Users can feel that nanosecond of performance difference compared to cross-platform!”

Yep, that was me. A native purist, preaching from the mountaintop. And then… well, let’s just say, I’ve seen the light, and it’s flashing in a glorious array of cross-platform frameworks.

To be fair, my conversion wasn’t just a sudden epiphany brought on by a caffeine-induced coding marathon. No, it was more of a gradual enlightenment, born from both my own experiences and the evolution of cross-platform tools themselves. But, before we get to the shiny future, let’s hop in our DeLorean and rev up to 88 MPH back to the early days of cross-platform development.

Enter stage left: Java! (Just kidding… kinda.) Java was like that one high school teacher who swore their way was the best way to do things. “Write once, run everywhere!” they said. And sure, you could run it everywhere — as long as “everywhere” included the right JVM and a hefty dose of patience. Java was one of the early attempts to deliver on the “code once, deploy everywhere” dream. But, let’s be real — it was more like “write once, debug everywhere.”

And then came the first true contender: Cordova. (Gotcha! Just kidding again.) Okay, seriously, Cordova, Ionic, Xamarin — they all tried to make it happen. But each of them had their own quirks and ultimately ended up being the quirky sidekick who tries to help but just makes things more complicated. Think of them like the Ross Geller of cross-platform frameworks: lovable in their own way, but not exactly what you’d call “cutting-edge.”

But then, a new wave emerged, bringing with it frameworks like React Native and Flutter. This was different — they didn’t just promise “write once, run anywhere”; they actually delivered a pretty decent experience across multiple platforms. The frameworks matured, the tools got sharper, and developers started realizing that maybe, just maybe, it was worth ditching their “native or nothing” mentality.

Architecture is everything

Let’s start with ReactNative. Sure, it’s a JavaScript framework, but don’t let that fool you into thinking it’s just another shiny web toy. No, no, no. This bad boy was built with some serious thought behind it. React Native was designed with the most basic building blocks of app development in mind, and when it comes to building user interfaces, it doesn’t just fake it with some janky-looking HTML wrapped in a mobile app shell.

Nope. React Native plays it smart. It renders down to the corresponding native components, which means your app looks and feels like it was born and raised on the platform it’s running on. None of that “Hey, why does this app look like a weird cousin of a website?” nonsense. It’s all about those native vibes!

And how does it pull off this magic trick? Under the hood, it’s using something called a “JavaScript bridge” to communicate with native code. Think of it like the secret tunnel system in a spy movie — sneaking in, doing the business logic, and getting out before anyone notices something fishy is going on. Your app gets all the performance benefits of native code while still letting you write in good old JavaScript. It’s like getting to have your cake, eat it, and then find out it’s actually a low-carb, high-protein snack.

Now, let’s talk about my personal favourite: Flutter.

Yep, I’m coming clean — I’ve been coding and building apps in Flutter for years, and I can’t quit it. Seriously, it’s like a bad romance where you can’t tell if you’re addicted or in love.

So, what makes Flutter different? Unlike React Native, which plays nice by rendering corresponding native widgets, Flutter goes full renegade. It doesn’t just borrow from native; it has its own rendering engine called Skia. That’s right — Flutter renders everything itself. Every pixel, every button, every widget is drawn by Flutter’s own engine. It’s like that kid in class who not only brings their own lunch but also cooks for everyone else. And you know what? It works!

This approach means Flutter can run on practically anything with a screen. iOS, Android, macOS, Linux, Windows, the web, your toaster, the display on your smart fridge — if it’s got pixels, Flutter’s got it covered. It’s the ultimate Swiss Army knife of app development.

Now, when Flutter does need to talk to native, low-level code, it uses something called Platform Channels. Think of it like a walkie-talkie between two realms — it’s a clever way to keep both the Flutter side and the native side in sync. But here’s the kicker: Flutter does it smarter than React Native. Why? Because Dart (the language Flutter uses) is both Just-In-Time (JIT) compiled and Ahead-Of-Time (AOT) compiled. This dual nature gives Flutter a little edge in performance and a smoother ride when communicating with native interfaces.

So, while React Native is like the kid who plays by the rules but plays them well, Flutter is the rebel with a cause — rewriting the rules of what cross-platform can be, and it’s not afraid to flex its muscles a bit to show who’s boss.

That’s why, once you’ve gone Flutter, it’s pretty hard to flutter back 😏

(You know, cause the logo is a bird, that took me a while, so please take a moment to enjoy)

Why Cross-Platform Development, will always be the future of Apps

So, if you’ve made it this far, congratulations! Either this article isn’t as bad as I feared, or you’re just really bored. Either way, I’m taking it as a win. And if there’s one thing you should take away from all this, it’s that since the dawn of time, humankind has been on a relentless mission to make things easier. We’re hardwired for evolution, which is just a fancy way of saying we’re obsessed with doing more with less — less time, less effort, fewer headaches. And I’m not just talking about coding apps here; I mean literally everything.

The goal? Get more done with fewer people in less time, solving increasingly complicated problems with whatever tools we’ve got handy. That’s basically how we’ve managed to go from rubbing two sticks together for fire to sending a car into space “for fun.”

Back in the day, when I first started building apps, it felt like launching a full-blown Hollywood production. You needed an entire ensemble cast: one team for iOS, another for Android, and if you had to deal with other platforms like Windows, macOS, or the web, well, congrats, you just doubled your staffing needs. And don’t even get me started on the backend folks. Basically, you needed a small army just to get your app running across all the screens your boss demanded.

But look at us now. Times have changed, my friend. Today, small, agile teams are building complex applications with far fewer people involved. We’re sharing resources and knowledge, reusing code, and ditching the “rewrite everything from scratch for every platform” mentality. Why? Because it’s a massive waste of time, money, and sanity to reinvent the wheel just to get it spinning on yet another screen.

Sure, there might be a few cases where native development is genuinely the better option — although, if I’m being totally honest, I’m not really sure what those cases are. But here’s the thing: the more efficient we become, the more everyday problems we can solve. And that’s what it’s all about, isn’t it?

We’ve come a long way, haven’t we? We started this journey with Cordova, which was basically the equivalent of slapping a browser window inside a mobile app and calling it a day. It was like trying to turn a toaster into a gourmet kitchen — sure, it kinda worked, but let’s not kid ourselves about the results.

Then we levelled up with Ionic. Think of it like Cordova’s more ambitious cousin: still mostly web views, but with some shiny new toys to play with. It was progress, but still felt like that kid in gym class who tried really hard but never quite made the team.

Then came Xamarin, which was like, “Hey, what if we actually got serious about this cross-platform thing?” We started digging deeper, including more low-level code, and improving performance. Now we’re talking! It was better — like going from a rusty bicycle to a sturdy scooter. You’d still feel every bump in the road, but at least you were moving faster.

But after years of trial, error, and a whole lot of “Why doesn’t this work?” moments, our two MVPs arrived: Flutter and React Native. These two stepped onto the scene like action heroes in a summer blockbuster, ready to blow up everything we thought we knew about cross-platform development.

And guess what? Now we’ve reached a stage where we can build scalable, user-friendly apps with performance so fast, it’s basically whispering in native’s ear, “I’m right behind you, buddy.”

It doesn’t seem that they are going anywhere, big names are betting on it, even if they do, history tells us, we will keep trying.

Well, this is it — the end of the line. If you’ve made it this far, I guess I must’ve done something right. So, for the love of all things code, leave a like, smash that follow button, and make my day. Come on, don’t leave me hanging like an unclosed tag in a sea of HTML.

--

--

Omid Bicker

Passionate developer, former Healthcare Engineering Director. Can cook minute rice in 59 seconds.