I think unit testing is underrated in this area - no documentation can be better than some additional unit tests that show exactly how to use the code in the real world.
Even if it blends over a little into integration testing, the additional test work (and time to run tests) really pays off in terms of understanding and reusing an old project.
Even if it blends over a little into integration testing, the additional test work (and time to run tests) really pays off in terms of understanding and reusing an old project.