Core logic that is related to solving a business or domain problem should exist outside of a framework.
Build your infrastructure as something disposable that can be destroyed if it fails (cattle) rather than something precious that has to be looked after (pets)
Make relevant information visible so things can be clearly understood
Requirements belong to individuals, not teams
Try to delete the feature or process to build things that are required.
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.
Write code to respond to external events, such as from an existing framework