The context

In Drupal 8, rendering is not supposed to take place in the controller layer but only in the view/theme layer (so called "rendering layer"). This is so all cachability metadata is properly handled and propagated back to the Drupal Kernel, the HTTP response correctly populated with the right header, and the cached data invalided when it needs to be.

Alas, many module implementation (even in core) rely on rendering things to perform their actual business logic.