@cks That is not how software is done today. It is done as fast as possible and basically people have free choices to implement what they want as there isn't time to stop thinking or designing better. Most of the choices made are based invidual preferences rather than some research. Agile means today software anarchism; don't you dare to even think about waterfall or systematic approach.