Cyber-physical systems represent the latest frontier of the ICT. They are meant provide control, interaction and communication over, with and among the physical and the cyber world. In practice they combine computing devices, interfaces, and networks with the environment to sense and provide feedback, implementing (more and more often) autonomous and intelligent interactions.Dealing with CPS development requires spanning over a plethora of heterogeneous topics, which makes the process of their definition, analysis and design a challenging task. Moreover, for a system to interact with the environment or humans implies to be capable of providing a certain degree of flexibility, which certainly aggravates the matter. Tools must allow a combination of physical or continuous dynamics and the cyber or computational components, as well as handle a large variety of changeable perturbations, such as change in requirements, time delays, and system failures.This lecture will try to provide a definition of what CPS systems are, going through their many views and the classical techniques and tools related to them. Some examples of systems are provided and their main design challenges are going to be introduced. Moreover, we are going to present different projects that are addressing CPS design, with a special focus on the CERBERO - Cross-layer modEl-based fRamework for multi-oBjective dEsign of Reconfigurable systems in unceRtain hybRid envirOnments H2020 project (http://www.cerbero-h2020.eu/).