In Praise of Native Apps
There is an ongoing debate, dating back to the early days of the Web, over whether it is better to write applications using native technologies or web technologies.
Like Richard Gabriel’s opinion of Lisp vs C, my opinion on native vs web has flip-flopped several times over the years. Currently, I’m in favor of native apps.
Before mobile, web apps were king
Before mobile, when apps were just a desktop thing, web apps made a lot of sense compared to native apps:
- They were cross platform (PC, Mac, Linux)
- They were much easier to distribute than physical media native desktop apps.
Mobile changed the balance between native and web apps
Mobile reduced the utility of web apps in several ways
- Mobile devices have app stores, which put native apps on the same ease-of-distribution level as web apps.
- Mobile apps need to work while not connected to the Internet.
- Mobile devices have relatively slow hardware.
- Mobile web browsers provide relatively few features.
Compared to web apps, native apps offer:
- More stable platforms.
- Languages more suitable for writing large programs.
- Better IDEs.
- Higher performance.
- More access to hardware.
- Better offline and background support.
- Access to markets and payment systems (for initial purchase and IAP) that customers already trust and use.
Native apps are not necessarily more expensive to develop
Currently, outside of China, there are 3 major app platforms: desktop web, Android, and iOS. At first glance it seems this would make native apps three times more expensive to write than web apps. But the actual overhead is probably closer to less than two times more expensive,
Multi-platform native application development teams tend to organize into four sub teams: a cross-platform “back end” team, plus three “front end” teams that write the native code for each client.
A web app can be developed with two teams: a back-end team and a front-end team, and a few platform-specific specialists.
Therefore, multi-platform native development tends to require 4x people while web app development tend to require slightly more than 2x people, which means that multi-platform native development ends up costing slightly less than twice as much as web app development.
Often it makes sense to start developing for just one native platform, and only expand to the other platforms later, once the concept has been proven. In that case, single-platform native development costs roughly the same as web app development during the risky pre-product-market-fit stage of development.
Native apps can learn some things from web apps
For games, cross-platform development makes more sense
Many game developers use the cross-platform Unity and Unreal Engine platforms. They are used partly because they are excellent game engines, and partly because there are so many different video game platforms that write-once becomes more economically attractive.
The success of cross-platform game engines shows that one way web apps could gain a competitive advantage over native apps is by providing a superior development experience.