This chapter attempts to explain how one finds an algorithm for a particular problem. Unfortunately, there is no simple answer to this question, and it’s utterly impossible to provide a “cookbook” that would allow one to advance with confidence from one problem to the next. Even today software engineering does not have the kind of well-defined design rules that are a given in more mature engineering sciences. Instead, there are various codes of procedure that support designers in their work and are meant to increase the probability that the resulting programs will fulfil particular quality criteria, such as correctness and readability. Section 2.4 provides more information.