I believe that as the initial hype has expired, and as people have moved from the basic ‘it is very easy to write a website that is high performance’ to a realisation that actually the non-blocking single threaded nature of Node is only part of the solution to its proclaimed scalability in many scenarios, we may have hit ‘peak Node’.

There are positives and negatives to Node, as with any language or framework.

  • If you need anything other than a trivial application, you need to follow exactly the same types of architecture that have been in use for some time in other languages. Node is not going to suddenly provide scalability just by being able to offer a single non-blocking thread.
  • For example, you will typically need to offload compute intensive, external calls or long running processes via a Service Bus or Message Queue to scalable worker processes (sometimes referred to now as Micro Services).
  • As people try to use Node in real enterprise scenarios, there is now an element of attempting to ‘reinvent the wheel’, by adding package upon package to patch on functionality that already exists in languages such as Java, .Net, Ruby and to a certain extent PHP.
  • When you actually compare the performance of Node to say an OWIN based Web API service, the Web API actually is able to match or outperform Node while offering greater functionality built in a strongly typed language.
  • This growth in the number of packages etc, and the fragmentation of the Node community is of course to be expected, in the same way that there is fragmentation and a short half-life for JavaScript frameworks and libraries client side.
  • The concept of Isomorphic JavaScript frameworks that evolved around Node is also beginning to be seen as a short-term sticking plaster approach with limited value, as is the attempt to bolt on strong typing in the form of TypeScript / AtScript etc.
  • Developments for server APIs such as Swagger, that provide metadata for a REST API that enables clients to be generated, and are language agnostic, enable the seamless integration and use of languages tailored to specific tasks. That might include a C++ native mobile app, a JavaScript web client, and a Java / .Net back end, or Erlang, or one of many others that are optimized for the Problem Domain. Models are automatically synchronised.
  • As the realisation dawns that Node based architectures are actually trying to attain features that enterprise grade, strongly typed languages have had for over a decade, with mature and optimised solutions for many problems, it becomes apparent to more people that Node is not a single solution to all scenarios (and neither is any other language).
  • However, it should be noted that Node, with its underlying C library that is wrapped by JavaScript IS highly suitable for some scenarios; event driven, simple request-response from a cache, such as a dashboard, chat application or notification hub (think Twitter), then Node is actually a very good choice – just not exclusively so, among the very many other approaches, which experienced Software Architects will be aware of; one example would be SignalR, for highly scalable, real-time, bi-directional communication between client and server.
  • Due to the momentum of hype and enthusiasm behind open-source JavaScript frameworks, and the number of headlines it generates, companies such as Microsoft, Oracle etc. embrace it in order to get the resulting projects tied to their own, proprietary environments where they have a revenue stream. For example, Amazon, Microsoft and IBM don’t care what you use a long as you host on their cloud platforms, and their ‘support’ for it is used to perpetuate the myth that Node is actually a revolutionary concept that will replace ‘legacy’ languages.

I forgot to add in my initial post, that Bower is already facing competition from jspm. A week is a long time in JavaScript.

Update 2015: I note that a graph has been used in one other answer that shows amazing growth rates for Node.js jobs advertised on the Indeed website. That seems pretty impressive…

… until you realise, that is actually a bit disingenuous, as it relative to a base that was effectively zero. Switching the exact same graph to display absolute data tells a very different story:

Looking at Percentage of Matching job postings, it would seem that in fact, Node.js is, effectively, irrelevant – tip: the top orange line is for PHP, the lower, pale orange line hidden amongst scala, erlang, rails, is Node.js.

To make it clearer, and to include JavaScript itself (node.js is the green line):

Top Job Trends

  1. HTML5
  2. MongoDB
  3. iOS
  4. Android
  5. Mobile app
  6. Puppet
  7. Hadoop
  8. jQuery
  9. PaaS
  10. Social Media

My point on this, is that people should be careful not to fall for the over-hype that surrounds Node.js.

Update 2018:

I believe I should add three points, a mix of pros and cons for Node.

a) Nodes initial breakthrough was non-blocking IO. Since then, many other mainstream languages have adopted the asynchronous approach that Node pioneered. As I mentioned in my initial answer, Node is not the only tool that should be considered, but it is highly appropropriate in certain circumstances. Microsoft has subsequently released .Net Core with high performance async / await and the ability to use fibers (Coroutines), and Google has subsequently released Go, which also offers concurrency via Coroutines (which they have named Goroutines). I highly recommend looking into these approaches (Coroutine – Wikipedia)

b) The advent of serverless computing (e.g. Google Cloud Platforms Cloud Functions, Microsoft’s Azure Functions, and AWS Lambda) complement Node very well, and can simplify the implementation of scaling of a Node API that also requires compute-intensive workflows.

c) The rise of Server Side Rendering of JavaScript based UIs (in conjunction with Progressive Web Applications), for example Next.js for React, and Nuxt.js for Vue makes Node an attractive choice for this specific approach to web development.

My original assessment still stands – Node is very suitable for some applications, but it is not the only approach that can be used. Usage appears to have plateaued, with the advent of languages such as Go.


Sources: 26 years Experience in the IT industry, contribution to several open source JavaScript frameworks, 16 years consulting experience in Enterprise software development for Banks, Insurance Companies, Healthcare, Defence, eCommerce and Publishing.