2 best practices of API design confilct each other, and how to find out the solution - http://martinfowler.com/bliki/ExpressionBuilder.html What exactly simple mean? http://typo.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand . In my opinions, a more concrete interpretation of simple is first define what is most important to you, then find the quickest way to get there. Iceberg Classes, if encapsulation is good, how about having more private method? Or actually the logic should be split? - http://www.artima.com/weblogs/viewpost.jsp?thread=125574