Bridging the gap between web, mobile and desktop.
Here’s a story about the key events and technologies that changed our thinking of how we approach creating modern applications (web, mobile, desktop). All of these events triggered one another and we can draw a bigger picture and guess where we are heading regarding The Next Big Thing in Software Development.
How it all started
The story starts in 2008 when Apple and Google created an opportunity for third-party developers to create mobile apps. Initially, Steve Jobs wanted to lock the ecosystem by not allowing third-party developers to create their own apps, instead, Apple directed developers to create web apps that could run in the Safari mobile web browser. In the end, the App Store and Google Play were created and it created a new wave of Software Developers.
Microsoft and let’s not repeat the code
With the appearance of Windows Phones, the complexity of writing native apps for 3 platforms was too heavy. The need for a universal tool or language for creating one native app and ship it anywhere became even more wanted. It’s something like Java in 90-s with it’s “Write once, run anywhere” (WORA) approach. Handling 2 mobile operating systems was a problem, but now we have 3??? We need to do something about that.
Hybrid app development
Apache Cordova or Phone Gap was one of the first frameworks to try to merge Android and iOS (and later Windows Phones) using web technologies. Also, not long after the introduction of Windows Phones, Xamarin was introduced, a cross-platform solution for building native mobile apps. Both of these frameworks had it’s benefits and tradeoffs, but they both made a foundation for today’s mobile development frameworks. Cordova wanted to keep development much faster and simpler while Xamarin wanted to keep the native experience.
What about web and desktop apps?
While mobile apps were having their own set of problems, another app war was ongoing on laptops and desktop computers. Web browsers becoming powerful and, with a help of cloud computing, web apps became comparable to desktop applications. How to bridge the gap between the 2? The community saw what mobile frameworks have done to overcome the gap between the operating systems on mobile phones and wanted to do the same thing to bridge the gap between desktop and web. In 2013, ElectronJS was born and since then you probably have used Slack or VSCode not knowing it was an ElectronJS app. It’s basically an HTML website rendered as a desktop app.
Problems of today
Today we have a new set of problems, how to create a web-mobile-desktop application without the need of having too much workforce creating the same business logic for the different environment. We want to reuse as much, but keep the native experience as high as possible.
Let’s create a new set of frameworks that will handle these problems? No problem, we have tools for that. Here are some examples.
React Native Web/Expo — One codebase, all devices covered (iOS, Android, web, desktop), native UI, but somewhat slower and noticeable on the lower end devices since JS engine runs in the background of the mobile apps.
Flutter — One codebase, all devices covered (iOS, Android, web, desktop), slower than native option (comparable to RN option)
Kotlin Multiplatform — One codebase but extra work needed around UI for Android, iOS, and web, almost native experience, but more work is needed than React Native and Flutter.
With these tools, we are bridging the gap between the web, desktop, and mobile, but the problem is still here, we have too many platforms.
Reduce the problem
What can we learn from the moves of Apple and Google in 2020?
Apple’s App-first approach
With the introduction of Apple’s M1 Processors, Apple created a unique architecture for all devices. You can now start your mobile apps on the MacBook. Apple also reduced the AppStore’s commissions on in-app purchases from 30% to 15%, paving the way toward App-first approach. Creating an incentive for developers to create apps that will run on all devices from one codebase.
In 2007, Steve Jobs introduced the idea of web applications “that look exactly like and behave exactly like native applications”. Seems like Apple went in a totally different direction since then. But there’s a Google that might be getting there soon.
Google’s Web-first approach
“Citing data from The NPD Group, Google today revealed that sales of Chromebooks in the U.S. grew by 127 percent year-over-year in the second quarter, compared to just 40 percent for Windows and Mac laptops.”
It seems like the web might be the end goal for Google, especially because of ChromeOS and the ecosystem around it.
Chrome Dev Summit 2020 showed us new possibilities around the web and how it will grow in 2021. We’ve seen a lot from Google in recent years, but I think the biggest changes are yet to be seen around the web. Chrome’s project Fugu is showing the great potential of PWA and we are seeing many companies creating PWAs instead of creating native mobile applications, or creating PWAs instead of desktop applications.
One framework/set of programming tools to use for all the apps?
History can teach us one thing, with every new technology we created to fix old problems, we created a new set of problems that were never there before. I believe in the “Right tool for the right job” approach, but it would certainly be an easier place to work if there is only one way of doing something? Or?