1. Přístup k údajům vždy v rámci třídy zapouzdřete a poskytněte metody, pomocí nichž lze dané údaje získat.
2. Svá rozhraní navrhujte tak, aby je bylo možné později rozšířit. 
3. V metodách tříd nezapouzdřujte jen údaje, ale také algoritmy, díky čemuž budou komplexní operace implementované centrálně na jednom místě.
4. Znovupoužitelnost kódu je lepší než duplicitní kód.
5. Vyvarujte se monolitickým strukturám a rozložte je na co nejmenší části, které mohou být implementované nezávisle na sobě. Pokud používáte rozsáhlé příkazy if/elseif/else nebo switch, popřemýšlejte, zda by se nedaly nahradit zaměnitelnými třídami.
6. Dědění vede k neflexibilním strukturám. Na kombinaci různých funkcí používejte raději kompozice objektů.
7. Vždy programujte vůči rozhraní, a nikdy ne vůči konkrétní implementaci.
8. Vyhýbejte se těsným závislostem mezi jednotlivými třídami aplikace a vždy upřednostnujte volné vazby tříd.