チケット駆動開発におけるサイクルタイムの計測方法~リーン開発で最も重要なメトリクス
「リーン開発の現場」「リーン開発の本質」「リーンソフトウエア開発」を読み直すと、リーン開発で最も重要なメトリクスはWIP(仕掛り制限)ではなく、サイクルタイムであるような気がした。
ラフなメモ書き。
【1】「リーン開発の現場」を読み直すと、XPやScrumには出てこなかったメトリクスとして、サイクルタイムが出てくる。
「リーン開発の現場」では、サイクルタイムとは、1機能の開発にかかった日数(週数)。
かんばん上の計測方法としては、「次の10機能」ステージから「受入テスト準備OK」ステージへ到着するまでの時間である。
サイクルタイムは何故重要なのか?
サイクルタイムは、顧客の要求が受付された後、本番リリースまでにどれくらいの時間がかかるか、を意味する。
サイクルタイムが短いほど、顧客の要求が製品に反映されるリードタイムが短くなるから、よりスピーディに注文を受け付けることが可能になる。
一時期のDellのPC組立事業と同じだ。
しかし、サイクルタイムを短くするのは現実的にはかなり難しい。
実際にサイクルタイムを計測してみると、その内訳の殆どは作業待ち時間で消費されている。
つまり、「ムダ」がたくさん含まれている場合が多い。
「リーン開発の現場」では、プロセスサイクル効率でムダがどれくらい存在するのかをメトリクスで示している。
プロセスサイクル効率=作業日数/経過日数
「リーン開発の現場」によると、たいていの企業ではプロセスサイクル効率は10~20%くらいだという。
つまり、サイクルタイムが20日(1ヶ月)だとしたら、実作業時間はわずか2~4日であり、残りの16~18日は作業待ち時間として在庫として積まれている事実を意味している。
作業待ちが16日以上もあるのならば、何故すぐにリリースしないのか、という指摘をしているわけだ。
製品が作業待ちとして80~90%も倉庫で眠っているとしたら、倉庫に保管している間、電気水道代もかかるし、その期間に市場が値崩れしてしまう危険もあるからだ。
【2】「リーンソフトウエア開発」P.33において、バリューストリームマップで分析したサイクルタイムの例が載っている。
(1)伝統的なウォーターフォール型開発の場合、
要求抽出→プロジェクト承認→要求収集→顧客の承認→分析→設計→設計レビュー→コーディング→テスト→導入
の作業が発生し、下記の内訳となる。
作業時間(実績工数)=21.6週
作業待ち時間=35週
↓
サイクルタイム=作業時間+作業待ち時間=56.6週
↓
プロセスサイクル効率=21.6/56.6=38.2%
(2)アジャイル開発の場合は、
要求抽出→プロジェクト承認→仮設→1イテレーション→2イテレーション→3イテレーション
の作業が発生し、下記の内訳となる。
作業時間(実績工数)=14.1週
作業待ち時間=2.8週
↓
サイクルタイム=作業時間+作業待ち時間=16.9週
↓
プロセスサイクル効率=14.1/16.9=83.4%
上記のサイクルプロセス効率を比較すると、WF型開発では、サイクルタイムのうち実作業して顧客に価値を提供している割合はわずか38%しかないのに対し、アジャイル開発では、サイクルタイムの実に80%以上を顧客に実際に価値を提供している作業に費やしている。
つまり、アジャイル開発の方が作業にムダが少ないことを指摘しているわけだ。
但し、「リーン開発の現場」では普通の企業のプロセスサイクル効率は10~20%しかないと書かれているから、もしそれが本当だとしたら、上記のWF型開発のメトリクスよりも更に悪いために、本当に意味ある作業に殆ど費やしていないことを示しているのだろう。
【3】チケット駆動開発で、サイクルタイム、プロセスサイクル効率はどのように実装されるか?
回答は下記だ。
チケットの属性には、開始日、終了日、実績工数が必ず入力されているとする。
(1)サイクルタイム=チケットの平均完了日数(チケットの開始日から終了日までの経過日数)
(2)プロセスサイクル効率=チケットの実績工数の合計/チケットの完了日数
各チケットでサイクルタイムは上記で計算できるので、アジャイル開発では、各イテレーションの全てのチケットのサイクルタイムを計算できるから、1イテレーションの平均サイクルタイムを出力できる。
そこから、イテレーション単位にプロセスサイクル効率を計算できる。
【4】上記の定義を見ると、チケットのサイクルタイムはMantisの平均完了日数とまさに同一だ。
Mantisのチケット集計機能にある最大放置日数と平均完了日数: プログラマの思索
つまり、チケットが起票されてCloseされるまでの経過日数が平均完了日数であり、サイクルタイムとなる。
更に、障害チケットのサイクルタイムは平均修復時間(MTTR)そのものになる。
アジャイル開発では、サイクルタイムを短くすることに注力する。
その意味は下記にも書いたけれども、MTTRを極力短くすることによって、信頼度を高く保つことにある。
そのやり方は、WF型開発が極力故障を起こさないような方針に対し、アジャイル開発はたとえ障害がたくさん発生してもMTTR(サイクルタイム)を短くすることで、信頼度を同じ程度に保てるはずだ、という主張になっている。
アジャイル開発が問題点をすり替えた品質特性~機能性と信頼性: プログラマの思索
【5】上記の定義を見ると、チケットのプロセスサイクル効率は、簡単に出力できる。
チケットが完了したタイミングで、実績工数と完了日数は確定される。
つまり、チケットを完了ステータスへ更新するタイミングで、リアルタイムにチケットのプロセスサイクル効率を計算すれば良い。
【6】チケット駆動開発において、サイクルタイムやプロセスサイクル効率というメトリクスは、どんな分析結果を提供し、どんな課題が発生するのか?
「リーン開発の本質」P.129にタスクリストの話が載っている。
あるマネージャは、プロジェクトのタスクリストに750個のタスクがあり、それらに優先順位を定期的につけているという。
メアリーは、その要求を1ヶ月に平均していくつ完成できるか、聞いた。
マネージャは、平均して、毎月9つは完了すると答えた。(つまり、Velocityは9個/月)
すると、750個/9(個/月)=約7年分の作業がタスクリストに積まれていることになる。
その意味は、新しい顧客の要求がたった今到着したとしたら、タスクリストという作業待ち行列(キュー)の順序を変更できない場合、7年後にならなければリリースされないことを意味している。
メアリーは、絶対に終われないなら、そんなに大量のタスクリストに意味があるのか、と問うている。
この寓話は非常に重要な指摘事項だ。
チケット駆動開発を運用すると、チケットはどんどん溜まっていく。
チケット駆動開発では、忘れたくない作業や顧客の要望で重要度は高くない要望もチケット化する時が多いからだ。
だから、100枚や300枚のチケットが残として残るのは普通だ。
すると、残チケットの重みでタスクの進捗は落ちていきやすい。
例えば、300枚の残チケットがあるならば、Velocityが5枚/週としても、60週=約1.1年分のタスクが積まれていることになる。
以前Mantisを運用していた時、Mantinsのメトリクス画面において、チケットの平均完了日数は100~300日という値はザラに表示されていた。
その場合ならば、もっとひどくなるだろう。
それゆえ、チケット駆動開発では、棚卸しという場で、全チケットを精査し、イテレーション(リリースバージョン)単位にチケットを振り分けして、制御可能な作業量へ調整する。
棚卸しはできれば毎日、少なくとも週1回は行わなければ、チケットの精度が落ちてしまう。
また、Pivotal Trackerのように、Iceboxという要望の貯蔵庫を別途作る運用もある。
Pivotal Trackerとredmineの違い: プログラマの思索
例えば、忘れたくない作業や顧客の要望で重要度は高くない要望のように、今すぐ着手する必要はないチケットは、Iceboxに一旦保管しておき、棚卸しのタイミングで必要なチケットをBacklogに引っ張り出し、イテレーションに割り当てる。
Iceboxという特別なイテレーション(Redmineの対象バージョン)に保管しておけば、サイクルタイムの計算外として運用することも可能になる。
その意味では、チケットの棚卸しというプラクティスで、サイクルタイムが長くなりやすい罠を防ごうとしている。
だが、棚卸しだけでは対策は不十分だ。
「リーン開発の現場」に出てくる因果関係図、「リーン開発の本質」に出てくるバリューストリームマップ、TPSのなぜなぜ分析のようなツールを使って、サイクルタイムにムダな作業がないか、なぜ作業待ちというムダが発生するのか、を徹底的に原因追求する必要があるだろうと思う。
【7】XP→Scrum→リーンというアジャイル開発の進化の歴史を辿ると、XPが見出した暗黙的なメトリクスが具現化された過程のように思える。
XPが提唱した週40時間労働、持続可能な開発ペースという概念は、ScrumがVelocity(スプリント単位の平均開発速度)で具現化された。
XPが提唱した小規模リリース、イテレーション単位の頻繁なリリースの背後には、サイクルタイム(要望受付からリリースまでのリードタイム)を短くするという手法が隠されている。
そのメトリクスはリーン開発では、サイクルタイム、プロセスサイクル効率で具現化された。
チケット駆動開発上でサイクルタイムやプロセスサイクル効率を実装した場合、どんな効果が生まれるのかをさらに考えてみたい。
| 固定リンク
「プロジェクトマネジメント」カテゴリの記事
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
「ソフトウェア」カテゴリの記事
- 「RedmineのUbuntu+Docker構築への移行」の感想 #redmineT(2024.11.24)
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのenum型はシングルトンクラスみたいだ(2022.06.20)
- テスラが従来の自動車メーカーと異なるところは工場までソフトウェア化すること(2022.02.09)
- 「RubyやRailsは終わった」という記事のリンク(2022.01.09)
「Redmine」カテゴリの記事
- 「RedmineのUbuntu+Docker構築への移行」の感想 #redmineT(2024.11.24)
- 第27回redmine.tokyo勉強会の感想 #redmineT(2024.11.10)
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
「ソフトウェア工学」カテゴリの記事
- アーキテクチャ設計はベストプラクティスを参照するプロセスに過ぎないのか?~Software Processes are Software, Too(ソフトウェアプロセスもまたソフトウェアである)(2024.09.22)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- マイクロサービス設計は従来のアーキテクチャ設計と何が違うのか(2024.01.02)
「チケット駆動開発」カテゴリの記事
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
「Agile」カテゴリの記事
- 「世界一流エンジニアの思考法」の感想(2024.12.08)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
コメント