I document my code, but I also try to create classes that are inuitive representations of the object of what they do... a lot of the third party libraries I find are really difficult to figure out just because they try to find the cleverest way to do something instead of the most intuitive way to do it.