The first step toward building reactive systems is to adopt asynchronous programming. Traditional programming models based on blocking I/O do not scale as well as those that use non-blocking I/O. Serving more requests with fewer resources is very appealing, so where’s the catch? There is indeed a little problem: asynchronous programming is a non-trivial paradigm shift if you have never been exposed to it!