When writing code, you should comment it regularly, particularly functions and any lines whose meaning isn't obvious. That way your code can be understood later on and doesn't become write-only.
Correct, and if you're starting a project from scratch, then you can establish good requirements by identifying the problem and determining constraints and actions a user might take.