# アジャイルサムライ 第Ⅲ部 アジャイルな計画づくり ## 第6章 ユーザーストーリーを集める ### 6.1 文書化の難しさ 文書化は、多くのプロジェクトで役に立たない。なぜなら * 変化に対処できないため。 * 顧客の欲しいものではなく仕様に合わせて作ることになるため。 * 下手な推測や誤った前提を招くため。 * 多くの時間を無駄にするため。 **→文書に頼りすぎてはならない。** ### 6.2 ユーザーストーリー ユーザーストーリーは、インデックスカード(小さなカード)を用いて、想定するユーザの振る舞いを書き出す。書き出したものは、顧客へのインタビューの材料となる。 顧客の要求を収集する最大の目的は、**本質を捉えるキーワード**を聞き出し、書き留めておくことである。 思いついた時点では、本当に必要になるかどうかまだ分からないからである。 ストーリーは必ずしも顧客(プロダクトオーナー)が書く必要はない。 ### 6.3 良く書けているユーザーストーリーとは * INVEST(ビル・ウェイクの考案) * Independent(独立している) ストーリーは互いに独立している。 * Negotiable(交渉の余地がある) 期限や数値は交渉の余地がある。 * Valuable(価値がある) 顧客が「価値」を感じられるような、具体性のある文面にする。 * Estimatable(見積もれる) 実施期間が見積もれる。 * Small(小さい) 1~5日で完了できるよう粒度を小さくする。 * Testable(テストできる) テストできるストーリーは完了の基準が明確になる。 #### デイブのユーザーストーリー <ユーザーの要求> * イベント予定表 * 割引グッズ一覧 * ビーチの状況をリアルタイムで配信する。 * 更新がすぐに反映される。 <制約条件> * ウェブサイトはサクサク表示して。→2秒以内 * デザインはカッコよく。 #### ユーザーストーリーのテンプレート [ユーザーの種類]として、[達成したいゴール]をしたい。なぜなら[理由]だからだ。 ### 6.4 ストーリー収集ワークショップを開催する * なるべく多くのフィーチャーを捉えるため、顧客と開発チームが一緒にユーザーストーリーを書いていく。 * 大人数が入れる大きい部屋で行い、図をたくさん用いてブレインストーミングが効率よく進められるようにする。 * ユーザーストーリーを抽出する際は、INVESTの原則を心掛ける。 * 大きめのストーリーはエピックと呼び、ざっくりとした計画や、必要である確信が持てない時に役立つ。 * その他必要なもの(書類作成、資材準備期間等)も洗い出し、ストーリーをリスト化する。 ## 第7章 見積もり 当てずっぽうの奥義 ### 7.1 概算見積もりの問題 プロジェクトで最初に出す見積もりは、そもそも当てずっぽうにすぎない。 問題となるのは、見積もりへの期待の大きさが異なる点である。 顧客は、見積もりは正確な予測であると思っているが、実際には当てずっぽうなので不確実性が大きい。(不確実性コーンのグラフ) この期待の差が大きいまま合意してしまうと、後から顧客と開発チームで深い亀裂が生じることになる。 #### 正しい見積もりを行う あくまで見積もりは、プロジェクトをやり遂げられるかを知る目的で行う。 正しい見積もりを行うためには、以下の3点が必要である。 * 今後の計画を立てられる。 * 見積もりは当てずっぽうである前提条件を踏まえている。 * ソフトウェア開発の複雑さを認めている。 ### 7.2 ピンチをチャンスに 正しい見積もりのために行うのが、相対見積もりと、ポイント化である。 #### 相対見積もり あるユーザーストーリーを完了させるまでの期間を基準(1)として、基準値の何倍であるかを見積もる。絶対的な見積もりを取り去ることで、より概算的になる。一方で、1日=1営業日としてしまいがちである。 #### ポイント化 基準値を日数で示すのではなく、ポイントで表す。大きいポイントほど大変な作業である。相対見積もりと比べて感覚的なのが特徴で、具体的な日数に左右されないメリットがある。 ### 7.3 見積もり技法 #### 三角測量 代表的なストーリを基準として選出し、残りのストーリーを相対的に見積もる。 実際のストーリーと明らかに違う場合は再見積もりを行うが、それなりに正しければよい。 検討がつかないストーリーは、タイムボックス化された実験「スパイク」を行って見積もる。 #### プランニングポーカー 開発メンバー全員が集まって、ユーザーストーリーに対する見積もりを合わせるためのアクティビティである。 ポイントが書かれたカードを用いて、メンバーそれぞれの見積もりをポイントで表す。意見が異なれば、話し合いを行った上で全員が一致するまで繰り返す。 投票システムではなく、話し合いで見積もりを調整する場である。また、プランニングポーカーの数字はなるべく小さいもののみを用いる。 ## 第8章 アジャイルな計画づくり:現実と向き合う ### 8.1 固定された計画の問題 変化に対応できない計画は順風満帆なスタートでも、突如として崩壊していく可能性がある。(主力メンバーの引き抜き、開発速度が思った以上に低い、顧客の要求が変わるetc...) プロジェクトが成功するための計画には、次の4つの観点が必要である。 * 顧客にとって価値ある成果を届けられる計画。 * わかりやすくありのままを伝える、誠実な計画。 * 約束を守り続けられる計画。 * 必要に応じて変更できる計画。 ### 8.2 アジャイルな計画づくり まずは、チームの開発速度を計測する必要がある。 * Todoをまとめた「マスターストーリーリスト」 * ユーザーストーリーから動くプログラムへの変換速度である「ベロシティ」 * スクラムのスプリントに代表される、開発期間単位の「イテレーション」 この3つで表す。 まず、「イテレーション数=全作業量÷予想ベロシティ」でイテレーション数を見積もる。ここからイテレーションをこなして、予想と比較して進みが早いか遅いかを見る。実際のベロシティが予想より大きいと速く、小さければ遅くなる。 ### 8.3 スコープで柔軟に 作業量が多すぎる場合、マスターストーリーリストを見直す。ここで要求される範囲=スコープを見直すことで、作業量を減らす。 なお、スコープを柔軟に変更できるよう、顧客側に外すユーザーストーリーを予め決めてもらうことが大切である。 ### 8.4 初回の計画づくり 1. マスターストーリーリストを作る(スクラムのプロダクトバックログ) ユーザーストーリーを実現するためのフィーチャーの一覧である。 顧客が優先順位をつけて、開発チームが見積もる。 およそ1~6か月程度でこなせる仕事の範囲に収まるようにする。 この中から、1~3か月分程度で分け、ストーリーのサブセット「リリース」としておく。 リリースは、そのまとまりで実装してデプロイできる価値がある編成にする。 MMF(Minimal Marketabke Feature set) 最小限度の市場価値のある機能をまとめておく。=>MVPの要素となる。 2. プロジェクト規模を見極める プロジェクトの規模と、その旅の長さの見通しを見極める。 3. 優先順位をつける 最も重要なストーリーから順番に実装する。そのためには、顧客にビジネスの観点から優先順位をつけてもらう。また、開発チームは技術的なリスクが高いものは先に片づけるよう伝える。 4. チームのベロシティを見積もる 8.2, 8.3の通りに、ベロシティを見積もる。 この時、個人の生産性を計測しないこと。チームの信頼関係が崩れてしまう。 プロジェクトを始めたばかりだとベロシティは安定しないが、3~4回イテレーションをこなせば安定する。 完了の定義をあらかじめ確認しておき、漏れが無いかをチェックできるようにする。 過度な期待を抱かせず、控えめな目標で良い。計画は当てずっぽうであることが前提なのだから。 5. 期日を仮決めする 開発期日は、期日固定型だと変化への対応が難しい(重要なストーリーが見つかった場合、スコープ内でトレードオフを行う)一方で、メンバーの緊張感を保つことができる。 フィーチャーセット固定の場合、期限を柔軟にする代わりに確実な機能提供が求められる。基本的にフィーチャーをすべてこなすまで終われないが、中核部分が完成すれば、残りは調整可能である。 ### 8.5 バーンダウンチャート 縦軸を作業量、横軸を時間とし、イテレーションごとにベロシティ分グラフの高さを下げていき、どの程度の速度で開発できるかを表にまとめたものである。 * 残りの作業量 * 完了させた作業量 * チームのベロシティ * いつ頃に終えられるか 以上の4つが分かる。 また、新たなストーリーの追加や要求の変更などの背景の動きも、グラフの動向になって見える化する。 プロジェクトのありのままを伝えてくれるチャートである。 #### バーンアップチャート 逆に、終了したベロシティ分が徐々に積みあがっていくバーンアップチャートもある。ストーリー量の変化のグラフが書き加えられ、分かりやすい。 ### 8.6 プロジェクトを途中からアジャイルにする 行き詰まり、早く成果を上げたいならば、現状の計画を捨て、インセプションデッキの構築から進めていくしかない。新しく、信じることのできる計画を立て直していく。 そこからは、可能な限りはやくMVPを届け、小さくてもいいので価値のある成果を届けていく。「完了」を繰り返すことで、やがて顧客の信頼は回復に向かうであろう。 ### 8.7 現場で実践する これまでの理論をもとに、現場で実践していく。 #### シナリオその1: 顧客が新しい要求を発見したら 顧客にその要求をどうしたいかを尋ねる。期限を延ばして作ってもらうか、ユーザーストーリーから優先度を低いものを除外するか。 決めかねている場合は、オプションとして「あるといいな」リストに加える。 #### シナリオその2: 進捗がおもったよりも遅い ベロシティが思うように上がらない場合。序盤であれば想定内。計画は当てにならない前提と柔軟なスコープがあれば対処できる。 ここで重要なのは、開発速度が上がらないという事実について話し合ったり、顧客に選択肢を持たせたりすることである。 悪い知らせも素早く伝えて対処するのがアジャイルの流儀である。 この問題が終盤であれば難しいため、隠さず率直に顧客と話し合った方が良い。 ##### スパルタ戦士の流儀 スパルタ式では、余分な部分を省いた最小バージョンでさえも間に合わないなら、計画が間違っているとみなす。 中核のフィーチャーをいくつか選び、その実装にどれくらいかかるかを計測する。この計測結果を基準として、相対見積もりを行う。 そして、残りの時間とリソースで達成できるかを確認する。 達成不可能な場合、顧客との交渉に臨む。事実をはっきりと伝え、計画を修正するための良い議論に繋げる。 #### シナリオその3: チームメンバーが抜けた場合 顧客にその旨を報告し、進捗の遅れが生じることを伝える。 そして、メンバーが抜けた後のベロシティの減少幅によって、具体的にどの程度の影響が出るかを見積もり、顧客に報告する。 #### シナリオその4: 時間が足りなくなったら 一番はスコープを調整する事であるが、顧客と問題に向き合い、解決策を真剣に模索することになる。 顧客が困ったときに救いの手を差し伸べることは、長続きする信頼関係の構築につながる。お客様に選択肢を示せることが大事である。 また、この時の話し合いは双方向でなくてはならず、一方的な押し付けはしないことが望ましい。 ###### tags: `読書`