Insufficient developer knowledge is one of the reasons for code
decay. To understand a software system, developers must
understand the domain of the application, the architecture, the
algorithms, the data structures, the concept extensions in the code,
and so forth. If that knowledge is not available, the new code they
produce does not mesh with the old code and software changes
aggravate code decay. Even refactoring requires a thorough
knowledge of software and without it, it is no longer possible and
the system further decays. As the symptoms of decay proliferate,
the code becomes more and more complicated and the knowledge
that is necessary for further evolution actually increases. When the
gap between the knowledge of the team and the growing
complexity of software becomes too large, the software
evolvability is lost.