On the Notion of Software Engineering:
A Problem Solving Perspective
Bedir Tekinerdogan & Mehmet Aksit
Department of Computer Science
University of Twente
P.O. Box 217 7500 AE Enschede, The Netherlands
Abstract-- Despite of extensive efforts, software projects have to cope with the recurring problems of the software
crisis. We argue that the software crisis problem is more deeply rooted than it is generally perceived and that the
problem is in the first place conceptual rather than technical. This implies that software engineering as it is currently
perceived and applied may lack some fundamental concepts that are necessary to produce software systems cost-
effectively. This paper presents a broad and general view of software engineering in order to grasp its essence and
identify the concepts that are necessary but are not well-defined or even missing. It has been shown that software
engineering, mature engineering disciplines and philosophy all aim at solving problems in their own context. By using
a common problem solving model, an in-depth comparative analysis of software engineering with mature engineering
and philosophy is provided. This comparative analysis helps us to identify a number of issues of current software
Index terms--foundations of software engineering, problem-solving, philosophy, mature engineering,
Advances in programming languages enabled the shift in focus from programming-in-the-small to
programming-in-the-large. When software projects attempted to build large and complex software
systems, they were confronted with software delivered over budget, late and with low quality. People
soon realized that building large-scale complex software systems was fundamentally different from
programming small systems. The term software crisis was invented at the NATO conference on
Software Engineering in 1968 to characterize this software problem. More and more software has
been written ever since the first program and this trend is ongoing. Today, most scientific and
technological projects involve software, whether they are academic or industrial. Most of these
projects, though, have still to cope with the large complexities of software development and fail to
completely fulfill the promises of providing reliable, adaptable and easily maintainable software
[Neumann 95][Gibbs 94].
We argue that the software crisis problem is more deeply rooted than it is generally perceived and
that the problem is in the first place conceptual rather than technical. This implies that software
engineering as it is currently perceived and applied may lack some fundamental concepts that are
necessary to produce software systems cost-effectively. To improve the maturity level of software
engineering it is required that the necessary concepts are identified and integrated in the software
A problem cannot be solved at the same level as it was initiated. To grasp the missing concepts a
broad and general view of software engineering is needed. Abstracting from software engineering we
can firstly identify that it is a specialization of engineering. If we consider the various definitions and
attributed meanings of engineering in various engineering literatures, it follows that engineering is in
essence a problem solving process in which an engineering solution is sought for a given problem
[Ertas & Jones 96][Ghezzi et al. 91][Wilcox et al. 90] [Shaw 90][Cross 89]. In software engineering, for
example, the problem is stated by the requirement specification and the software engineer needs to
provide a software solution. From the many studies on problem solving we can derive that problem
solving is not particular to engineering but is generally applied [Hunt 94][Smith & Browne
93][Rubinstein & Pfeiffer 80][Newell & Simon 76]. A fundamental discipline that applies problem
solving is philosophy. The primary goal of philosophy is to understand the nature of things and as
such attempts to identify and describe essential concepts [Kolenda 74]. Engineering disciplines are
intrinsically related to philosophy because many engineering concepts are derived from philosophy.
From the above we deduce that for a thorough understanding of software engineering it is required
that we understand the essence of problem solving and engineering and comprehend the related
fundamental philosophical concepts.
The novelty of this paper is that it presents a broad and general view of software engineering in order
to grasp its essence and identify the concepts that are necessary but are not well-defined or even
missing. For this, an in depth comparative analysis of software engineering with mature engineering
and philosophy is provided based on problem solving concepts. Because of the adopted broad view,
in addition to the software engineers, the paper may be of value for engineers of other disciplines and
philosophers as well. Engineers of other disciplines may identify the explicit concepts of engineering
and analyze, position and validate their own corresponding engineering discipline. Philosophers may
identify the relation between engineering, science and philosophy and further reflect on this matter.
The outline of this paper is presented in Figure 1.
A Conceptual Model for Problem Solving
Historical Perspective of Problem Solving
Project Perspective of Problem Solving
Section 5/ 6
Related Work, Conclusions & Evaluations
Figure 1. The outline of the paper
In section 2 a conceptual model for problem solving is presented. The model defines the fundamental
concepts of problem solving and as such allows to explicitly reason about these. The model is very
scaleable and it can be applied both for explaining the historical evolution of a discipline and for
describing a particular project, that is, a plan that need to be executed within a given period of time.
The historical perspective will be described in 3, the project perspective in section 4. These sections
can be studied rather independently from each other.
In section 3 we will use the problem solving model to describe the history of philosophy, mature
engineering and software engineering. Mature engineering disciplines and philosophy have a
relatively longer history than software engineering in which the various problem solving concepts
have evolved and matured over time. Studying the history of these disciplines will justify the
problem solving model and allow to derive the concepts of value for current software engineering
practices. A historical overview of software engineering is necessary to understand the evolution and
the state of the art of software engineering and as such identify and validate the software engineering
concepts with respect to the problem solving concepts.
In section 4 we will analyze problem solving in mature engineering and software engineering from
project perspective. For this purpose, we will propose a conceptual model for engineering that is
derived from the previous problem solving model. This model will be used to identify the basic
concepts of contemporary mature engineering disciplines, which may provide useful lessons for
current software engineering practices. Section 4.1 will describe mature engineering from a project
perspective. In section 4.2, we will analyze software engineering from a project perspective to
understand the current software engineering processes and consequently compare these with the
mature engineering practices. The comparative analysis will be based on the conceptual model of
engineering. From this comparison study we will derive the deficiencies of the current software
engineering paradigm. This will enable us to describe the gap between pre-mature software
engineering and mature software engineering.
In section 5 we will discuss the related work on problem solving and comparative analysis studies.
Finally, in section 6 we will give the evaluations and conclusions that include the fundamental
conceptual problems of software engineering. Based on the comparative analysis we will present the
necessary requirements to solve these problems.
2. A Conceptual Model for Problem Solving
2.1 The CPC Model
In this section we propose a conceptual model of problem solving, which is illustrated in Figure 2.
The model consists of a set of concepts and functions, which are represented by means of, rounded
rectangles and directed arrows, respectively. Concepts are the necessary fundamental abstractions
and the functions are the conceptual processes that describe the interactions between these concepts.
This is a controlled problem solving process, which takes place in a certain context. Therefore, we
term this model as the Controlled Problem Solving in Context model, or the CPC model for short.
Based on this assumption the model consists of three parts: Problem Solving, Control and Context.
Below, we will explain these parts in more detail.
Figure 2. The Controlled Problem solving in Context Model (CPC Model)
2.1.1 Problem Solving
The problem-solving part consists of 5 concepts: Need, Problem Description, Solution Domain Knowledge,
Solution Description and Artifact.
The function Input represents the cause of a need.
The concept Need represents an unsatisfied situation existing in the context.
The concept Problem Description represents the description of the problem.
The function Conceive is the process of understanding what the need is and expressing it in terms of
the concept Problem Description.
The concept Solution Domain Knowledge represents the background information that is used to solve
The function Search represents the process of finding the relevant background information that
corresponds to the problem.
The concept Solution Description represents a feasible solution for the given problem.
The function Apply requires two inputs, Problem Description and Solution Domain Knowledge. It uses
the relevant background information to provide a solution description that conforms to the problem
The concept Artifact represents the solution for the given need.
The function Implement maps the solution description to an artifact.
The function Output represents the delivery and impact of the concept Artifact to the context.
The function Initiate represents the cause of a new need as a result of the produced artifact.
Problem solving in engineering starts with the need and the goal is to arrive at an artifact by applying
a sequence of actions. Since this may be a complex process it is sometimes necessary to be controlled
and improved. Therefore, we think that the concepts and functions of the controlling process must be
modeled as well. A control system consists of a controlled system and a controller [Foerster 79]. The
controller observes variables from the controlled system, evaluates this against the criteria and
constraints, produces the difference, and performs some control actions to meet the criteria1. In our
model we suggest that the control part consists of three concepts: Representation of Concern, Criteria
The function Interpret represents the process of retrieving information from the concept or function
that needs to be controlled.
The concept Representation of Concern represents a description of the concept or function that is
The concept Criteria represents the relevant criteria that need to be met for the given concept or
The function Evaluate computes the difference between the actual state of the concept or function and
the desired state of the concept or function. It provides the difference to the concept Adapter.
The concept Adapter represents the information for finding the necessary actions to meet the criteria.
The function Improve performs the required actions to meet the criteria.
The functions Interpret and Improve represent the link between Problem Solving and Control and can be
in principle linked to any concept or function. This is to say that control may be applied to any
concept or function of problem solving.
1 This confirms to the view of cybernetics, which emphasizes mechanisms that allow complex systems to
maintain, adapt, and self-organize [Umplebey 90].
Both the control and the problem solving activities take place in a particular context, which is
represented by the outer rounded rectangle in Figure 2. Context can be expressed as the environment
in which engineering takes place including a broad set of external constraints, that influence the final
solution and the approach to the solution. Constraints are the rules, requirements, relations,
conventions, and principles that define the context of engineering [Newell & Simon 76], that is,
anything, which limits the final solution. Since constraints rule out alternative design solutions they
direct engineers action to what is doable and feasible.
The context also defines the need, which is illustrated in Figure 2 by a directed arrow from the context
to the need concept. Apparently, the context may be very wide and include different aspects like the
engineer’s experience and profession, culture, history, and environment [Smith & Browne 93].
2.2 Purpose of the CPC Model
This CPC model serves as a basis for the whole paper. The purpose of this model is as follows:
First, we would like to gain a general understanding of problem solving. The CPC model defines the
fundamental concerns of problem solving and abstracts from problem solving processes in
philosophy and engineering. In this way we aim to better understand and describe each concept
individually. For example, we may describe the concept of Need for different engineering disciplines
like mechanical engineering, electrical engineering and software engineering in a more general way.
Second, we would like to understand the process of problem solving. Each problem solving process
follows a common functional pattern, which has been made explicit by the CPC model. This allows us
to describe the functions individually. For example, we may describe the function Conceive in the
conceptual model from distinct engineering perspectives.
Third, since each engineering discipline can be considered as an instantiation of the CPC model we
can use it to analyze mature engineering disciplines and compare these with the more immature
software engineering discipline. This comparative analysis may help us to identify the missing
concepts/processes of software engineering.
Fourth, we intend to evaluate current software practices using this model. Since we are able to discuss
about individual concepts and functions in the model, we may use the conceptual model for
engineering as a reference model to analyze and describe the different software engineering practices.
For example, we will consider the object-oriented software development paradigm with respect to
Fifth, the comparison and evaluation of software engineering may provide us opportunities to
identify the fundamental problems of software engineering and its practices. The problems of
software engineering may be detected if the model can not be clearly represented in practices.
The following sections are structured around the above purposes of the model. Section 3 will mainly
address the first two issues, that is, understanding the problem solving concepts and functions.
Section 4 will discuss the third and the fourth issues, that is, comparing software engineering
practices with the mature engineering practices and the evaluation of the different software
engineering practices. Finally, section 5 will address the last issue, that is, the conclusions and
3. Historical Perspective of Problem Solving
We aim to gain a broad understanding of the concepts adopted in engineering and improve our
consciousness about it. To this aim we will present the historical perspective of problem solving that
will provide a survey of the evolution of the problem solving concepts in history. The motivation for
this is that from history we can observe the reason and the process in which way the concepts in a
field has been developed and matured. As a matter of fact, a reflection on the experiences and
knowledge in the past will also increase our consciousness about problem solving.
Although problem solving is a general process that is applied in a wide range of disciplines we need
to select the relevant disciplines that are somehow related to software engineering. In this paper we
have chosen to study the historical perspective of problem solving in philosophy, mature engineering
and software engineering.
In section 3.1 we will present an overview of the history of problem solving in philosophy.
Philosophy is the rational and critical study of concepts for the purpose of arranging concepts into a
unified system and to improve the consciousness about these concepts. The history of philosophy
extends over a period of more than two thousand years. Studying the history of philosophy may
accordingly provide us a deeper understanding of the concepts of problem solving. In addition we
may identify fundamental concepts in philosophy that may be of value or necessary to be included in
the software engineering field.
In section 3.2 we will present an overview of the history of problem solving in mature engineering
including mechanical engineering, electrical engineering, chemical engineering and civil engineering.
As we described before, engineering is in essence a problem solving process. Problem solving in
mature engineering disciplines have developed and matured over a period that ranges from several
centuries to several thousands years. Like in the case of philosophy, studying the problem solving
approaches of these mature engineering disciplines is therefore useful to identify how the concepts of
the CPC model have developed over time. In addition since software engineering is a specialization of
engineering the history of mature engineering may contain valuable lessons to software engineering.
Finally, in section 3.3 we will describe the history of problem solving in software engineering. The
history of software engineering is relatively short and ranges only about a few decades. The history of
software engineering may show how the concepts in the CPC model have evolved for it and as such
allow to identify its current maturity level.
3.1 Historical Perspective of Problem Solving in Philosophy
In the following we will explain the CPC model from the history of philosophy [Melchert 95][Kolenda
74] and likewise attempt to clarify the corresponding concepts and functions. For this reason, where
appropriate we will refer to the concepts and functions of the CPC model between parenthesis.
3.1.1 From Mythology to Rational Problem Solving
It is generally agreed that Western philosophy started in the ancient Greek in the 6th century BC when
early democracy was established and the economy and culture flourished, leaving room for a critical
thought on the nature of things (Context) [Melchert 95]. Unsatisfied with the existing mythological
explanations2 the first philosophers sought for more rational answers to their basic questions on the
natural phenomena (Input). Their basic concern was to find the essence, a primary substance, from
which all things are originated (Problem Description). Their professions were often astronomer,
mathematician and physician (Solution Domain Knowledge)3. They approached this problem by
adhering to direct observations of the nature and critical thought (Apply). This system of thought in
which the mythical explanations were abandoned can be considered as a first step towards scientific
thought. The question on the primary substance was answered in various ways (Solution Description).
For some of the philosophers the primary substance was a directly observable element in the nature.
Thales thought that this basic element was water; Anaximenes, argued that this was air; Heraclitus
believed that this was fire; Empedocles maintained that all things are composed of four elements: air,
water, earth, and fire. Other philosophers attributed this primary substance to more abstract
elements. For example, Anaximander maintained that this irreducable substance is the indeterminate
apeiron. Pythagoras, concluded that the number is the essence of reality. Democritus believed that
nature was constituted of an infinite number of atoms, invisible elements differing only in form,
weight and size. All of these philosophies4 took for granted that objective truth existed that could be
discovered through a critical exchange of ideas by a community of thinkers.
From the above we have shown that the early history of philosophy conforms to the problem solving
concept as defined in the CPC model. The control concepts can be explained in the following way. In
2 Homer’s book "Iliad and the Odyssey", provides two major epics of ancient Greek on the many Gods to which
the cause of various natural phenomena were attributed.
3 The term “philosopher” was only later introduced by Heraclitus
4 The original writings of the early philosophers no longer exist, but have been articulated in the works of
general, the philosophers reflected (Interpret, Representation of Concern) on the problem solving process
of the philosophical treatments and attempted to improve this. What is reflected on, how it is
reflected on, and in what way the process and/or functions are accordingly changed depends on the
person who is attempting to interpret and improve the problem solving process. In the above context
each philosopher commented on the writings (Artifact) of contemporary philosophers and tried to
improve this with new theories. Many of these philosophers were also disciplines of earlier
philosophers. Each philosopher had its own specific belief and value system (Criteria). Their
evaluation (Evaluate) of the existing philosophical treatments therefore resulted in different proposals
(Adapter) and extended the available knowledge (Improve).
It appears that this process of controlled problem solving within a context is applicable for the rest of
the history of philosophy. In the following we will describe the control concept only for radical
improvements of the philosophical problem solving process.
3.1.2 From Subjectivity to Conceptualization of Object ive Knowledge
The treatments of the first philosophers were rationally based but their explanations were still
speculations since the scientific justification by experimentation was lacking. In addition, there were
many theories describing the natural phenomena each on their own different way, that is, there was
not an objective view. This divergence of views was also observed in the moral life, when the Greek
got contact with other populations adopting different customs and value of morality and justice
(Context). These observations led (Initiate) the people to an inconvenience (Need) and determined the
basis for a crisis in Greek life at the end of the fifth century BC. A movement called Sophism realized
that this need was to be satisfied (Conceive, Problem Description). The Sophists5 were teachers of
various subjects like rhetoric, dialectic grammar and logic (Solution Domain Knowledge). The Sophists
reasoned that knowledge is essentially empirical and relative to man (Apply). According to the
Sophists, the principle of morality is just that what satisfies one’s instinct and passions, there is no
better way to live. Derived from the need to explain the right moral conduct, the writings of the
Sophists had their potential application in practical life (Output).
Socrates could not accept the view of the Sophists that objective truth does not exist and likewise an
objective basis for moral life is missing (Initiate, Need). Socrates argued (Search) that although the
knowledge of man is partial and not certain there should be ideas that are self-evident, necessary and
accepted by all men, that is, he introduced the notion of concept (Solution Description). He affirmed the
existence of concepts in the field of logic and morality. According to Socrates, perfect knowledge
consists in understanding through concepts and these concepts can be attained by critical thinking
5 One of the most famous sophists was Protagoras (485-410 B.C.), the author of the statement "Man is the measure
of all things".