はじめまして、ソフトウェアエンジニアの林淳哉です。創業当初から、GROOVE X でソフトウェア開発を担当しています。GROOVE X では、開発プロセスに「スクラム」を採用していて、度々プロセスの改善をしているのですが、最近大きな変化があったのでご紹介致します。
10月に受けたスクラム開発者研修をきっかけに、この1ヶ月くらい、
以下の3つのことに取り組んでいます。
- 1週間スプリント
- ペアプロ・モブプロ
- 上から下への垂直開発
1週間スプリント
これまで2週間のスプリントで回していたのですが、長すぎるということで1週間のスプリントに切り替えました。木曜日の午前中にプランニングをして、水曜日の午後にデモします。2週間スプリントではバックログアイテムを詰め込みがちで、全て完了できずに次のスプリントへ持ち回すことが多かったのですが、1週間スプリントではスケジュールがよりシビアなため、「そのアイテムを本当に今やるべきか」をチームで話し合い、より深く吟味するようになりました。
おかげで、1週間スプリント導入以降、5週連続で価値を提供し続けられています。
ペアプロ・モブプロ
毎日14時〜18時をペアプロの時間と位置づけ、2人ないし3人で画面を囲んで「テスト」「実装」「リファクタリング」のリズムで開発を進めています。ペアプロをはじめてから、バックログアイテムの中身や設計についてのメンバー間の会話が活発になり、一人一人の思い込みでの開発が減りました。また、レビューコストが軽減されて、問題にハマって長時間悩み続けることも少なくなったように思います。
ペアプロでも「ハマる」ことはあるのですが、メンバー同士で相談して休憩を取ったり、一旦コードを離れて議論の時間を持つなど、一人だとハマり続けるところ、2人だと別のアクションの選択肢が生まれるのが良いところだと思います。
ただし、何でもかんでもペアでやるのが良いわけではなく、「やるべき内容が決まっていること」
(主に、アイテムのサブタスク)をペアで実装して、それ以外の発散系のタスク(調査やアイデア出し)は、
個人ワークやワークショップ形式を活用するのが良いようです。
上から下への垂直開発
もうひとつ新しく取り組んでいることは「垂直開発」(Vertical Development)です。たいていの機能は、1つのレイヤーだけで構成されていることは稀で、UI、コントローラー、モデル、DBなどの複数レイヤーで構成されています。このときに、従来の開発方式だと「下から」順番に積み上げていくのですが、今のチームでは、たとえ薄くてもいいので「上から下へ」実装していくことを意識しています。バックログアイテムの洗い出しでも、それを意識してアイテムを書き出します。
具体的には、UI に対する(失敗する)受け入れテストを書き、それが利用する UI を記述し、コントローラーを記述し、モデルを記述し…というような形です。下から上に降りてきたら、ユニットテストを書いてから実コードを実装します。各モジュールに対して、「それを使う立場のコード」を先に書いてから、機能するコードを実装するイメージです。
こうすることで、使い手を想像してコードを書くのではなく、実際に使うコードを基準にコードの中身を埋めていくことができます。低レイヤーの機能のインタフェース設計を誤ったり、機能を作り込み過ぎたり、ユニットテストが冗長になりすぎることを防いでくれているようになりました(たぶん)。
「薄くても垂直で一気通貫のものを作る」ことから、ひとつひとつのレイヤーは重厚でないものの、
1週間のスプリントでしっかりと手で触れるものを提供して、デモで関係者からのフィードバックを得ることができます。
上記の取り組みと関連して、仕事に対する意識やコミュニケーション、
タスク管理の面でも変化があったのでご紹介します。
カレンダーブロック
ペアでの作業時間を確保するため、14時〜18時をカレンダーでブロックするようにしました。
各種打合せは、なるべくそれ以外の時間に入れてもらっています。
タスクへの集中
ペアプロ中は、パートナーとコードに集中しているため、よそ見の時間が減りました。
気づいたら、開発中に Slack を全然見ていなかったりします。
本当に緊急のときは直接声をかけてもらっています。
体調管理
一人で仕事をしていた時には、深夜まで残業して次の日ヘトヘトということも多かったのですが、
ヘトヘトだとペアプロでパートナーに迷惑がかかるため、体調管理に務めるようになりました。
深夜の進捗よりも、14時〜18時のペアワークでの成果の最大化を目指しています。
朝会
朝会の話の中身が深くなりました。基本的なことはペアプロの中で共有されているので、
単なる進捗共有から「で、どうするか」に話の焦点が移ったように思います。
今日何を一緒にやるのか、どういう問題を抱えているのか、このままで水曜日にデモできるのか、
を話しています。
JIRAからアナログへ
JIRA 信者だったのですが、この方式になってから1週間に2回しかJIRAを開かなくなりました(スプリントを開く時、閉じる時)。バックログアイテムはスチレンボードに3ヶ月分張り出し、スプリントバックログはホワイトボードで管理しています。
ホワイトボードに貼られているのは、スプリントで実装すべく厳選された数個のアイテムなので、
チームで議論するのにJIRAよりも圧倒的に使いやすいです。
再生紙はがき
バックログアイテムの管理には再生紙はがきを使っています。マスキングテープでフリップチャートやホワイトボードに固定し、サブタスクやメモを付箋で貼り、終わったらチェックマークをつけます。
フリップチャート
フリップチャート(模造紙みたいな3Mのでっかい付箋)を活用するようになりました。1枚100円と高いので使うのに抵抗感があるのですが、会議室で書いたものをチームの島へ持って行ったり、壁に貼ることができて便利です。ホワイトボードが大好きな GROOVE X でも、ホワイトボードの置き場所には限りがあるので、その限界を突破するアイテムとして重宝しています。
以上、最近の取り組みをまとめてみました。
開発チームの生産性向上の話は大好物なので、興味のある方はお声がけください。
がっつりお話しに行きます!