https://celery94.github.io/posts/lightweight-observer-chains/