NodeSchool works via the command line. Each module has its own command line, but they all follow the same pattern. Running the command gives you a list of available lessons and shows you which lessons you've finished.
Selecting a lesson gives you a description of a problem you have to solve. These problems move from simple (sometimes so simple you aren't sure you're reading it right) to complex, but still solvable within approximately 30 minutes or so. Here is one example.
Once you have your task, you begin writing your code. When you're reading, you can then use the command line to both test and verify your code. What's cool is that - obviously - you can solve the problem anyway you want. As long as you output what is expected, you pass the task.
For the most part, the lessons have a great progression of complexity. I struggled with some more than others. I'm especially weak when it comes to streams and I love the fact that an entire set of lessons were dedicated to them. I still don't feel entirely comfortable with them, but I'm not quite as scared as I used to be. Even better, I have a set of examples handy that I wrote myself and will be something I can reference later.
I will point out that I did run into one task that was unsolvable. The nodeschool folks use GitHub for their code so you can file an issue (or look for one) if you run into problems. You can also - if you want - see the source for solutions if you get truly stuck. I promise I never did that. Honest.