YAGNI (You ain’t gonna need it) (You aren’t going to need it) というのは、将来のためにあらかじめ入れておいた実装が、結局は使われないことを言っています。
オブジェクト指向設計が登場した頃は、継承やポリモーフィズムといった仕組みを活かして、汎用的な設計をすることを美とする傾向がありました。 しかし、現在のソフトウェア開発では、短いサイクルでのリリースや、頻繁な仕様変更に対応しながら開発を進める必要があり、将来を予測して汎用的な実装を行っておくことは困難になってきています。
アジャイルな開発では、使うかどうか分からない機能や、無駄な汎用性を持たせた実装を行うことを良しとしません。 今必要な実装をシンプルに、確実に実装することに集中します。 シンプルで分かりやすい設計になっていれば、将来修正が必要になった場合でも比較的容易に変更を行うことができ、トータルのコストも少なくなるというわけです。