アイスティー大好き_組み込みエンジニア

買ったものや読書のアウトプット、仕事のこと

ソフトウェア開発でヤグニの法則(YAGNIの法則)を実感した事例 アジャイル開発では気をつけるべき

You ain't gonna need it(あなたはきっとそれを必要とならない)

略してYAGNI

ソフトウェア業界で使われる教訓めいた言葉ですね。

これをもろに仕事で実感するできごとがありました。

 

僕は新製品開発プロジェクトで組込ソフトウェア開発の設計リーダーをしています。

本当なら今年の4月に新製品をリリースするはずだったのですが、いろいろあってGWに突入した今もリリースできていません(笑)

皆さんの中にはGW10連休の方もいらっしゃいますかね?

 

 

扱いずらい上司の管理

僕は新製品本体の担当なのですが、製品のオプション機能を担当している人は一応僕の上司(?)です。

 

なので製品全体の組み込みソフトウェアのリーダーは僕だが、

その製品の一部であるオプションを担当しているのは僕の上司なので、上司の進捗を僕が管理するというよくわからない状況になっています。

仮にその人をNさんとします。

 

  • 僕:製品本体の設計リーダー
  • Nさん:オプション機能の設計リーダー

 

ちなみにNさん自体は自分で作業しません。

作業者は他にいて、自分は方針をちょっと考えるだけであとは丸投げです。

いつものパターンですがNさんの検討は穴だらけで後からいろいろ不測の事態が起こることが多いです・・・。

 

機能拡張の方針をどうする

さて、今年の2月ごろに営業部門からオプションの機能拡張を求められました。

「Xという機能を追加してほしい」

Xという機能を実現するための方法はいくつか考えられました。

僕はその中でも、工数がかからず一番実現しやすい方法がいいだろうと考えました。

プロジェクトは常に工数不足で、納期に追われる環境だったからです。

さらに想定外のトラブルにいつ見舞われるかわかりません。

節約できる工数はいつでも節約するべきと思っています。

 

Nさんの考えは違いました。

Xという機能は将来的に、さらにYという機能拡張をする可能性があると考えられていました。

将来的にYを実現するためには、かなり複雑な方法を検討する必要がありました。

Nさんはどうやら機能Yまで検討したいようでした。

 

しかしYまで視野に入れると単純に設計、実装が難しいというだけでなく、実際にユーザが使用するときの手順が複雑になる可能性がありました。

そこでミーティングが開かれ、「どういう方法で実現する?」というのが話し合われました。

 

ミーティング前の根回し不発・・・

僕やNさんの分野は組込ソフトウェアですが、PC側のアプリの作成も関わる機能だったのでアプリ開発チームも交えてのミーティングでした。

このミーティングの開催を踏まえて僕は営業部門の責任者と製品開発のプロジェクトマネージャーに方針を相談していました。

僕「Xという機能を実現したいといことですが、今のところYという機能については必要ないということでよろしいですか?

Xのみを実現するということであれば工数は2週間/人くらいです。Yも実現するとなるとその倍の工数はかかります。また、ユーザビリティが悪くなる可能性があります。」

 

この話を聞いた営業さんとプロマネさんは、

「じゃあXだけでいいね。いまのところYは必要ないし」

と言ってくれました。

僕もこの方針に大賛成でした。

将来必要になるかわからないYのために多くの工数を割くのは、この忙しい時にはばかげています。

これで一安心かと思ったけど・・・

 

ではその後の設計方針のミーティングがどうなったかというと・・・

 

Nさん「将来的なことを考えればYも視野に入れた設計にしたほうがいいだろう」

アプリ開発の人「そうだね、アプリ側はもともとそれを考慮して作っていたところですし(ドヤ」

Nさん「よし、じゃあそれでいこう」

 

僕が事前に根回ししたことは水の泡となりました。

「Yまで考えて設計する」という意見が圧倒的だったのです。

みんな深読みしすぎ!

どこにそんな工数があるの!?

(あなたたちは考えるだけで自分で設計、実装しないからそんなのんきなこと言えるんでしょ)

と思いましたが、口には出せませんでした。

もしかしたらNさんは、僕が事前にプロマネとかと相談して方針を決めようとしていたのが気に食わなかったのかもしれません。

それによって僕は良かれと思って工数が少ないほうにしようと思ったのに、意固地にさらなる(頼まれてもいない)機能拡張を視野に入れた方針をとったのかもしれません。

・・・これこそ深読みか?(笑)

 

深読みのし過ぎはよくないです

結果はどうなったか

それから3か月が経過。

そろそろ機能Xの納期が近づいてきました。

どうなったかというと・・・

まだ機能実装が完了していません!

オプション機能開発の作業者に、割り込み業務がたくさん入ったせいで、機能Xの着手が遅れたのです。

しかもXの仕様検討が甘く、設計を進める中でいくつも仕様変更を余儀なくされたのです。(手戻り)

 

さらに、どたんばでアプリ側に仕様変更を要求する必要が出てきたりなど、てんやわんやといった感じです。

ケンカも起きています(笑)

 

プロマネからは

「今どういう状況?GW明けまでに完成するの?」

と進捗を催促されています。

この期に及んで

「機能Yまで考慮した結果、工数不足で間に合いませんでした」

なんて言えません。

これによってのGW10連休の夢は潰えました(笑)

今週後半は会社に行って、機能Xのほうの開発を手伝いします。

 

それで果たして完成するのか・・・?

しかも機能が一応完成したとして、Yまで考慮したためユーザビリティ面がかなりボロボロです。

営業に機能を見せたところでNGを食らうのが目に見えるようです・・・。

 

おわりに

以上、必要ない機能まで深読みして作ろうとした結果、本来求められている機能まで間に合わなくなるという超絶おまぬけな事態についての愚痴でした。

 

上司が相手とはいえ方針についてはもっと強く言うべきだった・・・。

3か月の猶予があればさすがに大丈夫だろうと思ったのがいけなかった・・・。

 

YAGNI

今後の教訓として胸に深く刻み込みました。