はじめに
私は学生時代に新しい研究テーマを立ち上げて、3年間研究活動をしました。振り返ってみると、最初の研究テーマ(≒プロジェクト)立ち上げ方法に問題があったように感じています。そして、最近ではプロジェクトの引き継ぎや新規プロジェクトの立ち上げなどに携わることもありました。しかし、どれも失敗、反省点が多々あります。そこで、新しいプロジェクトを始める時にやっておくべきことをチェックリスト形式でまとめます*1。
新しいプロジェクトを始める時にやっておくべきこと
1. ゴールの明確化
最終的にどのような状態になれば良いのか、を明確にする必要があります。明確にするために、3つの項目を挙げます。
1-1. 終了条件の定量化
最終的にどのような状態になれば良いのかを、定量的に表現します。システムの開発であれば、要求される種々機能が不具合なく実現されていること、パフォーマンス性能値などが条件になってきます。
1-2. 対象範囲(スコープ)の図示
プロジェクトの位置づけを図を用いて行います。プロジェクトの全体像を図に表現することで、メンバ及び関係者間での認識の相違を軽減します。派生開発の場合、既存のシステムをベースにするため、そのシステムのどこが今回の開発対象であるか明確にします。また、流用できると想定しているモジュールを明確にします。このプロジェクトの全体像はプロジェクト進行中、何度も参照されることになり、また適宜加筆修正もされます。
1-3. 目的の明文化
目的は最初に共有すべきことです。しかし、明文化するにあたっては、終了条件の定量化及び 対象範囲の図示が終わった後に再度見直すべきと考えます。実際にゴールを検討する中で、明らかになってくることもあり、それらを踏まえて慎重に「目的」の文言は決定されるべきです。そして、目的を決定したら、以降は極力変更はしません。
2. 手段の決定
ゴールが明確になったら、それを達成するための手段を検討します。手段に関しては、システム開発を想定しています。4つの項目を挙げます。
2-1. 作業計画の立案
必要な作業を洗い出し、日程に落とし込みます。WBS*2にまで具体化できることが理想ですが、最初に終盤の状態まで詳細に見積もることは難しいです。可能であれば、余裕を含んで最初は作業計画を作成し、適宜WBSの詳細を明確にしていくことが望ましいです。そのため、どの段階で、どの行程のWBSまで明確にしておくかを計画すべきと考えます。
2-2. 予算の確保
作業計画を作成したら、それに必要な人員や開発環境を準備します。そして、それに必要な予算を確保する必要があります。特に人員に関しては、1人月と言っても、誰がやるかで生産性は大きく変化します。予算の配分を決定する人にとっては見えにくく議論されにくいです。しかし、プロジェクトを管理する側は、誰をアサインするかまで検討する必要があります。
2-3. HW環境の準備
システム開発に必要なHW環境を準備します。特に組み込み開発では、検証環境をどのように構築し、またその検証環境で何を検証するか(検証目的)を明確にしておく必要があります。検証環境の図示においては、UMLの配置図を利用するのも良いかもしれません。また、FWの開発におけるPCの準備なども含まれます。
2-4. SW環境の準備
システム開発に必要なSW環境を準備します。進捗管理手段であったり、ソースコード管理手段などです。種々の管理は基本的にはRedmineやJIRAなどのツールを利用するでしょう。また、エクセルファイルをベースにフォーマットを作成したりもするかもしれません。一方で、アナログなカンバンなども取り入れてみるのも良いかもしれません。その場合はまたHW環境の準備も必要になってきます(ホワイトボードやポストイットなど)。
2-5. 人員の確保
システム開発に必要な人員を確保します。システム開発を行うのはスキルをもったエンジニアです。開発に必要なスキルをもったエンジニアを必要な人数確保する必要があります。ただし、要求するメンバを確保できないことが多いです。そのため、不足しているスキルやそもそもの工数不足がある場合は、作業計画へその不足分も考慮を追加すべきです*3。
プロジェクトを始めるときに大切なビジョンを共有する | tracpath.com
こちらにおいても、プロジェクトを始める時のビジョン共有について記載があります。差分としては、全体像を図示すること!が私は重要だと考えます。
終わりに
私の経験を元に、新しいプロジェクトを始める時にやっておくべきことをチェックリスト形式でまとめました。私自身含め、新しいプロジェクトを始める時に、このチェックリストを確認して詰めていくことで、その後の進行がスムーズになると信じています。
*1:人員の確保を追加しました。2018/9/30
*2:ワーク・ブレークダウン・ストラクチャー プロジェクト目標を達成し、必要な要素成果物を生成するために、プロジェクト・チームが実行する作業を、要素成果物を主体に階層的に要素分解したものである。 アジャイルでもウォーターフォールでも、WBSの作り方が肝になるんじゃね? - miyohide's blog
*3:必要な人員が不足しているが、短期で進めてほしいと要求されることがありますが。