Complexity of near future and even nowadays applications is exponentially increasing. In order to tackle the design of such complex systems, being able to engineer self-organising systems is a promising approach providing the needed robustness and adaptation. This paper proposes to focus on engineering systems generating emergent functionalities. We will rst dene two important concepts to take into account in such a context: Emergence and Self-Organisation. We will explain why and how they are relevant for engineering such systems. Building on these two concepts, we will highlight three main challenges researchers have to cope with: (i) how to control the system at the macro level by only focusing on the design of agents at the micro level, (ii) what kind of tools, models and guides are needed to develop such systems in order to help designers and (iii) how validation of such systems can be achieved? Each of these three challenges will be explained and positioned in regard to the mai...