In this post I will go through the positive and negatives of my favourite backend technologies.
Table of contents
Open Table of contents
Node.js
Node.js has many different frameworks that are built on top of it such as express
, nest.js
and fastify
- these all provide different ways of creating API’s. Some are more popular than others - express
has been around a very long time with limited amount of updates but it’s still considered the most used framework due to how easy it is to use and its massive ecosystem.
Then we have nest.js
which is typescript-based that takes inspiration from Angular’s architecture and follows the MVC
(model, view, controller) pattern which can make it harder to learn.
The framework fastify
is known for being a competitor and very similar to express
and has been stated that it performs 4x faster than express
, it also supports typescript.
Benefits
The main benefit when I use node.js
as a backend is the fact I will be using the same programming language on the frontend and backend - this makes the development process much smoother and easier to understand. Also it has a huge ecosystem which means there are many npm
packages available which again will save development time. It is event-driven so this would be perfect for building real-time (websockets) applications such as chats, live updates, online gaming etc. Also in my experience they’re much easier to deploy on AWS or any PaaS
(platform-as-a-service) compared to others.
Negatives
It’s single-threaded which means it handles requests asynchronously using an event loop - this means it will struggle with CPU intensive tasks such as complex computations. Callback hell can be an issue but luckily async await
kindof solves this issue but it can still be a challenge. Not opinionated and doesn’t follow any pattern like MVC
- this could create chaos in a codebase.
C# ASP.NET
A very powerful web-based framework which was developer by Microsoft, it can be used to develop web applications, RESTful APIs and services. This uses the MVC
design pattern similarly to nest.js
and has been considered one of the fastest and most performant framework. There are many packages that can be downloaded using NuGet
which is the package manager.
Benefits
It uses the MVC
design pattern which creates a good structure for the project, high performance and can handle many applications without any issues due to its compiled nature. Built-in security features out of the box such that prevents common vulnerabilities like SQL injection
, XSS
and CSRF
. Has a well-supported package system called NuGet
. Scales very well due to its support for load balancing. Easily interact with a database using EF
(entity framework).
Negatives
Can be a steep learning curve as most developers prefer functional v OOP. Limited tooling - most people use IDE’s such as Visual Studio Code
but the preferred IDE would be Visual Studio
as it already has the features ready. Limited hosting options - some PaaS
support it otherwise it will be Azure
only. More boilerplate needed compared to other frameworks.
Supabase
This is a BaaS
(backend-as-a-service) and is used for developers that want to save development time. It has built-in auth, websockets, cron jobs and more. It also has built-in auto-generated endpoints which again saves the developer a lot of time.
Benefits
Saves a massive amount of development time due to having auth, websockets, cron jobs out of the box. Email templates ready-to-go for different scenarios. Easily connect to any endpoint which saves a good amount of time. Easy-to-use with everything in a nice UI.
Negatives
When using SSR auth RLS
can be hard to setup as the docs are more focused on client-side auth. Vendor lock-in could be a problem later down the line if the company decides to hike prices.
Conclusion
Overall I feel each technology has a good amount of benefits and negatives - I feel there is no clear-cut reason as to why someone should choose a specific technology as each one is suited to specific projects. For example if you need a small CRUD application that you want up and running in a few weeks then I feel supabase
would be the best choice.
If you need a small to medium project that requires flexibility, a vast ecosystem of libraries, and a shared language across frontend and backend, then Node.js would be a strong choice. Its non-blocking, event-driven architecture makes it particularly well-suited for applications that require real-time capabilities, such as chat applications or live notifications.
On the other hand, if you’re building an enterprise-level application that demands robust security, scalability, and structured development, then ASP.NET would be a great option. It excels in handling complex business logic, integrates seamlessly with Microsoft technologies, and provides strong type safety through C#.