Robert Kieffer, an a engineer at Facebook and the company’s internal Node.js evangelist, gave a talk at NodeConf today. He says the company isn’t doing enough with Node.js yet. So instead of an explanation of how to deploy Node.js to thousands of servers, he’s talked about why Facebook needs Node.js and the things holding the company back from adopting it widely.
Update: You can find slides from this presentation here (PDF).
Some critics aren’t impressed because many of the problems Node solves can be solved with other technologies such as libev, Tornado, EventMachine, etc. So why should we be interested in Node.js? Kieffer because it breaks down the silos between developers. He says that at almost every place he’s worked, people are pigeon-holed into specific roles: front-end developer, backed-end devloper, etc. But that means that it’s hard for developers to pitch in to help other teams.
So why isn’t Facebook widely embracing Node.js yet? Facebook prioritizes performance, as illustrated by HipHop. Even 1% improvement matters. But reliability is just as valued. Facebook has 600 million users – they will find any weakness in any new technology introduced. For a company like Facebook, there’s no one for its developers to look to as an example for how to do things. Also, rolling out new technology to thousands of servers is a non-trivial matter.
However, Facebook is using Node for a few things. One is JSGameBench, an HTML5 game benchmarker. Another is a mobile JS framework that has yet to be announced, but will probably be open-sourced. But the bulk of the Node.js work is being done by the Chat team for traffic analysis and load testing.
So how do you “cross the chasm” with an experimental technology like Node? Kieffer suggests an internal group, like the one he runs at Facebook. You can coordinate with other believers and get speakers to come in and enlighten others. You should also embrace your critics, he says, because they will point out problems with your ideas and keep you from screwing up early on. Finally, consider starting by applying Node.js to non-critical applications.
(Lead image by Massimo Barbieri)