Describir: What every programmer should know about object-oriented design