〜ストーリー・計画づくり篇〜
XP祭り2022
2022/10/01 nikkie
Py thon Con ference Japan 2021 座長
国内外のPyConで定期的に(リモート)登壇(2020〜)
最近のアニメはリコリコ、スーパースター🌟💫などなど楽しんでます😆
株式会社ユーザベース (Python、自然言語処理)
We're hiring!! (Engineers, Data scientists, Researchers)
2019年、ユーザベースにJoinしてXPの実践スタート
XP未経験 から開発チーム(先輩XPer)のプラクティスを見様見真似で実践
3年経った頃「このやり方でいい?」と思うように
ストーリー(=ユーザーストーリー User story)
計画づくり(planning、計画を作る過程)
『エクストリームプログラミング』には簡潔な説明がある
「私のこのやり方でいいんだっけ?」(本質をわかっている達人(例:ケント・ベック)は同じやり方をする?)
👉 他の書籍 にあたっていく
プラクティスの実践➡️価値の理解
価値を体現するプラクティスを探す
書籍(この発表のメイン)
社外の読書会(Special thanks agile_devs )
日々チームでの実践(Special thanks チームメンバー)
キーノートでも「旅」出ましたね
現時点での私の理解を共有します
ちょっとしたことでもフィードバックいただけるととても嬉しいです🙌
ストーリー
計画づくり
ストーリー(ユーザーストーリー)とは
顧客に見える機能の単位を使って計画すること
『エクストリームプログラミング(第2版)』7.6
確証が持てなかったポイント「ストーリーはどこまで詳細にする?」
機能の単位で計画する中で、ストーリーにメモが増えていく📝
ユーザーストーリーとは、システムの機能をユーザーの視点から簡潔に記述したもの
第3章「ストーリーとポイント」
詳細化を避けるのは鍛錬である。
第3章「ATMのストーリー」📘
ストーリーをマネジメント可能、スケジュール可能、見積り可能にするためには、「一時的な詳細の欠如」が必要である
第3章「ストーリーとポイント」📘
Webページ作成中のLorem Ipsumや「ああああ」と同じということ
実際のコンテンツは後から挿入される
ああああ
ああああ
ああああ
※プレースホルダーの例のスライドです
詳細な仕様を決めるのは、ストーリーを開発するときまで可能な限り遅らせたい。
第3章「ストーリーとポイント」📘
当初の疑問「ストーリーはどこまで詳細にする?」
ストーリーは 会話のプレースホルダー
💡詳細化はあまり効果的ではない(「ああああ」を「あいうえ」に凝っても・・・)
英語で読んでます
初版は日本語 で入手できます(2009)
Stories are for planning. They’re the playing pieces of the planning game. That’s it!
8.Planning > Stories
ストーリーとは計画のためのものです。ストーリーは 計画ゲームをプレーするための駒 で、それだけです!
計画段階(プラクティス The planning game)においての話
ストーリーがちょうどいい大きさ・大きすぎる・小さすぎるが分かる状態
『Clean Agile』📘の 詳細化を避けると重なる
Use task planning to break the first few stories into development tasks.
8.Planning > Adaptive Planning > How to Create Your Plan
当初の疑問「ストーリーはどこまで詳細にする?」
(やはり)ストーリーは詳細化しない
計画とは別にタスクに分解
裏にある考え方はなんだろう?
実践を踏まえるとどのようにとらえられるだろう?
ストーリー(ユーザーストーリー)とは
顧客に見える機能の単位を使って計画すること
ストーリーは 状況 によって詳細化の程度が変わる!
計画時は 詳細化を避ける
計画とは別にタスクに変える
XPの価値の1つ「シンプルさ」
計画時は簡潔な記述に留める
XPの価値の1つ「コミュニケーション」
「会話のプレースホルダー」
取り組む際にコミュニケーション して、詳細化する
XPの価値の1つ「フィードバック」
チームの 学びを反映 して詳細化したい
計画時に話した詳細は信用していない(『Clean Agile』📘)
📣「詳細化したい衝動に抵抗するんだ!」
計画段階では規模で分類できればいい。詳細化は後で
💡ストーリーのプラクティスの鍵は どこまで詳細化するかチーム内の認識合わせ
見積もって 計画 するために、 一時的に詳細化を避ける
「会話のプレースホルダー」、開発して学びを得た上で直前で詳細化
ストーリーポイント
規模を見積もり、期間を導出
ストーリーを ポイント で見積もっている(1pt、2pt)
フィーチャを実装するのに必要な作業、開発内容の複雑さ、開発に内在するリスクなどが渾然一体となったもの
『アジャイルな見積りと計画づくり』(4章 p.62)
ポイントの数字はあいまいで、ファジーで、精度の低いものであり、実時間と直接 関連しているわけではない
『Clean Agile』(第3章 ATMのストーリー 強調ママ)📘
5 ポイントのバケツに 5 ポイント 分よりも少し多めに砂を入れたとしても、砂がバケツからあふれることはない
『アジャイルな見積りと計画づくり』(6章 p.75)
ストーリーどうしを比較
平均的な規模のゴールデンストーリー
少ない労力で大きな効果 が得られる状態(図の左寄り)(『アジャイルな見積りと計画づくり』6章)
精度が低い(ブレる)からこそ短時間(『Clean Agile』📘 第3章)
フィードバックで調整して精度を上げていく
ストーリーポイント✅
規模を見積もり、期間を導出
『アジャイルな見積りと計画づくり』(4章)
ストーリーポイント(既出):規模の見積り
ベロシティ
ベロシティとは、チームの進む速度をあらわす数値
『アジャイルな見積りと計画づくり』(4章 p.63)
チームが 1 回のイテレーションで完了させたユーザーストーリーのストーリーポイントの合計値
『アジャイルな見積りと計画づくり』(4章 p.63)
プロジェクト全体の規模を見積もる(ストーリーポイントの合計)
規模をベロシティで割る = 必要なイテレーション回数 の見積り
『アジャイルな見積りと計画づくり』(4章)
ベロシティが分かっている場合はイテレーション回数はすぐ求まる
ベロシティが不明な場合(例:新規チーム)、ベロシティを見積もる(後述)
ストーリー
計画づくり
(ちょっと長いですが)「これでいいんだっけ」を共有します
ここでは、1イテレーションの期間は1週間とする
全体の規模 \(\div\) ベロシティ
1回1回のイテレーションに入っていく
優先度の高いストーリーを採る
ポイントの合計がベロシティになるまで
ストーリー=食料品
ストーリーポイント=値札
ベロシティ=予算
ref: 『エクストリームプログラミング(第2版)』第12章
完成させようと 試みる ことを約束しているわけでもない
『Clean Agile』第3章 ATMのストーリー(強調ママ)📘
「採ったストーリー、今週は全部できませんでした」
翌週もこれが繰り返される
コミットの強度が低くなってる?(信頼目減りしてない?)
ちょっと話題を変えて
今日の天気は昨日の天気と同じだろう
今回のイテレーションのベロシティは 前回のイテレーションのベロシティと同じ だろう
ベロシティを 過剰 に見積りすぎた(overestimate)
見積もったベロシティに満たない
昨日の天気により、次のイテレーションはベロシティを 小さく できる(達成はより現実的)📉
ベロシティを 過小 に見積りすぎた(underestimate)
見積もったベロシティを上回る
昨日の天気により、次のイテレーションはベロシティを 大きく できる📈
今回はストーリー全部できませんでした(の繰り返し)
分母のベロシティは 昨日の天気
今回のベロシティは前回のイテレーションと同じ
イテレーションを通して 同じベロシティという前提 でスケジュールが算出されている!
「今回はストーリー全部できませんでした」はフィードバックのトリガー!
同じベロシティという前提が崩れている👉 スケジュールに影響 する(結構重要な事態!🚨)
昨日の天気により、小さい値に調整された
全体の規模 \(\div\) ベロシティ により、所要する イテレーション回数は増える
この懸念はステークホルダーに共有されるべきと考える
発生した場合はスコープの調整(全体の規模を減らす)が有力(ref: 荒ぶる四天王『アジャイルサムライ』)
そもそも今回は全部できませんでした(の繰り返し)に ならないようにする 方法はある?
有力と考えている対策(実践中)
各イテレーションのイメージ
各イテレーションで必ず達成すること
各イテレーションで完全Doneしようとする
意志を乗せていなかった私、状況に翻弄されている
前回も今回もストーリー全部できなかった(あわわわ)
意志を乗せることで、 主導権を取った 状態
リリースプランニング
イテレーションプランニング
「今日」のプランニング
『アジャイルな見積りと計画づくり』(3章 図3.1)
リリースプランニング
各イテレーションのイメージ
各イテレーションで必ず達成すること
イテレーションプランニング & 「今日」のプランニング
各イテレーションで完全Doneしようとする
裏にある考え方はなんだろう?
実践を踏まえるとどのようにとらえられるだろう?
昨日の天気 が採用されている!
=同一のベロシティという前提
上回るのに比べて 下回るのはかなりまずい
XPの価値の1つ「フィードバック」
いつまでに作る(何イテレーション分か)への回答がズレる(多くの期間が必要)とわかる
ステークホルダーとコミュニケーションを!
ベロシティが 分からない場合 の見積もり(『Clean Agile』📘)
見積もったベロシティ(と導出される期間)の精度は低い(ブレうる)
ベロシティのデータが蓄積されるとベロシティも期間も精度が高く(ブレずに)見積もれる
各イテレーションをイメージし「ストーリーを完了させるんだ」という 意志 を乗せる
ただし、それでもすべてを完了させるのは至難の業
「やるんだ」のスタンスであれば、状況に対して主導権は取れている(と考える)
ベロシティが見積った値を下回ったという結果は、 期間を導出した際の前提(同一ベロシティ)を 大きく 揺るがし ている
WE WILL:「毎イテレーション、すべてのストーリーを完了させるんだ」という意志を乗せる
ストーリー:「どこまで詳細にする?」
計画づくり:「ストーリー全部できませんでした」
ストーリー:「どこまで詳細にする?」
計画時点では 詳細化を避ける
計画づくり:「ストーリー全部できませんでした」
ストーリー:「どこまで詳細にする?」
計画づくり:「ストーリー全部できませんでした」
同一ベロシティが前提 にされているので即フィードバックを回す
意志 を乗せる
守:1つの技法をコピー、質問しない
破:技法を集める
💡「このやり方でいいんだっけ?」は破の段階に差し掛かっていたということか!
Enjoy your journey!❤️
References が続きます
『エクストリームプログラミング(第2版)』(2015)
『Clean Agile』(2020)
『アジャイルな見積りと計画づくり』(2009)
『アート・オブ・アジャイル デベロップメント』(2009)
『アジャイルサムライ』(2011)