Heathens versus Infidels
The "callback hell"
As most Node.js developers should know, due to it's event-based nature, it's rather difficult to do sequential stuff in Node.js. In my opinion, this is maybe the greatest weakness and in the same time the greatest strength of Node.js. Strength, because, if you know your stuff, it lays the foundation to handle an incredible amount of concurrent connections, maybe an order of magnitude larger than what you'd get with PHP, .NET or RoR. Weakness, because most people are rightfully put off by something that looks like this:
Each background operation returns its result (or error) in a callback. The good part is that your application server is not locked on waiting for that background task to complete, but free to do other stuff meanwhile. Like serving another request, to keep your website or application snappy and your visitors happy. The bad part is that if you're having lots of background operations (like accessing any kind of data source) your code begins to look ugly and incomprehensible.
The good news is there are lots of elegant ways to mitigate this: Async.js is probably the best known, but if you're using CoffeeScript you should definitely consider going a step further to "simply and powerfully streamline your asynchronous control flow" with IcedCoffeeScript.
I haven't given it much thought when I first approached Node.js a while ago, but now, after using it in a few projects, I can't really imagine coding without
defer. I find it to be the ideal solution for the most common usage scenario, when you have either a number of sequential operations or a combination of sequential / parallel tasks: