Disclaimer: This article was written to clear my head. I suggest you read it with a grain of salt. And if you see any inconsistencies, please let me know in the comments so I can update it for the next readers.
Introduction
So you decided you want to create an application from scratch. First you will need to decide what development stack to use.
What are the driving decision factors? Trends will play a part. Your own skills will play another part. The available documentation to guide you through your setup as well.
The stack
By the stack, I mean the set of software (languages / frameworks) and platforms that you are going to use to build your app with.
We divide the stack in Frontend and Backend. If you are using Android with Java it may influence you on the backend decision to pick something that uses Java as well. On the other hand if you use Javascript you may turn up to something like nodejd etc.
What is really important here, is that you pick up a stack that has traction to get community help in times of need. Which you say? There are many options and it can be overwhelming. Sometimes a random can be tempting, but here are a few guidelines.
The vendor trap
By the vendor trap, I mean getting trapped into a complex architecture from a vendor which does not match your needs and with which you end up stuck. It's not trendy nowadays to think about this, because the common concept is that you should ship fast, also you are not Facebook or the Pentagon. Once you get traction you'll earn revenue to better fine tune your setup and even move out. You should ship fast. And that is difficult to accept, because it seems like picking a long term partner. Sometimes you may feel paranoid to a point where you consider the amount of wheel that you want to rebuild in order to avoid a vendor lockdown. This is an interesting consideration, but leave it out of your brain. What is important is to get people on board, revenue and then deal with politics. Remember you want to ship fast, pick the one that allows you to build your prototype in the fastest possible way. Now that that is cleared out of the way, let's figure out what to use when.
Simple backend
You will either have an app that does its heavy lifting on the front end, or that relies on third party APIs for the data part. If that is the case, you can use Firebase or Amplify. I have not explored those. They are a set of services built on top of the most common use cases that greatly speed up the process for those.
Heavy backend
If your backend needs different parts, like a database with complex queries, servers running GraphQL etc. You should consider using BlueOcean, Google Cloud or Amazon Web Services (AWS). Which one, is a matter of your knowledge on each, the documentation that you find, a special offering that they have etc. I used Amazon Web Services at the beggining because it was the most used by big companies. Then I switched to
Native, Hybrid or Progressive Web App
Anytime you have this kind of interrogation, you need to go for the solution that will let your potential users get an experience of the app the sooner the better.
That means that you should prototype with a progressive web app: an application that runs in the browser. Then you can adapt your code to make it Hybrid. Your app is downloadable from the appstore, but in the background it uses a webview (a browser window) to show the user the app content. So still no need for native. When do you need native ? There are times, when you know that some functionalities are not available in the browser or in the bridging frameworks (ionic, capacitor, react native).
The unfitting trap
It is also possible that you start your project and you realize down the road that some feature is not possible with the stack you chose. Make sure you identify the important parts, and that they can fit your stack.
Backend
Choosing the proper backend is important. Mainly you will have to learn about the infrastructure provided by any of the major vendors.