There are a lot of ways to communicate between components. When you need to find the target component. You can do this with GetComponent or FindObjectOfType or having a serialized field of the target type. How do you find your dependencies when writing a component? How do you send commands to the target component? When you want to send commands to multiple listeners, Do you use events or interfaces? If you are using events, Are you using Unity Events or C# native events? How do you manage event subscriptions and unsubscriptions? If your using interfaces, who is responsible for submitting the receiver class as a listener? Is receiver itself is responsible to submitting itself to the sender or sender finds all of its listeners?