My daughter is 14. Like her father, she loves and plays music. As with all the restless teens, sitting through multiple hours of Grammys 2014 was a non-starter. Therefore, she installed me as her push notification service. My role was to sit on the sofa (iPad in hand – I am not crazy to just watch TV for hours either), and alert her when the acts she was interested in arrived. Her alerts: Lorde, Lindsey Buckingham, Trent Reznor.
In her room she created a ‘shrine’ on the drawer chest, consisting of the CD jewel cases of Mellon Collie and the Infinite Sadness by Smashing Pumpkins, The Greatest Hits by Fleetwood Mac, all Vampire Weekend CDs, Pure Heroine by Lorde and The Bell Jar by Sylvia Plath (the book, not the CD). Couple of years ago she exited the Beatles phase, where nothing mattered if it was not about John and Paul.
Meanwhile, my 17 year old son likes to play multiplayer shooters while listening to Mozart’s Requiem. On other days he makes methodical passes through the entire Depeche Mode back catalog. Besides Game Of Thrones, his bedtime reading consists of chronicles of some of the most obscure periods in Persian, Egyptian and Chinese history few have heard of.
Time means nothing to my kids, only quality does. For my children, Mozart, Stevie Nicks, David Gahan, Ezra Koenig and Lorde all exist simultaneously in a vast random-access buffet.
Which brings me to the topic of the blog post. A young colleague from the vicinity of my old country commented about my blog thusly:
Are there multiple ways of looking at Node.js? Is there a ‘startup-y’ way of looking at it, and an ‘enterprise-y’ way? Is the former more cool, is the latter the more boring, adult, ‘taking all the fun out of it’ way? More importantly, should enterprises only use older, proven technology, while startups and individuals play with the new and shiny?
It is no secret that I work for IBM, the biggest and oldest of all the IT enterprises out there (it is 103 years old!). Should I even be allowed to write about, play with, and (God forbid) push for Node.js in IBM, let alone make it the center piece of the new micro-service architecture for JazzHub?
Let’s see how my kids would approach it: because they are young and unaware of stereotypes, they would totally use Node.js for the front end, because they have little patience for tedium and Node.js would allow them to iterate through the interface ideas much faster. If they had some high performance/CPU task to accomplish, they would not hesitate to write it in Java, or even better, C or C++. Or maybe they would look at Go. They would add i18n support so that they can show what they built to their relatives in the old country that are not very good in English. They would add security because some bored hackers would pounce on their site as soon as it became live (my daughter’s Club Penguin account was repeatedly hacked when she was 9). They would do all these things because they are common sense, they are important, they matter and you cannot be ‘done’ until you have them.
The moment you have customers and feel responsibility for them, you are doing ‘enterprise-y’ stuff. NPM just became a company (they raised 2.6m in seed funding less then two months ago), and you know what one of the first orders of business were? Ordering external security audit. That sounds very ‘enterprise’ to me. Uber business model may sound weird to you* but they are a serious business (serious enough to create a pushback from lobbyists in each new market they expand to), and they were running Node.js in their dispatching system since 2011. The same for AirBNB, although they jumped into Node in 2013.
I am using these two companies as an example because they are relatively new and don’t fit the stereotype of a classic ‘enterprise’. And yet, look at their web sites carefully – both sport a dropdown to choose the language. I can paraphrase a classic joke ‘you know you are a redneck…’ as ‘you know you write enterprise-class software when you need to deal with i18n’. Of course, If you are an enterprise that wants to sell to the US government, it’s not a stretch goal – you must meet regulation 508 to even be in the running. There is an equivalent set of requirements for the European Commission. But you don’t have to be beaten with a government stick to add i18n and accessibility to your business’ web application – it just makes sense because you can reach more people that way. And it is not limited to Node.js – go through the examples of the wildly popular Bootstrap toolkit and search for the word ‘aria’ – you will see 43 hits because all the components have wai-aria accessibility support.
We are now entering the most exciting phase of Node.js’ young life – Node.js in the enterprise. The signs are everywhere, from testimonials of companies reinventing their systems using Node.js during Node Summit 2013 and NodeDay 2014, to the surge in articles and discussion on enterprise micro-service architecture (Martin Fowler creating a Downton Abbey event by releasing the article on micro-services in mini-episodes, only to be challenged to a post-off with an alternative article – man, this is going to be fun!).
I have seen a marked change in tone in the recent weeks around Node.js and enterprise. In the past, the discussions were heated as if there was a smidgen of insecurity in the pro Node.js camp, so the general discourse was ‘is Node.js ready for the enterprise?’ with a verdict left hanging in the balance. The tone has shifted now, coming from rapid maturation of the Node.js community bolstered by some significant success stories. The discussion is not any more if Node.js is ready for the enterprise – it IS in the enterprise, and that segment provides the most significant growth now. In a sense, the discourse now is ‘why are we even having this discussion?’ coming from mild annoyance of raising a topic that has been settled in many minds already, and with a resounding ‘Yes’. People are now busy having fun with Node.js at scale, for example:
Sometimes, a historic perspective helps, so here is one. In 1995, Sun made Java and JVM public as an alternative to C++ for desktop applications. It was interpreted, it was slow, it was buggy but it was new, exciting, promised ‘write once, run anywhere’ without recompilation, and the community was growing rapidly. In 1996, I was asked to try to write a prototype of a framework that would allow an IBM middleware development tool with a significant GUI to run on AIX, OS/2 and Windows NT without maintaining three separate code bases. I wrote it in Java and called it JFace. This framework eventually ended up in a much larger body of code (albeit totally rewritten) in what was later known as the Eclipse Platform.
The point of this story is that I was asked to solve a problem using Java when Java was only 2 years old, and the huge Eclipse platform effort was based on Java when it was 4 years old. At that time, Java was buggier and slower than Node.js is today (performance inflation-adjusted). In fact, Java was consistently slower than the incumbents, whereas Node.js shows performance improvements when used as designed (for systems with a significant I/O activity). I am sure people had their doubts about Java in its time, but that didn’t stop them from forging ahead and fixing whatever had to be fixed to dispel those doubts.
In a sense, some people in the enterprise sound like parents who had a wild youth, then forgot all about it and turned into old fuddy-duddies. As you see from my example above, we were fearless before, we can be fearless again. In five years, something new will come along, and we will have this discussion again.
So to wrap up, it is very unlikely that any Node.js discussion today will not be ‘enterprise-y’ – we have great HWPS (Hello World Per Second) numbers and now need to solve real problems that involve i18n, security, scale, independent evolution of micro-services by large teams, inter-service messaging, clustering, continuous integration and deployment with zero downtime etc. Let’s approach it the way my kids approach music – open minded, without prejudice, without preconceived notions, on merits only.
Node.js is but a tool in the tool box, use it as intended and it will repay handsomely. Feeling reinvigorated, loving your job again, being excited to get your hands dirty and code is tossed into the package for free as a reword for your open mind.
*Correction – the original article had an erroneous claim that Uber cars have silly pink moustaches on their grills. In fact, they belong to their competition Lyft. Thanks to @bdickason for spotting the error.
© Dejan Glozic, 2014