First of all I wish everyone health in these difficult times. I was watching the news about something cooking in Wuhan in December and felt pretty normal and not something that will just decimate the whole world in days to come. We are practically in world war three just the infirmary is the battlefield. But we are all in this together and we have to come out as a winner.
As the governments, administrations are doing their best, we are doing our bit by staying home.
Back to post. This challenging time has made some significant changes to how the business operates. We have seen groceries through digital channels shoot up by 700% and retails and stores go down to 10 %. This is happening in every industry. So the digital transformation has become mandatory for every business. Below meme has nailed it.
But given the times there are few challenges:
- Time to market has to be quick
- Cash strapped business needs cost saving
- Use of existing services where possible
So Cross-platform technology for the digital channels could be a perfect fit for businesses. They have been around for a while now but had evolved greatly. You can spin up mobile and web apps with a single codebase and 1⁄3 of the cost. Sounds enticing isn’t it and a business in need because of COVID-19 can quickly use this to engage with their customers.
Faster Development and Lower Costs
- Single codebase
- Cost reduction by ~30 to 40% for new development
- Faster to market and time reduction by 20 to 30%
- Increased velocity in issue resolution
The architecture follows the framework i have laid out in my article. The channel layer is written once in cross-platform language and then compiled to all three apps. Exp layer or MS layer can be existing monoliths too if time is constraint like the current COVID environment. These frameworks have support to hook up in the existing IOS and Android SDKs. i.e. if you have one of the apps today and still want the gains going forward in these uncertain times, you can start by hooking up the existing SDKs. e.g. Flutters platform-specific code option allows us to hook up with the custom SDK code which cant be used from available plugins. React native also has similar supports. This way you reduce your onboarding time to cross-platform even further.
There are multiple players in this game and they have been there for a couple of years. We have React native from Facebook, Xamrain from Microsoft for Dotnet stack and recent entry in this is Flutter from Google.
React Native and Flutter has gained a lot of ground in the non-Microsoft world and they have very nice animation features for rich UI and integration for native code.
If you are JS oriented development workforce then react-native can be a choice but web support is not out of the box but is available from the development community.
On the other hand, Flutter uses DART and DARTtoJS compiler for web support. Flutter has some other key benefits as well like CI/CD support, Fastest UI performance, native code integration with Method channel. Flutter community is growing rapidly. Flutter being the google product has lot of advance plugins like AutoML and cloud vision which can set you app quickly with AI and machine learning model inference locally on the channel which could be key differentiator for certain businesses. More on this in my future posts.
My example uses a flutter based e-commerce app(used an off the shelf template) with AWS Appysnc as an EXP layer and MS in the K8s. I built the app in the Android Studio IDE as it was easy to integrate the flutter project and do the hot reloads for development testing.
As you can see below with a single code you can obtain parity in experience in all three channels relatively quickly than building natively.
Android Output (Pixel 3)
IOS Output (Iphone 11)
Google Chrome Web Browser output
Obviously there are caveats too like
- Increased App Size(~10%) and Memory(~15 to 20%)
- Vendor Lock-in
- New OS Upgrade support
- Upgrade 3’rd party plugins continuously
But benefits weigh heavily in favor atleast for me :).
Connect with Me
If you are interested for a conversation or a chat. Please reach me on my linkedin.