Software is written in a context, in order to solve problems. Over the time, the context is lost, original problems get dissolved (or they don't need solutions, anymore). Original team is not there any longer. New people join, the same old framework (assumptions, etc) is used to solve new problems. That's how complexity grows.
Read Peter Naur's "Programming as theory building" http://pages.cs.wisc.edu/~remzi/Naur.pdf