Another one of the causes to code rot
is time. A large program goes bad after time, small changes here, a bug patch there. What applications run flawlessly for a year? two years? ten years? No one writes perfect code, especially on the first try, so unless proper steps are taken to ensure the code is maintained, it begins to rot.
Good design, strong documentation, proper refactoring, unit tests, and a mind towards longevity fights out the inevitable claws of decay.