いつも投稿をご覧頂きありがとうございます。

さて、今日はシステム開発における「要件定義」の重要性についてです。自戒も込めて。

「要件定義」とは?

超ざっくりと説明すると、あるシステムを開発する際に

  • 何のためのシステムか
  • 使用するのは誰で
  • どんなデータをどういう形式で扱って
  • どういう機能を盛り込むか

といった事柄を策定する事を要件定義と言います。
私の場合、お客様の要求する「結果」をより効率のよい操作で導くため、ここを最も重視しています。

要件定義がマズいと何が起こるか

まず、根幹部分の要件定義をいい加減なまま開発に着手すると、当初想定し切れていなかった項目の入力や操作、想定していなかった機能の追加などで、「そもそもデータベースの設計を見直さないと対応できなくなる」という事が起き得ます。

もちろん、細部の変更に対して柔軟に対応できるように、設計にはある程度の柔軟性を持たせてはいますが(将来の機能追加・フルカスタマイズ可能を売りにしているので)、それでも根幹部分に大きな変更があると、データベースの仕様変更なども含めて工数は大幅に増加しますし、納期との兼ね合いで苦しくなることは容易に想像できます。

変更の生じた理由がお客様側にある場合には費用面で追加のご負担をお願いせざるを得ない場合や、納期の延長をお願いせざるを得ない場合もあります。そして何よりも、一旦「これでこの部分はOK!」と作りこんだ部分をまるっとやり直しになるのは、コードを書いている立場からすると何とも心が折れる瞬間でもあります。

スムーズな開発のために

上記とは逆に、要件定義が完璧であれば納期にも余裕が出ますので、より早い段階からきめ細やかな細部の作りこみに着手ができます。

なので商談・お打ち合わせの際は、私はしつこいくらいお客様を質問攻めにする場合があります。
私はシステム開発のプロですが、お客様の業種のプロではないからです。業務プロセスや求められている仕様をきちんと理解できるまで質問攻めをしておかないと、開発工程に入ってから「あそこはどうしますか」「そこ変えると納期が・・・」となってしまいます。そうなるとお客様にもご迷惑をお掛けすることになりますし、私自身も楽しくありません。

また、お客様は「これは全体には大きな影響を与えない要望だからある程度形が出来てきてから伝えよう」と思っていても、実はその機能をスムーズに実現するためには「根本の設計段階で織り込んでおいた方がいいこと」というのもあります。

なのでお打ち合わせの際はどんな些細な要望でも思いつく限り必ずお伝え下さい。納品当初にその機能を実装しないとしても、後から追加する際に根幹部分を作り直すよりも、先に要望をお伺いしておいたほうが確実に全体の工数が削減できます。(費用面でもお客様にとって有利になります)