開発生産性を改善するためにやったこと
こんにちは、株式会社スマートショッピングでエンジニアリングマネージャーを担当しているleafです
先日開催された Findy Team+ Award 2023 にて組織別部門(50人未満の組織規模)とチーム別部門(レビューリードタイムが早い)を受賞することができましたので、Findy Team+ 導入から今までに取り組んだこと、今後の取り組みについてご紹介させていただきます
初めにやったこと
初期に取り組んだことは2点で、正確な現状把握と目標設定です
運用中のリポジトリに計測を導入したため、放置されたPRなどが残っており、開発状況に関係なく数値が上下することがありました
そのため、対象リポジトリの放置PRなどを全て棚卸しし、どうしても制御できないPR(自動生成されるものや隣接チームの依存が大きいもの)に関してはタグを設定し除外することでようやく現状が把握できる状態となりました
目標設定に関しては、サイクルタイムとデプロイ頻度を現状の数値の2倍にすると設定しました
デプロイ頻度に関してはサイクルタイムを改善することで改善が見込まれたので、サイクルタイムの改善から着手しました
サイクルタイム改善
計測を開始した段階でボトルネックとなっていたのは、コミットからオープンまでの平均時間(実装時間)とオープンからレビューまでの平均時間(PRが作成され初回のレビューが実施されるまで)でしたので、まずは実装部分の改善から着手しました
コミットからオープンまでの平均時間を改善する
ここで実践したことはとにかくタスクを細分化するということでした
今まではエンジニアがそれぞれ作業を進めやすい粒度でPRを作成しており、時々レビューを後回しにしたくなるレベルで大きなPRが作成されていることもある状況でした
そこで、こちらのブログを参考に1PR200行以内を目標とし、それに合わせて今まで機能単位で作成していたタスクについてもMockと本実装でタスクを分けるなど細分化を実施しました
1PR200行となると実装を進めていると意外と超えてしまうものなので、PR作成時に変更行数が200行以上だとWarnningが通知されるなど、常に行数を意識できる仕組みの構築と、継続的な意識改革が必要でしたが、メンバーの協力もあり現在では基本的に達成できている状況です
オープンからレビューまでの平均時間を改善する
レビューの部分に関しては、なるべく最優先で対応するようにしようというルールとタスクの細分化を進めたことにより、一定の改善が見られておりましたが、目標達成までもう一段階改善が必要な状況が続いていました
Findy Team+のレビュー分析データを確認していたところ一部のメンバーにレビューの負荷がかかっており、ボトルネックになっている可能性があると考えました
そのため、一時的な数字は悪化することを許容し、モブレビュー(PR作成時に作成者がSlackでチームメンバーに声をかけ内容を説明する)によるレビュー知見の分散を実施しました
初期はなかなか声をかける回数が少なかったですが、一部のメンバーに個人の目標として設定してもらい、強制的にきっかけを作ることで、現在では活発にモブレビューが実施され、一部のメンバーに依存している状況を脱することができました
結果としてレビュー部分の時間も短縮され目標としていた数値を安定して達成できている状況です
デプロイ頻度改善
サイクルタイムを改善したことで作成されるPR数は増加し、デプロイ頻度も改善される想定でしたが、想定より伸びない状況が発生していました
原因としては開発環境・本番環境とそれぞれ反映する作業コストが重く、ユーザー影響がない対応であっても毎回リリースするのが面倒で、ある程度まとめてからリリースを行なっているためでした
上記解決のためにSREメンバーを中心にブランチ戦略変更などのデプロイ簡易化を実施しました
ブランチ戦略はGit Flowを採用しておりましたが、GitHub Flowに変更し、下記の通りに環境の反映タイミングを変更することで、運用を大きく変えることなく開発者の負担を軽減することができています
開発環境反映 : development反映時 -> master反映時
本番環境反映 : masterに反映しリリースタグ設定時 -> masterにリリースタグ設定時
またブランチの種類が少なくなったため、問題発生時に今まで以上に影響が広がる可能性が高いため、テスト面の強化も並行して実施しました
テスト部分の施策については、過去に別の方が記事を作成しているので興味がある方は下記をご参照ください
ここまで実施することで、デプロイ頻度に関しても目標の数値を達成することができている状況です
今後取り組みたいこと
現在ではサイクルタイム、デプロイ頻度共に安定して目標達成をすることができており、次のステップを模索する段階だと思っています
エンジニアでやってる
直近では1on1でチームと個別の数値を比較し、本人の調子やチームとしての課題を探る取り組みや短期間作業時間を記録し、改善できる部分の洗い出しなどをおこなっております
かなりマイクロマネジメントになってしまっているので、どこまで継続するかどうかわかりませんが、まだまだ改善の余地はありますし、データを使いこなすことができていると感じてはいないので、引き続き可能性を模索していくつもりです
隣接するメンバーと協力してやってみる
開発生産性を一定改善し振り返ってみると、本来の目的であるユーザーへの価値提供が本当に早くなっているのかという部分にはまだ疑問が残っている状況だと思っています
上記に関しては開発フェーズのみで計測することはできないので、今後は上流工程においても計測範囲にすることができるようにしていきたいと考えてます
最後に
今回は開発生産性の改善についてざっくりとではありますが実施した内容をご紹介させていただきました
ここまで数値の改善をできたのは、各担当者がそれぞれ改善に意欲を持って取り組んでくれていたからだと思います
また、改善を進める上でFindy Team+を利用し、データを元に会話ができた部分も非常に大きかったです
今後も開発生産性の改善に取り組んでまいりますので、またご紹介させていただければと思います
最後までお読みいただきありがとうございました
Discussion