I comment almost everything obsessively because I’m not a real programmer and its a way for me to add professionalism and make the stuff presentable when I inevitably have to ask someone to help me get it working.
I try to let my code be self-documenting (self-explonatory function/variable names etc) with little to no commenting as possible. I don't always achieve what I set out to accomplish though. I can revisit my code after a few months and my initial thought can be 'What?'. That's a big hint that I failed and it's time to add some comments.