I am at QCon London now, and yesterday I went to Dan North’s workshop "Secrets of Agile Architecture". One of the good points he made was about overuse of YAGNI principle in agile development world. We frequently hear "you ain’t gonna need it" as an argument for not doing certain things. Dan warned against what he called "YAGNI fascism" and gave an example from aviation industry. Sometimes plane manufacturer orders the same type of component simultaneously from different manufacturers – for example, several manufacturers may be contracted to design plane wings. Not just compete to win the contract, but to actually fully design wings for a new plane. This sounds like a harsh violation of YAGNI principle – how many pairs of wings a plane needs? – but wings are so crucial part of a plane that it’s worth to compare design made by several independent teams that don’t communicate with each other, to reduce the chances of the overall best design having flaws.
This is a good example of why YAGNI principle should at least not be interpreted as “you ain’t gonna need it in production”. As you see, even the statement “you ain’t gonna need several production quality implementations” can be false. I also believe that YAGNI argument is too often used to oversimplify the situation, and therefore in many cases it’s better to go for more accurate and problem specific reasoning than just cut the discussion with “you ain’t gonna need it” remark.