21 April 2023 (updated: 21 April 2023)
Chapters
The effects of some choices can drag on for years. Software developers, no matter their experience level, know this problem perfectly, and the tech choice is one of them.
Rewriting an old piece of code in a sensitive and complicated banking system? Or you just want to build a new pet project — tech choice is always a very complicated decision, because many factors, like project team size, or task planning, come into play with it.
What to choose then? In this article, I would like to compare two of the most known technologies for creating web applications - Ruby on Rails and Node.js. Both are widely adapted in many different projects and products in small and big software companies. I will show their characteristics and differences between them in specified categories.
Ruby on Rails framework was introduced in 2004 by David Heinemeier Hansson, as a simple and more comfortable alternative for creating full-stack web applications in Ruby language. Its main advantage is “out of the box” ready project configuration by providing programmers with ready-to-work modules and tools for quick and easy implementation of the most important elements of each web application. The most important rule which Rails represents is “Don’t repeat yourself” which forces developers to create reusable modules and pieces of code to reduce the risk of errors. Those features made many famous companies like Hulu, Airbnb, and Github give Rails the shot and create many successful digital products.
To be 100% precise, Node.js is not a framework. This is an open-source runtime environment platform based on Javascript language, for running JS outside of the browser. It was introduced in 2009 by Ryan Dahl, whose mission was to create a developer environment in which you would be able to use only one programming language to create the backend and frontend parts of a web application. Its high efficiency, performance, and configuration flexibility have gained many fans throughout the industry, as evidenced by its wide use in many well-known companies, e.g. Medium, Uber, and Netflix.
Technology comparisons are never an easy job to do. Whether framework, language, or other tools we’re going to pick, our job is always the same - to bring value to the end user. The devil's in the details - how fast, in what scope, or team size are just a few important factors which will be helpful in our decision process. Finally, we decided to use three, simple categories and tried to figure out which of those two Rails vs Node frameworks would suit best.
We usually hear that performance is the most important element in terms of choosing technologies. I agree that this is a significant factor, but not entirely crucial in some cases. Everything depends on project size and characteristics, processed data volume, or the number of users. Both Node and Rails are varying from themselves in terms of efficiency.
Ruby on Rails is based on the Ruby language which, despite huge sympathy in the developer community, is not a perfect tool to create highly efficient software. It is an interpreted language, which has a garbage collector - a tool for automatic memory management, mainly to clean up a used app’s memory. Garbage collector is the main reason for the temporary slowdown of the web application and its resources heavy exploitation. Of course, there are many different solutions to improve its efficiency like e.g. JIT compilers but usually, it uses our time and money. Clean, “out of the box” Rails are not perfect for highly efficient, sensitive systems like e.g. streaming services.
On the other hand, Node.js is built a little bit differently. Its architecture is based on Single-threaded Event Loop architecture, which means (without getting into technical details) that it handles multiple concurrent requests at high performance without unnecessary load at the main app thread. Such architecture gives Node a huge advantage in terms of performance among many different platforms. Additionally, adding to it the Javascript V8 engine from Google together with JS language benefits (e.g. asynchrony) gives us a very powerful and fast platform for creating web applications for heavy data load.
So, it all depends on the scale - for small projects without many tasks and features, Ruby on Rails will be a good choice. However, when our product is growing and the number of requests and data is getting bigger and bigger, Node.js would be a better alternative for handling all of the tasks.
When choosing a framework it’s important to have flexibility in solutions implementation. It doesn’t matter what way or pattern for creating software you choose, you want to feel this choice to be a comfortable and unforced decision. Let’s see what Rails and Node.js have to offer.
While using Node, developers have a wide range of configuration possibilities. Single-threaded Event Loop architecture, together with full support for asynchronous communication between various components makes Node a great platform for highly customized software. It supports “Model View Presenter” (MVP) and “Model View Controller” (MVC) writing patterns that allow each dev to pick their own strategy and code writing convention. A huge advantage of using Node.js is the possibility of creating all backend and frontend infrastructure using only one language - Javascript (or Typescript, which is even more popular nowadays). This is especially useful in writing customized server-based apps and microservices components in bigger teams.
Ruby on Rails is driven by the “Convention over Configuration” rule. Keeping closer to monolith architecture, Rails framework project configuration is set “out of the box”, which saves time in most of the development processes. Modules like ActiveRecord or tools like model scaffolding, together with well-known MVC pattern - all these things are for quick and painless full-stack web app creation and deployment, to bring ideas to the end user and test it at low costs. With Ruby being an object-oriented programming language with very simple and easy-to-read syntax, delivering new features is much more simple and faster than in other backend frameworks. Thanks to that developers are focusing more on implementing business logic into our app rather than spending time on configuration and code convention setup.
Both examples have very different approaches here. Node.js has great configuration possibilities, which makes a lot of sense when we need to create highly customizable and efficient software, e.g. financial systems or streaming. It's a great choice when you plan to create your system based on microservices architecture. On the other hand, Ruby on Rails will be great for projects, when business logic and idea testing are much more important than infrastructure or performance. Thanks to that, developers focus mainly on delivering an idea to the user.
Our ambitions are big, and our hopes are even bigger - we want our product to be used by millions all across the world, bringing new users each day and trying to develop our product by adding new features which make it better. If you feel the same, believe me - I wish you all the best, but first things first. Let’s check the potential of both Rails and Node for scalability and growth to handle all those ambitious plans.
Rails projects are rather built with monolith architecture in mind, which makes it not the best framework to scale. Together with performance issues, is becoming a good choice for Proof of Concepts or MVPs, but for larger projects is much more difficult to maintain. But let's be precise - difficult does not mean impossible. However, this requires investing many resources compared to other mainstream frameworks. Quickly scaled RoR applications suffer from insufficient memory management and poor concurrency. However, tech giants with a rich Rails implementation culture have shown that RoR can scale apps that handle higher traffic. Shopify’s Black Friday Cyber Monday weekend in 2022 shows it perfectly:
Another Black Friday Cyber Monday (BFCM) weekend done and dusted!
— Shopify Engineering (@ShopifyEng) November 30, 2022
We achieved 99.999+% uptime while averaging 3 Terabytes per minute of egress traffic across our infrastructure.
That’s 4.3 Petabytes per day! 🤯
Check out the thread for more awesome performance stats 🧵👇
In terms of scalability, Node.js is a pure winner. Its architecture based on an event-driven model and microservices (which usually scales much easier than monoliths) allows progressive applications to be divided into smaller, independent parts. Each of those parts will be able to handle a high volume of requests. Thanks to that it’s easier to organize work in a company - all we need to do is to portion existing development teams into smaller parts to work on separate microservices. All of those things make Node.js a great candidate to create large, scalable systems.
What is better for your next project - Ruby on Rails or Node.js? As you can see, those are two completely different technologies made to serve vastly different purposes. Node.js is a great platform for bigger applications like server backend apps, and APIs, supported by the well-scalable and efficient microservice architecture. Rails on the other hand have much more advantage when you need to deliver an initial project or idea to the end-user fast - without focusing on performance, scalability, or other similar things - just release your idea as fast as you can and see what users think about it.
When we look into the 2022 Stack Overflow Developer Survey we can see that among all frameworks Node.js is loved by almost 68% of respondents and over 11% want to learn it. Rails numbers however are respectively 55% and 3% - that’s much less and it shows that currently we live in Javascript / Node.js hype times, while Rails, despite a huge community supporting and releasing new versions each year, is becoming less popular. Why? The language is the key there, I guess. Javascript is the most popular language right now. 2022 marks its tenth year in a row as the most commonly used programming language in the world. Using it, you can create both - backend and frontend applications and save time on learning another backend technology or framework.
One thing to remember - no matter what technology you will choose, a business model and an aligned strategy are the most important things for your product development. When evaluated well, it helps you satisfy your product & users’ needs holistically, without sacrificing one another in the long run.
3 September 2024 • Maria Pradiuszyk