- code, when executed, should do what is expected.
- code should be maintainable.
All the rest are just some ways to get there, but not must-haves.
One great way to get there is:
- discuss architecture, nomenclature and design choices. Document those.
- have your code and docs reviewed and discuss/rework accordingly.
The above in a rinse and repeat manner.