It's very easy to get into callback hell in Node if the programmer needs to block the process and chooses not to use Node's sync
methods (or its promise methods).
Since Node is made to deal with lots of streamed data, and since these streams have an unknown size and can take an unknown amount of time to complete, much of Node's functionality is built with callbacks to block parts of the process.
Even just simulating an arbitrary and minimal example of this, it's clear how obnoxiously complicated this can get.
function callFirst(cb) {