- Correct: The code should operate correctly on all expected and unexpected results
- Efficient: In terms of time and space.
- Simple: if you can do 10 lines instead of 100.
- Readable: A different developer should be able to read.
- Maintainable: Code should be reasonably adaptable to changes during the life cycle of a product and should be easy to maintain by other developers