My points to the question how to write readable code without comments:
Prefer small functions
Function names should tell what is done inside
Functions should do only what their names pretend they do. Think about to change their name if their behavior changes.
Include the requirements id and why in the version system. If why is important a comment is completely fine.