Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Faster Pull Request Reviews 〜ハイパフォーマンスチームへの道〜 /...

toshimaru
August 24, 2023

Faster Pull Request Reviews 〜ハイパフォーマンスチームへの道〜 / Faster Pull Request Reviews

『ベストプラクティスから学ぶ!Four Keys向上へのトライ~夏の開発生産性LT Week~』の登壇資料です。

- イベントURL: https://findy.connpass.com/event/292030/

toshimaru

August 24, 2023
Tweet

More Decks by toshimaru

Other Decks in Technology

Transcript

  1. # 👨‍💻 自己紹介 - 榎本 敏丸 / X: [@toshimaru_e](https://twitter.com/toshimaru_e) -

    メドピア株式会社 - 集合知プラットフォーム事業部 基盤開発グループ グループリーダー - 最近のお仕事:分散モノリスアーキテクチャから真のモノリスアーキテクチャを取り戻すべく、技術的負債の解消を中心にやっています。
  2. # ⏱️ 何を計測するか?(1/3) 開発生産性指標としては、Four Keys[^1]から考えるのが王道(先ず Four Keys より始めよ)。 - **デプロイの頻度**:組織による正常な本番環境へのリリースの頻度

    - **変更のリードタイム**:commit から本番環境稼働までの所要時間 - **変更障害率**:デプロイが原因で本番環境で障害が発生する割合 - **サービス復元時間**:組織が本番環境での障害から回復するのにかかる時間
  3. # 🗓️ 施策タイムライン - 2022年01月: 開発ルールに24時間以内に何らかの反応を返す旨のルールを追加 - 2022年02月: レビュー体制の簡易化 -

    2022年04月: レビュワー指名をGitHub Teamアサインとした - 2022年10月: Findy Team+導入 - 2022年11月: Pull Request分割のメリットをチームに展開 - 2023年04月: チーム目標として「オープンからレビューまでの平均時間 12時間以内」を組み込んだ
  4. ## レビュールール追加 結果 - 結果: **△**(まずまず) - 👍 レビュワーは遅くとも翌営業日にはレビューを返さなければいけないという意識を植え付けられた -

    👎 ルールが破られているケースが散見されたが、チェック機構がなく強制力も働かなかったので、結果的に個々人の努力目標にとどまる
  5. # 💡 GitHub Teamレビューアサイン - Before: GitHub Teamレビュワーアサイン → ランダムレビュワーアサイン

    → アサインされた人がレビュー - After: GitHub Teamレビュワーアサイン → チームに所属しているエンジニアの誰かが速い者勝ちでレビュー - Why: チームメンバーの忙しさにムラがあり、ランダムレビューアサインで忙しい人にあたるとレビュー待ち時間が突如増えるというレビュワーガチャ要素があった
  6. ## GitHub Teamレビューアサイン 結果 - 結果: **△〜◯**(そこそこ成功) - 👍 チームで分担してレビューすることができるようになった

    - 👎 速い者勝ちシステムだと爆速レビュワーが常に勝利するので、結局チームの中でレビュー意識の高い人のレビュー負担が増えただけ説が一部あり
  7. ## GitHub Teamレビューアサイン 振り返り - GitHubの`CODEOWNER`機能[^3]と組み合わせると◯ - チームがオーナーシップを持てるコードベースの範囲を定義 - 定義範囲を`CODEOWNER`ファイルに設定し、当該範囲のファイルを触ったときに自動レビュワーアサイン発動

    - アサインの手間の省力化、アサイン漏れがなくなる ```bash # .gihtub/CODEOWNER 設定例 /app/**/x_feature @org/x_feature-team /app/**/y_feature @org/y_feature-team /app/**/z_feature @org/z_feature-team ```
  8. # Findy Team+導入&PR分割 振り返り - フィーチャートグル環境が整っていたことは、PR分割に明確に良い影響を与えた - 機能トグルOFFにしてユーザーに公開しないかたちで小さく変更をリリースできる[^6] - 細かくリリースするための戦略・テクニックもチームに浸透した

    - 例: URL公開せずバックエンドを先行実装、バッチジョブの実装をバッチ起動しないかたちで先行リリース [^6]: フィーチャートグルは[flipper](https://github.com/flippercloud/flipper) + [filipper-ui](https://www.flippercloud.io/docs/ui) を使って実現している
  9. ## チーム目標に組み込む 結果(1/2) - 結果: **◎**(大成功) - 👍 個々人の努力目標がチームとして達成すべき目標にレベルアップ -

    👍 具体的な数値目標を掲げたことで、今までレビューに消極的だった人も積極的にレビューしてくれるようになった
  10. # 🔎 全体結果3(DevOps Performance Metrics[^4]) - Before: **Medium** Performance -

    After: **High** Performance → ハイパフォーマンスチーム達成 🎉 ![inline](./devops-perf.png) [^4]: [Google Cloud で実行されている DevOps 組織の有効性を評価する \| Google Cloud 公式ブログ](https://cloud.google.com/blog/ja/products/gcp/another-way-to-gauge-your-devops-performance-according-to-dora)
  11. # 💪 全体振り返り・まとめ (2/2) - プラスαで下記もあると良い - フィーチャートグル環境(PR分割に効く) - SLO[^5](サービス品質は守る)

    - やはり優れた開発者体験を提供するにはレビュー速度は重要 - 朝出したPRが当日中にレビューされ翌日にはシップできる安心感 🚢 [^5]: [優れた SLO を策定するには : CRE が現場で学んだこと \| Google Cloud 公式ブログ](https://cloud.google.com/blog/ja/products/gcp/building-good-slos-cre-life-lessons)
  12. # 💬 感想 - Findy Team+ CSの方のサポートが強力で助かりました 😇 - 今回Findy

    Team+を使って開発メトリクス収集を行ったが、GitHub Insightsで公式機能としてリードタイム分析が見れると嬉しいところ - [github/issue-metrics](https://github.com/github/issue-metrics)はイマイチだった(今後に期待) - Findy Team+で平均値だけではなく p50/p90/p95 とかも知れると嬉しい 👀