How to develop a mobile app if you are an Angular/Java fullstack developer
A quick note, wrote during a commute about a recent mobile dev experience.
For few weeks I supported some friends with their project of startup. They needed a prototype for a mobile application.
The app was a marketplace. DB + heavy use of Maps.
This gave me the opportunity to evaluate which technologies better suit somebody who comes from a Java background.
One of the requirements was that the platform has to use the Cloud. For the VC (Venture Capital) the word cloud is very important.
Technically my idea was to:
- deploy a Java backend in a Docker image
- the web frontend could use a simple storage (S3)
- for the DB docker image or use a DB of the cloud provider
For the prototype we wanted to reduce the expenses at the minimum so the instances with less ressources were preferred.
I already knew AWS. It's not easy but you are not wrong choosing it. Like IBM or Oracle in the past.
For the estimation of the costs there is a page with a calculator and dozens of option and every option was extremly expensive.
I found the experience with Azure quite complicated. It seems oriented to big organizations were the sales have to confuse the client with millions of options to go deep in their waller.
So Azure was out of competition.
Google Cloud Engine
With Google we received a generous 3 months trial and the deploy of Docker images, network configuration etc. went smoothly.
We opted to use Cloud DB (MySql). The prices were clear.
- integration with Firebase
Cloud, the winner is ... Google Cloud
AWS and GCE were excellent options for us. Google Cloud seemed to us more 'architecturally structured' and less 'we invented the cloud and we are stacking features over and over'.
And again the firebase integration was pefect with Google Cloud.
Firebase ... a winner
The offer for mobile (and web development) is excellent. After the discovery of Firebase it became one of the fundamental components of the architecture.
Mobile Dev: ouch!
The choice for the mobile Dev was awful. We decided to target Android and IOS (no surprise) and according to the market share Android-first.
Having done some development in Android and knowing a litte Swift I excluded the pure native development.
Develop a prototype in the free time with two different framework, languages, philosophies was simply not possible.
This option is well known because of Tesla, AirBNB, Facebook etc.
Full respect for RN but build the framework and implements the differences of IOS and Android was not possible (time-limit).
Flutter came out with a Beta during our evaluation. Cool, super fast. It's all Widget oriented.
The differences between IOS and Android are managed by the framework.
Dart is compatible with a Java/TS guy!
- where is Google Maps? Ouch ... not there. The GFlutter team has to talk to the GMaps team and find a solution
- we still need to add new technologies to our development (Flutter and Dart)
- only one public success story ... welcome beta testers ;)
- 'Flutter doesn't stand a chance against progressive webapps' (according to the tech lead for internal mobile app at Google)
Cool! Angular, Native and no need to work directly with IOS or Android and the NS team is cool.
For our first prototype we used NativeScript.
- The startup time was not good (5-10 seconds), sure was possible to optimize but was not a good start
- The rendering was different in IOS and Android
- It happen that the application didn't start and we didn't succeed to find the reason ('did you try to switch off and switch on again?')
- We didn't find relevant success stories and we didn't find any NS user in our country (Switzerland). NativeScript is on the market since a few years this was not a good sign.
What really scared us was the announce of the support to Vue.js.
NS is cool but there are a lot of problems. In GitHub many devs seem to share the opinion that NS Angular is not ready for production.
The integration of a new framework (definitely lighter than Angular) comes with a cost.
The Telerik (NS) commercial PRO components become free and open source. Nice but why? Usually if a commercial product become free is a sign of 'EOL' :|
In conclusion, NS was cool but there were to many fears toward the technology future.
Ionic is well known. Was not our first choice because of his 'web' nature and his 'slow tech' reputation.
We built our second prototype with Ionic. The dev went smooth, without big issues with performances.
What we didn't like:
- the blog post of Ionic 'what's the issue with the issues', basically the support for the current version is minimal
- the fact that Ionic seems to abandon his Angular nature for a new custom framework
Ionic was cool for the demo but I don't feel it as a long term technology.
The company want to become 'THE PWA company' and it is not fixing Ionic 3.
Maybe going directly full PWA is more promising ;)
... we are waiting IOS ... could be the future if ... in the infinite loop somebody decides for it.
Mobile, the winner is ... nobody
There was no magic bullet for the mobile development.
The summary is something like:
- fast prototyping : Ionic + Angular
- fast native and feature limited development : Flutter + Dart
- full feature: Android + Java + Swift + IOS + luck and time
- the future (finger crossed): PWA with Angular