Which tech stack is best for web development?
“Which is the best tech stack for web development?” This is a question that we’re often asked by businesses of all kinds: startups, scaleups or large enterprises. Regardless of whether our clients are looking to launch their first MVP, build up their current product on the global market or choose a tech stack for a core business, we’re in a good place to offer advice. The key is to figure out which technology would give them the greatest return on their investment, in line with their requirements.
In their 2020 report, STXNext conducted an in-depth study into the tech stacks chosen by CTOs. The most popularweb frameworks used by respondents’ teams were React, Angular, Express, and Vue, with React standing head and shoulders above the competition.
But what criteria should you use when choosing the right tech stack for your product?
CTO Academy stresses that there are many factors to consider, including the number of developers available, and their cost, the time to set up, the time and complexity of deployment, whether or not the framework is suitable for growing teams, and how much support is available from the framework’s community. The Academy advises that before adopting a framework you should evaluate each for technical and commercial reasons.
Below, I will answer the above question in detail, by telling you what we normally focus on when advising each of our clients. Bear in mind that there are no right or wrong answers, because a lot depends on your context.
Let’s begin by going through the two main components of the tech stack - the front-end and the back-end.
Front-end choices for your web development tech stack
There are main 3 frameworks that are currently popular: Angular, React and Vue, and you can’t go wrong with any of them. Each of them has a community of developers around them so it’s easy to find support; packages and libraries ready to use, so not everything needs to be created from scratch; and there are many developers using them, so you can find people to create the app.
React is currently the most popular web development framework which is evident from a number of sources. According to the latest HotFrameworks rankings covering trends from Q2 of 2016 to the present day, it has been steadily rising in popularity, with a current 99 Github score coupled with a 97 Stack Overflow score.
According to Matthew David, Accenture’s Digital Leader React along with Angular takes the top spot for frontend development. He says: “Many development groups will choose either Angular or React as the base foundation for their web applications. The logic makes sense, and both are mature. Both deliver applications that can run massive web apps.”
Other things to consider: If you want to also have an iOS or Android app you may lean towards React and React Native; do you need server side rendering - Next.js could be also a good choice.
Back-end choices for your web development tech stack
The back-end is also known as the server-side of development and there are many more options to choose from here. The back end is invisible to users, but it is essentially the engine that drives all of their requests.
What to consider when choosing a technology stack
Michał Kłujszo, Co-Founder and Head of Delivery at 10Clouds says:
When advising our customers on how to build their new application we often discuss which framework and technology to choose, and it’s easy to focus just on the technical side and omit the human side of that choice. When you consider your technology choices it’s extremely important to choose the framework that will be right for both your project and the team that will deliver it. Even the newest framework won't cut it if your developers won’t like it or there is just a handful of talent with experience available.
Here are the top factors that you should consider:
Stack popularity and availability of developers
Given all the options available, the first thing I would look at, is how popular the programming language and the framework are. First of all they are popular for a reason - popular solutions have likely proven to be good enough to solve most people’s use cases. OK, there have been cases in history when an inferior technical solution (VHS) became more popular than a more effective one (Betamax), but it is very likely that your use case will be served well if you go with a popular framework. What is important, popularity comes with high numbers of ready to use libraries, tools and utilities, that will speed up the development. It will also be easier to find support and help on community sites.
Remember that it will also be considerably harder and more expensive to find experienced developers if you decide on some less popular programming language.
Elixir or Go may sound cool and great, but unless you really know why you need them, better stick with something like Python, JS or even Java. As a Python developer, I am biased, but I highly recommend Python and Django framework for the exact reasons mentioned above. Is it ideal/perfect/the best? No, not at all, but it will cover 80% of web applications out there.
Your budget and your planned time to market
The next thing I would consider is the budget you have for the project and a planned time to release the application. Using a framework like Django will definitely help you to speed up development, mainly because it has all the necessary components in place and they are closely integrated, so with a minimal amount of code, developers can do a surprising amount of work.
It is also supported by a large and active community of programmers, who write and update new modules, plug-ins and code snippets regularly. This means that developers can easily speed up the development process through taking advantage of these resources.
With Django, you will also have access to some freebies, such as Django Admin. Here the UX is somewhat to be desired, but it's still a perfect resource when working on an MVP backoffice.
Another way to speed up development would be to use Node.js on the backend. This way, the same language is used both on the frontend and the backend, but beware that this does not necessarily mean that all developers are likely to be able to work on both.
If time is of the essence for your project, it may be worth considering serverless solutions. This is because in a serverless set up, the vendor is responsible for the backend part of your digital product, delivering the necessary infrastructure to enable it to work.
This means that developers can devote their efforts entirely on developing business features, and also have more time to focus on innovation.
The complexity of your project
Despite the multiple advantages of Django, discussed above, it must be noted that it has its limitations, particularly when it comes to flexibility. It is a monolithic framework, which means that it has a certain set of components already built into it which are tricky to customize or replace with a solution that may be more suitable for a given project. If you don’t follow the rules of ‘The Django way’, you will get stuck further down the line. Also, the inflexibility of particular design decisions might hurt in more complex projects.
In this case, it might be worthwhile to consider a lightweight framework with more customisation, such as Flask. Such frameworks allow the programmers much greater flexibility in making decisions and choosing components they want to use. In fact, the number of ways that a Python Flask framework code can be organized is roughly equal to the number of apps written by Flask developers.
If your software requires sophisticated data processing, like integrating multiple sources of data, aggregating data, reacting to events, machine learning, etc. and serving content to end users is only a small part of what it does, then your focus will likely be on these data processing parts. The trap you can fall into - had you used monolithic framework for the web app part, you could be forced to use the same components on other services (like Django ORM for data access) instead of something better suited for these services. So it is likely better to use a lightweight framework for the web part, and focus on important parts of the system.
When building such complex systems, you will also have to make many more decisions on the stack relating to databases, queue systems, full text search engines, machine learning frameworks, and so on.
The rule of thumb is again to use popular, battle-tested solutions, like Kafka, RabbitMQ, ElasticSearch, MongoDb and so on.
The performance, scalability, security, and other requirements of your project
Finally, it’s important to consider some of the other special requirements of your project, particularly when it comes to performance, scalability and security.
Scalability - Node.js, Python and Tornado, or asynchronous features of Python make it possible to process several tasks concurrently, which is useful if you’re building an app designed for multiple simultaneous users, which you’re looking to quickly scale.
Reliability - If you’re looking to build a distributed and fault-tolerant system, it may be wise to consider Elixir, which leverages Erlang - the language invented by Ericson to be used for fault desensitized phone switches. Together with Phoenix framework it is also great for web applications that serve large numbers of users and need to be scalable.
Performance - if complex algorithms are used and complicated calculations need to be done by your application and they need to be as efficient as possible, or if you are writing software that would closely integrate with hardware or operating system, then you want to look at Go and Rust. They are modern languages intended to replace good old C and C++ in such uses.
Limiting errors and bugs - No software is bug free, but when building an application in areas like banking, accounting, handling medical records, etc. where the quality is critical, then strongly and statically typed languages, like Java, may be better than dynamic ones. Static, strong type systems mean that even before the code is run, it is possible to analyse it and detect some categories of errors, so it is harder to shoot yourself in foot. But development may be more time-consuming than with dynamic languages. You can also get the best of both worlds by using optional type checking in dynamic languages like Python.
Note that each component of a multi service system may use different technologies, as they are the best suited to serve each of them. This may of course mean that that the whole thing is harder to maintain, but still worthwhile as the benefits outweigh the disadvantages.
5 points to remember
I would like to leave you with some key points to summarize my advice:
- Stick to popular languages and frameworks, as they come with ready-to-use resources, and they are popular for a reason.
- If you already have some software written, it is quicker and more cost-effective to use the same or similar technology going forward.
- If you’re starting from scratch and unsure of what technology to choose, Django will work for most projects.
- Otherwise, it’s useful to think about your specific needs and preferences and to select a language and framework that has historically worked for those specific features.
- If you’re working with a software house, trust them to recommend the best stack for your project, but of course, feel free to do your research and ask questions about why they have decided to choose one solution over another.
Looking for a team to bring your digital product to life?
At 10Clouds, we have a wide-ranging tech stack for web development covering all of the above-mentioned languages and frameworks. This means we’re well placed to advise you on what will work best for your product.