« 2011年5月 | トップページ | 2011年7月 »

2011年6月

2011/06/30

Scrumの謎をRedmine Backlogsプラグインで解く

先日行われたScrum Boot Campに参加した方から、Scrumの謎が解けた、というつぶやきがあったのでメモ。
僕はScrum研修を受講した経験がなく、書籍による理解しかないことを先に断っておく。

【元ネタ】
Scrum Boot Camp 横浜に参加してきた - Diary of absj31(2011/07/01から移行します:→http://d.hatena.ne.jp/shinyaa31/)

Twitter / @frerudev: @hideo_sa 私はScrum Boot Camp終了後、Redmine Backlogプラグインの使い方がようやく理解できました。ずーっつスッキリしなかったScrumの謎がかなり解けた感じです。行ってよかったです。

Twitter / @akipii: @frerudev Scrumの謎はどこにあったのでしょうか? よろしければ教えて下さい。

Twitter / @frerudev: @akipii Scrumはxpに比べると具体的な方法が限定されていないので、断片的に各要素についての知識は有っても、(実経験がないので)全体の流れのイメージが理解出来ていなかったのだと思います。

Twitter / @frerudev: @akipii 私の場合、障害管理の観点からチケット駆動開発を導入した経緯があり、プロダクトバックログの概念が薄かったというのがあります。優先度ではなく優先順位を明確にして、見積ゲームで工数予測・スコープの限定を行う部分はやってみて納得しました。

Twitter / @frerudev: @akipii RedmineならBacklogsプラグインを使えば、Scrumの電子化が楽になりますよね。ようやく理解できました。ただ、実際にScrumを導入されている方々はポストイットを使ったタスクボードを薦めますけど

@frerudevさんの感想は、違う文脈で僕もとても共感している。
ScrumはXPよりも誕生が古いけれど、XPが暗示した概念を明示化して一つのフレームワークにしたのはすごいと思う。
Scrumが定義した概念であるプロダクトオーナー、プロダクトバックログ、スプリント、ベロシティなどは、とても優れていると思う。
僕が理解したことは下記に書いた。

オンサイト顧客が暗示したもの~プロダクトオーナーとアーキテクトの役割: プログラマの思索

TiDDを実践して気づいたことpart9~Scrumのベロシティ #tidd: プログラマの思索

TiDD初心者が陥りやすい罠~バージョンをCloseしないRedmineはVelocityが分からない: プログラマの思索

Redmine BacklogsプラグインはScrumを理解していないと使いづらいけれど、Scrumの諸概念を理解していれば、とても分かりやすいだろうと思う。
逆に言えば、Scrumを運用する前に、Redmine BacklogsプラグインでScrumをシミュレーションして実際の運用をイメージする手法を意図的に取ることもできるだろう。

RedmineのBacklogsプラグインを入れてみた: プログラマの思索

Backlogsプラグインの使い方は@daipresentsさんの記事がとても詳しく説明しているので、参考にしたらいいと思う。

Redmine Backlogsで簡単スクラム!プロダクトオーナーとして使う編 | 世界 - @daipresents

Redmine Backlogsで簡単スクラム!スクラムマスターや開発チームとして使う編 | 世界 - @daipresents

| | コメント (0) | トラックバック (0)

2011/06/26

Redmine導入はERP導入に似ている #tidd

Redmine導入はERP導入に似ているなと思ったのでメモ書き。

【元ネタ】
Twitter / @akipii: @naitoh Redmineを導入しても、ガントチャートのPDFや課題一覧のExcelを綺麗に出したい要望はPM層に多いです。Redmine導入はERP導入に似てますね。顧客と同様、PMも帳票(紙)にこだわっている。#redmine

Twitter / @akipii: @naitoh 僕もはまりました。でもRedmine XLS Export pluginは苦労してインストールする価値があります。チケットの属性を選んでExcel出力できるので、課題一覧が欲しいPMにうってつけです。#redmine

Twitter / @akipii: Redmineを導入して使いづらいと言う人達は、アンチパターンの罠にはまっている時が多い。この辺りの事例をまとめてみたい。チケット駆動開発は最終的にはアジャイル開発をサポートするインフラになると思う。#redmine

Twitter / @akipii: @cointoss1973 運用例を知らずにアジャイル精神を伝えて分かるようなら苦労しない。逆にRedmineのバージョン単位に小規模リリースする運用が何故Agileの概念と密接に絡むのか説明しなければ、アジャイルごっこに過ぎない。理念と実装の両方が必要でしょうね。

【1】ユーザ企業がERPを導入して業務改善する事例は、90年代のBPR(Business Process Reengineering)から始まり、EA(Enterprise Architecture)やSOAなどまで、たくさんのバズワードが出ては消えていった。
実際の所、ERPを導入して確かに業務がシステム化されたとしても、それですぐに効果が出るとは限らない所が多かったのではないか?

ERP導入の前に一番最初にやる重要な作業は、Fit And Gap分析だ。
つまり、実際の業務(AsIs)をERP(ToBe)へマッピングした場合、ERPで実現できる業務と、ERPで実装されていない業務を分別して洗い出し、カスタマイズして実装すべきか、もしカスタマイズするならどれくらのコストがかかるのか、を分析する。

フィットギャップ分析 - @IT情報マネジメント用語事典

このFG分析は正直かなり難しい。
実際の業務は大企業になるほど膨大で、ユーザ企業の情報システム部門が全てを知っているとは限らない。
現場でヒヤリングしてみると、その現場特有の運用ルールで回していたり、特定の社員のスキルに依存していたりする。
また、ERPはパラメータで業務を浅く広く対応できるようにしているから、どのパラメータを使えば、ユーザ企業の業務を実現出来るのか、を探るために、ERPのかなり深い仕様まで知り尽くさないといけない。

そして、ERPで実現できない業務が曲者だ。
ERPは欧米生まれのソフトが多いので、日本特有の商習慣は無視されている。
ERPにない仕様で有名なのは多分締め処理で、日本企業のためにローカライズして実装している場合が多いだろう。
すると、カスタマイズの工数が膨れ上がり、現場にせっかく導入しても、使いづらいとか、帳票が対応してない、とか色々と苦情が更に出てくる。

そして、FG分析だけでなく、導入効果を測定することもERP導入では重要だ。
何故なら、高価な業務ソフトを導入して、どれだけの売上が増えたのか、どれだけコストを削減できたのか、を数値で表現できなければ、ERPを単に導入しただけで終わってしまう。
つまり、ERPで効率化していくには、当初の目標と導入後の効果を比較して、更に原因を突き詰めて、業務を改善していくPDCAサイクルが必要。
多分、普通はバランス・スコアカードのように、各種の視点で評価する指標(KGI)を定めて、測定するだろうと思う。

すなわち、ERP導入は単なるシステム化ではなく、実業務に関わる人員コストの削減と自動化を図り、更に経営に役立つデータを提供して、業務を改善していくという目的がある。

【2】Redmineを導入してみると、うまく運用できていないチームを見たり聞いたりする。
その事情を探ると、Redmine導入の失敗事例は、ERP導入の失敗事例に似ているなあと思う。

Redmineを導入して失敗する理由はいくつかある。
一つは、自分たちの開発業務とRedmineの間のフィットギャップ分析ができてないこと。

ERPですら、自社の業務を全てカバーできるはずが無い。
必ずERPのカスタマイズが必要で、コストを掛けてでも実装するのか、あるいは手作業で従来通り運用するのか、運用設計するのが大事。
つまり、ERPカスマイズのコストと従来通りの運用コストを天秤にかけている。

Redmine導入もERP導入と同様だ。
自分たちのチームの開発業務を全てRedmineへマッピングできないだろうから、どの業務がRedmineで実現できないのか、その業務はRedmineをカスタマイズしてでもIT化するのか、それとも従来通りExcelの運用でカバーするのか、という意思決定を下さねばならない。
そもそも、自分たちの開発の業務フローを分析出来ていないチームが多い。
実際、Redmineのトラッカーは業務のワークフローに相当するのですがどれだけの業務がありますか、と質問すると、答えが返ってこないチームがとても多い。

更に、業務をIT化することによって、今まで人に依存していた作業がなくなり、体制そのものも変わってしまう事実を知らない人たちも多い。

ERP導入によって、経理事務の女性の仕事は全て、単にPC上で数値を入力する派遣社員に変わり、経理事務の社員の仕事はそれら仕訳データの整合性をチェックする仕事に変わった。
同様に、Redmineを導入することによって、Excelで管理していたたくさんのドキュメントが全てWeb化され、メンバー自身で更新する運用になることによって、現場リーダーやプロマネの仕事は、メンバーの進捗管理ではなく、チームの課題や潜在リスクを解決してメンバーの開発をサポートする方向へ変わってしまう。
つまり、管理者の仕事の中身も役割も大きく変わってしまう事実に気づかない人たちが多い。

ERP導入で開発ベンダーがよくはまる罠は、ユーザ企業から帳票のレイアウトを変えて欲しい、という要望を受ける時だ。
何故か日本企業は帳票のレイアウトにとてもうるさく、その要望を受け付けると、なかなかOKの返事がもらえない。ユーザはフォントやレイアウトにとてもこだわる。
会計帳票は特にそうだ。
とはいえ、帳票のカスタマイズは普通は必須だし、そこでお金がもらえるので、ありがたく受け取るときも多いが。

Redmine導入でも、PM層から帳票やExcelに関する改善要望はとても多い。
彼らは、顧客へ提出するガントチャートのPDFや課題一覧のExcelを綺麗に一発で出して欲しいらしい。
そんな見た目の話よりも、開発業務の効率化や自動化、Agile化に注目して欲しいのに。

但し、RedmineはRailsで作られているので、プラグインやパッチによって簡単に機能改善できるのが魅力の一つ。
PM層からあげられた改善要望は、Railsで実現してしまえばいい。

【3】もう一つは、Redmineを導入して効果が上がったかどうか判定する指標がないので、Redmineを単に使うだけになってしまい、Redmineによって自分たちの開発業務を改善していくPDCAサイクルが生まれないこと。

障害管理ツール(BTS)をそもそも使っておらず、Excelで管理していたチームは、今日は何件のバグが発見されて解決されて、リリースされたのか、という報告すら、すぐに回答が来ない。
Excelの一覧は集計しづらく、そもそも最新化されていなければ、メンバーに逐一確認しなければならない。
だから、現状の指標を設定することすらできてない。

RedmineなどのITSの利点の一つは、システムの品質の指標や、予定・実績工数の集計による進捗の指標を簡単に取得出来ること。
メンバーにチケット入力の運用ルールを徹底できれば、DBに貯められた情報を色んな観点でSQLで取り出せばいい。
信頼度成長曲線(時系列のバグ累積数)やバーンダウンチャート(残のPVと残のEV)などは、ITS上で簡単に実現できる。

そして、これらの指標をメンバーと共有して、自分たちの運用ルールを改善していくのが大事。
毎日の作業履歴を色んな観点で集計して、リアルタイムに見える化すれば、どこに問題があるのか、PMだけでなくメンバーでも気づく。
ここでは、KPTによるチームでのふりかえりが効果的だ。
Problem(問題)の発掘も大事だが、Tryで是正対策や予防対策を考えることも大事だし、Keepとして、今後も続けていきたい運用ルールを確認することも大事。
ふりかえりが上手なチームは、Problem→Try→Keepの流れで問題が解決して、運用ルールというナレッジとして蓄積され、最後は暗黙知としてKeepから消える。

個人的には、Redmineをいきなりソフトウェア開発のタスク管理全般に導入するのではなく、テスト工程の障害管理から導入した方が安全だと思う。
まずは、障害管理のワークフローにメンバーが慣れてもらって、そこで進捗管理や品質管理の技術を身に付ける。
そして、チケットを障害だけでなく、改善要望やリリース作業、新規開発へ少しずつ広げていくのが無難だろうと思う。

Redmine導入に関する事例集は、ERPの失敗事例のように集めてみたい。

| | コメント (0) | トラックバック (0)

2011/06/24

構成管理のアンチパターン~TiDD初心者が陥りやすい罠 #tidd

Redmine上でイテレーションを理解してもらうのが結構難しい。
その理由について考えたことをメモ。

【1】Redmineを運用してもらうと、Redmineプロジェクトやチケットの使い方はすぐに慣れてくれる。
プロジェクトの階層化は組織構造をマッピングしてくれればいいし、チケットの階層化もMS ProjectでWBSを作っていた人にとってはとても自然。

だが、Redmineバージョンがイテレーションに相当することを理解してもらうのはとても難しい。
ロードマップがリリース計画になると何度言っても、すぐに理解してくれないし、運用してくれない。
Redmineのバージョンを作らないし、チケットの属性であるバージョンに値をセットしてくれない。
ロードマップを見ながらスコープ管理しろと何度も言っているのに、チケット一覧で数百枚のチケットを平気で一生懸命フィルタリングして、チケットを1個ずつ精査している。

Agile開発のイテレーションの考え方は、WF型開発に慣れた人にとっては理解のギャップが大きいらしい。
その理由は何故か?

【2】Agile開発のイテレーションは、リリース可能なシステムを作る期間という意味であり、イテレーション終了時には必ず本番リリースする。
イテレーションが2~4週間で区切られていれば、定期的なリリースが自然な小規模リリースとなり、Agileな開発スタイルになる。

しかし、イテレーションが理解できないチームを見ていると、開発したソースを本番リリースに持って行くための手順がとても多く、Agileな開発に持っていけないようだ。
その根本原因は、構成管理の使い方が間違っているように思えている。
上手にソース管理されてないので、Excelのリリース管理台帳が必須で、ライブラリアンが手作業で慎重に本番リリースしている。
構成管理がチケット駆動開発のスピードに付いていけてない。

「trunk1本の構成管理」「リリースブランチを使わない構成管理」というアンチパターンを見つけたのでまとめてみた。

【3】例えば、CVSやVSSを使っているチームでは、trunk1本でソース管理している時が多い。
つまり、本番運用のソースも2次開発のソースも全てtrunk1本でソース管理している。
trunkには本番稼働中のソースも、2次開発でまだ品質が安定しないソースも混じっている。

何故こんなソース管理をしているのかと言うと、ブランチを作るとマージ作業が大変なので、ブランチを作りたくないからだ。
しかも、CVSやVSSはファイル毎にタグ付けできるので、trunk1本のコードラインでも、本番リリース時は、リリースしたいファイルを1個ずつタグ付けすれば間違ってリリースすることもないから問題ない。

だが、タグ付けするために、本番リリースしたいソースの一覧を書き留めたExcelのリリース管理台帳が必要となる。
開発者はソースをコミットするたびに、Excelのリリース管理台帳に修正ソースのリビジョンを書きこんでいく。
そして、リリース時にライブラリアンがExcelのリリース管理台帳を見ながら、タグ付けしてビルドする。

だからライブラリアンの作業負荷はとても高く、ビルド作業やリリース作業は手作業のため、ミスが起きると致命的。
しかもタグ付けやビルド作業自体を自動化しづらい。

すなわち、継続的インテグレーションのプラクティスを実施しづらいし、trunkは常時リリース可能なコードラインではない。
タグ付けしてビルドして、初めて受け入れ可能なモジュールができるので、そこからテストしないと本当の品質が分からない。
だから、いくらタスクをチケット化しても、ソース管理がそのスピードに追いついてないので、アジャイルな開発になりづらい。

「trunk1本の構成管理」というアンチパターンは、構成管理ツールがCVSというリビジョンという概念がない代物だったが故に発生しているように見受けられる。

【4】「リリースブランチを使わない構成管理」とは、2次開発は別ブランチで作業し、trunkは本番運用でソース管理するアンチパターン。
つまり、2次開発が決まった時点で、trunkからブランチを切り、そのブランチ上で開発して、最後にtrunkへマージする。
この手法もCVSやVSSを使っているチームに多い。

この手法は、やはりtrunk1本で新規開発と本番運用の2系統のソース管理を行うのは危険なので、2次開発は別ブランチで自由に開発してもらうという考え方。
確かに、開発者は2次開発ブランチ上で実験しながら開発できるので、開発しやすい。
しかし、この手法の落とし穴は、trunkへマージする最後の作業にある。

2次開発ブランチでいくら常時ビルドして動かしていたとしても、trunkへマージしなければ、本番リリースできるソースにはならない。
しかも、trunkには緊急の本番障害の修正が混じっていたり、他チームの修正が混じっていたりする時があるから、単なる上書きはありえず、2次開発のソースをマージするのはとても慎重な作業が必要。
だから、Excelのリリース管理台帳に2次開発ブランチで修正したソース一覧も残しておき、修正ソースを1個ずつチェックしながらマージする必要がある。

つまり、trunkへのマージがビッグバン結合となり、そこで初めて大きなリスクが発覚する時が多い。
手作業でたくさんのソースをマージする作業ほど嫌なものはない。

「trunk1本の構成管理」「リリースブランチを使わない構成管理」というアンチパターンは、CVSやVSSだけでなく、SVNでも同様に発生しているチームがいる。
多分、構成管理パターンを知っていないのだろうと思う。

【5】「trunk1本の構成管理」「リリースブランチを使わない構成管理」というアンチパターンに対する解決方法は、メインラインモデルという構成管理が既に知られている。
SVNの使い方を調べていた時に随分たくさん書いた。

Subversionのブランチを有効活用してアジャイルに開発せよ: プログラマの思索

Subversionを見直せ: プログラマの思索

Subversionコードラインのライフサイクル: プログラマの思索

TiDDを実践して気づいたことpart2~これがアジャイルだ!と気付いた瞬間: プログラマの思索

メインラインモデルとは、trunkを最新機能を持つ常時リリース可能なコードラインとし、リリースブランチやトピックブランチなど各種のブランチは必ずtrunkから派生させるようにソース管理する手法。
trunkが1本の大きな幹のように、他の枝葉(ブランチ)を派生させるように設定するので、開発者はtrunk1本だけ追いかければいい。
ブランチはtrunkよりも使われる寿命は短いように設定されているのがコツ。

Redmineはもちろんオープンソースのツールはメインラインモデルで開発されている事例が多いので、この手法は少なくとも今までの構成管理の中でもっともましな方法なのだろうと思う。

メインラインモデルでは、trunkもブランチも常時リリース可能なコードラインだから、いつでも即リリースして製品にできる。
VerUpするたびに過去のリリースブランチは廃止して、新規のリリースブランチを派生させて、本番障害の修正はリリースブランチ上で専念すればいい。
アジャイル開発が難しい理由の一つは並行開発でもあること。
2本のコードラインを常時保守する並行開発がメインラインモデルの本質なのだが、品質維持と機能追加という矛盾した開発をうまく分けているのがコツ。

Redmineでは、1プロジェクト=1リポジトリなので、故意にブランチ単位にRedmineプロジェクトを割り当てて、タスク管理を行うことも可能。
以前の僕は、本番運用のソースで修正が入った場合、新規開発プロジェクトへマージ作業のチケットを作って、発生源である本番障害のチケットのリンクを貼って、手作業でマージするように運用していた。
今なら、MercurialやGitのような分散バージョン管理を使えば、pushやrebaseで簡単にtrunkへマージできるから、ブランチ管理しやすくなってきていると思う。

【6】ソース管理が常時リリース可能なコードラインになっていないアンチパターンによって、タスクをチケット化しても、すぐに本番リリースできる環境にはなっていない。
だから、わざわざRedmineバージョンをリリースタグと紐づける運用をする本当の意味が分かってない。
本番リリースの怖さはソフトウェア技術者なら皆知っているはずなのに、本番リリースの作業を自動化したり、本番リリースに向けたタスク管理やソース管理を行う環境を整えていないのが不思議だ。

Redmineの良さは単なるチケット管理だけでなく、構成管理ツールと連携して、要件からビルドモジュールまでのトレーサビリティや製品ライン系列の開発も実現できる仕組みがあること。

小刻みにリリースしていく小規模リリースをRedmine上で実現できなければ、Agile開発の醍醐味である計画ゲームと言うスコープ管理や、定期的なリリースから発生する開発のリズムを感じ取ってくれない。
この辺りのアンチパターンは他にも探してみたい。

| | コメント (0) | トラックバック (0)

2011/06/22

イテレーションの考え方は締め処理と同じ

Agile開発のイテレーションの考え方は、業務の締め処理と同じではないか、というアイデアについてメモ。

【元ネタ】
Twitter / @akipii: Redmineでイテレーションの概念が分からない人は、締という業務が分かっていない。締がないから、仕掛かり在庫(未完了チケット)がどんどん溜まるだけ。TPS(リーンソフトウェア開発)の発想に通じる。

【1】Redmineを各チームに運用してもらうと、使い方が分かっているなというチームと、Redmineは使いづらくてExcelに戻ってしまうチームの2種類に分かれる。

Redmineが使いづらいと不満を言うチームは、開発業務をRedmineへマッピングできてない。

チケットの粒度が大きすぎて、2週間もかかるタスクを1個のチケットで平気でアサインする。
チケットを登録する運用はできているが、リーダーやメンバーが定期的に精査する運用がないため、乱発されて放置されて、すぐにゴミ箱になる。
Redmineのバージョンの使い方がわかってないので、チケット一覧でスクロールできないくらいのたくさんのチケットを一生懸命クリックしては、チェックしている。

あるいは、工程とRedmineバージョンを紐づけているため、いつまで経ってもRedmineバージョンをCloseできない。
手戻り作業があるたびに、前工程の作業をやり直すからだ。

あるいは、ガントチャートを綺麗に表示させるために、チケットの期限や作業状態を保守するのは良いが、本番リリースを意識していないので、リリース間際になってドタバタしている。
だから、ガントチャートを使うチームは、イナズマ線が欲しいと言う。

【2】Redmineの運用で最も大事な事は、イテレーションを意識することだと思う。
イテレーションとは、Redmineの対象バージョンであり、本番リリース日であり、システム開発のマイルストーンであり、システムの納期である。

リリースするシステムこそが価値を生む源泉であるから、Redmineでは本番リリースする日がとても重要だ。
本番リリースで初めて自分たちが作ったシステムが、顧客にとって本当に価値があったのか、評価される。
本番リリース日が、Redmineの対象バージョンに相当する。

本番リリース間際になってもタスクがチケットとしてたくさん残っている状況は、仕掛品が多いことを意味していて、それは、無駄が多い事実を示している。
TPS(トヨタ生産方式)に影響を受けたリーンソフトウェア開発で言う、7つの無駄のどれかが含まれているだろう。

つまり、会社の業務に例えれば、毎月の月末締めに相当する。
このアイデアについては、既に下記で具体例を書いた。

TiDD初心者が陥りやすい罠~バージョンをCloseしないRedmineはVelocityが分からない: プログラマの思索

例えば、普通の会社では、月末に営業活動を一旦締めて、売上と仕入、在庫の資産を確定する。
締めが行われるから、月次の売上と費用、利益が確定される。
だから、社員に前月の労働に対する対価として給料も支払われる。
1年続ければ、決算処理で損益計算書と貸借対照表が作られる。

締め処理では、今どれだけのキャッシュ(現金)があるのか、売上見込(売掛金)や負債(買掛金)があるのか、を精査する。
そうしなければ、黒字なのにキャッシュが足りなくて黒字倒産してしまう。

Redmineでチケット管理を始めると、チケットがタスクであり、それらタスクの成果物が集まって初めて一つのシステムがリリースされる。
本番リリースとは、価値あるソフトウェアを顧客に届けて、顧客の受入を行うことに相当する。
つまり、本番リリースから逆算した作業がチケットに登録されるべき。

チケットの粒度が分からないという人達は、おそらく本番リリースに向けてどんな作業が必要なのか、が多分見えてないのだろうと思う。
本番リリースで失敗は許されないのだから、必要な作業はWBSとして階層化して登録しておき、イテレーション実施中に、チケットを更新したり却下したり、漏れていたタスクを登録したりして、精度を上げていけばいい。
最初から計画が完璧でなくていいが、その計画の精度はイテレーションを実施しながら上げていくべき。
Redmineによるチケット駆動開発の利点は、作業を見える化することで漏れなく作業しやすくなることだから、作業の整合性を考えればいい。

【3】締め処理で特に重要なのは、倉庫にある在庫の資産を棚卸し評価することだ。
倉庫にある商品又は製品は、売りたい商品なのにキャッシュに変わっていないのだから、在庫が膨れ上がるほどキャッシュの状況は悪いことになる。
製造業の工場で製造中の仕掛品ならば、製品にすらなっていないわけだから、仕掛品が多いほど無駄が多いことになる。

つまり、締め処理では、実棚という実地棚卸し作業で、帳簿上の在庫資産と実際の倉庫にある在庫資産を一致させる作業を行う。
実際の業務では、理論在庫と実際在庫は食い違う時が多いので、実地棚卸で誤差をなくす。

Redmineによるチケット管理でも、バージョンをCloseさせるタイミングで、チケットの棚卸しを行う。
チケットの棚卸しでは、残ったチケットは今すぐやるべきなのか、次のバージョンへ延期して良いのか、それともそのチケットをそもそもやる事なく却下して捨ててもいいのか、を判断する。
つまり、チケットの棚卸作業で、チケットの終了基準、バージョンの終了基準をクリアしているのかを精査している。

定期的な棚卸しを運用できれば、Redmineチケットがトランプのカードのように思えて、まるでゲームをやっている感覚になる。
多分その感覚を、XPは計画ゲームと呼んだのだろうと推測する。

【4】更にチケットの棚卸作業によって、Scrumの言う重要な概念Velocityが計測される。
Velocityは開発チームの生産能力であり、チケットの粒度が一定ならば、1イテレーションの平均完了チケット数(実際は平均作業量)になる。

ScrumやXPが教える所によれば、Velocityは増やすものではなく、安定すべき値である。
つまり、適切なペースで一定のペースで開発のリズムを生むべきもの。

Velocityの概念は、開発チームの生産能力には限界があることを示唆していると思う。
製造業の工場ならば、資金があるなら設備投資して、工場の生産能力をどんどん拡張できる。
しかし、ソフトウェア開発では、いくら資金があったところで、設備投資してもサーバーやPCが増やせるぐらい。
人をたくさん投入するほど、生産能力が落ちることは、人月の神話以来、既に知られている。

つまり、ソフトウェア開発の生産能力はとても貴重な有限な資源であることを意味している。
開発チームにたくさんの人員を投入したとしても、開発チームは混乱して、納期になってもバグだらけのシステムしかリリースできないだけだ。

【5】ITSのマイルストーンとは、Agile開発のイテレーションであり、システムのリリース予定バージョンであり、本番リリース日であり、SCMブランチ(trunk, リリースブランチ)であり、リリースされる製品と同一視できる。

RedmineやTracなどのITS(課題管理システム)の一機能であるマイルストーンは、たくさんの意味を持っていると思う。

| | コメント (0) | トラックバック (0)

2011/06/19

チーム編成の技術と内外製分析

タックマンモデル、プロジェクトファシリテーション、PMBOKの人的資源マネジメント、内外製分析についてメモ。
ラフなメモ書き。

【元ネタ】
Educate.co.jp | タックマンモデル

新たな習慣へのトライ  タックマンモデルを体感する

何故ファシリテーションが流行しているのか?: プログラマの思索

【PFP関西】段取りと仕切りのフレームワーク: プログラマの思索

現場リーダーの一つ上の役職であるプロマネの仕事を見ていると、二つの特徴がある。
それはチーム編成の技術と内外製分析。

チーム編成という技術は現場リーダーの仕事だが、プロマネは体制づくりという重要な仕事がある。
つまり、ITプロジェクトにどのような人員が必要なのか、プロジェクトの期間に応じてどれだけの人数が必要か、という計画を立てる。
PMBOKで頻出する資源カレンダーは月別の工数グラフであり、プロマネは、資源カレンダーに従ってPGを増やしたり減らしたりする。

その時、プロマネは開発に不足する工数は、外部調達でカバーする時が多いだろう。
彼らプロマネは、外部の会社から技術者を呼んできて、プロジェクトで不足する工数の帳尻を合わせる。

だが、外部から優秀な開発者を集めたとしても、すぐにチームは機能しない。
特に、自社の開発者と外部の会社の開発者を集めた混成チームの場合、人としての信頼関係をまず作らなければ、チームが有機的に機能しないだろう。
実際、タックマンモデルに従えば、一度混乱期を経ないと、1+1=3のようなチームにならない。
下手をすると、0.9×0.9=0.81のように、二人で仕事するとむしろ効率が下がる時がある。

平鍋さんが提唱したプロジェクトファシリテーションはチームビルディングを重視する。
タックマンモデルが言う混乱期をスムーズに移行できるようなプラクティスがふんだんに含まれている。

チームをファシリテートする技術は、現代の現場リーダーにとっては必須の技術。
特に、朝会とふりかえりでファシリテーションの技術は威力を発揮する。
朝会とふりかえりで、メンバーからプロジェクトに潜む課題やリスクが出てくるからだ。

PMBOKでは、課題ログという技法がある。
これは、RedmineのBacklogsプラグインに出てくる「スプリントの障害になるもの(Sprint Impediment)」と同じで、スクラムマスターが解決すべき課題やリスクを示している。
つまり、現場リーダーやプロマネは、実作業はメンバーに任せて、実作業の障害となる課題やリスクを早く検知しては解決して、実作業をスムーズに行える環境を作るという責務を負っている。

だが、朝会とふりかえりだけが必要なミーティングとは限らない。
大規模プロジェクトやオフショア開発では必ず、メンバーとリーダーやプロマネと定期的な打合せを行う時間と場所を確保するように、コミュニケーション計画を作る。
コミュニケーション計画を作るのはプロマネの仕事であり、実行者は現場リーダーになる。

又、システム開発では、どの部分を内製化して、どの部分を外部へ出して作ってもらうか、という内外製分析を行う時は多い。
この仕事はプロマネの仕事。
内外製分析は実はマネジメント特有の技術のように最近は思っている。

ITプロジェクトでは、リプレース案件やカスタマイズ案件が非常に多い。
以前作ったVBのシステムをWeb化したい、既存のWebシステムを元に他の顧客へ展開したい、という動機が多いからだ。
つまり、ITプロジェクトのマネジメントでは、システムの再利用を前提として、再利用できるならどれだけの工数を減らせて安く作れるか、という発想で考えるようだ。
以前作ったシステムを少しだけカスタマイズするだけなら、実装よりもテスト重視で品質を担保できる。
リプレース案件なら、元のソースをリバースして仕様が抽出できるなら、設計工程の工数をかなり省けるから、開発やテストの人員を増やせばいい。

すなわち、内外製分析する時に、開発対象のシステムは過去の遺産からどれだけ流用出来るのか、流用出来る部分は単体テスト品質は確保できているから、結合テスト以降を注力すればいい、などの判断を混ぜ込んでいるようだ。
すると、単に与えられた仕様を開発するだけ、テストするだけの要員は外部調達で安く仕上げるとか、外部の会社に作ってもらう、など、内製化するにしても安く上げたり、外製化して更に安くするなどのマネジメントを行っている。

個人的には、IT業界は他の業界に比べてアウトソーシングが発達しすぎていて、外製化するほど会社の技術力が落ちてしまうという皮肉な結果に陥っていると思う。

人月ビジネスの特質~成長しないこと: プログラマの思索

内外製分析では、過去の資産を流用してどれだけ楽に開発出来るか、という観点がとても重要という考え方は、移植性、再利用性と言う品質を重視する。
つまり、最終的には、プロダクトラインの考え方が必要になってくると思う。

ソフトウェアプロダクトラインが組込み企業の技術力を左右する: プログラマの思索

ソフトウェアプロダクトラインと構成管理、ソフトウェアパターンの関係: プログラマの思索

派生開発を成功させるプロセス改善の技術と極意: プログラマの思索

| | コメント (0) | トラックバック (0)

2011/06/17

Redmineが使いづらいと言う質問~開発業務をRedmineへマッピングできていない

Redmineが使いづらいという質問をよく聞く。
それについて考えたことをメモ。

【1】Redmineを導入してみると、各チームで何となく回っているように見えるが、質問が色々くる。
よく来る質問は、だいたい二つだ。

一つ目は、ガントチャートの見栄えをもっとよくできないか?
日付を出して欲しい。
罫線を出して欲しい。
イナズマ線を出して欲しい。
担当者を出して欲しい。
PDFでもっと綺麗に出したい。

この質問については、下記で書いた。

MS Projectを使いこなせない理由: プログラマの思索

RedmineのガントチャートはMS ProjectのWeb版になりうるか?: プログラマの思索

Redmineのガントチャート改善part2: プログラマの思索

二つ目は、課題やタスク、問合せの一覧を出力するとき、Excelでもっと綺麗に出せないか?
意図は、Excelで課題一覧、問合せ一覧を管理していたが、Redmineのチケットにそのままマッピングしづらい。
チケットのカスタムフィールドを使わずに、説明欄にたくさんの情報を書き込んで更新しようとしている。
あるいは、チケットのカスタムフィールドを作ったとしても、デフォルトのCSV出力では、無関係のカスタムフィールドも出力されてしまって、整形し直すのが面倒、と。

彼らの使い方を見ていると、Excelでタスク一覧や課題一覧を管理して、ガントチャートで進捗管理している方法をそのままRedmineへマッピングしようとしている。
だから、ガントチャート上でチケットの開始日・期日・担当者を修正したがっている。
あるいは、Excelの課題一覧やタスク一覧と同じフォーマットで、綺麗なExcelがRedmineから一発で出ることを期待している。

彼らが言うには、iPadで新聞を読む場合、やはりiPadよりも紙の新聞の方が読みやすい。
だから、朝会や会議では印刷して、それを元にして議論したいようだ。
iPadのデジタル新聞と紙の新聞は用途が違うように、RedmineとExcelも用途が違うのだ、と彼らは言う。

【2】これらの質問が出てくるのは、現状の開発業務をRedmineへマッピングしようとして溢れている部分があることを示唆している。
僕の考えでは、課題一覧や問合せ一覧に出てくる項目(顧客提示の有無・対策期限など)はチケットの属性で表現できるわけだから、カスタムフィールドを使えばいいと思う。
そして、Excelで整形し直せばいいだけ。

二つの質問も、いずれもチケット集計のビューに関する質問だ。
集計の手作業のコストがかかるということは、Redmineにまだビューという機能が不足していることを意味している。

それらの機能は、Tracのクエリのように、彼らが欲しいSQLをRedmineへ投げればいい。
そのビューのプラグインを作ればいいだけのことだ。

【3】RedmineやTrac上で、チケット駆動開発を実践する利点は、単に工数の入力や集計が楽になるだけではない。
実は、プロセスの標準化と言う隠れた動機もある。
一つのツールないし開発環境でプロジェクト管理を統一すれば、どのチームも同じようなプロジェクト管理手法になる。
そうすれば、新米の現場リーダーもすぐに進捗管理ができるし、ツールの一機能にあるベストプラクティスに慣れるだけで自然に管理能力が身に付く。
又、新規メンバーや新人も、ツールに慣れてもらえれば、チーム作業のルールに自然に慣れる。

これがExcelの場合はそううまくはいかない。
Excelのフォーマットはカスタマイズしやすいから、すぐにフォーマットが発散するし、ワークフローは手作業ゆえに徹底しづらい。
Redmineならトラッカーに応じて、チケットのステータスの制御ができる利点もある。

チケット駆動開発の利点はそれだけではなく、開発業務をITSへマッピングして溢れた機能があれば、自分たちで不足した機能を実現すればいいという事実も示唆している。
つまり、プロジェクト管理という技術をプログラミングによる実装という問題に置き換えることで、現場リーダーの仕事を一機能の実装という問題にすりかえてしまう。

Redmineは所詮Railsアプリなので、テーブル設計さえできれば一瞬でCRUD画面はすぐに作れる。
不足した工数入力・集計機能は、Railsアプリの問題にすり替えてしまえばいいだけのことだ。

チケット駆動開発は、プロジェクト管理の技法をどんどんプログラミングと言う下流工程で置き換える技術の一つと言い換えることもできると思う。
丁度それは、オブジェクト指向がプログラミングの一技術から設計や開発プロセスを席巻した状況に似ている。

| | コメント (0) | トラックバック (0)

2011/06/13

RedmineからPMBOKのEVMを計測する方法

RedmineからPMBOKのEVMを計測する方法についてアイデアをメモ。

【元ネタ】
チケット駆動開発にEVMの概念を導入してみる: プログラマの思索

RedmineプラグインRodmapsにEVMの機能を追加する: プログラマの思索

チケット駆動開発にPMBOKの概念を導入してみる: プログラマの思索

【1】PMBOKのEVM(Earned Value Management)とは、工事進行基準による進捗管理と実質的に同義だ。
昨今のITプロジェクトでは、大規模案件ほど、成果物の進捗ベースで売上が計上される仕組みが多いだろう。
すると、メンバーに毎日の進捗報告を義務付けて、マネージャが週1回集計して、売上を計上して会社に報告する流れになるだろう。
以前は、工事終了基準だったから、システムの検収後に一括して売上を計上すれば良かったが、J-SOXがあるために実質的に不可能。

実際に工事進行基準でプロジェクト管理を始めると、実績工数を含めた進捗報告と集計作業がとても大変で、実際の仕事に関係ない所でロスが発生する。
運用ルールが決められていないと、進捗率が90%のまま1週間以上も未完了だったり、各メンバーの進捗報告のレイアウトがバラバラで集計しにくかったりする。
そもそも、実プロジェクトの進捗管理そのものがルーズだったりすれば、すぐにデスマーチに陥る。

【2】PMBOKのEVMは、成果物の進捗ベースからスケジュールやコストを予測できる優れた仕組みだが、正直分かりづらい。
僕は、Redmineによるチケット駆動開発でEVMの概念が腑に落ちた。
EVMの概念は下記でRedmineへマッピングできる。

(1) PV=sum(該当期間のチケットの予定工数)
(2) AC=sum(該当期間のチケットの実績工数)

(3) EV=sum(該当期間の終了チケットの予定工数)
又は
EV=sum(該当期間のチケットの予定工数×進捗率)

ここで、EVの概念がAgile開発と従来のWF型開発の場合、2通りの定義が出ることに注意して欲しい。
EVは獲得価値(出来高)であるから、実際の成果物(出来高)に相当する。

Agile開発では、作業の終了条件(Done)がリリースできることだから、進捗率は0%か100%のどちらかしかない。
ソースをコミットしてビルドして動くのが確認できるまで、未着手でも作業中でも0%だ。
何故なら、Doneの条件が動くシステム=リリース完了だからだ。
Agile開発が定義するEVはとても厳格で、うまくプロジェクト管理できなければ、顧客から見れば、殆ど作業がはかどっていないように見えるだろう。

従来のWF型開発では、メンバーが自分の判断で進捗率を入れる場合が多いだろう。
すると、進捗率の基準があいまいなため、90%シンドローム(進捗率が90%のまま停滞する)が起きやすく、EVの値が正しくないケースが出てきがちだ。

だから、普通は作業ステータスごとに進捗率が設定されるだろう。
未着手=0%、作業中=50%、レビュー中=90%、完了=100%みたいになるだろう。
Redmineの場合、管理画面でステータスごとに進捗率を設定できるので、この機能を使えばいいだろう。

又、実績工数の入力ではWorkTimeプラグインがとても使いやすいのでお勧めだ。
プラグイン作者は、このプラグインから出力された前日の実績データを朝会で使っていると聞いたことがある。

RedmineのWorkTimeプラグイン: プログラマの思索

【3】PV、AC、EVの値は、Redmineからすぐに取り出せる仕組みはないようだ。
直接MySQLにアクセスして、SQLでデータをダウンロードしなくてはいけないようだ。

その場合、下記のようなデータのフォーマットがあれば、EVMは計算可能。

チケットNo,開始日,終了日,予定工数,実績工数,進捗率

現在日付から該当の期間を初期設定しておけば、ExcelマクロでPV、AC、EVの値は集計可能。
Excelの集計のアイデアは下記に書いた。

WindowsのキラーアプリExcel: プログラマの思索

本来は、Redmineの画面上でEVMをグラフ化してくれるのが良いのだが、今の所、そういうプラグインは存在しないようだ。

【4】EVMを使う場合、ベースラインが重要で、最初に決めた計画のベースラインを修正することはない。
修正してしまったら、予定と実績の差がなくなるので、差異分析ができなくなるからだ。
だが、実プロジェクトでは、マイルストーンごとに見直し作業や作業漏れのタスクを反映してリスケする時がとても多い。
そうしなければ、ベースラインは実プロジェクトからかけ離れた与太話に過ぎなくなり、差異分析する意味もなくなる。

EVMのグラフを見ると、Agile開発で出てくるバーンダウンチャートに似ているように見える。
バーンダウンチャートは、PVとEVを右肩下がりで描いたグラフと言える。
実際、バーンダウンチャートの残作業の予定量はBAC-PV、残作業の実績量はBAC-EVから求められる。

ベースラインを使うEVMよりもバーンダウンチャートの方が開発チームにとって有効である理由の一つは、ゴールが見えやすいことだろう。
無理な予定に実作業を合わせるのではなく、顧客に価値あるソフトウェアを作るために、決められた納期までに作業を進める方が現実的だからだ。

PMBOKのEVMをITプロジェクトへ適用する場合、建設業やプラント業界とは違ったノウハウが必要とされるように思う。
もう少し考えてみる。

| | コメント (0) | トラックバック (0)

2011/06/08

Shibuya.trac第12回勉強会でチケット管理システム大決戦第2弾が開かれるようです #tidd

Shibuya.trac第12回勉強会でチケット管理システム大決戦第2弾が開かれるようなのでメモ。

【元ネタ】
meeting/17 - Shibuya.trac第12回勉強会~チケット管理システム大決戦 第二弾~Shibuya.trac Wiki - SourceForge.JP

創発 未来につながるために 世界に帆を立てるために Developers Summit 2011:デブサミ2011award

【公開】デブサミ2011講演資料「チケット駆動開発~タスクマネジメントからAgile開発へ」 #devsumi #tidd: プログラマの思索

Redmineが1000人のエンジニアに使われるまでのこと | 世界 - @daipresents

受託開発でTracを導入してよかったことや失敗したこと | 世界 - @daipresents

デブサミまとめまとめ:2011 B会場 - 夢扇 -

デブサミ2011のチケット管理システム大決戦のセッションは、後で聞いたら、デブサミ史上最大の観客数が集まったと聞いた。
チケット管理システム(ITS)を使って、プロジェクト管理をIT化したり、アジャイル開発のタスク管理に適用する手法に関心が寄せられているのだろうと推測する。
@sakaba37さんも似たような感想を述べられてます。

Twitter / @sakaba37: 新しい言葉がはやる時、その言葉は新しい意味・新しい価値を持っている。チケット駆動開発という言葉がはやるのも、多くの人がその価値を感じているからだろう。

デブサミ2011は45分の持ち時間だったのでざっくばらんでしか議論できなかったけれど、Shibuya.trac第12回勉強会は2時間枠を確保しているそうなので、どんな議論になるのか興味津々。
UStreamで観戦できるかな?

| | コメント (0) | トラックバック (0)

2011/06/07

RedmineをThinで起動する

Redmine 1.2からMongrelが動作しなくなる可能性がある。
代わりにThinというRails用サーバーで起動することができたのでメモ。

【元ネタ1】
Redmine - Defect #7688: Redmine's trunk (rails 2.3.11) doesn't work with Mongrel 1.1.x - Redmine

徒然さめざめ redmineでmongrelはもうだめだ

上記に書かれているように、MongrelはRails2.3.8からサポートされなくなるらしい。
そこで、Thinを使ってみることにした。
Passengerが一番いいと思うが、Windows上ではインストールできないから。

【元ネタ2】
高速性が売りのRuby Webサーバ「Thin」 - MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ

InfoQ: ThinはRubyの高速Webサーバ

実運用向けRedmine環境構築 - XOOPS専門-株式会社RYUS

ソフトウェア開発のことを色々知りたい人のブログ (Redmine1.1.1続き)thinサーバーの構築(Mongrelよりも高速なWebサーバー)

Channel J :: mongrelに代えて、thinを使ってみようとしたが…

インストール&起動は下記で簡単。

gem install thin
gem list
rack (1.2.2, 1.1.0, 1.0.1)
thin (1.2.11 x86-mswin32)

cd redmine
thin -e production -p 3000 start

但し、rackのバージョンがRedmineのrailsと合致していないと意味不明なエラーが出る。

redmine\vendor\rails\actionpack\lib\action_controller.rb
に下記のパッチを当てたらThinから起動できた。

--- action_controller_org.rb Mon May 30 18:47:58 2011
+++ action_controller.rb Tue Jun 7 00:14:35 2011
@@ -31,7 +31,8 @@
end
end

-gem 'rack', '~> 1.1.0'
+#gem 'rack', '~> 1.1.0'
+gem 'rack', '~> 1.2.2'
require 'rack'
require 'action_controller/cgi_ext'

Windows上でThin+Redmineを動かしてみると、何となくレスポンスがよくなったような気もする。
もう少し試してみる。

| | コメント (4) | トラックバック (0)

2011/06/04

TiDD初心者が陥りやすい罠~バージョンをCloseしないRedmineはVelocityが分からない

Redmineを初めて使う管理者が陥りやすいアンチパターンを見つけたのでメモ。

【元ネタ】
バージョンのないRedmineプロジェクト~TiDD初心者が陥りやすい罠: プログラマの思索

TiDD初心者が陥りやすい罠~マイルストーンの役割を誰も理解していない: プログラマの思索

Twitter / @cointoss: アジャイルの導入に二の足を踏む現場において、チケット駆動開発(=TiDD)であれば受け入れやすい理由は、プラクティスが少なく実践的なものに絞っているからだろう。リリース予定をバージョンとすることでイテレーションやスプリントが定義できるため、そこだけはアジャイルっぽくはなる。

【1】僕がRedmineを設定する場合、あらかじめヒヤリングした後にプロジェクト設定画面でカテゴリ・バージョンは登録している。
全てのチームがアジャイル開発に慣れているわけではないので、あらかじめ対象バージョンには「2011年5月の開発」みたいなバージョンで期日を月末に作り、1ヶ月おきに故意に入れている。
意図としては、たとえWF型開発や運用プロジェクトであったとしても、イテレーションをチーム内で作って運用して下さい、という意味をこめている。

しかし、バージョンの使い方が分からない管理者は、期日である月末が過ぎても、バージョンを放置したまま、次々にチケットを登録して、チケット一覧やガントチャートでにらめっこしている。
チケットを定期的に棚卸しする発想がなく、ガントチャート上でタスクの依存関係の整合性を取ることばかりに気を取られている。
だから、チケットはどんどん溜まっていき、進捗がはかどっているかどうかもRedmine上では分からなくなる。
結局、Excelのガントチャートで予定・実績工数の管理に戻ってしまい、Excel上の集計から「今は5人日遅れています」という報告をするようになってしまう。

【2】Redmineでチケット駆動開発を運用する場合、バージョンをイテレーションに対応付けて運用するのが重要。
その理由は、ITSのバージョン(マイルストーン)機能が、Agile開発のイテレーションであり、構成管理上のリリースタグに相当するという意味が込められているからだ。

つまり、マイルストーン単位にリリースしていく開発スタイルはまさにAgile開発の小規模リリースであり、顧客へ価値あるソフトウェアを定期的に納品するという戦略にかなっている。

更に、マイルストーンの期日にチケットの棚卸しを行う作業も重要だ。
何故なら、マイルストーンの期日までに間に合わないと分かったチケットは次のマイルストーンへ繰越されて、次のマイルストーンで対応することになる。
駄目な管理者は、チケットの棚卸しを定期的に行わないので、せっかくタスクをチケットで見える化しても、チケットが乱発されて放置されてしまってRedmineがゴミ箱になってしまう。

棚卸しはそもそもどんな意味を持っているのか?

【3】チケットの定期的な棚卸しは、単にタスクを整理するだけではなく、開発チームのVelocity(開発したシステム規模、開発チームの生産能力)を確定することを意味していると思う。
そのイメージを下記のようにまとめてみた。

例えば、Sprint1というイテレーションで、イテレーション計画した時、20枚のチケットでイテレーションを開始すると決めたとする。(期首)
そして、チームは2~4週間のイテレーションで20枚のチケットをこなしていく。
しかし、途中で仕様変更が発生したり、予期しなかったタスクが発生して、イテレーション期間中に10枚追加になったとする。(当期発生)

これは、イテレーションを計画した時点のスコープから増えたことを意味している。
Scrumではスプリント実施中はスコープが変わらないことを前提にしているから、このような割込みタスクを発生させないように調整するだろうが、実プロジェクトではよくあることだ。
チケット駆動開発では、そのような割込みタスクを今のイテレーションで実施するか、次のイテレーションに回すべきか、という判断をチケットの取捨選択に置き換えることで、プロジェクト運営を見える化している。

そして、チームは何とかやりくりしながら、イテレーション終了間際に棚卸しして、5枚のチケットを残すだけとなり、それらチケットは次のイテレーションに回すと決めて、Sprint1は終了したとする。(期末残)
つまり、棚卸し時に、イテレーションの終了判断として、5枚のタスクが残ったとしても終わったという意思決定を含んでいる。
棚卸し作業にはイテレーション(バージョン)をCloseさせる意思決定が含まれている。

その場合、終了チケット数は25枚であり、残チケット5枚は次のイテレーションSprint2に組み込まれる。(次期繰越)
これらの作業は、イテレーション終了時と次のイテレーション計画作成時に行われる。

チケット駆動開発では、イテレーション期間中あるいはイテレーション終了時に必ず、チケットの状態を精査する作業、つまり棚卸しを行う。
棚卸しは現時点で残っているタスクは終わっているのか、そしていつ行うのか、というプロジェクト運営の意思決定を含んでいる。
Redmineでは対象バージョンのステータスを「終了」に更新すると、終了した対象バージョンのチケットは更新できなくなる。
つまり、終わったイテレーションのチケットは参照のみであり、イテレーション作業の実績値として確定される。
Sprint1の場合、終了チケット25枚が実績になる。

Sprint2では、前のイテレーションから繰越されたチケット5枚と、Sprint2で実施する25枚のチケットを追加して、計30枚のチケットでイテレーションが開始する。(期首)
同様に、当期増加のチケット5枚が発生して追加されたものの(当期発生)、Sprint2終了時には棚卸ししたら全チケット35枚が完了したとする。(期末残0)

上記の流れから、Sprint1の終了チケット25枚、Sprint2の終了チケット35枚が実績として確定する。
つまり、イテレーションの平均完了チケット数は30枚になる。
もしチケットの粒度がばらつきがなく一定ならば、チケットの枚数が開発チームの生産能力そのものになる。

30枚/イテレーションという値は、31枚以上のチケットを顧客が開発チームへ要求したとしても、開発チームはイテレーション期間内に完了できないことを意味している。
すなわち、開発チームの生産能力には限界がある。
開発チームの生産能力以上のタスクを課したとしても、タスクが溢れて、納期になってもリリースできないだろう。

これがScrumの言うVelocityを指しているのだろうと思う。

TiDDを実践して気づいたことpart9~Scrumのベロシティ #tidd: プログラマの思索

Mantisでは、平均完了日数というメトリクスがチケット集計機能の一部として提供されている。
下記の記事で書いたが、平均完了日数はソフトウェアのMTTR(平均修復時間)である。
この概念も、1プロジェクトないし1イテレーションの開発能力、すなわちVelocityと同一だと直感している。

Mantisのチケット集計機能にある最大放置日数と平均完了日数: プログラマの思索

【4】棚卸ししなければ、開発チームが今どれくらいのタスクを完了させたのか分からないから、自分たちの開発ペースや開発能力を自覚することができない。
自分たちの開発能力が分からなければ、結局、自分たちの能力以上の作業の負荷がかかり、残業や休日出勤に追いまくられる事になる。
特に、WF型開発の場合、イテレーションと言う概念がないから、Scrumの言うVelocityを測定するタイミングが無い。
だから、駄目なWF型開発のプロジェクトでは、自分たちの生産能力と言う実績値が分からないままだから、設計や開発はスムーズに進んだように見えても、単体テストや結合テスト、システムテストと本番リリースへ向けてどんどん進むにつれて、チームの生産能力以上の負荷がかかってしまう。
開発チームのVelocityを超えたタスクを設定しても、チームは混乱して、納期になってもリリースできないだけだ。

あるいは、WF型開発で実績値をきちんと取るような開発プロセスを持っていたとしても、メンバーに実績値を計測させて入力させる運用のコストが大きいため、頑張るほど、実際の作業時間以外の無駄な工数が増えてしまう。
チケット駆動開発では、実績値をチケットの自動集計という機能で透過的にサポートするので、メンバーはソースをコミットする時点で実績値を入力する習慣だけで十分だから、メンバーにあまり負荷はかからない。

結局、バージョンをCloseさせずにダラダラとチケット管理を続ける運用例の背後には棚卸しというチケットの終了基準、イテレーション(リリース)の終了基準を明確にするという意思決定が曖昧という事実が隠されている。
棚卸しするからこそ、自分たちの開発能力というVelocityが分かり、XPが言うように、チームにとって最適なペースで仕事できる環境が出来上がるのだ。

| | コメント (0) | トラックバック (0)

« 2011年5月 | トップページ | 2011年7月 »