Monday, February 1, 2021
At HTBox, we've been working on the Two Weeks Ready (2WR) app for a few months now.
One of the architectural decisions we've made early on for 2WR is to build it as a Progressive Web App rather than a native mobile application.
I hope to address the reasoning behind this decision in this blog post.
Without a doubt, native mobile applications for iOS and Android offer the maximum utilization of the mobile platform in question - access to the most features, the most performance, and distribution through the app store.
However, when it comes to building an application like 2WR natively, that essentially means creating the application twice - once in Objective C (or Swift) for iOS and again in Java for Android. Keeping the two versions of the application synchronized for features is tricky, as is deployment - every time you update the application, you need to go through the certification process into the app store. App store deployment isn't too big a deal on the Android side, but for iOS, it can be time-consuming, especially if Apple pushes back on the application for some reason. In some cases, it can take days for updates to the applications to appear in the app store.
Also, you can get into a situation where a smartphone operating system update breaks your application. Even if you can fix the problems with application immediately, there will be a delay in deployment as the application is reviewed.
And PWAs do not need to be distributed through the app stores, so there's no waiting for new versions - in fact, every time someone fires up the application, they always get the latest version.
For an application like Two Weeks Ready, there aren't any features dependent on a particular hardware platform. Everything that the application needs to do is available within the constraints of the PWA. And the ability to push out new versions and keep everyone up to date is key - you don't want stale information about disaster preparedness going out!
We chose to build Two Weeks Ready as a Progressive Web App for all these issues: