@daipresentsさんのRxtStudyとshinagawa.redmineの講演資料を解読してみる #RxtStudy #47redmine
@daipresentsさんのRxtStudyとshinagawa.redmineの講演資料を@sakaba37さんと読みながら、自分が理解してなかった点がたくさんあることが分かった。
気付いたことをメモ書き。
間違っていたら後で直す。
【shinagawa.redmineの講演資料】
【RxtStudyの講演資料】
【1】SVNリポジトリのスケールアップ
チケット駆動開発の特徴は、ITSにSCM連携の機能があることで、トレーサビリティやソース変更履歴を即座に確認できる利点がある。
しかし、5人ぐらいの小規模開発チームから数百人以上の大規模な組織で運用する場合、SVNリポジトリがダウンしてしまうケースが出てくる。
そもそもRedmineのようなOSSのITSでは、大規模な運用における可用性や信頼性に関してはまだまだ弱点がある。
それについては下記で書いた。
@daipresentsさんの現場ではユーザ4000人がRedmineを使っていると言う。
多分、日本でも最大規模の運用事例だろう。
上記の講演資料では、SVNの構成方法について、マスタ・スレーブ方式で解決する方法が示されている。
この仕組みは、ReadOnlyの参照用SVNリポジトリとReadWriteの更新用SVNリポジトリをsvnsyncでリアルタイムに同期させることで実現している。
すなわち、ITSからリポジトリブラウザの閲覧は参照用SVNリポジトリ、コミットログにチケットNoを書いてSVNコミットする場合は更新用SVNリポジトリで使い分ける手法だろうと思う。
この手法の利点は、大量ユーザがアクセスする参照用SVNリポジトリと更新頻度が少ない更新用SVNリポジトリを別に配置することによって、負荷分散する点にある。
@daipresentsさんは過去の記事で、SVNの構成方法についてたくさん考察されており、実際にたくさん試されている。
更に、SVNのWebDAV transparent write-through proxyを使えば、複数の更新用SVNリポジトリを同期させることができるので、よりスケールアップしやすくなる。
Apacheサーバーのスケールアップは既に色んなノウハウがあるが、SVNリポジトリでも同様にスケールアップは可能。
Subversion1.5のWebDAV transparent write-through proxy | 世界
Subversion 1.5.0 での新機能 (WebDAV Write Through Proxy)
エンタープライズ環境におけるSubversionの複製アーキテクチャ - インターネットコム
SVNリポジトリのスケールアップが必要な理由は、RedmineチケットとSVNリビジョンを紐づける仕組みでも使いたいからだ。
普通はコミット後、RedmineのSVNリポジトリ画面をリフレッシュしないと紐付けが実施されない。
だから、Webサービス機能を使って、リアルタイムに同期させる手法が普通だろう。
「リポジトリ」を開くまでSubversion等のリポジトリへのコミットが「活動」に表示されません | Redmine.JP
小技(0.9): コミットと同時にリポジトリの情報を取得する | Redmine.JP Blog
しかし、この機能は大量ユーザのコミットや大量データのコミットに向かない。
スケールアップするには、JenkinsでSCM連携をポーリング化する手法があるだろうと思う。
そのアイデアは下記に書いた。
Redmineを業務システム化するアイデア~メトリクス集計の本質は集計バッチ処理: プログラマの思索
Redmineの運用が大規模化するにつれて、RedmineそのものがIT企業の基幹システムになり、可用性や信頼性がよりシビアになってくる。
@daipresentsさんの講演資料にはたくさんのアイデアが含まれていると思う。
【2】Parkinglot Chart Pluginの利点、そしてITSの概念とプロセスのマッピング
@daipresentsさんは以前から、Redmineプラグインの中でパーキングロットチャートプラグインを絶賛されていた。
Redmineプラグイン開発 -- パーキングロットチャートプラグインリリース | 世界
3年使ったRedmineの使い方について共有したい10のこと | 世界
パーキングロットチャートはフィーチャ(ユーザ機能)の進捗を示すための図だ。
パーキングロットチャートが何故そんなに重要であり、開発者だけでなくマネージャや経営層にも使われるようになったのか?
Redmineのパーキングロットチャートプラグインは、Redmineのバージョンをフィーチャ(ユーザ機能)に対応付けて運用する。
Redmineのバージョンはリリース予定(済)バージョンだから、実際にリリースされるシステムのバージョンに相当する。
そもそもリリースするバージョンには、顧客の要望にあるビジネス要求を実現するための機能が含まれていて、その機能がリリースされることで顧客価値が実現される。
だからこそ、Redmineバージョンは単なるリリース予定バージョンだけでなく、顧客のビジネス要求を実現する日を示しているのだ。
従って、顧客のビジネス要求の単位でフィーチャを作り、フィーチャをRedmineバージョンに対応付ければ、フィーチャが今どんな進捗状況であり、いつリリースされてそのフィーチャが使えるようになるのか、を示すことができる。
システムのバージョンは単なるSCMタグやITSバージョン、Agile開発のイテレーションに対応するだけでなく、ビジネス要求のフィーチャにも対応付けている点がとても重要だ。
@daipresentsさんの講演資料では、パーキングロットチャートが100個以上並んでいる絵が貼られており、Redmineがビジネス要求の実現のために運用されていることがとてもよく分かる。
この発想を更に突き進めると、Redmineのプロジェクト・バージョン・チケットの概念はプロセスのどれにマッピングできるか、という問題にぶち当たる。
その問題については下記で考えてみた。
@daipresentsさんの講演資料では、タスクをFeature・Release・Iteration・Taskの4つの概念に分けて、Scrumのようなアイデアでタスク管理を回そうとされている。
僕の理解では下記のようになる。
(2-1)Feature:顧客の本来の要望。PivotalTrackerのIceBoxと同様。つまり「~の機能が欲しいなあ」というレベルの要望であり、実現可能性(フィージビリティスタディ)は考えられていない。
(2-2)Release:リリース計画に入れられたFeature。PivotalTrackerのBacklog、Scrumのバックログと同様。Featureの実現可能性(フィージビリティスタディ)を考慮して、実現可能なサイズのストーリーへ更に分割する。
Featureに優先順位がつけられて、優先度の高いFeatureから順に開発対象となりリリースされていく。
(2-3)Iteration:XPのイテレーションやScrumのスプリントと同じ。PivotalTrackerのTaskBoardと同じ。2~4週間のサイクルでFeatureを開発してリリースしていく。
(2-4)Task:実際の作業。タスクカード。3~4人日というサイズから推測すると、ストーリーカードに近い。
@daipresentsさんの講演資料では、Feature・Release・Iteration・Taskを下記のようにRedmineの機能へマッピングしようとしている。
Feature →Redmineのプロジェクト?
Release →Redmineのプロジェクト?
Iteration →Redmineバージョン
Task →Redmineチケット
僕の考えでは、FeatureやReleaseはRedmineのプロジェクトではなく、Redmineバージョンに対応付けるべきだと思う。
理由は、Redmineプロジェクトは製品に対応付けられる概念であり、FeatureやReleaseは顧客に届ける製品の一機能に過ぎないからだ。
むしろ、FeatureやReleaseはリリース日が無期限のRedmineバージョンに対応付けるべきだと思うからだ。
つまり、FeatureやReleaseにあるTask(チケット)は、優先度が決められてリリース予定日が確定すれば、該当するRedmineバージョン(イテレーション)に移動されて、開発の対象(リリース対象)になる運用になる。
僕も、「内部課題」「仕様変更の要望」といったリリース予定日を100年後に設定した特別なバージョンを用意しておき、似たような運用はしている。
なお、PivotalTrackerやそのクローンであるFulcrumは下記で書いた。
よりアジャイルに開発したい人はそれらのツールを使ってもいいかもしれない。
Pivotal Trackerとredmineの違い: プログラマの思索
Pivotal TrackerクローンのFulcrum をインストールしてみた: プログラマの思索
上記の概念を実運用されている@daipresentsさんの講演資料はとても参考になる。
【3】リスク主導のタスク管理とタスク主導のタスク管理の違い
@sakaba37さんと話しながら思ったことは、僕や@sakaba37さんのチケット駆動開発と@daipresentsさんのチケット駆動開発は違っていること。
@daipresentsさんのチケット駆動開発は、本来のAgile開発に近いと思う。
@daipresentsさんの講演資料では、ユーザストーリーマッピングの写真が出てきて、FeatureやReleaseに出てくるTask(実際はおそらくストーリーカード)を並べる作業が出てくる。
ユーザーストーリーは、昨年のAgileJapanで懸田さんが講演された時に説明を受けたが、それは、縦軸を優先度、横軸をリリース日としてユーザストーリーを並べて、ユーザストーリーの依存関係や本来あるべきビジネス要求の開発順序を考えるために使われていると聞いた。
ユーザストーリーマッピングが最強という@daipresentsさんの資料があるけれど、その意味は、ユーザストーリーマッピングを使って、顧客のビジネス要求を優先度(実際はビジネスの重要度)やリリース日の観点で分類して、タスク管理をやりやすくすることに使っているのだろうと思う。
つまり、FeatureやReleaseレベルのストーリーは、ユーザストーリーマッピングで複数人のSEが自由に議論しながら、ビジネスの重要度やリリース日の観点で精査した後、直近の優先度の高いストーリーから順に開発対象に回して、アジャイルに開発していく運用フローなのだろうと推測する。
その運用フローは、まさにアジャイル開発のタスク管理そのものであり、Redmineをわざわざ使うこともない。
TracでもJiraでもいいし、アナログのPostItでやってもいい。
RedmineチケットはFeatureから「あらかじめ」洗い出されたタスクカード(ストーリーカード)であり、予期しないタスクではない。
逆に、僕や@sakaba37さんのチケット駆動開発は、障害管理の発想を受け継いだ開発スタイルなので、もちろん当初予定されていたタスクはRedmineチケットにあるが、開発中に発生した予期しないタスクもRedmineチケットへ随時発行して管理していく。
だからこそ、リリース日には、当初見込んだタスクよりも2倍近いチケットが実際はこなされている時が多い。
つまり、タスク管理だけでなく、リスク管理や課題管理としてRedmineを運用している。
そして、Redmineをソフトウェア工学の観点で、メトリクス収集のツールとしても重要視している。
本来のAgile開発のタスク管理では、イテレーション中にストーリーカードやタスクカードが増えることはない。
イテレーション実施中の2~4週間はスコープは固定されているのが前提。
でも、僕が実運用していた時、緊急の障害修正や突然の仕様変更に対応する場合は結構あったから、イテレーション中にスコープ変更はやっていた。
だから、本来のAgile開発とは言えない部分がある。
どちらの手法が正しいといわけではないけれども、本来のAgile開発のタスク管理は@daipresentsさんの講演資料の方が近いだろうと思う。
色々考えてみる。
| 固定リンク
「プロジェクトマネジメント」カテゴリの記事
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
「ビジネス・歴史・経営・法律」カテゴリの記事
- ビジネス書の名著はどれ?(2023.09.18)
- 営業は顧客の”購買代理人”である(2023.08.16)
- 第85回IT勉強宴会の感想~概念データモデルからビジネスモデルを構築すべきという考え方(2023.05.13)
- 令和4年度春期試験のITストラテジスト試験第4問をastahでモデル化してみた(2023.04.15)
- ChatGPTで起きている事象の意味は何なのか(2023.04.02)
「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)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
「チケット駆動開発」カテゴリの記事
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
「Agile」カテゴリの記事
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- 概念モデリングや設計原則は進化しているのか(2023.10.21)
コメント