「"生産性"とは大きく出たな。」 そう思った方もいるでしょう。
こんにちは。 株式会社ゼストでPEM(プロダクトエンジニアリングマネージャー)兼エンジニアをしている今井です。
弊社では、昨年末頃からFindy Team+というサービスを導入しています。 この記事では、私の所属するチームがFindy Team+をどのように活用しているか、また、このサービスを導入したことでどんな良いことがあったかを紹介します。
Findy Team+と開発生産性
知らない方のためにざっくり説明すると、
- 自組織のGitHubから様々なデータを収集、解析して
- それをグラフで可視化してくれるので
- 開発組織の傾向を数字で確認して改善アクションに繋げよう
というサービスです。
そんなFindy Team+の数ある機能の中から、今回は特に「チーム目標設定」機能にフォーカスしていきます。 Findy Team+自体の詳しい説明は、公式や他の会社さんが色々公開していると思うので、調べてみてください。
また、冒頭で唐突に触れましたが、このサービスを導入した目的の一つは、開発生産性の向上です。 ただ、この"生産性"という言葉、それはもう大変な言葉ですよね。
この言葉についての定義や前提を並べ始めるとそれだけで書籍1冊くらいにはなってしまいそうなので、この記事内でいうところの"生産性"は、「Findy Team+で可視化してくれる数値」を指すことにします。 (なぜFindy Team+内の数値が"生産性"となるのかは、それもまた公式さんの情報を探してもらえると良いと思います。)
「チーム目標設定」を使ってみる
Findy Team+の導入にあたり、Findy社の方にスムーズな導入のためのサポートをしていただきましたが、その中でおすすめされたことの一つが、「チームとして目標を定めること」でした。 サービスを入れただけで満足してしまわないように、サービスを活用して実際に自分たちの開発をより良くするため、目標に向けた施策をうっていきます。
「チーム目標設定」機能では、目標達成に向けて取り組む期間を設定し、どの数値をトレースしていくか(目標スタッツ)、どれくらいを目標とするかを設定することができます。
まずは現在の自分たちの状態を把握するために、ここでのGithubの情報(主にPull Request)から、数値を確認してみました。 いくつか改善すべき項目はありましたが、一番顕著に見えたのは「Pull Requestのオープンからマージまでの時間が長い」ということでした。
この辺りは自分たちの肌感としても、「Pull Request大きくなりがち」「レビュー全然してもらえない」「オープンしてからマージまで長い」という課題感はうっすらとあったので、「ですよね」という感じです。 なので、目標設定もこの辺りに切り込んでいくことにしました。
目標設定にあたり、自分たちの課題感を少し掘り下げてみます。
- なぜレビューが捗らない?
- Pull Requestが大きすぎて、つい後回しにしてしまう
- なぜマージまで時間がかかる?
- 実装後にレビューで大きめの指摘が入って手戻りが発生する
- Pull Requestが大きいので、根本の設計に見直しが入った時に手戻りの幅が大きい
ということで、「とにかくPRでかすぎ」という結論です。 PRを小さくしたらすべて解決しそうな勢いです。
それを踏まえて、我々が設定した目標はこちら。
- 1人1日あたりのプルリク作成数:1件以上
- 直近の実績から見るとやや厳しめの設定値にしておいて、それを意識することで以下の効果を狙う
- Pull Requestを細かくして数を稼ごうとするムーブを狙う(数が欲しけりゃ細かくたくさん出せ)
- 砕きにくい、大きくなりがちなPull Requestを細かくする実装スキルを養う(どうやったら数を稼げるかに闘志を燃やせ)
- 直近の実績から見るとやや厳しめの設定値にしておいて、それを意識することで以下の効果を狙う
- オープンからマージまでの平均時間:17時間
- 1人1日1件のPull Requestとすると、Pull Requestの総数は週に20件 ※4人チームです。
- 週の前半の大枠実装Pull Request(2,3時間)→ 1割
- それ以降の本実装のPull Request(最大でも24時間以内になるように努める)→ 5割
- バグ対応やリファクタリングなどの独立したPull Request(日跨ぎも想定して12時間くらい)→ 4割
- とすると、期待値は17時間くらい
- 1人1日1件のPull Requestとすると、Pull Requestの総数は週に20件 ※4人チームです。
目標の設定理由もしっかり認識合わせした上で、開発を進めてみました。
目標達成に向けた施策
今までやっていなかった分、最初は漠然と「意識する」だけでもそれなりに効果はありそうな気もしましたが、せっかくなのでいくつか施策をやってみました。
設計モブプロ
新しい開発アイテムに着手するタイミングで、タスク分解をしながらモブプロしてみました。
モブプロといっても完全に実装し切るのではなく、コード設計レベルの会話をしながら、関数のI/Fだけ定義したり、既存コードを読み合わせたり、TODOコメントで処理内容を書いていったり、というイメージです。
既存機能の挙動に影響がないように大枠だけ実装し、これだけでPull Requestを作ってマージまで持っていき、あとはTODOコメントにしたがって個別のタスクとして実装していきます。
ここでの狙いは、
- チーム内でコードレベルの設計の認識を合わせることで、レビュー時の手戻りを最小限にする
- 実装背景を全員が知った状態なので、レビューが捗る
- I/Fが定義されることで独立した小さいPull Requestが作りやすくなる
です。
対面レビュー
みんなでPull Requestを眺めながら、実装者に口頭で説明してもらい、何かあればその場で議論、コメントをしていました。全てのPull Requestではなく、実装の背景がわかりにくかったり、仕方なく大きくなってしまったものが対象です。
私たちのチームは朝会と夕会をやっているので、そこでレビューが滞っているPull Requestがあったりすると、「この後一緒に見ちゃいます?」という感じで直に説明をしてもらって、停滞が防止できた時もありました。
とにかく砕く
これはもう施策でもなんでもないですが、レビュー時の議論の的ができる限り絞れるようにPull Requestを砕きます。何より見やすいし、どデカPRのレビュー依頼が来て「うげぇ」となる頻度を減らせます。
ただこれはアテもなくやると混乱を招きそうで、設計をモブプロでやっていることが効いていた気がします。
数値の改善状況
目標を設定して取り組み始めてから、3週間経過した時点での推移はこんな感じ。
目標としていた「オープンから17時間以内にマージ」は、達成されつつあります。
PR作成数は初回から横ばい。ギリギリ1人1件を維持しています。
まとめ
最初ということもあり伸び代があったので、数値の改善幅はそれなりに出ました。
ただそれ以上に、「チーム内で目指す方向の認識を合わせて、行動の指針をはっきりさせる」ということに意味があったと思っています。
こういう根拠のある活動が、チームや開発組織の文化となっていくと、強い組織になれそうです。
目標設定の中で、「あまり細かくPR出しすぎない方が良いと思っていた」(≒レビュー依頼多発で迷惑になりそう)みたいな意見が出ていたのが印象的で、チームとしての方針を明示することで、この辺の遠慮が取り払えたのも良かったなと思っています。