「ソフトウェア・システム開発は全く初めて」という方々に向けて、ソフトウェア開発会社に開発作業を外注する際にやるべき事、を説明するシリーズの第2回です。(前回から大分時間が経ってしまいましたが。)

前回の記事で、プロジェクトの種類にかかわらずにやるべき事として、以下を挙げました。

  • プロジェクトの目的・背景を整理する
  • 必要な予算を確保する
    • 開発費用だけで無く、運用保守費用も必要です
  • 必要な人員を確保する
    • プロジェクトの責任者
    • 要件の整理・確定、開発会社とのやりとりなどの実務
  • 想定するスケジュールを計画する
    • 必ずスケジュール通りに行くとは限りませんが、いつくらいにシステムを完成させて使用したいかは、決めておく必要があります。

今回は、これらについて少し掘り下げて説明します。

前回の記事はこちら。

プロジェクトの目的・背景を整理する

整理することによる利点

これは、そもそも外注の有無、あるいはソフトウェア開発プロジェクトに関わらずにやるべき事なのですが、ソフトウェア開発を外注する場合には特に重要だと考えています。

プロジェクトの目的・背景を整理することの主な利点としては以下の通りです。

  • ★全ての行動の指針となる
  • 全メンバーが同じ目的を共有することで、プロジェクトチームの結束が強まる
  • プロジェクトがどの程度進んでいるのか、成功したのか、失敗したのか、の判断基準となる

ソフトウェア開発を外注する際には、その中でも最初の項目が一番重要となります。

「全ての行動の指針となる」とはどういうことか

プロジェクトの目的・背景が明確であれば、プロジェクトで何か迷った場合には、その目的・背景に沿う形で行動すれば良いため、

  • タスクの優先順位が明確になる
  • 曖昧な要件・仕様があった場合に、変な形で実装することや手戻りを防げる

といった利点があります。

前者の例として、機能Aと機能Bのどちらを先に実装すべきかという話になったときに、プロジェクトの目的を達成するためにより重要なのは機能Aと機能Bのどちらか、という観点で議論・判断が出来ます。

後者についてですが、ソフトウェア開発を外注する際には発注元は外注先に対して、「こんなものが欲しい」という要件、あるいは「こういったものが欲しい」という仕様を伝えます。ソフトウェア開発に慣れている会社・人であれば、不備の無い要件定義書や仕様書を作成して外注先に渡す事が出来るかもしれませんが(※)、通常は、何らかの曖昧さや誤りが残るものです。そうしたときに、プロジェクトの目的・背景が明確であれば、

  • 曖昧な箇所に対して「これはこういう意図なんだろうな」と解釈して作業を進める
  • 誤りがあった際に「これって本来はこういう内容ではないでしょうか」と質問する

といった行動を外注先が取ることができ、無駄な作業・手戻りを防げます。

※: そういう人はそもそも本記事の対象読者ではありません

必要な予算を確保する

これもソフトウェア開発プロジェクトの外注に関わらない話ですが、まずはプロジェクトに必要な予算を確保する必要があります。

予算が先か、見積もりが先か

ただ、そもそも作ろうとしているソフトウェア・サービスの開発にどれ位のお金がかかるかが分からないと予算の取りようが無い、という意見もあるかと思います。

見積もりを取る流れとして、大雑把には以下の2通りがあると思います。

  • 概算見積もりを取る → 予算を確保する → 正式見積もりを取る
  • 予算を確保する → 概算見積もりを取る → 開発範囲(スコープ)を修正する → 正式見積もりを取る

どちらにも長所・短所があるのですが、ソフトウェア開発に慣れていない場合は、後者の進め方をお勧めします。理由としては、開発内容に「あったら良いかも」程度の機能が多く含まれている可能性があり、前者の方法だと予算が無駄に多くなりがちだからです。

最初の発注で予算を全部使い切らない

ソフトウェア開発プロジェクトでは、プロジェクトがある程度進んだ段階で「○○という機能が無いと使い物にならない」という事が発覚することが良くあります。発注側がソフトウェア開発に慣れていない場合は特にその傾向が強いです。

そのため、例えば、予算が200万円のプロジェクトの場合、最初の発注で200万円を使い切るのは避けた方が良いです。200万円を使い切るのでは無く50万円くらい残しておけば、その残ったお金で足りない機能を追加することが出来ます。

開発費用だけで無く、運用保守費用も考慮する

ソフトウェア作ったら終わりでは無く、開発が終わった後にもそれを運用保守する必要があります。「運用保守」という言葉は幅広い意味で使われますが、具体的には

  • バグ修正
  • 使用しているフレームワーク、ミドルウェアなどのアップデート
  • 障害時の復旧
  • システムの拡張

などが含まれます。

当社の場合、基本的には納品後のバグ修正は無償で行っておりますが、それ以外の項目に関しては当然有償対応となります。そのため、予算確保の時点で開発だけでなく運用保守費用を考慮しておく必要があります。

運用保守費用は、ソフトウェアの性質や運用保守のサービス内容によって異なりますが、大雑把には年間で開発費用の10%〜30%の場合が多いと思います。例えば、開発に100万円が必要なシステムの場合、年間で10〜30万円が毎年かかるという形です。

必要な人員を確保する

ソフトウェア開発を外注する場合でも、発注側では担当者を確保する必要があります。小規模なプロジェクトの場合は、1人を丸々そのプロジェクト専任にする必要はありませんが、そのプロジェクトに割ける時間をある程度は確保しておく必要があります。

また、担当者は、そのプロジェクトの目的・内容などを把握しておく必要があり、

  • 外注先からの質問に答える
  • 開発状況の管理を行う

といったことを行います。

想定するスケジュールを計画する

スケジュールを立てる目的

ソフトウェア開発プロジェクトは、不確実性が高く、当初想定していた計画通りに進まないことは良くあります。とは言え、事前にスケジュールを立てることは以下の点で重要です。

  • プロジェクトが順調に進んでいるか、遅れている場合はどの程度遅れているのか、が分かる
  • いつまでに何を終わらせれば良いのか、目標となる
  • 外注先がメンバー確保する期間の目安となる

最後の項目がソフトウェア開発を外注する場合の固有の話かと思いますので、少し説明します。

外注先のメンバーの確保

当社のようなソフトウェア開発会社がソフトウェア開発の仕事を請ける場合、そのプロジェクトのために必要な技術を持ったメンバーを必要な人数だけ確保する必要があります。プロジェクト全体の作業量は見積もりを提出した時点で分かっていますが、それをどれくらいの期間でやるかによって必要な人数が変わってきます。

単純化した例えを使うなら、1人の開発者が半年くらいで終わらせられるようなプロジェクトがあったとします。実際の納期が半年後かそれ以降であれば問題無いですが、仮に納期が3ヶ月後だった場合には、少なくとも2人の開発者を割り当てる必要があります。

その場合、開発会社としては2人の開発者のスケジュールを3ヶ月間押さえておく必要があります。その間、当然その2人は他のプロジェクトに関わる事が出来ませんし、それによって別のプロジェクトのスケジュールや人員計画を変更する必要がでてくるかもしれません。

なお、実際には先ほどの例のような単純な話では無く、最初の1ヶ月はAさんとBさんを割り当て、残りの2ヶ月はBさん(50%)、Cさん、Dさんを割り当てる、みたいなことが必要となってきます。

どこまで細かく立てるか

どの程度細かくスケジュールを立てれば良いかというと、「スケジュールを立てる目的」を満たすことが出来る程度、というのが回答となります。具体的には

  • マイルストーンを設定する
    • 例: 10/1にβ版サービス開始、11/15にプレスリリース、12/1にサービス開始
  • 1週間単位〜1ヶ月単位で立てる
    • 例: 4月末に設計完了、5月末に機能AとBの実装完了、6月末までに全機能の実装完了、7月末までに結合試験及びリリース完了
    • 1日単位などあまり細かくしても、実際にその通りになる事はないし、スケジュールを作って更新する負荷が無駄に高い
    • どういった開発者がどの期間・何人くらい必要なのかが分かる

くらいの大雑把さで良いと思います。

まとめ

今回は、ソフトウェア開発の種類によらず、開発を外注する前に必要な事を具体的に説明しました。

次回は、ウェブサービス・スマホアプリ外注固有の話を書こうと思います。