A few random thoughts for you. The first is that maintainability is the result of an interaction between the programmer and the code.
The second is that while you're right on the pitfalls of comments, you didn't say enough about how well-chosen variable and function names can serve some of the same purposes that people use comments for, in a much more maintainable way. For instance flags should be yes/no questions that the value is the answer to. And hash lookups linguistically should be read "of", name your hashes so that they will read nicely when you do.