I think good tests are the best documentation for developers, along with high level written material for design principles and how the code is organized, generally.
Then there's usage documentation, which I agree needs to be kept up to date as the functionality of the software changes over time.