type
area
size
Write code to respond to external events, such as from an existing framework
high level modules should not depend on low level modules; both should depend on abstractions.
Methods and classes should explicitly require any collaborating objects they need in order to function correctly
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
Try to delete the feature or process to build things that are required.
Requirements belong to individuals, not teams
Make the hidden principles, ideas and behaviors which make up a technology organization understood and explicit
Core logic that is related to solving a business or domain problem should exist outside of a framework.