開発の安定性・スループットを定量的に見る
資料はこちらから
SmartHRのプロダクトエンジニアグループでマネージャーを務めているすがわら まさのりと申します。SmartHRには約3年前から在籍しており、バックエンドエンジニアからこのポジションに移行しました。Rubyに関する書籍の執筆や、過去には私が担当しているプロダクトであるSmartHRの基本機能についての講演も行ったことがございますので、興味があれば参照していただけると幸いです。 さて今日は、開発生産性の向上に向けた取り組みとして、「開発の安定性・スループットを定量的に見る」というタイトルでお伝えさせていただきます。 今回のプレゼンテーションはいくつかの章に分けてお話しします。まず、私が所属するプロダクトの背景や状況についてです。 このプロダクトは「SmartHRの基本機能」と呼ばれ、SmartHR全体のアプリケーションから見ると中心に位置する大きなアプリケーションです。現在は6つのチームで開発を行っています。また、オプション機能やプラットフォーム事業も存在し、それらは1プロダクト1チームで進行中です。 各チームは主に「プレイヤー」と「プレイングマネージャー」の2つのレイヤーから構成されており、それを一段上で統括しているのが「マネージャー」層です。今回は、私がマネージャーとして感じていることを中心に、可視化・定量化について話をします。 私の担当するプロダクトは大人数での開発ですので、人数が増えるにあたって混乱や大変さが生じ、健全な状態なのかが不明瞭になったり、コードベースの変動などが生じ、開発そのものが楽しめているのか、疑問に感じていました。 例えば、1年でエンジニアが約10人増加するとします。「LeSS(Large Scale Scrum )(動的スタイルシート言語)」フレームワークを利用して、スクラムを組みながら複数チームでの開発を進めていますが、人数が増えたからといって必ずしも生産性が向上するわけではありません。その状態をしっかりと見ることが必要だと感じていました。 1年前と現在のコードベースの成長を見ると、約20万行の増加があり、人手も増え、プロダクトも拡大しました。我々のチームはスクラムの振り返りを活用し改善が進められているので、基本的な開発業務は問題なくこなせていますが、全体のプロダクトとしての評価に関しては、まだ定量的な判断が難しい状態です。 そのため、昨年から長期的な評価基準を設けることの重要性を感じていました。 各チームには、レビューに時間が掛かるなどレビューに時間が掛かるなど固有の課題があり、これらの課題への解決策もチームごとに議論されていました。チームメンバーの増減など、多くの変数がある中で、特定の評価基準を元に長期的に状況を可視化できる方法がないかと模索していました。この時、可視化ツールの導入が話題になっており、開発生産性ツールの導入に至りました。「For Keys(https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance?hl=en)」の4つの項目(デプロイの頻度、変更のリードタイム、変更障害率、サービス復元時間)を可視化することができます。 このツールを検討した結果、プロダクトの状況や成長も確認できましたが、単に数字だけを見て改善しようとすると、数字に振り回されるリスクがあるため、この点は注意をしました。 例えば、PRのオープンからマージするまでの時間を短縮したい場合、レビューをオープン前に完了させると早くなるなどの手法に意味はありませんが、、ハックとしては可能になってしまいます。 また、数字を適切に解釈して使用する感覚は持っていたとしても、きちんと成果と向き合うためにはより具体的な視点が必要だと感じています。プロダクトやチーム全体としても、漠然と「この部分に時間がかかった」という結論だけではなく、詳細な分析が必要です。 具体的な知見についても、ご紹介します。 まず、知見を付けるための施策として、弊社では読書会を開催しました。 具体的にどの部分が理解されていないのか分析したところ、For Keysを計測する背景や指標の根拠については明確ではありませんでした。 数字の改善が開発スピードを向上させることは理解していますが、それ以外への影響については不鮮明でした。そのため、更なる根拠や深い理解が欲しいと感じ、「LeanとDevOpsの科学」の読書会を社内で行いました。 この読書会には20名以上が参加。効果的な意見交換のため、いくつかのサブグループを作って感想を共有しました。進行方法としては、「LeanとDevOpsの科学」を読んで得た気づきや、自分たちのプロダクトへの適用可能性についてディスカッションしながら各章を読み進めていきました。 個人的な感想として、本の中にFor Keysの中にデプロイに関する話があり、デプロイの効率や安定性がエンジニアの負担や組織文化にどのように影響するのかという視点が新しく、特に印象的でした。 この読書会を通じて、数字を改善することの真の意味や、我々のプロダクトや組織での改善点が見えてきました。また、すでにうまく機能している部分や、組織文化の優れている点についても再認識しました。 この読書会を経て、基本機能プロダクトに対して可視化の取り組みを開始しました。 このプロダクトの関連メンバーで読書会に参加した人たちと共に、何が重要なのか、といった認識を共有しました。そして、まだ取り組んでいない課題や、すでに着手したものに関する意見交換を行い、その中での優先順位や方針を確認しました。 現在進行中のため、具体的な成功事例はまだ示せません。しかし、取り組みの現状や考え方については共有できると思っています。 数字を見る上での視点や定義についても、具体化してきました。例えば、我々のプロダクトに関わる複数のチームの中で、プロダクト全体の改善点とチームごとの改善点の2つの視点での取り組み方が明確になってきました。デプロイ回数や平均復旧時間など、プロダクト全体としての方針や、チームごとの具体的なタスクの進捗状況などの確認が重要であることがわかりました。 また、安定性やスループットを可視化することの価値、短期的な取り組みの結果を見ることの意義についても認識してきました。このように、これからの段階ではありますが、この時点でもかなりいい成果を得ることができました。 今後も、取り組みをさらにブラッシュアップして、開発生産性の高いチームを作っていきたいと思います。 最後に、ハイパフォーマーな組織を一緒に作っていきたい方がいたら、ぜひ私にご連絡ください。