https://williamdurand.fr/2013/06/03/object-calisthenics Only One Level Of Indentation Per Method extract method Don’t Use The ELSE Keyword early return variable for return polymorphism Pattern: null object Pattern: state Pattern: strategy Wrap All Primitives And Strings First Class Collections Any class that contains a collection should contain no other member variables One Dot Per Line you should not chain method calls except method chaining (eg. builders) only talk to your immediate friends Don’t Abbreviate Keep All Entities Small 10 files/package 50 lines/class No Classes With More Than Two Instance Variables No Getters/Setters/Properties Tell, don't ask It is okay to use accessors to get the state of an object, as long as you don’t use the result to make decisions outside the object. Any decisions based entirely upon the state of one object should be made inside the object itself.