要件定義

要件定義は誰がやるべき?→発注者ではなくシステム開発者がやるべき

  • このエントリーをはてなブックマークに追加

要件定義がなかなか進まず、そもそも誰が責任を持ってやるべきなのか悩んでいないだろうか。

その悩みも無理はない。開発案件で課題が多いのは要件定義フェーズと言われているためだ。

この記事ではそんな悩みに応えるために、要件定義は誰がやるのかについて理由や事例とともに解説する。

そして結論から言うと、要件定義はシステム開発者がやるべきである。なぜなら、要件定義とはシステム開発の方向性と「やること」「やらないこと」を決めるフェーズであるため、深いシステムの知識が求められるからだ。

ただし、発注者も丸投げしていいわけではない。要件定義を進めるためには、その前提となる情報をエンジニアに提供する必要がある。

この記事が今後行う要件定義がより良くなる一助になれば幸いだ。

1 要件定義はシステム開発者がやるべき

要件定義はシステム開発者が行うべきだ。

そもそも要件定義では、発注者から提示される要求とプロジェクトの制約条件をもとにシステムの方向性を決定していく。この作業にはシステムに対する深い理解が必要になる。その理由は以下の2つである。

・システムを理解していないと、必要な要件を定義できないため
・ 個別の機能開発に要する工数を把握していないと、スケジュールを作成できないため

それぞれ解説していく。

1-1 システムを理解していないと、必要な要件を定義できないため

要求を実現する方法を提案するためには、システムでできることとできないことを把握している必要がある。

例えば、勤怠管理システムとチャットツールを導入している企業があったとする。その企業がチャットからも勤怠打刻が可能なシステム改修をしたいと思ったとしよう。

この場合システムに精通していれば、以下のような検討事項を作業としてあげることができる。

・チャットツールから外部のサービスに対して情報を渡す方法はあるか
・勤怠管理システムへ外部から情報を引き渡す方法があるか
・チャットツールのユーザ情報と、勤怠管理システムのユーザ情報を結びつける方法があるか、どこで結びつけることができるか
・上記のユーザの紐付けは、新しい人が入社した時にどのように追加の運用をしていくか
・どのようなメッセージをチャットツールから発した時に出勤とみなすか
・どのようなメッセージをチャットツールから発した時に退勤とみなすか
・出勤のメッセージを2回連続で送ってしまったらどうするか
・出勤し忘れた場合はどうするか
・退勤し忘れた場合はどうするか

これらの細かい検討事項はシステムの裏側がわかっていないと簡単には出てこない。そのため、要件定義はシステムの裏側がわかる開発者が行う必要があるのだ。

1-2 個別の機能開発に要する工数を把握していないと、スケジュールを作成できないため

基本的にシステム開発プロジェクトでは、期間などのプロジェクトの制約と開発に要する合計の工数を考慮して、何を優先するか、何をやって何をやらないかを意思決定する必要がある。

具体的には、上記の制約と優先度を踏まえた上で以下のようなガントチャートに最終的には落とし込んでいくことになる。

この時にざっくりとどういった内容の開発をするとどれくらい工数が必要かをわかっている必要がある。そうでないと何をやるべきかの意思決定ができない。もしくはやることを詰め込みすぎて、プロジェクトの終盤になってやるべきことが終わっていないと言う状況になりかねない。

例えば上記の例であげたプロジェクトは、2人のエンジニアが2ヶ月で要件定義、設計、開発、テストまで終わらせるという想定でスケジュールが組まれていた。しかし、実際には3人がフル稼働してやっと終わらせられるかどうかという作業量であった。そのため、結局プロジェクトの終盤になって追加で2人のエンジニアをアサインすることになった。

このプロジェクトのスケジューリングで陥っていた罠は、そもそも開発者が開発できるレベルで要件が固まっていなかった点だ。そのため、開発者がアサインされてから要件定義のやり直しが発生した。その結果、当初想定していた2倍以上の設計タスクが発生し、それに伴って開発タスクも増大したのである。

2. 発注者も「要望を正確に伝える」事で要件定義に関わることが大切

発注者も要望を正確に伝えることで要件定義に参加することが重要である。

要件定義はシステム開発者が行うものである。しかし、発注者は丸投げしていいわけではない。なぜなら、要望をしっかりと開発者に伝えなければ、実現したい機能がシステムに反映されないからだ。

そのため、要件定義が始まる前に発注者は実現したい要望をしっかりと定義し、それを開発者に伝える必要がある。

ここで定義する「要望」とは、システム開発の目的とシステムで実現したいことである。

例えば、タスク管理アプリを作りたいとシステム開発会社に依頼する場合を考えてみよう。この場合は、想定するユーザとそのユーザがこのシステムを使って実現したいことをストーリーで定義するのが有効だ。具体的には、以下のようなユーザストーリーが示されている必要がある。

ここまで定義されていれば必要な機能群とそれぞれの重要度の共通認識を開発者と発注者で共有しやすい。

3. 開発側に要件定義のスキルが足りなければ、専門家に任せる選択肢もあり!

開発側に要件定義のスキルがなく、開発するものやスケジュールが決まらなくて困っている場合は、専門家に依頼することも視野に入れるべきである。

システム開発会社には様々な得意分野がある。開発フェーズに特化している企業は要件定義をあまりやったことがないケースがある。そのため要件定義が思うように進まず、何も進まないまま時間だけが過ぎて行き、プロジェクトの締め切りが迫ってしまうというケースが発生しがちだ。

そういった場合は要件定義が得意な開発会社や個人に依頼をしなければ状況が改善されることはない。弊社ではこういったケースへの支援も行っている。そのため、まさにこんな状況に陥ってしまっているという方はこちらのページも見ていただけると幸いだ。

PM兼エンジニアが要件定義の支援をします

まとめ

要件定義は誰がやるべきなのかというのはよくある議論だ。

この記事では、筆者の経験を踏まえた上でシステム開発者が行うべきであることを説明してきた。

また、現在進行中のシステム開発プロジェクト内に要件定義ができるシステム開発者がいない場合には外部に支援をお願いするべきであることも解説した。

この記事が要件定義で悩む発注者、システム開発者のもやもやを少しでも解消できていたら幸いである。

  • このエントリーをはてなブックマークに追加