(against the consensus) I emphasize self-documenting code (public though private). This can be tremendously effective, you will need to formally document much less. Some people really dislike this (sometimes for good reasons). Since you're mentioning private implementation, your constraints to rename and modify over time are far fewer. An interface with a handful of special cases is a recipe for failure (yet they are still produced).
Documentation: If it is going to consume the majority of the header, it had better be meaningful.
I have a habit of zapping bad/meaningless documentation because, like the interface, none is better than bad. hehe