How to choose a tech stack for your application
A tech stack is a set of programming languages, frameworks and software products that are used to build your application. A typical application consists of at least two layers — client-side (frontend) and server-side (backend).
If you want to build a mobile app your frontend will be the actual mobile app. There’s a variety of choices of what libraries and frameworks to base a mobile app on. Before starting the development, you need to choose what technology to use to hire appropriate specialists.
Why it’s essential to choose the right tech stack?
Choosing the right stack will allow you to save a lot of time and money on development. By picking popular language and framework, you can significantly reduce the amount of time spent on finding developers. An obsolete tech will have fewer adepts as more developers tend to work with popular technologies.
Using open-source libraries and frameworks can reduce the amount of time your developers will spend implementing features. There are open-source components almost for anything — from interface elements and icons to heavy background processing on the backend.
You need to pick the right stack from the beginning because switching to something else will be time-consuming and will probably require you to hire other people to do it. Every technology has its use-cases and limitations, most of them are subjective, but sometimes they are critical for the product. For example, you will have a hard-time creating a high-load backend that has to do real-time processing with Ruby on Rails and Node.js is much more suitable for that.
How do you make the right choice?
Define what you want to build
First of all, you need to understand what your goal is. What kind of application do you want to build — web or mobile? There’s a difference between a web app that works in a mobile browser a native mobile app.
The general rule is to examine your target user base. If the majority of your users will use the app on the go, then you should build a mobile app. If they’re most likely to sit at the desk in their office, then web app would be the right choice.
Avoid launching on multiple platforms at once. It’s a lot of investment and makes management of the development process much more complicated. Validate your product on one platform first and then advance to another one
Try to at least briefly define what features you want to build (including long-term). There are a lot of open-source libraries out there, and the chances are that you can use the existing and free-to-use code as building blocks within your application. Knowing what you need will help you make the right choice by evaluating existing solutions within certain languages and frameworks
Hire a consultant
This option is often overlooked but hiring a consultant is one of the great ways to choose a tech stack. He or she can evaluate your requirements and suggest the stack that will work best for you. Give your consultant a list of features you want to build and a long-term vision of the product — your chosen stack should be good enough to allow rapid development and quick change in the beginning and also be flexible enough to use long-term.
Know popular choices
If you are new to the tech industry and don’t know how to code your safe bet would be to use something that is popular. For example, there are few popular backend stacks you might use — .Net MVC (ASP), Ruby on Rails (Ruby), Django (Python), Laravel (PHP). Each one in the list above is a framework that allows you to build a backend for your application quickly. A framework is written in a programming language and developers you hire need to be well-versed in both the language and the framework. There are many frameworks written in a specific language — for example, there’s also Sinatra and Padrino frameworks, but they are much less popular.
My preferred stack for rapid development is Node.js or Ruby on Rails on the backend and React.js with optional Twitter Bootstrap on the frontend. Most of the backend developers worth working with know either Node.js or Ruby on Rails or Node.js, or both. Node.js allows you to use the same language both on the backend and on the frontend (though it’s still different expertise), while Ruby on Rails has more best-practices built-in and forces developers to make right choices and not shoot themselves in the foot.
Paradox of choice
One of the common mistakes is to spend to much time on choosing the right stack due to the paradox of choice. Every choice will have its pro’s and con’s, so it doesn’t matter what you will choose. Just as execution is more important as the idea, execution is more important than a stack you’ve chosen.
You can pick the best options available and still fail miserably because developers will make bad choices or because you will fail to find product-market fit. I’m saying this not to discourage you but to show you that it’s just one choice among many others and it’s not going to make or break the success of your product. Your vision, your understanding of the market and the team you are working with is much more important.
An example from my practice
Let’s say you want to build a B2B Sass app that will allow retail stores to manage their warehouse. Most of the work will be done in the office — they will add and manage goods, track sales and run a variety of reports. There will be only ten users of the app doing routine tasks. Your long-term vision is that you will create a complimentary app used by the warehouse workers to scan barcodes and do a set of functions on-site. You also want to create a tablet POS app sometime later to track sales in real-time.
In that scenario, I would use Rails as a backend because it allows to build the backend API quickly and expand it over time. I would build a frontend web app using React.js that would be used by office workers and then would use ReactNative and Expo.io to create cross-platform mobile apps for warehouse workers and POS.