The battle between web and native applications has been raging on for a number of years now, but new developments in current technology and techniques in the web arena have begun to switch the developer’s focus away from the strict native approach. One of the major trends we’ve been noticing in 2016, is the advent of the progressive web mobile application. Google has defined Progressive Web as “using modern web capabilities to deliver an app-like user experience. They evolve from pages in browser tabs into immersive, to immersive, top-level apps, leveraging the Web’s low friction.”
Google defines a Progressive Web Application as needing these features:
- Progressive – Work for every user, regardless of browser choice because they’re built with progressive enhancement as a core tenet.
- Responsive – Fit any form factor: desktop, mobile, tablet, or whatever is next.
- Connectivity independent – Enhanced with service workers to work offline or on low quality networks.
- App-like – Feel like an app to the user with app-style interactions and navigation because they’re built on the app shell model.
- Fresh – Always up-to-date thanks to the service worker update process.
- Safe – Served via HTTPS to prevent snooping and ensure content hasn’t been tampered with.
- Discoverable – Are identifiable as “applications” thanks to W3C manifests and service worker registration scope allowing search engines to find them.
- Re-engageable – Make re-engagement easy through features like push notifications.
- Installable – Allow users to “keep” apps they find most useful on their home screen without the hassle of an app store.
- Linkable – Easily share via URL and not require complex installation.
Progressive Web Applications provide features in a mobile browser experience that are usually expected from native applications, in a way that utilizes standards-based technologies and run in a secure container accessible to anyone on the web. These applications describe a collection of technologies, design ideas, and web API’s that could work to bring users an application like experience on a mobile web browser. Another perk to this approach is the relative ease of development and maintenance compared to native applications. These applications utilize the plug ins and community of the web ecosystem to make for much simpler deployment. In addition, the application’s API doesn’t need to be maintain with backwards compatibility since all users will be using the same code from your website.
There are a number of reasons to adopt this new approach to application development, including the benefits of user retention. Studies have shown that with each step required after download (from a user’s first contact with an app until the point of use), the application is likely too lose 20% of its audience. With progressive web applications, users are able to bypass all of these steps. After multiple visits, the progressive application will suggest to users the option of a native app download for an upgraded experience. With this approach, developers are able to provide both the benefits of native apps and progressive apps. By catching a first time user’s attention with the web application, you can then experience the benefits inherent in native applications, including push notifications and long term user retention.
I know I’m pretty persuasive, but you shouldn’t jump to the progressive ship quite yet. You should think about the use cases that would require a transition. Traditionally, most developers turn to a native application when they expect the user to be engaging with application frequently (think Uber or Twitter). With progressive applications, users may just need to access some information stored on the app without needing to become fully engaged. To decide whether your next app should be native or progressive web based, make sure to keep track of user actions and take note of how they’re using your application. Also consider any inconsistencies between browsers. If there are some important features that work well on one browser, but not an another, you may want to consider building a native app instead.