SOLID
From Wikipedia

S: Single Responsibility principle

Every context(class, method, or variable) should only have one reponsibility. That responsibility should be entirely encapsulated by the context. (I always try to start with Single Responsibility in my code)

O: Open/closed principle

Context(class, method, or variable) should be open for extension (to be used by other context), but closed for modification(Don't change the value stored in the context). Very closely related to Interface

L: Liskov substitution principle

If S is a subtype of T, then objects of type T may be replaced with objects of type S. Used to decouple context. Lookup Polymorphism in Ruby for more info.

I: Interface segregation principle

No client should be forced to depend on methods it does not use. Public vs Private and where the methods should be placed(more abstract, resistant to change methods should be in private)

D: Dependency inversion(injection) principle

Decoupling modules/classes. i.e. if there are instances of a object inside another object in the class, try to remove it since the class will be coupled/dependent upon an outside class