Using pure events works too (as does dnode and smith), but for large projects they tend to get hairy. Architect separates concerns into defined interfaces provided by configurable plugin instances. It keeps things clean and configurable.
I am trying to understand how this abstraction comes into play in day to day work as apps are put together.
Thanks again for your insightful reply