We live in interesting times - as individuals, as members of various communities and organisations, and as inhabitants of planet Earth, we face many challenges, ranging from climate change to resource limitations, from market risks and uncertainties to complex diseases. To some extent, these challenges arise from the complexity of the systems we are dealing with and of the problems that arise from understanding, modelling and controlling these systems. As computing scientists and IT professionals, we have much to contribute: solving complex problems by means of computer systems, software and algorithms is an important part of what our field is about. In this talk, I will focus on one particular type of complexity that has been of central interest to the evolutionary computation community, to artificial intelligence and far beyond, namely computational complexity, and in particular, NP-hardness. I will investigate the question to which extent NP-hard problems are as formidable as is often thought, and present an overview of several directions of research that aim to characterise and improve the behaviour of cutting-edge algorithms for solving NP-hard problems in a pragmatic, yet principled way. For prominent problems ranging from propositional satisfiability (SAT) to TSP and from AI planning to mixed integer programming (MIP), I will demonstrate how automated analysis and design techniques can be used to model and enhance the performance characteristics of cutting-edge solvers, sharing some surprising insights along the way.