This vendor-written tech primer has been edited by Network World to eliminate product promotion, but readers should note it will likely favor the submitter’s approach.
First, there is an increasing need by companies of all sizes to quickly build scalable, fast, distributed web applications. Second, large enterprises are finding there is inherent risk associated with running large, complex monolithic applications due to the difficulty and cost of tuning, maintaining, patching, and debugging them — and the challenges this poses to business responsiveness. Third, software developers are looking to develop a skillset that prepares them for the new market reality of agile practices, continuous integration and delivery, cloud-scale application design and a highly mobile and demanding user base.
Node.js provides a module-driven, highly scalable approach to application design, development and deployment that enables development teams to put the most desirable elements of agile methodology into practice. This can greatly reduce risk and increase developer productivity—raising developer morale in the process.
In order to understand how these gains can be achieved, it is important to understand what makes Node.js so unique and powerful.
Node.js requires developers to embrace a different mindset in the form of asynchronous programming—as opposed to traditional serial, or sequential programming. By treating I/O as a special class of operation, developers must design high performance applications by default. However, the inherent asynchronous nature of Node.js comes with the additional burden of requiring them to adjust they way they think about the execution of their code.
Node.js is single-threaded by nature, and while some consider this a weakness, it should be embraced as a win for application design. Applications built with Node.js are built for predictable scalability; the idiomatic design patterns adopted by Node.js programmers confer robust scalability by nature without the overhead required by complicated synchronization mechanisms.
Node.js is a highly productive platform that is modular by nature and has a track record as a key component in an agile technology stack. Node.js embraces the new mantra of “Throwawayability” that is becoming pervasive in the microservices architecture world of software design, encouraging developers to think in terms of creating small components and services that can be easily replaced or updated when necessary.
By adopting a module-driven approach, Node.js developers can deconstruct the functionality of large monolithic applications and redesign them as a series of Node.js modules, bundled together to form a collection of services. This establishes an elegant simplicity in building scalable application functionality that improves both business and developer agility and leads to greater code-reuse.
Having development teams focusing on Node.js-style modular development enables them to:
- Maintain focus on essential functionality
- Better test, validate and document that functionality
- More easily share and collaborate with other teams
Small core, vibrant ecosystem
The main risk in large monolithic applications and traditional development methods is the natural mission creep of applications and the development environments that build them. Over time this results in feature-rich but bloated products.
The Node.js platform avoids this scenario by creating a small core of essential functionality that is studiously defended and constantly debated by the Node.js community. This pushes experimentation to the edges and encourages a vibrant ecosystem and development culture. It also ensures that spurious functionality does not become a permanent part of the Node.js environment. This ethos also extends to Node.js-style development, with developers constantly thinking about how to keep modules small and focused, and splitting apart functionality in accordance with a “do one thing well” software component philosophy.
Most IT organizations now realize the increasing difficulty of modernizing their development and operations without embracing open source technology, development and collaboration methodologies to some degree.
Node.js was born in the new era of open source, embodied by the GitHub model of developer interaction, collaboration and governance. Both Node.js and GitHub allow for a public and private open source development platform that empowers a growing, global community of developers.
Enterprises adopting Node.js generally seek to capture some of the obvious benefits of open source development practices and ethos. The culture and development workflow of Node.js encourages greater collaboration, communication and code-sharing — engineering practices that often go missing as enterprises grow and change over time.
Embracing Node.js in the enterprise
The rapid adoption of Node.js by large enterprises in recent years provides many interesting case studies and highlights the key reasons Node.js is being chosen as a tool for modernizing enterprise software development.
* SOA for the cloud era. After a decade chasing the dream of Service Oriented Architecture, companies with large, monolithic code bases are seeking to break these apps up into smaller, decoupled and more nimble services. This “unbundling of everything” better exploits the cloud architecture deployed in most modern data centers. Node.js has proven its utility in this area, not only as a technology choice, but for the development methodologies it encourages.
* Performance. Node.js represents an attractive compromise between performance concerns and platform approachability for developers. While there are other platforms that match or exceed the performance of Node.js, none are as approachable for such a large portion of developers. Additionally, the asynchronous programming model of Node.js encourages performant development practices that are either difficult or risky in other languages and platforms. Performance was cited as the top reason for using Node.js in a recent developer survey.
* Attract and Retain Developers. Enterprises seek to follow the example set by MasterCard, GoPro, Condé Nast and even NASA in connecting with the vibrant open source community and positioning themselves as attractive employers for top talent.
* Collaboration. Large enterprises tend to have internal organizational or technological silos that can represent an unnecessary business risk. These barriers need to be removed so engineering knowledge and personnel can cross between and within internal business units. The module-driven approach of Node.js encourages small teams of developers to solve atomic problems of functionality that interact with those of other teams. This encourages greater interaction and cooperation between developers.
Short-term focus on the following areas can increase the likelihood of successful Node.js adoption.
- Embracing code modularization, sharing and collaboration
- Building an infrastructure for a true SOA environment
- Communication and organizational barriers
- Elevating Node.js to a high-priority platform
Enterprises use Node.js for simple but profoundly effective reasons: ease and speed of development, the ability of Node.js to be highly distributed and scalable for both small and large implementations, and the ability to use new methodologies within an enterprise environment that allow for growth and success on a large scale with remarkably small overhead.
Node.js is past the point of proven effectiveness - Groupon, Capital One, Google, Macy's, Uber, ADP, Microsoft, Intel, and countless other enterprise companies have adopted Node.js as a tool of choice for a highly diverse set of applications, tools and interfaces. These enterprises have done so with great success, continuing to create and enhance their Node.js infrastructures to drive digital transformation and have the agility to constantly innovate.
Shaw is CTO and co-founder of NodeSource, where he is dedicated to helping improve and expand the Node Community. He is a veteran of numerous Node.js startups, including Voxer, Spreecast and Storify.