First, and most important: A professional software developer should always leave a module a little cleaner than you found it so that it becomes easier to change over time, not harder. Suitable automated tests can allow you to not be afraid to change the code and continually changing it makes sure it stays that way.
- No dead code (just remove it - git keeps track of it; there can be dead code the compiler does not recognize mostyl because of conditions never evaluating to true)
- Obvious behaviour is implemented (a class or function should implement what the name of the class or functions says, nothing more, nothing less)
- No safeties are overriden (don't disable compiler warnings, don't comment out not working tests - fix them!)
- No code duplications (every duplication represents a missed opportunity for abstraction)
- Vertical Separation (variables and functions should be defined close to there they are used; local vars just declared where they are used first; prive func