YAGNI Ain't What You Think It Is

In the software development vernacular the term YAGNI is often used as a device to put down attempts at prematurely adding functionality - things which are only speculatively required. This makes sense given that is basically the definition that Ron Jeffries and our XP predecessors came up with so long ago.

Is that the whole story?

Stop sign In short, I don’t think so.

I’ve long believed there was more to YAGNI than what had been canonically defined and was commonly understood. But only recently was I able to put my finger on what was missing.

While listening to an episode of Industry Misinterpretations I heard Kent Beck make a subtle point about the need to make progress being more important than the completeness of the thing you’re building at the point you’re building it. Lending from Kent’s insight and mixing in my own experience, I realized YAGNI is not about delaying building things until you need them. Rather, it’s that gaining real experience in the problem domain, while making concrete progress, is more important than trying to achieve a complete solution right now.

Do you think it’s too early to update the Wikipedia article?