ゼスト Tech Blog

ゼストは「護りたい。その想いを護る。」をミッションに、在宅医療・介護業界向けのSaaSを開発しています。

Findy Team+の「チーム目標設定」で生産性をブーストしてみる

「"生産性"とは大きく出たな。」 そう思った方もいるでしょう。

こんにちは。 株式会社ゼストで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時間くらい

目標の設定理由もしっかり認識合わせした上で、開発を進めてみました。

目標達成に向けた施策

今までやっていなかった分、最初は漠然と「意識する」だけでもそれなりに効果はありそうな気もしましたが、せっかくなのでいくつか施策をやってみました。

設計モブプロ

新しい開発アイテムに着手するタイミングで、タスク分解をしながらモブプロしてみました。

モブプロといっても完全に実装し切るのではなく、コード設計レベルの会話をしながら、関数の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出しすぎない方が良いと思っていた」(≒レビュー依頼多発で迷惑になりそう)みたいな意見が出ていたのが印象的で、チームとしての方針を明示することで、この辺の遠慮が取り払えたのも良かったなと思っています。