> Are native apps dead?
> Not yet… but they’re going to be.
This post makes very big claims based on a very basic application that doesn't seem to be much more than a few toggle buttons and a couple of animations thrown in, and some 'statistics' that don't appear to be based on any actual facts.
I work in a team developing an app that has around 5million users, and we abandoned an Ionic first version 5 years ago, after a couple of years of nightmarish development, where (after the first implementation, which went reasonably well) we spent most of our development time fixing inexplicable bugs, chasing native features, getting inconsistent UI problems, broken builds from package updates and a myriad other problems that just drained our energy and were generally dispiriting.
I personally felt the entire experience was a horrible professional dead-end. Luckily our management decided to switch to a native application, and learning Swift has been the most fulfilling part of my entire career. The application is faster, more reliable, the bugs are locatable and fixable; the entire framework feels solid and professional.
The application itself is immeasurably better now. We attracted better-qualified colleagues who have been a great learning resource. And the app itself went from an appstore rating of (iirc) around 2.8 stars to its current rating of 4.6.
We would never dream of going back to the nightmare that developing a complex and performant app with Ionic was in my experience.
Hello, author here. Congrats on having such a successful app.
Funnily enough, I actually wrote this post because if you had asked me about cross platform web apps 6 months ago I would have said the exact same thing you just said.
In 2014 I'd started an app using Ionic and actually ended up abandoning it and it killed the project. I was so frustrated. That's why I was shocked with this app (and yes it is small and pretty simple) actually worked really nicely being a react app bundled into a webview. It's crazy, I was just shocked.
Made me realize that cross platform web apps are a hell of a lot more capable today than I had thought.
And sure, maybe claiming native apps will die eventually is a pretty bold claim... But technology moves. And the direction it's going now, is in the direction of browsers becoming faster and more capable at a greater rate than user's desire for more elaborate UIs. Visual Basic and Java used to be the hottest tech you could have on your resume. Who knows what will be old fashioned and out of date in the future.
I don't normally make bold claims but I think I'll stick with this one and maybe in 5-10 years I can fish out this blog post to see if I'm right or not.
Hi - Thanks I don't consider myself responsible for the overall success of the app, it's a big company.
I know really well about how 'tech moves' as my first developer career was based on advanced and deeply immersive ActionScript3 Flash apps - and the speed that died was a genuine warning to never be complacent that I'm still fully aware of even now.
But I'm not convinced that 'web-apps' are the universal panacea you seem to think they are.
To begin with, the apparent simplicity of your app (forgive me if I'm underestimating the complexity of any features you don't mention in the article) suggests to me something that could be built using SwiftUI in a couple of days.
For side projects or simple UI applications, SwiftUI is so fast to put together that it really outstrips the setup speed of any of the web frameworks I've used in the past. Simply learning a bit of Kotlin and/or teaming-up with one other Android developer (which in itself would be a great learning opportunity) means that you could develop native apps pretty much as quickly and easily as learning and implementing an Ionic app.
You also (both here and in the article) focus on "user's desire for more elaborate UIs" - but the emphasis in most apps is not an "elaborate UI" but speed, reliability, predictability and accessibility.
In my experience, native frameworks provide a better user-experience in all these areas.
Even if you learn SwiftUI, and get a Kotlin developer for Android, you'll still need a web developer for those who just want a web app. Notion, Spotify, Hulu, etc, all have web apps. Even Gmail still has a web app, albeit an extremely poor one, which goes to show how much work multi-platform support is. The benefit of frameworks like Ionic is to support multiple platforms without having to maintain multiple codebases. So as the gap shrinks between native and web, it starts making more sense to just write a single web app
Gmail's web app is "extremely poor"? I almost never experience any issues with it, and it's quite streamlined in my experience. It's not worse than the Android app (it's actually nicer, IMO, but that's probably in large part because it's on a big screen). It could be more responsive, but that's about it.
> And sure, maybe claiming native apps will die eventually is a pretty bold claim... But technology moves
But common sense does not.
Just do not forget that you are reasoning over a "market", a supposed large number of potential users - not "a norm, some universal rule". It is very normal to want one's tools work without networking.
React Native has nothing to do with the work done by the author. He is using a browser based web view, React Native eschews the browser in favor of a JavaScript based custom native bridge. And I would agree that it's poor.
I don’t want to be wildly unkind, so I’ll keep it to this: your limited experience here is not sufficient basis to prognosticate on an entire industry.
I look for signs in posts of where the user is at and he said "I don't normally make bold claims but I think I'll stick with this one and maybe in 5-10 years I can fish out this blog post to see if I'm right or not" which is exactly the kind of thing that suggests a level of maturity (which = a willingness to be wrong and change one's mind and learn from experience) in the poster.
But saying “I don’t want to be wildly unkind” implies that there is something about the author and their claim that is deserving of meanness. I think that is an unkind thing to say.
That’s a fair point. I thought the context of “unkind” was already clear from the grandparent comment:
> This post makes very big claims based on a very basic application that doesn't seem to be much more than a few toggle buttons and a couple of animations thrown in, and some 'statistics' that don't appear to be based on any actual facts.
I have used Ionic for about 7 years now? 5 years ago it was sort of still a painful beta-like product. Not the case today. We ship and maintain 2 different apps to web, iOS, and android each, with only 3 developers. These are highly complex apps , although not games. Ionic really got great about 3 years ago.
I suspect that if you had experienced Ionic a bit later in it's cycle, you would have been happy. Hard to tell, and I do think there are genuine cases for building to specific platforms. However I think it's the exception (outside gaming), not the rule.
I can second this. My Ionic app runs incredible stable, no issues, users are happy. It is not super complex and doesn't make use of native APIs beyond in app purchases, but it isn't super trivial either.
The performance is good on modern devices to the point where you don't notice a difference.
The main downside are these things:
1. No fine-grained control over input types / the keyboard that is displayed. You basically have to use whatever Safari gives you. The options got better in recent years, but a native app has better control over the type of keyboard it shows (maybe you can achieve similar effects with a plugin).
2. The UI obviously does not respect accessibility settings. For example, if you enable the O/I markers on toggle buttons on the OS level, your app won't show them. But I think React Native wouldn't show them either, so there's that.
3. Can be a pro and a con: Your app shows the same UI for every OS version. Let's say a user is still on iOS 11 and Ionic tries to adhere to the design language of iOS 15, an app update will also affect iOS 11 users. Whereas with native apps, you can basically say "take this headline element and show it in the way the OS renders this by default". Imho, this doesn't matter for normal users that much, but if you obsess over design, it can be a downside or at least somewhat unexpected.
And you get a lot of upsides:
1. Truly one code base with close to zero custom code for each platform. Hence, a solo developer can easily develop an app for iOS, Android, and the web.
2. Assuming you use Ionic's Capacitor as a runtime environment on devices: It is basically a thin wrapper for Chrome. Since Chrome is evergreen even on older devices, I usually never run into browser issues if users are on Android 6 for example. They simply have the most recent Chrome version and your app benefits from that.
Compare this with iOS: Users with an older iOS version run an old version of Safari and hence, you need to make sure that your JS code doesn't break on older Safari versions. Although the compatibility with modern JS got a lot better since iOS 11.
3. You can easily force the same design on all platforms if you want. I wouldn't recommend it, but for some enterprise-internal tooling, it might make sense.
To sum it up, especially indie developers who want to build an app very fast and don't have a team should give Ionic a try.
This post makes very big claims based on a very basic application that doesn't seem to be much more than a few toggle buttons and a couple of animations thrown in..
That's 90% of non-game apps. Most apps could be written using web-based tech (React Native, Flutter, PWA, whatever), and because they're so simple they should be very fast and very small. Where an app that's a few toggles and animations is slow or janky it's a sign that the developer screwed up rather than a problem that would be solved by going native - the dev would screw up regardless of the tech they used.
Some apps that have extensive design or animation work benefit from being native, and there are some things that are painful to do using web tech like custom camera work or things that use the secure enclave in weird ways, but if you're not doing those things then web should be fine.
React native and flutter are very, very different from a PWA.
While a PWA is a web app, react-native renders actual native components, and flutter has its own rendering engine. I wouldn't call them "web-based" tech
They're not web-based under the hood, but the code that the developer writes to drive them is very much in the ballpark of a web developer - JS, React, TS, Webpack, etc. That's why they're classified as "web-based" or "web hybrid" rather than "native".
The fact that browser apps replaced desktop apps eventually kind of proves that the same on mobile is inevitable once computing power and efficiency is sufficient.
Unless mobile vendors put up artificial barriers on functionality of web apps (Apple).
At a certain hardware level, UX is not perceptibly different between native and Web based, yet development much easier with cross platform target
> The fact that browser apps replaced desktop apps eventually kind of proves that the same on mobile is inevitable once computing power and efficiency is sufficient.
IMHO, replacing something != proving something. We may have replaced desktop apps with browser-based apps somewhere, but that does not prove anything. I'm looking at a lot of professional software, that just won't perform as a browser app (or work at all) in the near future. And then I look at a lot of crap browser-based software (like MS Teams) that makes me wonder whether this was actually an advancement, because it absolutely does not feel like it. It's UX is just miserable and so slow.
It's proven in the sense that there is freedom to choose to write a native desktop client, and yet nobody does it anymore, regardless of how widely adopted or important their app is to the business.
It's enough proof for me, at least.
Native apps continue to exist for areas where browser APIs aren't sufficient yet, that's true. But those will get replaced once a sufficient API supports it
I partly agree, but I disagree at the point that there may be no correlation between the amount of non-native apps and the overall "happiness" of users.
Just because business see that it's cheaper does not make it the better option.
Also from a user perspective there are many benefits with a software that exists on many platforms. It's often better with a slightly less good/snappy app that runs on all platforms than a perfect app than runs only on one platform. It's a feature.
It could also be said that it's a feature that the app does not 100% follow the native UI as the experience will be the same irrespective of which OS you are on.
Is it a feature, that MS Teams (as a default setting) does not use native notifications on OS X? As a user, I have to disable two notifications now, because one does ignore the system setting. I don't know how to sell that "feature"... Imagine having many apps with each having it's own notification setting, layout and appereance.. That's hardly an improvement to the status quo.
That is only a feature for app developers and (especially) the marketing departments of companies who do so, not platform users. I use non-platform native UI as a leading indicator of contempt for users.
>It's proven in the sense that there is freedom to choose to write a native desktop client, and yet nobody does it anymore
There’s factors occluding this though I think-the JS/web stack has had millions of dollars of investment thrown at it by parties with a vested interest in seeing it succeed, so a lot of UX issues and friction points have been smoothed over as much as possible.
The wider native UI ecosystem hasn’t had the same investment, so I’m not surprised it’s superficially “easier” for devs to thrash out a UI with web tooling. Doesn’t mean the resulting application is actually any better though.
I mean, you could simply say you don't care about your users, it's not that hard.
Web apps are dreadful, regularly lock up, and are an active step back in computing. But hey, if your startup can spew out a shitty app much faster, good for you.
> And then I look at a lot of crap browser-based software (like MS Teams)
I actually prefer to run MS Teams in a browser tab instead of installing it to my computer. Same with Slack or Zoom. I'm not losing much since their core functionality relies on an internet connection. Full-blooded browsers are also more likely to stay up to date than the bundled Chromium build, and I can enjoy the peace of mind from a modern browser sandbox.
This is a classic 'My job is X, so I presume people doing Y also have the same experience"
Software developers and PM's can generally get by with a browser, but woah boy good luck getting the finance world off of desktop Excel/Bloomberg (as the most prominent example of an immovable force against browser apps).
> The fact that browser apps replaced desktop apps eventually kind of proves that the same on mobile is inevitable once computing power and efficiency is sufficient
Let me know when the power is there for the desktops. My MacBook M1 Pro chokes a lot due to running Teams, Slack, VS Code all wanting to be desktop webapps and are highly inefficient.
I have to use a proper desktop to get everything running smoothly together.
There's a reason software trends towards higher level, less performant abstractions over time. The takes about chrome being a memory hog or electron being inherently slow are very tired at this point
And garbage collected languages are slower than managed ones. Should we avoid garbage collected languages for all software then?
It's just demonstrates a very poor grasp of what actually matters in the world. And the performance gap is greatly exaggerated.
Most people would agree VS Code is very snappy, and it's written in JS and browser based. There's no inherent reason they have to be slow. And we don't double the RAM in computers every few years to leave it unused
The problem is that Electron apps are slower today than native apps were 10 years ago, despite computers getting faster and available RAM on my machine quadrupling.
I understand why developers like Electron, but like everything it's a tradeoff.
Exactly. This is a developer culture problem as much as it is a technology problem. Developers care less about runtime performance than other development factors, so they choose technologies that sacrifice runtime performance for developer speed and comfort. Is the root cause even deeper? Why are we so focused on developer productivity? Do individual developers really not care about performance, or is it that their companies are insisting that they poop out whatever crap they can in as little time as possible?
> > Electron apps are slower today than native apps were 10 years ago, despite computers getting faster and available RAM on my machine quadrupling.
Desktop software today seems to be slower than desktop software even 20 years ago, when RAM and hard disks not only had less capacity, but were also slower just as CPUs were slower. As an industry, we have sacrificed so much at the holy altar of Developer Productivity.
> it that their companies are insisting that they poop out whatever crap they can in as little time as possible?
Very much this but management are not requesting Electron. They see that JavaScript developers are cheap and plentiful, and JavaScript devs want to use JavaScript, even if it isn't a desktop language.
If you don't think having to run _an entire chromium stack_ just to display something, actively bypassing all of the OS's rendering facilities to draw some stuff on a canvas, I have a bridge to sell you.
> And garbage collected languages are slower than managed ones.
What..? Many common managed platforms are also garbage collected - .NET and Java, for example.
If I assume you misspoke with “managed” it still is untrue that garbage collection means “slower” because “slower” says nothing about whether you are measuring throughout or latency.
I only know internet commentators to talk about how VS Code is fast enough. In meat space, no one has ever said that VS Code is performant, just that it is free and X company has standardised on it.
> And we don't double the RAM in computers every few years to leave it unused
On a point of clarity.
Who is we?
I don't want my browser taking up 14gigs of my 16gigs just to watch a cat meme...thanks.
I would like my experience to be improved and elevated while using less resources. Efficiency.
> It's just demonstrates a very poor grasp of what actually matters in the world.
I find this particular statement...lacks any modicum of humility. One might say it ventures into dangerously callous.
Put simply, outside first world economies, most of humanity does not earn enough money to buy a new macbook pro/ Dell XPS every 2 years nor have access to fast internet...relying on crappy broadband instead.
Even those people deserve efficient software that does its utmost to not hog the little resources so they can get things done yes?
The biggest problem with VS Code is that it doesn't actually do anything, all functionality is performed via plugins which have dramatically different performance.
So most of the time people are not discussing the same application experience. VS Code with nothing installed isn't that bad, once you start actually using it for code then performance drops off a cliff.
> The fact that browser apps replaced desktop apps eventually kind of proves that the same on mobile is inevitable
I'm not sure whether it's that black and white. If you've worked on both platforms you know how much of a different beast mobile is, it's a lot less forgiving in a lot of aspects. The use cases and interaction model is very different.
I disagree and I think it's a common viewpoint from people who invested significant time in the apple or android ecosystem. Of course you'll be happy to have native developers helping you out in your career instead of becoming yet another web developer.
I'm not a native developer (kind of jack of all trades) but I had to do some tasks in iOS, Android, web and desktop development.
iOS and Android are incredibly overcomplicated. Web used to be fine but it's going in that direction as well thanks to Angular and React.
I wish just using Qt was a viable choice.
I used to work in a company with a very popular app (can't tell how many active users but they have 2.5M reviews right now and they're top 50 in the iOS store) and the only reason they weren't web cross-platform is that they saw an exodus of native developers once they attempted that.
They had huge parts of the application in web-views though, so we had half of the animations native and half native. They had a native canvas based editor and 3D games running in a webview (as crazy as that may sound: that's exactly the kind of thing I would have done natively - but they didn't want to implement 3D games twice for web / android and metal).
I can't really say I could tell which was which but error logging was happening in different places so you would normally find out when debugging errors or seeing the web-views in the code.
5 years ago is a lifetime in tech, the blog clearly mentions the difference. Web dev stack is a dead-end professionally? That doesn't line up with reality at all does it.
You attracted better-qualified colleagues? How so exactly? You have a smaller pool of candidates to choose from. Are you implying native developers are just smarter?
Outdated opinions, favouritism and elitism all wrapped in one.
The problem of the post is that it advocates two things at once: publish apps using Ionic, and/or just go the webapp route (like Wordle).
It's a little hard to understand, if the performance of webapps is actually indistinguishable from that of native apps, why anyone would choose the app store route. Is it for distribution purposes? Payments?
This post makes very big claims based on a very basic application that doesn't seem to be much more than a few toggle buttons and a couple of animations thrown in, and some 'statistics' that don't appear to be based on any actual facts.
I work in a team developing an app that has around 5million users, and we abandoned an Ionic first version 5 years ago, after a couple of years of nightmarish development, where (after the first implementation, which went reasonably well) we spent most of our development time fixing inexplicable bugs, chasing native features, getting inconsistent UI problems, broken builds from package updates and a myriad other problems that just drained our energy and were generally dispiriting.
I personally felt the entire experience was a horrible professional dead-end. Luckily our management decided to switch to a native application, and learning Swift has been the most fulfilling part of my entire career. The application is faster, more reliable, the bugs are locatable and fixable; the entire framework feels solid and professional.
The application itself is immeasurably better now. We attracted better-qualified colleagues who have been a great learning resource. And the app itself went from an appstore rating of (iirc) around 2.8 stars to its current rating of 4.6.
We would never dream of going back to the nightmare that developing a complex and performant app with Ionic was in my experience.