Designing the systems
With the data side of this paradigm being accounted for, the last remaining component remains to be the system. As the name loosely implies, systems are responsible for handling all of the logic that takes place inside and between components. Things ranging from sprites being rendered to collision checks are all handled by their own, respective systems to ensure complete separation between non-overlapping parts of the game. At least, that's how it should play out in an ideal world. In reality, as hard as one tries to decouple and categorize logic or data, some things still remain loosely connected, which is just the nature of the beast. Information still has to be traded between systems, however. Certain functionality also needs to be invoked as a consequence of a totally unrelated system's actions. To put it simply, there needs to be a way for systems to talk to each other without them knowing anything about how the other one works.
Entity events
A fairly simplistic...