In a very real sense, the software engineer creates models of physical situations in software. The mapping between the model and the reality being modeled has been called the intellectual distance between the problem and a computerized solution to the problem [ ]. A fundamental principle of software engineering is to design software products that minimize the intellectual distance between problem and solution; however, the variety of approaches to software development is limited only by the creativity and ingenuity of the programmer. Often it is not clear which approach will minimize the intellectual distance, and often different approaches will minimize different dimensions of the intellectual distance.