When it comes to choosing web development technologies, we now have more options than ever. And while that’s a good thing, it also poses a problem. Answering the question, “What is the ideal technology for this new project?” is not as easy as it used to be. In this post, I briefly highlight the most popular full-stack web frameworks, and why you might want to choose each of them.
My perspective is based on experience, including my own hands-on development, and that of other developers at our company, as well as feedback from others in various web development communities. At Beezwax, we work together on problems from different points of view, “building custom software for {almost} any need”. The goal is to find the right fit for each development team on each client’s project — this is what the Beezwax team does all day long.
Everything on this list is well-established by years of core team development, open source review, vetting for real-world security and mature resources for community (or coworker) support. We do like to test and use new tools, libraries, gems, packages or modules, especially as pieces of the puzzle, but we rely on solid standards for core full-stack frameworks.
So, let’s waste no more time, and get started!
Rails
I’ll start with one of my favorite frameworks: Rails. Ruby on Rails is a rather big web framework for the Ruby programming language.
It’s big because of its philosophy: Rails is omakase. Rails comes with batteries included, so you can hit the ground running. Quoting the Michelin website:
[Omakase is] a form of Japanese dining in which guests leave themselves in the hands of a chef and receive a meal which is seasonal, elegant, artistic and uses the finest ingredients available.
https://guide.michelin.com/en/article/features/kitchen-language-what-is-omakase
So Rails is the chef, and we let her, a seasoned professional, make the hard decisions for us. That way, we only need to worry about our business logic, and not how to securely submit forms, run background jobs, handle different locales or manage different environments.
Rails takes care of everything in a consistent way. With the framework being released as open source in 2004, at the time of writing, the framework is 18 years old! Old enough to drink in some countries!
Because it has been around for so long, it’s incredibly stable. And it still is very actively worked on! Companies such as Shopify and GitHub are important contributors. And if it works for them, it surely can work for you!
Rails is great indeed, but it has its downsides. For example, because it’s so big, it’s not as quick to get started with as other frameworks.
Rails has a lot of magic, because one of its tenets is “convention over configuration”, and that can lead to lots of implicit behavior, which can be tricky to work with when you are starting out.
With a senior team of Rails developers, Rails can be one of the fastest, if not the fastest, framework to use to get a Minimum Viable Product out the door.
But if your team is not knowledgeable, it might not be worth it, as the time they spend learning the framework could be used actually writing something. Also, Ruby on Rails is not as popular as it used to be. And while it surely isn’t going away anytime soon, it definitely isn’t as shiny as it used to be.
Summary
- Batteries included
- Very fast development speed
- Mature and battle-tested
- Can be hard to learn, as it includes so many features
- Harder to find Ruby (and Rails) developers nowadays
Django
Django is another batteries-included framework, this time for the Python language. Django doesn’t come with as many features as Rails does, but still it includes most features you’ll need. And for those it doesn’t, you can always use a library.
One of its most interesting features is its Admin interface. It comes with user authentication and an administration panel where you can easily manage all of your database tables.
It was initially created for a newspaper, so it’s a perfect fit when you can fully take advantage of the Admin interface, such as a news or company website.
One advantage Django has over Rails is that it’s not as big, so it’s easier to learn. Also, in my opinion, the learning documentation is better than for Rails. That said, I think they have more similarities than differences.
Summary
- Built-in admin interface
- Fast development speed
- Mature and battle-tested
- Secure, and it can handle pretty much anything you’ll ever need
- Easier than Rails to get started, although it’s still quite big
- Python is more popular than Ruby
Laravel / Symfony
Laravel is one of the most popular PHP frameworks, and for a good reason! It’s modern, it has a massive community, and there are lots of packages you can use to build your applications.
Symfony is another solid framework. Both are very similar to Django and Rails but for PHP. They take care of the plumbing so you can focus on your application. They follow the MVC pattern and scale well for large applications.
Summary
- Batteries included
- Fast development speed
- Not as popular as Rails or Django
- Comparable learning time to Django and Rails
- Lots of PHP developers, but might be hard to find one with experience in one particular framework
- PHP is not as popular as Python or JavaScript
Express (+ React or Vue)
One of the first Node.js frameworks and still going strong! Unlike previous frameworks which are all MVC (well, Django is technically MVT, but it’s pretty similar to MVC), Express is a minimal framework, built around the concept of routing and middleware.
It’s great for small websites and microservices. Nowadays it’s mostly used for APIs but it can handle rendering HTML views as well, although I’d argue there are better solutions if you want a full-stack Node framework.
Because it’s so small, it’s very easy to learn, but it also doesn’t do much by itself other than being able to map some routes to some functions.
A very common use for Express is as a backend for a SPA written in something like React, Vue, Angular or Ember.
Summary
- Minimal
- Easy to learn
- Good for small apps and APIs
- Need to manually mix and match libraries for most use cases (database, caching, i18n, etc)
- Very popular
- JavaScript is the most popular programming language right now, and still growing!
Flask / Sinatra
Flask is Python’s equivalent to Express. A minimal framework based on routing and middleware. Sinatra is the Ruby alternative.
Just like Express, these small frameworks are useful for microservices, and as a minimal backend for SPAs.
Summary
- Same as Express
- Good for use cases when you are already using Python or Ruby
Next.js / Remix (+ React)
Both Next.js and Remix are full-stack Node.js frameworks that are integrated with React. They allow you to easily use React components as regular views in a backend framework, and they take care of routing, server-side rendering, hydration, and all the hard stuff for you.
These do not include as many features as Rails and Django. For example, they don’t come with a database layer, but there are great choices for that, such as Prisma and Mongoose. You will need to build the stack yourself, though, and for complex apps, if you’ve worked with Rails or Django before, you’ll appreciate just how much work those frameworks do behind the scenes for you.
Another disadvantage of these frameworks is stability. The JavaScript world moves very fast. At the time of writing, Next.js is moving its pages/
architecture to an app/
folder, dramatically changing its architecture.
While that allows for apps to gradually update to the new version, it is a considerable effort for large apps moving hundreds of routes to the new format.
Summary
- Easy to get started
- Need to know React
- React can be hard to handle in large apps
- Need to manually mix and match libraries for non-trivial use cases (i18n, database, etc)
- Volatile, prone to undergoing big changes
- Very popular
ASP.NET Core
ASP.NET is Microsoft’s platform for web developers. It’s actually quite nice and mature. It’s cross-platform and has great learning resources.
The problem, as it’s often a challenge with Microsoft, is that you are restricting yourself to Microsoft technologies. And while it’s technically cross-platform and you can, for example, use MySQL or Postgres instead of SQL Server, it requires research and configuration. So you have to actually make an effort to not be locked in, whereas with all other frameworks, that freedom comes by default.
If you are on a Microsoft platform, then this is a no-brainer. It integrates beautifully, C# is a great language, and Visual Studio is a top-notch IDE. But if you are outside of the Microsoft bubble, then you’ll hit small pain points at every step.
Summary
- Mature, stable, and performant
- Good ecosystem and support
- Good learning resources
- C# is great, and so is Visual Studio
- It’s easy to lock yourself inside Microsoft’s technologies
Firebase
Similarly to ASP.NET, Firebase is Google’s platform you can use to quickly make web apps. It’s very different from other frameworks, as it’s more of a library to interact with Google services rather than an actual framework. You’d use it with something like React or Angular, if you are doing web dev.
Also, you can’t deploy anywhere else, so you are locking yourself in even harder than with ASP.NET. Why would you want to do that? Well, Firebase makes it quite attractive. In little time and with minimal knowledge, you can get hosting, authentication, a database, storage and more. It makes it very easy to consume Google’s services, which can be hard otherwise.
From code to cloud, it’s one of the fastest alternatives. For quick prototyping or small apps, it’s a great choice. It’s also great for learning, as it can be used from the front-end, so front-end devs can get a “back-end as a service” without knowing much about how a back-end works.
For large applications, Firebase is easy to break your app, or your budget. You can solve pretty much anything by throwing money at it, but even then there are lots of edge cases you’ll have to worry about, such as forgetting a useEffect hook in development and having to pay US$500 for that mistake, because yes, you have to pay for each database query! The database itself is NoSQL and quite simplistic, it has automatic indexes and no full-text search. So you have to pay for third-party services like ElasticSearch if you want a search feature.
Summary
- Easy and fast to get started with
- Managed cloud, no need to worry about deployment or have back-end knowledge
- Does not scale well with big projects
- Good for prototypes and small projects
- Expensive
Conclusion
Those are not all the frameworks out there, but are some of the most popular in 2022. Here are some of the things you should consider when choosing what framework to use:
- Experience of your development team
- Scope of the application
- Where your application is going to be hosted
- Budget
Most of the time, what your development team has experience with is going to be the best choice, unless the application scope forbids it. For example, you might be great at Rails, but if your application is going to be a Single Page Application, Rails will be reduced to an API, and at that stage, it might be simpler to use Express or Next.js and stick to a single language and smaller framework.
Another consideration could be whether your app requires full-text search. Databases like MySQL and Mongo can handle that just fine, but Firebase needs an external service and extra money, so a regular PHP + MySQL app could do just fine.
For applications with very limited resources (money and development time), such as experiments or side projects, ASP.NET or Firebase might be worth locking yourself into, so you can get something up in the cloud really fast. Once you have a proof of concept and you know it works, you could rewrite it with more experience and in a more efficient way.
Knowing where your application is going to be hosted is also very important. Certain applications may require full control over the server, which in most cases would be a VPS at some datacenter. Other applications may need to run on the cloud. If you need to manage the server, ASP.NET can be a pain, and Firebase is just impossible to self-manage (although there are some alternatives, such as Appwrite).
Budget is another very important aspect. Cloud is 90% of the time more expensive than hosting your own app. You can get a decent server for a few bucks per month, and you won’t have to worry about arbitrary cloud limits. Most apps won’t have to worry about scale from the get-go.
And that’s it! Hope you found this post helpful! Cheers!
— Fede