6
26 Comments

Need advice on Tech Stack

I'm researching on what Technology Stack I should use to build my product (something like food delivery App) for Web, IOS and Android Apps, please advice which technologies are recommended from the Scalability, Reliability, Cost and Efficiency, etc.. standpoint for a start up. Here are the technologies I came up with, feel free to recommend any new technology even it's not in my below list.

For Mobile Apps -

  1. native languages like Swift for IOS and Java/Kotlin for Android ?
  2. or cross platform languages like react native for both IOS and Android Apps ?

For UI -

  1. React JS

For Back-End or API's -

  1. Node JS
  2. PHP

For Database -

  1. Postgres
  2. MySql
  3. Cloud Firestore
  4. MariaDB

Thanks!

on July 24, 2020
  1. 4

    I would say stick with what you know best and can build things the fastest in. Being able to get an early version slapped together quickly to show potential customers and get feedback is really valuable.

    1. 1

      Yeah! @NovelTechie to your efficiency criteria this is great advice.

      With respect to the scalablility and reliability of your data stores and backend: in the hands of adept operators and great infrastructure any of the technologies you are researching could be scaled well. Big companies and busy applications rely on them everyday.

      -----

      In my opinion (if you were the one working on this now and without knowing anything about your existing expertise and goals):

      Double down on the JS ecosystem to learn and develop faster and leverage the community size. You could build your app + UI with React Native and NodeJS on the backend.

      Can't go wrong with Postgres or MySQL, but Cloud Firestore means you don't have to sweat the details about the infrastructure to support scaling, availability, etc.

      1. 1

        Thanks, since Google cloud Firestore is a NoSql database, I'm wondering how does it work for an app where it does daily transactions in a user checkout flow, etc.. ?

        1. 1

          I'm using FireStore from past 1 year and here are my inputs.

          1. Firestore fits only for MVP. Never think to use it when you get traffic so plan ahead.
          2. Even though Firestore can handle transactions, I prefer only Postgres as its quite good for that
          3. Hell of limitations with querying leading to write workarounds(We felt too many for us, cross check with your requirements once)
          4. Bulk updates have unacceptable timeline. Have a look here - https://stackoverflow.com/questions/62294409/how-to-update-1-million-documents-in-firestore

          From start have a wrapper which hides the underlying data store. This ways its very easy to test out different data stores.

          At this point my suggestion would be just go with any RDMBS + a key-value store for caching.

        2. 1

          I've only worked with a small project built with a key-value store as the "database" in the past, but in our use-case we aggregated all information for a domain in single key. Lots of serializing and de-serializing. I found I had to write a lot more logic than with a relational database, but I suspect I was just too green at using nosql!

          Instead of users, payment_method, rides in separate tables, we used a single document - something like:
          user_1:
          name: one
          payment_methods:
          credit_card:
          [...]
          rides:
          [..]

          I found this article to be really useful in wrapping my head around nosql.

  2. 2

    Your current mentioned stack seems fine. There is React Native for mobile development which you can take a look at. However, I haven't tried React Native.

    1. 1

      So, which options are recommended from all the layers (Mobile Apps, UI, Back-End and Database ?

      1. 1

        As I said, your current stack seems good. For UI, There are lot of options such as Bootstrap, Tailwind.

  3. 1

    It all depends on what you're building and what you and your team know, I've tried to do too many things at once in the past (developing both iOS and Android apps + web in your case) and I'd advice against it but take this with a grain of salt as I don't have the full context of your situation.

  4. 1

    As mentioned by many already, pick what you are most comfortable/fastest with.

    Couple caveats;

    • For the mobile frontend, pick a cross-platform framework like ReactNative or Flutter to avoid having to write the application twice (unless you have a large team)
    • For the database, it really depends on the app you are building. It's not due so much to the scaling issue but to the data model. If you have a model that is relational at its core then stick to a pure SQL Database (Postgre, MySQL, MariaDB) If your app is more document-driven, then go NoSQL. (MongoDB, Firestore)

    Other than that, for the backend, anything can work. There really isn't one thing better than the other, it's really a matter of personal preferences and finding a good community so you can find pre-built solutions to common problems (registration, payment...) and answers to questions you might have. One thing to note is that the higher level the framework is the easier it is to shoot yourself in the foot. Any ORM can be misused and trigger 100s of queries on a single page load if you aren't paying attention.

    Scaling is a matter of applying different techniques and tools depending on where the bottleneck is. Most anything can be scaled over time, there is no need to overthink it when starting. You will be able to scale as you go.

    1. 1

      Thanks, I don't think Google cloud Firestore works for my app as it's a NoSql database. My app need some traditional database like Postgres or MySql I guess as it involves with user checkout flow, etc like an eCommerce app.

  5. 1

    Node.js for the backend for sure. PHP is not bad, but Node.js is just so good.

  6. 1

    Well, I do not know exactly what your plan is but if you plan to have a web app as well as a mobile app, I recommend the following:

    Website --> React.js

    iOS/Android --> React Native

    BackEnd --> Node.js (Express.js) and some NoSQL Database (MongoDB). If you want real time add socket.io

    DO NOT USE FIREBASE. I used it for my project and I would not do it again.

    You can also send me a pm and I can explain further detail.

    1. 1

      I'm thinking to launch the web app first and test my idea to see if I can pull some traction. Based on the user traction, I'll launch the mobile apps. Do you think that's a good idea ?
      Also, I don't think Google cloud Firestore works for my app as it's a NoSql database. My app need some traditional database like Postgres or MySql I guess as it involves with user checkout flow, etc like an eCommerce app.

      1. 1

        Yes, it sounds about right, focus on one product. Just consider that no matter what project you do, it always takes longer than expected. So, just finishing up a solid web app is a big accomplishment. A mobile app is a whole other story.

        The checkout flow is independent from the database as you will probably work with some sort of session or state management and the order will go to the database at the end of the process. You can do this with NoSQL as well as MySQL. Both of them store data.

    2. 1

      What went wrong with your Firebase project. I’m currently using Firestore and it’s working great for my mobile backend.

      1. 1

        Overall it was an okay experience but the more complex your app becomes, the more difficulties you will encounter.

        It is very difficult to do complex queries and joins on firebase (probably the biggest one).

        The authentification system is rigid and limited.

        For more restricted and delicated queries you will have to setup a seperate node.js backend in addition to your firebase queries from the frontend, so the idea of firebase does not make a lot of sense.

        Believe it or not, there are still plenty of bugs that havent been resolved by google or the firebase team.

        I have used firebase now three times and I would not recommend it again.

        1. 1

          Yea I agree I mostly like it for the easy startup but trying to do more complex queries is definitely limiting especially coming from a SQL background. I’ve found most of the times I’ve had to duplicate data which I guess is a common workaround for noSQL projects.

          1. 1

            yep, I also see it like this. Btw what app have you done with firebase ? What's you frontend ? Full native or react native or something else ?

            1. 1

              I’m doing swiftUI for front end right now because the majority of my potential customer base is using iPhones and I thought it would be fun to learn natively. My app is a kind of recipe and nutrition thing I’ll be posting about it some more when we get some traction! What are you working on now.

              1. 1

                Sound cool. I am working on a marketplace where you can buy, sell and trade videogames and consoles with other people.

  7. 1

    Scalability comes down to containerizing, monitoring, and scaling (horizontal-vertical). I would leverage cloud resources to make that easy- Elastic Bean Stalk, Google Kubernetes Engine, etc.. As per other posters, using what you are most comfortable with makes the most sense. No Language/Framework is ultimately more or less superior. Firestore vs (postgres,MySQL,etc..) are very different. Firestore doesn't allow joins and is not a traditional database (its nosql doc store like mongo). Perhaps try CloudSQL on google cloud storage with MySQL or Postgres.

    1. 1

      Thanks, I don't think Google cloud Firestore works for my app as it's a NoSql database. My app need some traditional database like Postgres or MySql I guess as it involves with user checkout flow, etc like an eCommerce app.

  8. 3

    This comment was deleted 4 years ago

    1. 3

      +1 for flutter. I come from 20 years of Java dev mostly mid tier and backend. I have found Flutter and Dart language easy and am about to launch my first ios app to be followed by Android.

    2. 1

      Thanks, I don't think Google cloud Firestore works for my app as it's a NoSql database. My app need some traditional database like Postgres or MySql I guess as it involves with user checkout flow, etc like an eCommerce app.

    3. 1

      +1 for flutter as well. I've done native iOS and native Android in the past and flutter is really easy to get into. Building UI layouts programmatically is also a pleasure as a developer.

    4. 1

      This comment was deleted 6 years ago