A client of ours decided to launch their app around three years after the development of their MVP. Since we did not want to miss the bus to the app stores, we decided to get at least the bare minimum of features on the app, and then provide the complete experience by doing incremental updates.
This required us to make frequent updates to our app, and have a belief that our users will keep updating the apps from the app stores. But, not many users keep the automatic app update option ON. For such users, its hard to ensure their apps are updated and thus use the latest features.
As it is well know :
A major problem with apps is that the review process is costly, it takes at least a week for a fix to reach the end user. This demands stricter release cycles as the cost of making mistakes is high.
We had to overcome this barrier.
We had just began experimenting with ReactJS, and fell immediately in love with it. It broadened our view on how we visualized the development of app. Redux and Cordova completed the missing Jigsaw pieces and we now were a little closer to the solution of the problem. In came ES2015 (es6), webpack, babel and now we put on whole armor of God 😉
Developers could work independently, using the latest features (es6 *wink wink*), and babel would transpile it to es5(used in browsers currently) and web pack would bundle everything into a single JS file! Even the CSS!
The app can now download this JS file on the fly and users would get all the latest features.
But this JS file could be in MB’s and making users download this every time they launched their apps seemed unfair. So we had a check in place, where app checks what is the latest version of build available, and only downloads when a new version is available.
Once downloaded, the app stores the bundle JS file in the file system and retrieves it on every launch. If a new build is available, it is downloaded and replaced with the one in the file system. All this happens in the background, and thus there is no impact on user experience.
However, if a new plugin is added (cordova uses plugins to add native features to the app), then a new app build has to be pushed on the app stores and user would require to update the app. But this would happen very rarely, so isn’t an issue.
This is how we overcame this complicated problem with a simple solution. Pretty much made us feel like: