In my experience 90% of comments are unnecessary. But, on
the other hand, 90% of the comments that should
exist, are missing.
Yes, code should be 'self-documenting', but comments should explain why you're doing what you're doing.
It's no use being able to understand your regex or complex data structures etc if I can't work out why on earth you're doing things this way in the first place.
Of course, to bring this back to the initial point, if you break everything down into simple, short, self-contained functions that do only one thing, and are well
named, then it's going to be quite evident what they do,
and POD will mostly be sufficient :)