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.