失敗する外注システム開発 発注者がするべきこと 〜2〜

10年以上エンジニアとしてシステム開発に携わってきた私が、経験を元に、システム開発を外注する場合に、発注者側の立場において、するべきことや考えるべきことを共有したいと思います。
前回の記事を未読の方はぜひ併せてご高覧下さい。


発注先探し

さて開発するシステムやソフトウェアなどの概要が決まった後は、外注するシステム開発会社やエンジニアを選定しなければなりません。
もちろん懇意にしている会社やフリーランスエンジニアなどがおられる場合は、発注先の候補として上がってくるでしょう。
この記事を読んでいるということは、もしかしたらその発注先で失敗したことがあるのかもしれませんが・・・
それでも発注者側としてするべきことをきちんと詰めておけば、失敗する確率は減っていくと思います。

もうひとつの手としてSIerやコンサルティング会社に依頼することも考えられます。
ただし、発注者側として詰めなければならない内容は変わりません。

そういった懇意にしている会社がない場合は、どこかで開発会社やエンジニアを探さなければなりません。
最近は企業と企業、人をマッチングするWebサービスなども数多くありますので、そのようなサービスを利用するのもいいと思いますし、検索してHPなどを見て連絡をとってみるのもいいでしょう。

選定の際に知るべき内容は多々ありますが、少なくとも実績や今まで開発してきたシステムの内容などが、どんな企業でもHPなどで公開されているので、そういった内容を吟味しましょう。

案件の内容によっては、その企業(もしくはフリーランスエンジニア)の場所も重要になってきます。
最近はネットの普及により、場所はあまり関係なくなってきていますし、特にWebサービスやHPの制作などの場合はリモートで作業ができる場合が多いので、開発、制作からリリースまで全てリモートで完結できる場合も多々あります。
私も関西を拠点にしていますが顧客は東京の企業が多いです。
(定期的に上京して打ち合わせしていますが)
しかし発注者側の感覚としては、何かあった時に会って話が出来る、作業しに来てくれる、というのが信用の一助になることもよくあります。
大事なのは、エンジニアが現地(あなたの会社やサーバーが置いてあるデータセンターなど)に実際に行って作業するにしろ、リモートで作業するにしろ、そういったサポート体制がとれるかどうかです。
なぜなら内容にもよりますが、システム開発やソフトウェア開発は、作って終わりではなく、その後運用して初めて意味をなすものだからです。
作った後に何か障害が起きたり、思いもよらないバグが露見したり、サイバー攻撃されたり・・・リリース後にも様々なことが起きる可能性があります。
そういった開発後のことにもきちんと対応、サポートしてくれるような発注先が望ましいでしょう。
候補の発注先がどこまでやってくれるか分からない場合には、そういったこともヒアリングして吟味した方が無難です。

発注先の選定

さて発注先の候補があがれば、次は各社にヒアリングしていきます。
まずこちらがどういったシステムを求めているのかを説明しましょう。
その際に、発注者側でシステム要件を詰めすぎるのはNGです。(詰めるのはいいですが発注先に細かく伝えるべきではない)
なぜなら相手はその道のプロです。
もしかしたら専門家ではないあなたの知らない技術をもって課題を解決できるかもしれませんし、もっと良い手法が提案されるかもしれないからです。
逆に言うとそういった提案を色々としてくれる企業は有望でしょう。
こちらの話を「はい。はい。できます。やります。」と聞くだけで終わる相手であれば、その後も能動的に動いてくれるとは思えません。
前の記事でも書きましたが、発注者(あなた)も外注先も協力して作り上げていくのがシステム開発です。
こちらが丸投げ状態でも、相手が御用聞きの状態でもいいものは出来ません。
こういった手法はどうですか?
このソフトを使えばこういうことならできますよ。
運用は少し変わるけどこの方がコストは低くなりますよ。
というような話までできる(してくれる)相手を選定しましょう。

とはいえ気になるのは・・・
やはりコストですよね?笑


コスト感とコストを抑えるための確認事項

私もよく言われるのですが、往々にしてシステム開発やエンジニアの単価は高いなぁという印象を持たれている方がたくさんいますw
この業界でよく採用されている見積り方式は「人月単価」と「工数」を元にした見積りでしょう。
「人月単価」とは、その企業のエンジニアやプログラマーが1ヶ月稼働した場合の金額です。
実際には休日もありますし、24時間働いているわけではないので、1日7〜8時間、月に20~25日程度稼働した場合の金額ということになります。
この金額は企業によってバラツキがあります。
「工数」とは、その機能やシステムを作るのにかかる期間です。
見積りの段階では実際に作ったわけではないので、あくまで「想定工数」です。
この段階で正確な工数を出すのは難しいので、実作業では増えたり減ったりしますが、大抵の場合はある程度のバッファ(余剰工数)を含めて見積もっているので、大掛かりな変更や致命的なバグなどがない限り増えることはありません。
ですが発注者側の要望がきちんと共有されていない場合など、途中で変更や追加が発生することもよくあります。
当たり前の話ですが、こちらの要望と、何ができて何ができないのかは、開発前にしっかりと確認した方が、追加コストは発生しにくくなります。
「〇〇というサイトではできているからこちらでも当たり前にできるもんだと思っていた。」というような話や、「今使ってるシステムではできているのに、なぜできなくなったんだ。」というような事を仰る方がいます。
別のサイト、別のシステムなので当たり前ですw
要望としてきっちりと伝えない限り、その内容は盛り込まれない可能性があることを意識しておきましょう。
また現行システムのリプレイスなどの場合、「現行システムでできることは全てできるようにしてくれ。」
というようなことを伝えてくる方がいますが、その場合は現行システムの解析という作業から始めなければならないため、余計にコストがかかります。
どんなに優れたエンジニアでも、中身も分からないあなたの会社のシステムを、一目見ただけで把握することはできません。
全ては無理としても、現行システムはこんなシステムでこういう機能とこういう機能があって、ここを押すとこうなるが、次期開発版ではこうしたい・・・という内容をなるべく伝えた方が話は進みやすく、またコストも抑えられるでしょう。

地域や事業規模などで単価は変わりますが、概ね高いと感じる方が多いかもしれません。
技術職だからと言ってしまえばそれまでですが、開発側の人間からすると正当な金額であることが多いと感じます。
例えば1人月単価、つまりその会社の技術者が1ヶ月稼働した場合のコストが80万円だったとしましょう。(高いと感じますか?)
通常、企業が社員に対して払える給与は、その人の業績に対してせいぜい30〜40%程度です。
なぜなら会社の地代家賃や光熱費、ネットワーク費や営業経費などの諸経費に加え、法人税や消費税、社員の社会保険の半分を負担し、且つ会社としての利益も考えなければなりません。
エンジニアやプログラマーは「仕入れ」がほぼないぶん、もう少し割合が高い企業もありますが、それでも50%程度でしょうか。
つまり人月80万円のエンジニアの給与は、よくて月40万円、年収にして480万円です。
悪くは無いですがそれ程高いとも言えませんよね。
そう考えるとシステム開発のコスト感が妥当なラインなのかどうか判断できるのではないでしょうか。
システム開発というのは既製品を買うのとはわけが違います。
基本的にはオーダーメイドに近い感覚です。
もちろん、既成のシステムを繋ぎ合わせたり、少しカスタマイズするだけであなたの要望に合致するシステムができる可能性もあります。
しかしその先はどうでしょうか。
後々こういう機能を付け足したい。
ここの処理を変えたい。
そういったことが比較的しやすいシステムなのかどうかというのが、既製品と開発したシステムの大きな違いになります。
(既製のソフトなどは基本的に加工したりすることができません。オープンソースなどはありますが)
オーダーメイドが高いのはどんな製品でも同じだと思います。
必要な機能を洗い出し、不要な機能や運用でカバーできるところは省くなど、コストを抑える可能性を検討してくれる相手を探しましょう。


いよいよ開発

さてコスト感が出揃い、発注先の選定ができれば、後は実際のシステムの話を具体的に詰めていく段階になります。
前述の通り、「丸投げ」はせず、専門家でないにしても極力開発側と歩み寄れるよう努力することが大切です。


次の記事は実際の開発段階で発注者側が決めるべきこと、確認すべきことを記事にしたいと思います。


よろしければフォロー等、よろしくお願いします。

サポートして頂けると狂喜乱舞します。 今後の励みになりますので、よろしくお願いします。