Design space exploration is an important factor in embedded systems design. During several steps in a state-of-the-art design flow, designers have to decide between many design alternatives. The decisions are located at various levels of abstraction. In addition, the choices affect several design goals, the alternatives therefore represent a multi-criteria decision problem. Further, the space of possible solutions is normally very large, i.e., many design alternatives exist. As a consequence, exhaustive search of the design space is prohibitive, and more sophisticated techniques have to be used to find “good” solutions. To judge the quality of a new design, the performance of a system for a given application is one core criterion. Potential performance metrics are memory demand, response time, or data throughput of an application. As a consequence, one may ask the following questions: • How can we assess the performance of a new design for a certain application? • How do we find new design points in the design space? • How can we automate the design space exploration process? In this work,we investigate several aspects of design space exploration problems and try to answer these questions. In particular, we identify and discuss the building blocks for a design space exploration framework, namely design evaluation, search strategies, and design representation. Based on these building blocks, the main contributions of this work can be described as follows: • Anew hybrid method for performance evaluation of embedded systems is presented. The newmethod allows the combination of existing methods for performance analysis. In particular, these methods can be analytic or simulation-based. We provide the required interfaces for this combination. • We describe a new evolutionary multi-objective optimisation algorithm, that directly incorporates the user’s preferences based on performance indicators. It is easy to use and shows superior performance on test benchmarks and on design space exploration problems. • A novel software framework for design space exploration is presented. Using the framework we can re-use existing software blocks and need to implement only a few components that represent the specific problem.