Page 258 -
P. 258
9.2 Program evolution dynamics 241
Law Description
Continuing change A program that is used in a real-world environment must necessarily
change, or else become progressively less useful in that environment.
Increasing complexity As an evolving program changes, its structure tends to become more
complex. Extra resources must be devoted to preserving and simplifying
the structure.
Large program evolution Program evolution is a self-regulating process. System attributes such
as size, time between releases, and the number of reported errors is
approximately invariant for each system release.
Organizational stability Over a program’s lifetime, its rate of development is approximately constant
and independent of the resources devoted to system development.
Conservation of familiarity Over the lifetime of a system, the incremental change in each release is
approximately constant.
Continuing growth The functionality offered by systems has to continually increase to
maintain user satisfaction.
Declining quality The quality of systems will decline unless they are modified to reflect
changes in their operational environment.
Feedback system Evolution processes incorporate multiagent, multiloop feedback systems
and you have to treat them as feedback systems to achieve significant
product improvement.
The third law is, perhaps, the most interesting and the most contentious of
Figure 9.7 Lehman’s
laws Lehman’s laws. It suggests that large systems have a dynamic of their own that is
established at an early stage in the development process. This determines the gross
trends of the system maintenance process and limits the number of possible system
changes. Lehman and Belady suggest that this law is a consequence of structural fac-
tors that influence and constrain system change, and organizational factors that
affect the evolution process.
The structural factors that affect the third law come from the complexity of large
systems. As you change and extend a program, its structure tends to degrade. This is
true of all types of system (not just software) and it occurs because you are adapting
a structure intended for one purpose for a different purpose. This degradation, if
unchecked, makes it more and more difficult to make further changes to the pro-
gram. Making small changes reduces the extent of structural degradation and so
lessens the risks of causing serious system dependability problems. If you try and
make large changes, there is a high probability that these will introduce new faults.
These then inhibit further program changes.
The organizational factors that affect the third law reflect the fact that large sys-
tems are usually produced by large organizations. These companies have internal
bureaucracies that set the change budget for each system and control the decision-
making process. Companies have to make decisions on the risks and value of the