YAGNIとは
あるWebアプリのプロトタイプを採用した開発で、一覧画面に複数選択による一括削除やインライン編集機能を実装する場面がありました。これらの機能はどうせ後から要望されるだろうと考え、現段階の要件には含まれていなかったものの、時間があったこともあり、先に隠し機能として実装しておくことにしました。
後日、社内で「まだそんな要望も出ていないのに、なぜ先に実装しているのか、必要はないと思う」という指摘を受けました。私はあんまり納得がいかずそこで、自分の行動が適切だったのか、こんなことよくあるだろうなと調べてみると、ソフトウェア開発には「YAGNI」という原則があることをそこで知りました。
YAGNIとは、「You Aren't Gonna Need It(それは必要にならないだろう)」の略語で、将来的に必要になるかもしれないという理由だけで機能を実装するのを避けるべきという、アジャイル開発で重要な設計原則のひとつです。この原則は「無駄な作業や複雑さを排除し、変化に強いコードを維持する」ために有効とされています。
実際に機能は必要になった
ただ、実際には、私が先に実装していたこれらの機能は、後に本当に要望が出されました。結果として、「無駄だった」とは一概には言えず、むしろ対応が早く済んだことで、プロジェクトの進行がスムーズになった部分もありました。そのため、YAGNIの原則を学びつつも、今回のケースでは必ずしも無駄なリソースだったとは感じていません。(反省していない)
ただ、この経験から定義するなら、現実化する可能性が非常に高い近未来のことは考慮し先に進めるべきだと感じました。ファイル管理機能にせっかくなんでOCR付けときました!はYAGNIなことくらいはわかりますが
YAGNIという考え方があることを頭に入れておきたいと思います。
自分なりのYAGNIへの付き合い方
YAGNIを絶対的なルールとしてではなく、コストに見合うかどうかを判断するための線引きとして活用するのが現実的だと考えるようになりました。
・仕様が不確実な機能 → 実装しない(YAGNI)
・90%の確率で実装必須になると分かっているもの → チームの合意(これが大事)の上で先に組み込む余地あり