A rather recent approach in programming parallel and distributed systems is that of coordination models and languages. Coordination programming enjoys a number of advantages such as the ability to express different software architectures and abstract interaction protocols, supporting multilinguality, reusability and programming-in-the-large, etc. However, most of the proposed models and languages are data-driven in the sense that changes in the behaviour of the formalism are triggered by detecting the presence and examining the nature of data values. In addition, more often than not, the formalism does not clearly separate the computation components from other related components, namely (and primarily) communication ones, but also synchronization components, etc. In this paper, we use a coordination model (IWIM) and language (MANIFOLD) which are control-driven in the sense that the formalism's change of behaviour is modelled as state transitions triggered by means of raising events and detecting their presence, i.e., without involving the actual data being manipulated. We illustrate the main features of this formalism and we show how it can be used in supporting a variety of activities related to distributed and parallel software engineering, and software architectures. Throughout, we place emphasis on the control-driven nature of this formalism, discussing how that has helped us in modelling a variety of scenarios. Finally, we also compare the formalism with other such formalisms highlighting the differences between them.