type
area
size
high level modules should not depend on low level modules; both should depend on abstractions.
Create a structured representation of the system's state
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
Always plan for a way to switch your work off
Software entities should be open for extension, but closed for modification.
Documentation, in all forms, should be as close as it can be to the code.
Data should be held in one location, duplicates of that data should be by reference only.