All things you mentioned are considered given, for someone that is an above average programmer.
Yet in large projects, with lots of people, with many interconnected modules, clear code and concise variable naming is not enough.
That's why we have documentation that describes the general architecture and comments for the
code parts that aren't so clear cut.
Some problems have many solutions, with different levels of advantages and disadvantages. To think that all people understand or know the solutions and the choices pertaining to them, is of course naive.
To think that you, as a person, would choose the same path at different instances of time, is just entertaining. You are not the same person you were last year, or even last month.
Thus, good comments along with clear and concise code is the only way to go.
Yet in large projects, with lots of people, with many interconnected modules, clear code and concise variable naming is not enough.
That's why we have documentation that describes the general architecture and comments for the code parts that aren't so clear cut.
Some problems have many solutions, with different levels of advantages and disadvantages. To think that all people understand or know the solutions and the choices pertaining to them, is of course naive.
To think that you, as a person, would choose the same path at different instances of time, is just entertaining. You are not the same person you were last year, or even last month.
Thus, good comments along with clear and concise code is the only way to go.