Abstract. A self-organising system functions without central control, and through contextual local interactions. Components achieve a simple task individually, but a complex collective behaviour emerges from their mutual interactions. Such a system modifies its structure and functionality to adapt to changes to requirements and to the environment based on previous experience. Nature provides examples of self-organisation, such as ants food foraging, molecules formation, or antibodies detection. Similarly, current software applications are driven by social interactions (negotiations, transactions), based on autonomous entities or agents, and run in highly dynamic environments. The issue of engineering applications, based on the principles of selforganisation to achieve robustness and adaptability, is gaining increasing interest in the software research community. The aim of this paper is to survey natural and artificial complex systems exhibiting emergent behaviour, and to outline the...