Code should be formatted the same way and enforced automatically using tools.
Data should be held in one location, duplicates of that data should be by reference only.
Software entities should be open for extension, but closed for modification.
Make relevant information visible so things can be clearly understood
Always plan for a way to switch your work off
A simple solution is better than a complex one.
Every module, class or function in a computer program should have responsibility over a single part of that program's functionality, and it should encapsulate that part
Methods and classes should explicitly require any collaborating objects they need in order to function correctly
high level modules should not depend on low level modules; both should depend on abstractions.