2年ほど前からチケット駆動開発(と思われるもの)を実践しています。ここで、現時点での自分の方針や考えなどをまとめてみます。主に社内勉強会で発表した内容です。
背景
そもそもこのような手法やツールを取り入れる場合、闇雲に使い回してはいけない。基本的には、プロジェクトの問題点を把握し、手法やツールを利用して解決を図る、という方針にする。
ファイルベースのタスク管理/課題管理
- ファイル管理が煩雑になりがち (コピーしたりメールに添付したり)
- メンバー間で状況や内容を (リアルタイムに) 共有しにくい
- 設計書に取り込み忘れることがしばしば
- テンプレートを用意するのが面倒くさい (プロジェクトの規模や特性によって必要な情報が違う)
タスク管理としての WBS (+ガントチャート)
そもそもWBSとは、『プロジェクトマネジメントで計画を立てる際に用いられる手法の一つで、プロジェクト全体を細かい作業に分割した構成図。』である。(Wikipediaより)
ガントチャートとは、『プロジェクト管理や生産管理などで工程管理に用いられる表の一種で、作業計画を視覚的に表現するために用いられる。』ものである。(Wikipediaより)
どちらも 作業計画 として用いる手法である。あらかじめ計画できることは管理できるが、日々状況が変化するようなケースには不向きなのでは、と考えられる。
レビュー/リファクタリング
メンバーのコードレビューが漏れる/しない。リファクタリングできない/する機会がない。ちなみに弊社では主に Subversion を使っている。
Trac/Redmine
ツール自体は社内にある。また、チケットでタスク管理しているひともいる。しかし、日々のメンバー間のやり取りがメールだったり、環境構築やノウハウ系のドキュメントがファイルサーバ上に散在していることが多い。これらのツールが十分に使えていない。
その他
現時点でどういうタスクがあるのか、どういう経緯でこの仕様が決まったのかということが分からない。「仕様は課題管理表を見てください」とか言われる始末。(実話)
手順書などのドキュメント類はファイルサーバを漁らないと見つからない。
これらの問題を解決したい。
基本方針
今回は Redmine を使う。基本的な運用方針は以下の通り。
- タスク管理をシンプルに
- 情報を集約する
- コードレビューする (リファクタリングする機会を作る)
チケット管理
- プロジェクト内で発生するタスクはチケットで管理する
- チケットは階層にせず基本的にフラットにする (以前はフェーズなどを親チケットにして子チケットでタスクを管理していたこともある)
チケットの粒度は WBS のレベル。規模が大きい場合にはタスクを分割して子チケットを作成する。
また、チケットに多くの情報を書き過ぎないようにする。手順や Tips など個別に切り出せる情報は Wiki にまとめる。チケットには Wiki のリンクを貼り付ける。
Wiki
環境構築手順や技術情報、業務/製品に関する情報などは Wiki に記載する。プロジェクト内で調査したメモは Wiki に残す。
トラッカー
チケットをフラットに管理する代わりにトラッカーを使う。
- TODO : フェーズに関係しないプロジェクトのタスク (打ち合わせやプロジェクトの課題など)
- 設計 : 設計フェーズ
- 開発 : 実装/UTフェーズ
- テスト : 試験フェーズ
- バグ : 試験で発生した不具合
- サポート : 運用/保守とか
- 機能 : アジャイル的にやるならストーリーボードとして使う?
- タスク : フェーズに関係しない個人タスク (個人的な調査や備忘録など)
カテゴリ/バージョン
カテゴリには開発機能や開発チームを設定する。バージョンは v1.0.0 や v1.1.0 などの他に、v1.0.0_ITa などフェーズで設定する。
コメント/バージョン管理連携
- 作業履歴はコメントとしてチケットに残す
- チケットを介してコミュニケーションする (やり取りを履歴に残す)
- 基本的にメールに頼らない (メールを使う場合、必要な情報はチケットに転記する)
- ソースコードの変更はチケットに紐付ける (refs #1234 ...)
チケットのコメントはそのタスクの経緯/作業履歴となる。挨拶文や前置きなどはノイズにしかならないので、最小限または記載不要とする。
ワークフロー
- プロジェクト開始時にチケットのフローを定義する
- 作業内容をレビューする機会を作る
- 基本的にチケットのクローズはPM/リーダーが担当する
本来はシステム上でユーザの権限によってフローを管理するべきだと思うが、簡易にやるなら運用ルールを周知する程度で。
今後の課題
現在、以下はちゃんと取り組めていないので、今後の課題として挙げておく。
定期的なチケットの棚卸し/集計
定期的にチケットを棚卸しして、タスクが適切にアサインされているか、作業の偏りがないか、プロジェクト推進のボトルネックになっている箇所がないかをチェックする。
また、予定時間/実績時間などを集計して、タスクの見積もりやアサイン、進捗具合を振り返り、今後の改善に繋げられるようにする。