With the advancing digitisation of society and industry we observe a progressing blending of computational, physical, and social processes. The trustworthiness and sustainability of these systems will be vital for our society. However, engineering modern computing systems is complex as they have to: i) operate in uncertain and continuously changing environments, ii) deal with huge amounts of data, and iii) require seamless interaction with human operators. To that end, we argue that both systems and the way we engineer them must become smarter. With smarter we mean that systems and engineering processes adapt and evolve themselves through a perpetual process that continuously improves their capabilities and utility to deal with the uncertainties and amounts of data they face. We highlight key engineering areas: cyber-physical systems, self-adaptation, data-driven technologies, and visual analytics, and outline key challenges in each of them. From this, we propose a research agenda for the years to come.