システム開発を適正な価格で発注し,プロジェクトを成功させる方法(その1:見積編)

こんにちは.morimorihogeです.

僕は普段受託開発の案件を中心に,要件定義から設計,実装,サーバ構築してリリースし,運用に乗るまで一通り携わる仕事をしています.
Web開発自体はかれこれ学生時代からやっていて(当時は今の会社ではないですが),最初は純粋なプログラマとして入り,その後順当にやれる幅を広げていった形になります.もうそろそろ10年目みたいです.時が経つのは早いです.
昔に比べて最近は,お客様と開発の間の調整をしたり,案件の見積をしたりすることが多くなりました.

そんな中,うまくいったプロジェクトもあり,こちらの力が至らずうまくできなかったプロジェクトもあります.いくつものプロジェクトを経験していく中で,最近はそうしたプロジェクトの差が見える様になってきた気がするので,自分の考えをまとめる意味でも記事にしてみます.今回はお客様にとってシステム開発の入り口になるであろう「見積」についてです.

システム開発は多くの人にとって初めての体験

多くのお客様にとって,システム開発に携わるというのは初めての経験であることが多いです.出来合いのシステムを買ってきて使うのではなく,自分たちのビジネスをより発展させるためのシステムを自分たちで考え,開発会社などに作ってもらうというのは,開発会社の中にいない限り,そうそう経験することはありません.
イメージとしては,パッケージのソフトウェアを買ってきて使うのはデパートで吊るしのスーツを買うのに対し,システム開発は仕立屋に頼んでオーダーメイドのスーツを作ってもらうようなものです.今の世の中,一生オーダーメイドのスーツを作らない人もいるように,システム開発も人生の中で一生経験しない,という人もいます(むしろそれが大半).

その見積は適切なのか?

お客様側はシステム開発に慣れていない一方で,開発会社はそれまで多くの別のお客様のシステムを開発した経験があるので,システム開発の見積においては開発会社が情報的に圧倒的有利です.
お客様にはシステム開発をどういった手順で行うかも分からず,システムの相場感も分からないので,開発会社が出してきた見積もりが妥当なのか,判断することが困難です.
極端な話,開発会社に悪意があれば,高い値段をふっかけることだってできてしまいます.
こういった問題は「情報の非対称性」として良く知られており,世の中のありとあらゆる所で出てきますね.
お客様にしてみれば決して安い買い物ではないので,その見積が適切なのかどうかはすごく気になる所です.

見積を出したら思っていたよりも桁が一つくらい高いんですけど・・・

初めてシステム開発を依頼するお客様に多いケースです.特に,これまでフリーランスやWebサイト制作会社にページ作成を依頼してきたお客様の場合,お客様の中で「Webページ作成」の相場感がある程度構築できているので,それと比較すると驚くほど高い,という印象を持たれるようです.

具体的な話をすると,現在国内でWebページ作成を外注した場合,品質やコンテンツの量,JavaScript等のエフェクトの有無にも寄りますが,1ページ1万円弱〜3万円くらいの間が多いのではないかと思います.一部差分ページであれば数千円程度ですね.有名なWebデザイナーに頼んだり,企画から入ってもらったりするともっと値段は高くなりますが,一般的にPSDレベルのデザインができているか,よほど特殊なレイアウトにならない限りはこれくらいの価格感なのではないでしょうか.

それに対してシステム開発は,内容によって本当に大きく差が開くのですが,多くの小〜中規模Webシステムの様に1〜3ヶ月の開発期間を必要とする案件だと軽く100万円を超える見積になります.会社によっては50万円前後という比較的見積を出す所もあると思いますが,安い見積を出している場合は表向きは開発すると言いつつも,その会社が持っている既存のシステムを軽く手直しするだけ(場合によってはロゴや配色の見た目を変えるだけ)という想定の見積だったり,いざ発注が確定して開発を進めていく中で新たな仕様追加が出てきた際,別料金で新たに見積を出されてしまい,最終的には結局高く付いた,などということもあります.

なぜ金額が開発会社によってこんなに違い,そもそも金額がそんなに高くなるのか?

複数社に見積もりを依頼したことのある方なら分かると思いますが,規模の同じ様な開発会社に同じ条件で見積依頼を出したのに,上がってきた見積金額が100万円単位で違うということがザラにあります.これはなぜなのでしょう?また,どうしてそんなに高い見積になってしまうのでしょうか?世の中は悪意のある開発会社だらけの修羅の国なのでしょうか?

まず,見積金額が開発会社によって大幅に違ってくるのは,見積依頼の時点で十分な情報がないというのが原因です.見積を作る時点で必要な情報が足りなかったり曖昧な場合,足りない情報は見積担当者の経験により補填されることになります.過去に関わったことのあるシステムや似た業種のお客様の業務開発経験から,そのシステム開発にかかる工数を導き出すわけですね.
その場合,担当者の経験してきたシステムや開発の想定範囲が大きく異なってくるので,見積には大きな差が開いてきます.

次に,値段が高くなる原因は,一つはシステム開発の場合,お客様も出来上がるまで最終的なサービスの具体的な形を考えていないことが多いということがあります.Webページ作成などは画面を見れば欲しいものだったかどうかは分かりますし,指定するときもスクリーンショットにちょいちょいと指定を書き加えれば,見積時点で考えているイメージを共有することが可能です(Webページ作成もUIデザインなどの高度なレベルまで外注すれば別ですが,ここでは割愛します).
対してシステム開発は,見た目よりも内部のロジックに根幹がある点が大きく違います.お客様の思い描いているビジネスロジックをプログラミング可能な形に落とし込み,実際に実装し,お客様にチェックしてもらうというサイクルが必ず必要になります.また,見えない部分を対象にすることが多いので,認識の齟齬が無いように仕様を文書化したり,打ち合わせを何度も行う必要があるのです.こうした打ち合わせや調整がシステム開発においては大きなウェイトを占めています.

以下の図は「プロジェクトの姿 – 顧客が本当に必要だったもの」というシステム開発の業界では有名な図から抜粋したものです.システム開発に関わるそれぞれの役割の人たちや構成要素についてこれだけの齟齬が起こりやすいということが面白おかしく絵になったものですが,実際現場にいると笑い飛ばせないくらい的確だったりします.
お客様が考えていることというのは,思っている以上に開発者には正しく伝わっていないことが良くあるのです.こういったことを避けるために文書を作ったり,打ち合わせを行うわけですね.

http://maniyax.net/project_cartoon/project_cartoon.gif より抜粋

金額が高くなるもう一つの理由はリスクマージンです.要求仕様があいまいだったり,作るシステムの裏で動いているビジネスロジックなどの全容が見えていない場合,仕様が途中で変更される可能性を見越したマージンを見積に乗せます.リスクマージンは情報が少なければ少ないほど多めに取らないと危険なので,結果として見積に大きな開きができるわけです.
システム開発の世界ではしょっちゅうお客様の無慈悲な仕様変更(お客様にとっては必要なもの)によりあちこちでデスマーチが発生し,採算割れするプロジェクトが発生しているので,開発会社はこの部分を非常に気にしています.
また,お客様の都合の仕様変更以外にも,作りたいものの共有がしっかりできていないとよく「隠れ機能」が作り始めてから発覚することがあります.これはお客様の中では「こういうサイトだったら当たり前のようにこれはあるでしょ.こういうビジネスしてるんだから当然こういうケースは想定してるでしょ」と思っていて文書化していなかったものが開発サイドに伝わっておらず,開発を始めてから発覚するケースです.非常によくあります.

ではどうやったら正しい見積を出せるのか?

とにかく情報が必要です.それもより具体的な.「こんなものが作りたい」という箇条書きだとやりたいことは分かりますが,具体的にどういったものを思い描いているのかは分かりません.

手書きでも構わないのでワイヤーフレーム(Wireframe Showcaseなどが参考になります)があれば「隠れ機能」の発見に役立ちますし,その場で機能の中身を詰めていくことも可能です.
また,簡単でも良いので画面遷移図があれば,作るシステムの想定する規模感がある程度想像できます.「XXXみたいな感じにして欲しい」という場合でも,画面遷移図があった方がお客様の想定している機能が明確に分かるので,作らない手はないです.

また,最低でも一度は直接打ち合わせをセッティングし,お客様側,開発会社側の空気感の共有をすることも大事です.僕はここをすごく大事にしています.顔を付き合わせてヒアリングすることで,開発会社は自分の仕事の担当範囲をチェックしています.
例えば前述のワイヤーフレームなどのサイトの基本設計部分を開発会社側が作成するのか(丸投げ方式),お客様側で検討して頂けるのか,プロジェクトのリードを開発会社側でやるのか(プロジェクトマネージャを別途アサインする必要があるのか),お客様側がやるのかといった所でもプロジェクトに必要な人員や工数は変わってきます.

その他,既存システムの改修,リプレース案件であれば,既存システムを開発したときの開発資料,運用ドキュメント,ソースコードやDBのスキーマ情報なども見積をするための大きなヒントになります.ただ,ソースコードやDBの情報は機密性が高いので,ある程度頼む開発会社を絞った上でNDAを結んで渡すなど,一手間かけたほうが良いでしょう.

実は他にも見ている部分がある

そんなわけで普段受託開発の現場にいる側から見た「こうしてくれればもっとちゃんとした見積だせるのになあ」という点を書き出してみました.
次回は見積(というか開発費用)を安くする方法について,書いてみようと思います.

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

morimorihoge

高校卒業後,学生をやりながらずっとWebアプリ開発に携わってきました.2010くらいまではPHP/Symfonyプログラマでしたが,それ以降のWeb開発はRailsほぼ一本に宗旨替えしました.開発とは別にサーバ構築・運用も10年以上やってきているので,要件定義から設計・実装・環境構築・運用まで一通り何でもこなせます.開発以外では季節により大学でWebサービス開発やプログラミング関連の非常勤講師もしており,技術の啓蒙・教育にも積極的に関わっています.最近はPM的な仕事が増えていますが,現役開発者としていつでも動ける程度にはコードもサーバも弄る日々を送っています.AWS 認定ソリューションアーキテクト – アソシエイトレベル取りました

morimorihogeの書いた記事

開発
RubyのArray(配列)の使い方

2017年03月15日

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ