Why do nested function calls feel clean, but cascaded event propagation feel like Rube Goldberg machines? Beacause there are so many individual players? For nested calls, there is a single CPU. For communicating processes, there is just a lot more going on, and some intermediates could simply not be there. Is there a way to think differently about this?