arcanum_jp’s blog

おっさんの日記

プログラマから見たEVMによる利点 その1 EVM概要

 通常業務ではプログラマたちはWBSなどの表で作られた作業表にしたがってものを作っていると思います。でもこのWBSは「できるもの」を中心に作られているため、成果物の報告時点で、その「できるもの」が「どこまでできたか」はわかるのですが、「どれぐらいかかったか」と言う視点が無いために、いわゆる残業などの時間が管理する側からは見えない場合があり、いつもどこか不便なんだけど、どうも言葉に表せない・・・計画に対する進捗は見えるけど、それが本当に妥当な量かわからない。という歯がゆい思いをしていました。


 そこへ、WBSをベースにコストを中心に管理するEVMをちょっと教えられて、目からウロコが落ちたのでここにメモしていきます。EVMについては以下のURLにガイドラインがありますので、興味のある方は見てください。(長い文章だけどかいつまんでいけば結構分かりやすいです)また、以下はプログラマの視点でのEVMの良さを書いていますので、一般のEVMで言うコスト(金額)が工数となっています。


 情報処理振興事業協会 「EVM活用型プロジェクト・マネジメント導入ガイドラインの作成」
 http://www.meti.go.jp/policy/it_policy/tyoutatu/evm-guideline.pdf
 

概略

 EVMの概略として自分のつたない言葉で説明してもしゃーないので、ITproのページから引用してみたいと思います。

 EVM(Earned Value Management)は、ITシステム構築などのプロジェクト活動の進ちょく状況を管理する手法の1つです。EVMの特徴の1つとして、活動の進ちょく状況だけでなくコストの発生状況なども合わせて指標に換算して同一のグラフで管理できることが挙げられます

EVM | 日経 xTECH(クロステック)

 なるほどな、進捗を管理する手法か・・・というのは分かりますが、今までWBSだけでできてきた管理をわざわざEVMでやる意味が見つかりません。つぎに、EVMで登場する言葉を見てみたいと思います。色々ありますが、これだけ覚えれば十分です。

EVMで登場する言葉

 基本は以下の3つ+1つ(BAC)です。たったコレだけです。WBSだとPVとEV(ちょっと違うな)みたいな感じなので、それにACが追加されたと考えれば(まずは)よいかと思います。

PV(Planed Value

 出来高計画値。簡単に言ってしまえば、WBSで作った各作業工数。作業Aに対して3日とか。

AC(Actual Cost)

 コスト実績値。PVに対して実際にかかった工数。間違ってほしくないのはWBS上の作業が1人日だとして、完成に2日かかった場合は2になります。完成に1日なんだけど残業で夜23時(残業4H)に帰ったよなんてのは、1.5日となり、計画に関係なく実際にかかった工数をあらわすのに注意してください。

 ※1日=8Hで計算

EV(Earned Value

 出来高実績値。消化した工数。計画値(PV)に対して使ってしまった工数。例えばWBS上の作業が3日だとして、オンスケであれば2日目の最後は2となります。これも3日の作業日程を2日目で残業目いっぱいして、オンスケでも2となります。

BAC(Badget At Completion)

 計画値の総計。WBSで言うと作業工数をすべて足したもの。

イメージ

 WBSで作ったスケジュールの工数を日単位、週単位、月単位と決まった単位で集計していったグラフがPVで最後がBACとなります。



プロジェクトはじめは緩やかな線で中盤をきつく、最終がまたゆるくなるようにWBSを組むのがよいそうです。これをS字曲線というそうです。

 次に、9月時点の各EV,ACを加えてみたいと思います。(あくまで例です)この例では7月に始まったプロジェクトの月単位のAC,EVの積算値をグラフに載せているだけです。


プロジェクトの立ち上がりはやはり、コストがかかっている割に、進捗が伸び悩むようでが次の月には追いついているので問題ないのかなと感じます。9月時点では、コストはかかっている割に進捗がグンと伸び悩んでいます。ここに何か理由がありそうです。

効率を示す指標

 さきほど登場したPV,AC,EVからは、プロジェクトの効率を示す指標を作ることができます。それがSPI,CPIです。上記の3つとこの2つを見比べていくことにより、プロジェクトを把握することができます。

SPI(Schedule Performance Index)

 スケジュール効率指標と訳されます。各作業をスケジュールを切り口にした指数で以下の式で表されます。1を中心にしたグラフを作り、各集計単位(日、週、月など)で描画していくと、スケジュール効率が見えてきます。

SPI = EV / PV

〜 0.9 1 1.1 〜
遅れ オンスケ 進んでいる


遅れるのも問題ですが、進みすぎるのも何か問題があります。このグラフが右下がりになっていると遅れが常態化している状態

CPI(Cost Performance Index)

 コスト効率指標と訳されます。各作業をコストを切り口にした指数で以下の式で表されます。1を中心にしたグラフを作り、各集計単位(日、週、月など)で描画していくと、コスト効率が見えてきます。

CPI = EV / AC

〜 0.9 1 1.1 〜
効率悪い 正常 効率がよい


効率が悪いのも問題ですが、よいのも何か問題があります。右さがりになっていると、作業効率が落ちている状態。

EVMのすごいところ

 毎日、週単位、月単位など定期的な値をスナップショットで残しておいてグラフにすることで、現在の状況、いろいろな予測が簡単な計算で表せます。また、コストによる効率が見ええるので、進捗が伸び悩むときの「なぜか」と言った警告を見る側に沸き立たせます。

あと何日で終わるか

 WBSでも簡単にあらわせそうですが、WBSでは「成果物」の「いつまで」「できたか」という単位でしかわからないのと、計画上予想したコストしか見えず、残業などのコストが隠れてしまうために正確な数字がでません。以下のような例があったとします。

  • 10個のプログラムをAさんが10日で作るとする。普通に考えれば1つ1日
  • 現在5日目終了時点で4つ完成している
  • 3日目からヤバイと思い残業を2時間(0.50.2日)づつ行っているが、1工数届かず。
日付 1日目 2日目 3日目 4日目 5日目
進捗 1個完成 1個完成 1個完成 1個完成
時間外 0 0 4 2 4 2 4 2

 怒髪天をつくマネージャに「なに遅れてるんだ!できるのか?何日かかるんだ!」と言われた場合、Aさんはいったい何日と答えればいいのでしょうか?WBS表が10の作業のうち4つ完成しているんだから1日遅れ。今まで残業して1日遅れになっているんだから、今までの残業+αで1日分ぐらいの遅れは取り戻せそうな気がしてしまいます。これから効率がよくなってくるから・・・なんて理由もマネージャに言ってしまいそうです。あくまで感覚の世界です。しかしEVMを使うと、こんな感じになります

 まず、5日目終了時点での各PV,AC,EVを算出します。単純に積算です。

  • PV = 5   
    • 各計画値の積算
    • 1 + 1 + 1 + 1 + 1 = 5
  • AC = 6.5  
    • 各作業を行った工数
    • 1〜2日は定時間内作業なので1
    • 3〜5日は4時間残業なので、1.5
    • 1 + 1 + 1.5 + 1.5 + 1.5 = 6.5
    • 3〜5日は2時間残業なので、1.25
    • 1 + 1 + 1.25 + 1.25 + 1.25 = 5.75
  • EV = 4   
    • 5日時点で4つできているので

 次にスケジュール効率指数とコスト効率指数を求めてみます。

  • SPI = 0.8
    • EV ÷ PV なので 4 ÷ 5 = 0.8
    • 5日目にして5日終了時に終わる作業の80%の進捗率
  • CPI = 0.76
    • EV ÷ AC なので 6.5 ÷ 4 = 0.76
    • 平均して76%のパフォーマンスでしか作業ができないと言うこと。
    • 裏を返せば1つの作業を平均して1.62日かかって終わらすことができるということ。
    • EV ÷ AC なので 4 ÷ 5.75 = 0.69
    • 平均して69%のパフォーマンスでしか作業ができないと言うこと。
    • 裏を返せば1つの作業を平均して1.44日かかって終わらすことができるということ。
    • もっと言うと、1工数と思ったものが1.44工数だったという見積りの甘さ。
    • ここで間違ってほしくないのは、この人のパフォーマンスが69%というのは、この人の仕事が遅いと言うのを表しているわけではありません。単に想定1日の予想の仕事に対し、実は1.44日かけないと終わらないという事実だけで、もしかすると他の原因があるからかもしれません。(見積りの甘さ、別の仕事が入っていた。QAに対するお客様の解答が遅かったなど)


 ここで、以降はまず残業をしない場合ですが、残り6つの作業を終わらすには、残作業÷CPIで計算できます。(6÷0.76≒7.9 6÷0.69≒8.69)つまり8日 9日ほどかかります。全体の作業工数13 14日になり、納期には間に合いません。納期に間に合わす為にはマネージャ的には残り5日を差し引いた足が出る3 4日分どうするかと言う話になります。(残業でカバー、人を投入、納期をずらしてもらう等・・・)


 1日の遅れを取り戻すのにどれだけ大変か分かる方から見れば無謀な数字です。残5日に対し、4日分増の仕事が待っているのですから。しかし、EVMを使わない場合、単純に1工数少ないんだから、あと5日に対し、いままでの残業+αで出来ると思っているマネージャも多いです。(約1.6〜2時間の残業を増、つまり、あと5日間は4時間の残業)


 これは、今まではWBS通りできなかったが、これからのものはWBS通りできるだろう・・・(効率も上がるだろうし・・・)その上で1日遅れを取り戻すと言う考えなのですが、そもそも今までの作業の見積りが甘いのに、これからの作業の見積りが正確なわけが無いのですが・・・作業のパフォーマンスと言うものを意識できないとこのような考えになります。


 しかし、先の計算で分かるとおり、1日の遅れを取り戻すために使う日数は実は4日です。今日までの遅れを取り戻すのに、明日の作業(実はこれも69%でしか進めない。残業をしてやっと1工数)にプラスして遅れを取り戻すための残業時間、次の日も69%で作業を進めながら・・・と言う繰り返しで明日移行の5日間分の出る足も含め、4日間必要になります。


 なので、今までの2時間残業にプラスして、1日あたり6.4時間、1日16.4時間稼動(1日で2日分働く!なんと!)となります。あと忘れていけないのは、その残業に対しても上の作業効率(69%)がかかります。もう計算するのも嫌になってきますね。毎日3時、4時まで仕事です。家にシャワーを浴びに帰る生活。


 「ほほーん、3日=約24時間、これを残り5日間の残業(1日あたり4.8時間の残業)に割り当てればいいから今までの残業ベース+α(4時間48分)でスケジュール通りヤレ!と考えそうです。実際上司もそういった事を言って自分も納得してしまった事もありましたが、その残業時間に対しても上の作業効率(76%)がかかるので実際には31時間必要です。つまり、約3.8日の残業を以後5日分に振り分けることになります。(毎日6.2時間の残業ですが実際には長時間労働でもっと効率が下がるでしょう・・・7時間をオーバーするぐらいの残業かな?→午前2時ぐらい。もう頭が冴えて眠れない。帰ってワンカップ一気飲みして無理やり寝る感じ。実際の経験あり。当然次の日は・・・ボーッとしての繰り返し)


 ここで先ほどのWBSだけで予測していたら9日目の深夜にマネージャが「いったいどうなってんだ!なんでオレの言うことができないんだ!プロ意識持て」とか深夜に説教くらってしまうと思います。この時点では作業の見積りの甘さが悪いのではなく、単に5日目に「できる」と思ったプログラマの責任となってしまいます。


 作業する方も「あの時はできそうだと思ったのに・・・」何がなんだか分からない状態です。EVMを使えば今までの過去の成績(実績)から未来の予想が可能でそのための施策も早い段階で打てそうです。正直5日の段階で正確な予測ができていたら、残業どうのと言う対応はしないと思います。

終わりに

 まずは、基本となる、PV,EV,ACとCPI,SPIについて簡単に書いてみましたが、EVMスゲーと思っていただきましたら幸いです。実際のプロジェクトでは2〜3人の規模ではこんなの使うより辺りを見回したりしたほうが簡単かなと感じますが、期間がある程度あるのであればWBSの見えなくなる部分の方が怖いのでこちらで管理したほうがよいのかなと思いました。あとプログラマが自分の近い将来を見越すにはいいツールだと思います。僕はACが見えるだけでもすごーくありがたいと思いました。そこがEVMに興味を持ったところです。


 また、Webで調べたり先輩に聞いたりしていることをココにまとめているので、実際のEVMはこうだよ!とかココが勘違いしているよ!とか言ったご意見等いただけると助かります。