@m_seki の

I like ruby tooから引っ越し

朝会のこと

朝会は毎朝やるミーティングです。一般的には、立ってやるとか、こんな話するとか、スタイルの説明がありますが、それでは私たちの朝会の実態を表している感じがしないんですよね。今日はスタイルだけではわからない、私たちの朝会の実態を説明したいと思います。ちなみに私たちのチームの規模感は 十数年 x 小学校1クラスより少ないくらいのイメージです。チケット数は数万くらい。

朝会の流れ

私たちの朝会では、現在のイテレーションに配置されたチケットを全部さらいます。メンバーが順に話すのではなく、チケットをひとつずつ見ていきます。(その結果、ほとんどのメンバーにパスが回ります。)

メンバーの負荷の方に興味があるチームの場合はなにかしら変化の起きる可能性の高い「メンバーが手をつけているチケット」について聞いて回る方が効率もいいかもしれませんね。

私たちは、各メンバーが昨日やったこと/今日やること、ではなく、チームがいま解決しようとしている各チケットがどうなっているかについて興味があります。

私たちのチームがいまどうなっているのか、どうなろうとしているか、意図した方向に進んでいるかを大切にしています。
いま活動中のチケットのようすを知るのはもちろん、「手をつけていないチケット」に手をつけていない理由なども知りたいのです。「なんでこのチケットからやらないの?」って言ってみると、「こっちの準備が必要なので」「別の件を急ぎで頼まれました」「どっちでもいいと思ってました。やりまーす。」「あ、忘れてました」などいろいろチームの状況が跳ね返ってきます。

状況のアップデートと問題の発見

チケットをさらっていくにつれて、状況がみんなと交換されていきます。
誰かのチケットも「自分がやるなこう解くだろうなー」と想像し、実際の状況とそのイメージの差分を探します。
「えー、なんでこんな風にやんの?」
とかね。
朝会にはチケットを解かない係のひとも混じっています。たとえばテスターとかプロの無職とか。テスターは過去に見たバグや苦情などをもとに、仕様的な指摘をすることも少なくありません。コメントしない時でも、チケットを説明するプログラマの様子からテストのネタを探っているようです。

プログラマの様子はとてもよい情報になります。目が泳ぐ、自信がない、自信がありすぎ、困っている、混乱してる、早口..。これらはフラグになります。プログラマもテスターもぴぴっ!と反応して注意深くなります。

チケットの説明で具体的なコードの変更部分について話す人もいます。
「こう変更したいんですけどいいですか?」
これもフラグです。コードに集中して具体的に話している!というよりもよくわかんないけど、コードをこう変更すると動きそうなんで文句言わないでくれます?という感じに聞こえるんですよね。

こんなときテスターのみなさんはチケット番号をメモして赤い丸で囲むし、プロの無職はコードレビューをしたり、みんなに協力を促しちゃったりするのです。

チケットのインデックス

ある問題を見つけたとき、私たちは既存のチケットから似ている現象、関連するチケットを検索するスキルを持っています。
「あー、そのバグはn年前にGさんが決めた仕様なんですよ。おかしいですよね」
とか。さっと出てきます。
私たちは毎朝チケットを読み合わせすることにより、いろいろ脳に蓄積しちゃうんです。全員が全てを蓄積していなくても、各人の興味のある領域を重ね合わせると全体のかなりの領域をカバーできてしまいます。

読み合わせだけでなく、毎日過去のチケットを掘り起こしておさらいするプラクティスも実施されています。このためより強く脳に残せるのかもしれません。

過去のチケットを毎日読み直す

私たちのチケットにはそのチケットがうまくできているか確認するためのテストケースが書かれいます。
この過去のチケットの束から、特別なアルゴリズムにより今日のオススメテストケースが抽出されます。抽出は気まぐれではありません。過去の成績、変更の頻度、リスクなどを元に行われます。この抽出されたオススメテストケースを全員でテストします。この際、テストケースを書いた理由となるチケットを読みます。書かれたテストケースをテストするだけでなく、元となったチケットの情報からテストケースをアレンジしてテストします。この過程でこれまで追加してきた機能、解決した不具合などなど、毎日少しずつ読み直すのです。

数年くらいやっていると、新しいチケットが過去のチケットの仕様を上書きしてしまう(過去の仕様が陳腐化してしまう)ことがしばしば発生します。こんなときは気持ちよく過去のチケットのテストケースを修正/削除します。

私たちが新しいチケットを追加するとき、過去のチケットとの矛盾をほどほどに考慮しますが、全ての関連するチケットを精査して修正をしようとはしません。オススメテストケースをテストするときなど、読み返す機会にちょちょっと直すようにしています。私たちはチケットの束を「完璧に整理され矛盾のない状態」にしようとはしません。清浄と汚濁こそ生命なのです。新しいチケットとそれに伴う変化を受け入れゆっくり調整していく作戦によって、変化の速度を一定にしています。(ゆったりした速度でチケットを精査しているとも考えられます。)

すごく脱線しましたが、私たちは過去のチケットを毎日読み直しているんだよって話でした。

固定的な並び

私たちのチケットシステムは、私が書いたもので、チームに最適化してあります。
たとえば、チケットの一覧はカスタマイズできません。全員が固定のビュー、決まった並び順を見るようになっています。

このため、毎日ほぼ同じ順序でみんなの話を聞くことになります。また、表示される場所も固定的なので、チケットは「場所」と関連付けて脳に格納されます。マインドマップみたいでしょ。

イテレーションごとの傾向を知ることもできます。今回はチケットが多い/少ないなー、いつもよりバグが多いなーなどなど、いつものチケットとの傾向は一目でわかります。いわゆる統計情報も求められるけど、そんなの使わなくても一瞬なのです。(まあ、体内時計を使っても気付くんですけどね。)

そういえば、朝会の会議室に座る/立つ場所もほぼ一定になっていました。固定的なメンバーの並びです。これによって誰がお休みしているのか、誰の体調が悪いのか、機嫌はどうか、なども低コストで気付くことができます。

おわりに

朝会は私たちの活動の中でもっとも重要なものです。
私には割り当てられたロールがありません。何もないので朝会のみんなの様子をメモして、みんなのとなりで邪魔をしたり応援したりします。用事があって朝会に出れない日はなにをしていいかわからず、かなりつまらない一日になります。

すみません。なにかもっといろいろあったような気がするのですが、ちょっと書くのに疲れてきました。
今日はこの辺でおわりにしようと思います。

@m_seki

参考文献

エクストリームプログラミング ワイド判 風の谷のナウシカ 全7巻函入りセット 「トルメキア戦役バージョン」 (アニメージュ・コミックス・ワイド版)