Code Comment Best Practices: When and What to Write