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.
Not sure why though, probably just lack of interest from Google.
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.
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.
> 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 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 like react-native and nativescript's approach a lot more.. They use native UI elements.
Nobody noticed in the app of OP because it looks almost like a game. No native UI behaviors.
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.
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.
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".
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
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 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
Just because business see that it's cheaper does not make it the better option.
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.
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.
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.
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.
They did? I mean, I'm forced to use crap browser apps for work (i.e. Slack), but it's very early to be declaring the desktop app dead.
> At a certain hardware level, UX is not perceptibly different between native and Web based ...
Hard disagree.
> ... yet development much easier with cross platform target
Well, yes. There we can finally agree. It's all about cost; hiring cheap web developers to churn out something acceptable, if never good.
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 only people who seem to think this is any good appear to be in their 20's and not actually experienced with desktop apps.
So it’s just a matter of time until this swing of the pendulum is complete. Then we can rediscover Qt and Tcl/Tk.
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
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
I understand why developers like Electron, but like everything it's a tradeoff.
> > 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.
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.
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.
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?
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.
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'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.
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.
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?
It's not hard to make the connection to apple's appstore 30% cut.
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.