Useful software is never a one shot development product. Rather over its lifetime new functions are added and it is adapted to new environments.
In the words of Lehman
's law: A system that is used will be changed
Such extensions and adaptations should be done with care.
Lehman's second laws states:
An evolving system increases its complexity, unless work is done to reduce it
is concerned with correcting existing defects and adding extensions,
while keeping complexity low.
Evolution of large systems requires a systematic approach to software understanding
since knowledge about the internals of a system evaporates over time.
- FEAST project (Feedback, Evolution And Software Technology) of Lehman