October 11, 2018
Development with Node.js lives up to its opinion as the new standard for enterprise applications. Some even claim that it’s so powerful that it has the potential to replace Java for good—dethroning it as the most trusted language, a spot that Java has held since 1995.
Seemingly every month now, another enterprise-level company reveals that it’s been successfully using the platform in its operations. As of today, the list includes giants such as Walmart, NASA, Intel, and Twitter. Many others decided to rewrite their existing code to Node.js to boost their teams’ productivity and increase the performance of their applications. According to the Node.js User Survey, 43% of Node.js programmers claim to have used it for enterprise apps.
What makes it so special that almost all Fortune 500 companies use it? Well, the answer to those questions is just as complex as the enterprise apps built with Node. So I’ll try to give you a short version (which will still be kinda long).
Everything clear so far?
A Brief Intro to Node.js Development
Node.js is a JS runtime environment which allows the infrastructure to build and run an application. It’s a light, scalable, and cross-platform way to execute code. It uses an event-driven I/O model which makes it extremely efficient and makes scalable network application possible.
With more than a billion downloads, Node.js thrives in building real-time applications, Internet of Things, and microservices. It’s gaining traction faster than any other technology and ranks in the top most-in-demand developer skills.
The most important advantages of Node include:
Any programming language will give you some reasons to choose them over others. The thing about Node.js is that it was developed for applications at scale. Modern tooling and its embrace of the more forward-looking way of developing complex applications make Node.js stand apart from other programming technologies.
The single-threaded, event-driven architecture of Node.js allows it to handle multiple simultaneous connections efficiently. Most of the popular web platforms create an additional thread for each new request, using up RAM for the whole time it takes to process it. Node, on the other hand, operates on a single thread, making use of the event loop and callbacks for I/O operations, delegating tasks such as database operations as soon as possible. This allows it to handle hundreds of thousands or even a million concurrent connections.
What’s more, Node.js embraces scalability from the get-go, with powerful features such as the Cluster module enabling load balancing over multiple CPU cores. Robust tools, such as the PM2 process manager, make it even easier to monitor, optimize and deploy Node applications.
Every project starts out small. Or with the MVP release, if you prefer. But as time flies, it starts being more than a remedy for one problem. It continues to grow, gaining new features and users with high expectations (but not enough love to be overly forgiving).
Without even noticing, you may end up with a huge project that your huge development team struggles to cope with. Soon, you will probably need to add new features while still providing a top-notch performance to your users. But as it gets more and more complex, introducing new changes becomes a nightmare.
This is a common problem among enterprise applications.
Take this for example: you run a marketing app that serves three theoretically separate and equal area, like email marketing, CMS, and reporting. Obviously, one feature will be used much more often than other two, with some people even going as far as only using the CMS part of the app while ignoring the rest. As your user base grows, more computing power will have to be added to the servers in order for your app to work properly and not crash. The best way to solve that would be to scale just the CMS part. After all, the other two deal with the traffic loads just fine, right? Such an approach, however, is impossible with monolithic apps and eventually you’re forced to scale the whole system.
Moreover, with all the complexity, the app often becomes difficult to handle, the deployment becomes a real pain, and the whole team gets too big to coordinate their work in an efficient manner.
The answer to this problem is the microservices pattern.
According to Max Stoiber, an open-source developer:
A microservice is a single self-contained unit which, together with many others, makes up a large application. By splitting your app into small units every part of it is independently deployable and scalable, can be written by different teams and in different programming languages and can be tested individually.
That also means you can run separate teams in Poland, India, and the US, and they can work independently on different parts of the same app. Smaller teams are much easier to work with, plus, you don’t have to deploy the whole codebase every time you want to introduce some change in one part of your app.
There’s a number of well-known enterprise-level companies who have already embraced the power of Node.js and microservices, a perfect combination for better performance, less code, and efficient deployment. PayPal, Netflix, and GoDaddy are just a handful of them.
Contrary to a skill-set silos teams, in a cross-functional team every member is responsible for the entire lifecycle of the app: writing code, testing, hosting, deployment, and maintenance. Teams like that are made up of experts in all the relevant areas: front- and backend developers, infrastructure engineers, and quality assurance experts.
This approach, popularized by Agile advocates, is quite common in startup circles, as most startups have limited workforces at their disposal. But with the microservices mindset in place, it’s also within the reach of enterprises and should be encouraged for better agility, innovation, and smoother collaboration.
There’s no place in there for “This ain’t my job” sentiments—everyone’s working towards the same goal, providing their own perspective on the problem.
The Node Package Manager, known as an npm, allows programmers to install, update, and use smaller open-source software packages (modules), which means they don’t have to write common features from scratch and can avoid new layers of complexity that often come with that particular territory.
Given that privacy and security are often of the biggest concern for enterprises, npm released the Enterprise version of its package manager.
As big organizations may be wary of storing their data in the cloud (especially government organizations, as well as those working in fields such as fintech or medtech), npm Enterprise allows you to run npm's infrastructure behind your company's firewall. It gives businesses access to a private registry with advanced security features to help them control access to code, identify vulnerabilities, and automatically replace unsafe code.
According to the npm blog:
Many enterprises have strict requirements that prevent them from using cloud-hosted products for critical parts of their infrastructure. This approach makes sense from a regulatory compliance perspective, but it makes life inconvenient for developers within those companies who wish to take advantage of open-source code from the npm Registry, or who wish to use npm to share and reuse their own code with their colleagues.
In our modern world, things are constantly shifting and new technologies rise and fall, sometimes without even entering long term support (LTS). And it’s difficult to develop and maintain an app written in an outdated language.
According to the 2018 Node.js User Survey Report, 61% of programmers consider long term support for Node.js an important feature. That knowledge allows developers to assess what the future holds for our application and to plan further development according to the timeline. Programmers can easily plan to adopt new versions based on their regular development cycles.
Every major release of Node.js will be actively maintained for 18 months from the date it enters LTS, after which it will transition to maintenance mode lasting another 12 months. During this time there will be no new features merged to the version, but all bug fixes or security updates will be taken care of by the team.
It is a big step forward for complex enterprise applications.
Platforms like Electron or NW.js let you build cross-platform desktop apps with Node.js. That means you can use some of the code from your Web app in its desktop versions for macOS, Windows and Linux. Moving forward, the same team working on your Web app can deliver a desktop app without having expert knowledge of C#, Objective-C, or any other language required for building native apps.
Moreover, Node developers have access to the same great tooling as front-end developers—such as Google Chrome Developer Tools—enabling them to debug and profile backend and desktop apps as efficiently as client-side apps. The majority of Node developer tools are also cross-platform, which means that developers don’t need a Mac to write, debug and build a macOS app, or a Windows machine for Windows apps.
Highly innovative enterprises already know that Node.js is currently the best way to improve performance, coding efficiency, and overall happiness in their teams.
Want more? Check those compelling case studies from enterprises you’ve probably heard of: