Software Philosophy, Design and Development
"There are no such things as personal computers; only
lots of impersonal ones."
(c) Paul Pangaro 1976.
Index to this page:
Expressing Purpose in Software
Our everyday conversation holds pleasure in the fact that when we speak
to someone, what we say to them depends on who they are. This includes what
they are asking right now, where they are, what we think they know. When
we are on the receiving end of such an interchange, we feel recognized and
connected. This makes our conversations personal and it also makes
them tremendously efficient.
What I mean by the quotation above, which has been an expression of mine
for nearly 20 years, is that commercial computer software simply does not
support the most basic feature of human conversation: that of speaking to
the individual. And it can, as the
systems we built throughout the 1980s attests. Of course in the 1990s
we will use the World Wide Web to create and disseminate theses systems,
and help solve the problem of information organization that plagues the
use of hyperlinks, that are both the power and the bane of Web interaction.
Expressing Purpose in Software
We commonly think of language as containing, in the sentences,
words and such, what we mean. This is not the case, however. Here is the
illustration I always use to explain my point: If I say to you, "May
I have a glass of water?", you inevitably will bring me water that
I can drink. I didn't say that I was going to drink it; you
assume so, and thereby can act on my request. Your ability to interpret
what I say depends on your knowledge of my purpose. Knowing
my purpose, you can interpret what I say correctly. If I don't state my
purpose, you must correctly infer it in order to understand me as I wish
to be understood. If you infer the wrong purpose, or misunderstand what
I need, you cannot understand what I am saying.
This is as true for interpreting statements as it is for questions; it is
as fundamental to understanding each other as anything.
The essence of my point is this: successful conversation includes purpose,
whether explicit or not. To incorporate a description of
purpose into our software user interfaces is both desirable and possible
(the required formalism has already been applied to organizational
modelling; I have also made presentations
on the idea). To actually do so would be revolutionary.
Software philosophy in general refers to the informing principles that guide
the conception and execution of software development. Cybernetics
can provide a philosophical foundation, that might be crudely expressed
in the phrase "coördination software." A more general characterization
would be to say that, our software philosophy is to provide a relationship
among participants, rather than an interaction between user
and machine. Examples of software that has been constructed with these values
Most research and development, whether commercial or academic, focuses first
on the immediate requirements of the user to manipulate the software. This
is a focus on conventional interaction. However the interest of
the user is never on this user-with-machine interaction for its own sake;
rather, it is a means to an end. Such a higher-level purpose is usefully
couched in terms of a relationship, whether between (a) the individual
and others - in the case of training, groupware and enterprise modelling;
or (b) between the individual and his or her self - in the case of design,
planning and decision making. Of course there need not be a hard distinction
between these two cases, because in practice they are symmetric: both involve
multiple perspectives that must be displayed and manipulated individually.
Through a series of projects, directly for clients or for internal software
development, PANGARO Incorporated has developed a systematic approach to
the software design process which identifies and structures the following
Note that prototyping and testing is a core component of software design,
not just software development.
- Product Definition via "Use Case" Scenarios
- Quantitative Competitive Market Analysis
- Design Goals Definition
- Prototype Design
- Prototype Development Strategy
- Rapid Prototype Development
- Testing and ReDesign
Of course the design process itself is circular, where the individual components
loop back onto each other in an iterative process.