Most real-world problems, in particular design problems, are ill-structured, but formal approaches to problem-solving in Al have only really made progress in developing techniques for solving well-structured problems. This chapter presents an approach to better understanding ill-structured problems and how to solve them computationally. The aim being to develop a general theory of design process which we believe is required in understanding how computer-based systems can have a greater and more effective role in the design process. The main issues discussed in this chapter are the different aspects of ill-structuredness in design problems, and the meaning of a 'solution' to an ill-structured problem. Some outlines for algorithms are proposed for dealing with these different kinds of ill-structuredness, and their combination in an ill-structured problem solving scheme is briefly discussed.