Index: [Article Count Order] [Thread]

Date:  Sun, 30 Apr 2000 23:42:04 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:00321] XP Chapter 15 Planning Strategy V1.1
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B532750D.1288%khosokawa@....com>
Posted:  Sun, 30 Apr 2000 23:41:14 +0900
X-Mail-Count: 00321

ホソカワです。

第15章のアップデートです。「Release Planning と Iteration Planning の違い」
と「Planning in a Week」を追加しました。

----

Chapter 15 Planning Strategy
============================

The Planning Game (Release Planning Game)
-----------------------------------------

XP では、開発計画をゲームとして扱っています。このゲームを「Planning Game」と
言っています。

プラニングゲームのゴールは、開発するソフトウェアの価値を最大にすることです。
戦略は、最少の投資、最短の期間で、最大限の価値を生むことです。ビジネスは、出
来上がったシステムから学習したことをベースに次のシステムへの要求を決め、開発
はすぐにそれを実装します。この繰り返しです。ゲームのコマは、ストーリーカード
で、選手はビジネスと開発です。ゲームには、3つのフェースがあり、それらは、探
検(Exploration)、約束(Commitment)、運営(Steer) と言います。これらのフェー
スは循環するので、運営フェーズの後に探検フェーズに戻ることもあります。

<探検フェーズ>

このフェーズでは、選手たち(ビジネスと開発)にシステムの最終型を認識させます。
3つの進め方があります。

・ストーリーの記述 - ビジネスはシステムの仕様を説明しているストーリーを書き
ます。

・ストーリーを見積もる - 開発は story の見積もりを出します。この見積もりは、
「理想の作業時間(Ideal Engineering Time)」で表され、中断や会議なしで、実装
にかかる期間のことを言います。

・ストーリーの分割 - 開発がストーリーの見積もりをできない時やビジネスがストー
リーの一部分が重要とわかった時は、ストーリーを分割します。

<約束フェーズ>

このフェーズでは、ビジネスがスコープと納期を決定し、開発がその条件下の開発を
引き受けます。ここでは、4つの進め方があります。

・価値で整列 - ビジネスはストーリーを「必須機能」、「あればビジネスに貢献で
きる機能」と「あればうれしい機能(Nice To Have)」に分けます。

・リスクで整列 - 開発は story を「正確に見積もられている機能」、「まあまあの
見積もりの機能」と「見積もりができない機能」に分けます。

・速度の設定 - 開発はプログラミング速度(velocity)を宣言します。
プログラミング速度=理想的な作業時間/月
(velocity = Ideal Engineering Time / calendar month)

・スコープの選択 - ビジネスはこのリリースのためにどのストーリーを実装するか
決定します。

<運営フェーズ>

このフェーズでは、プランのアップデートを行います。4つの進め方があります。

・ひとサイクル(Iteration) - ビジネスは、ひとサイクルごとに、もっとも重要な
ストーリーを決定します。

・修復 - 開発が速度を過大に評価したと発見した時、ビジネスに対して、今回のリ
リースで重要なストーリーを新しい速度と見積もりで再度選択してもら
います。

・新しいストーリー - ビジネスが新しいストーリーを発見した時、そのストーリー
を作成し、開発は、見積もりを行います。重要度によっては、新しいストーリーを入
れ、重要度の低いストーリーを外します。

・見積もり直し - 開発は、見積もりを再度行い、プログラミング速度を再設定する
こともできます。

Iteration Planning
------------------

今度は、Iteration Planning Game です。Planning Game に似ていますが、
Iteration Planning Game のプレイヤーは、プログラマー、コマは、タスクカードで
す。また、期間も短く、1から4週間です。似たような、フェーズと進め方で構成さ
れています。

<探検フェーズ>

・タスクの記述 - ストーリーを実装するために必要なタスクを書きます。

・タスクの分割/タスクの結合 - 大きいタスクが分割して、短いタスクは統合しま
す。

<約束フェース>

・タスクの受け入れ - Practice にもありますが、タスクを買って出ます。

・タスクの見積もり - タスクを見積もります。

・作業負担(load factor)の設定 - 作業負担を決定します。
作業負担=理想の作業時間/時間
(load factor = ideal engineering time / calendar time)

・均等化 - あるプログラマの持ち分が大きすぎる時は、他のプログラマにタスク
を分けます。

<運営フェース>

・タスクの実装 - タスクを実装します。

・進捗の記録 - 進捗状況を記録します。

・修復 - あるプログラマが手一杯になった時は、例えば、タスクのスコープを
縮小したり、顧客にストーリーのスコープを縮小してもらいます。

・ストーリーの実証 - タスクをすべて作成した時、ストーリーが完成したかチェッ
クします。

Release Planning と Iteration Planning の違い
---------------------------------------------

・Iteration Planning のスケジュール変更のほうが Release Planning のスケジュー
ルの変更より耐えられます。開発メンバー全員で主要な refactoring に時間をさく
ことができますが、顧客にそんな状況を頻繁に見せられるものではありません。嘘を
ついているように感じるかもしれませんが、これは「ビジネスとテクニカルの判断の
分割」practice の延長です。

・Release Planning では、ビジネスからストーリーが与えられ、チーム全体でストー
リーの責任を持ちますが、Iteration Planning では、プログラマーが自らタスクを
選択し、個人で責任を持ちます。

・Iteration Planning のタスクの中には、ストーリーと直接関係しない場合もあり
ます。例えば、ツールの強化などが考えられます。

Planning in a Week
------------------

一週間で計画を立てなくてはならない時は、プラニングゲームを行っている余裕など
ありません。この場合は、リスクをある程度背負って大きめのストーリーを作成し、
理想の作業月(ideal engineering month)で見積もりを出します。顧客にこの大き
さのストーリーでトレードオフを検討してもらいます。もともと経験で見積もりを出
すべきで、経験がない場合は、入札に参加するべきではありません。

-- 
Kaoru Hosokawa
khosokawa@....com