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

Improve Our Development Habits by Measuring Pro...

inouehi
January 11, 2024

Improve Our Development Habits by Measuring Productivity and Maintainability

『測って見直す開発習慣 可視化を進めて私たちに起きた変化』

PHPカンファレンス北海道 2024
2024/01/13 16:05〜 クリエイティブスタジオ
https://phpcon.hokkaido.jp/
https://fortee.jp/phpcon-hokkaido-2024

inouehi

January 11, 2024
Tweet

More Decks by inouehi

Other Decks in Technology

Transcript

  1. 9 • 測る? or 測らない? ◦ 測る • 何を測る?(Four Keys

    or SPACE or その他) ◦ Four Keys • どうやって測る?(Saas or OSS or 自作) ◦ Saas 生産性評価方法の現状
  2. 13 • ノイズの問題(計測ツールの仕様による部分もある) ◦ 非稼働日(特に連休)により計測値が悪化する。 ◦ 調査のため作成し閉じたPR(成果有)と開発を中止したPR(成果無)が見分けられない。 ◦ 自動生成されるコードなどにより変更行数が顕著に大きくなる。 ◦

    (そもそも運営の是非があるが)隙間時間に進める開発はリードタイムが長くなる。 ◦ かといって除外すると、貢献がPR数に反映されない。 ◦ GitHubでラベルの付与漏れによる分析対象の誤り。 注意事項
  3. 14 • 測る? or 測らない? ◦ 測る • 何を測る? ◦

    コードベースの規模 ◦ 循環的複雑度 • どうやって測る? ◦ OSS 保守性評価方法の現状
  4. 17 • Findy Team+を利用。 • GitHubやJiraに蓄積されたPR等の情報を活用。 • PHP等の言語に依存せず、適用可能。 Four Keys[1]

    1. https://cloud.google.com/blog/ja/products/gcp/using-the-four-keys-to-measure-your-devops-performance
  5. 18 • デプロイの頻度 … 組織による正常な本番環境へのリリースの頻度 • 変更のリードタイム … commit から本番環境稼働までの所要時間

    • 変更障害率 … デプロイが原因で本番環境で障害が発生する割合(%) • サービス復元時間 … 組織が本番環境での障害から回復するのにかかる時間 1. デプロイの頻度, 変更のリードタイム, 変更障害率, サービス復元時間。 State of DevOps 2021では運用パフォーマンス指標である「信頼性」が5つめのメトリクスとして追加された。 Four Keys[1]
  6. 20 Four Keysが含意するものに差異がありうる。例えば、 • デプロイの頻度 … 計測の都合によるカウント方法の差異 • 変更のリードタイム …

    commitするタイミングの差異 … 計算方法の差異 … PRの難易度の差異 … 製品特性による開発プロセスの差異 Four Keys
  7. 21 Four Keysが含意するものに差異がありうる。例えば、 • デプロイの頻度 … 計測の都合によるカウント方法の差異 • 変更のリードタイム …

    commitするタイミングの差異 … 計算方法の差異 … PRの難易度の差異 … 製品特性による開発プロセスの差異 ⇒比較したい場合コンテクストの違いに注意する必要がある。 Four Keys
  8. 25 • デプロイの頻度 ← 変更のリードタイムへの依存関係がありそう • 変更のリードタイム ← 更に分解できる ◦

    開発する ◦ レビューする ◦ 修正を完了する ◦ マージする • 変更障害率 • サービス復元時間 スモールスタート
  9. 26 • デプロイの頻度 ← 変更のリードタイムへの依存関係がありそう • 変更のリードタイム ← 更に分解できる ◦

    開発する ◦ レビューする ←取り組みやすい ◦ 修正を完了する ◦ マージする • 変更障害率 ← 課題感がないのでスコープアウト • サービス復元時間 ← 課題感がないのでスコープアウト スモールスタート
  10. 27 • デプロイの頻度 ← 変更のリードタイムへの依存関係がありそう • 変更のリードタイム ← 更に分解できる ◦

    開発する ◦ レビューする ← ここからやってみよう ◦ 修正を完了する ◦ マージする • 変更障害率 ← 課題感がないのでスコープアウト • サービス復元時間 ← 課題感がないのでスコープアウト スモールスタート
  11. 31 • デプロイの頻度 • 変更のリードタイム ◦ 開発する ← ここもやってみよう ◦

    レビューする ← ここからやってみよう ◦ 修正を完了する ← ここもやってみよう ◦ マージする • 変更障害率 • サービス復元時間 次のステップ
  12. 49 • 環境 ◦ 開発プロセス ◦ 既存システムの保守性 ◦ 開発・運用環境[1] ◦

    開発外業務[2]の多寡 • 人 ◦ ドメイン知識 ◦ 技術力 ◦ モチベーション 3. (副次的なものとして)のびしろ 1. CI/CD、型付け、静的解析、フィーチャートグル、ChatOps、オブザーバビリティといった類の話。 2. コードの生成に直接的につながらない業務。間接業務、見積り、照会、障害対応等。
  13. 54 • 現場見学 • インプット、アウトプットの機会提供 • ナレッジ共有の機会提供 • ペアプロ •

    レビュー • ディスカッション • 勉強会 • ドキュメント整備 人を支援する
  14. 57 • グラフに表れない情報は別途収集する必要がある。 ◦ メンバー数 ◦ 稼働日数 ◦ 開発外業務量(PRに反映されないアクティビティ量) ◦

    難易度 ◦ 新規開発 or 改修(資産や負債の有無) ◦ 技術スタック など (直接的には)わからないこと
  15. • 体感の答え合わせができる。 ◦ レビューを迅速に行っている感覚があり、数値がそれを裏付けていた。 ◦ 新規参画者のパフォーマンスが右肩上がりなのを確認できた。 • 体感と異なることもあり、それが発見である。 ◦ 自覚していなかったがPRを小さくできる余地があった。

    • 数値を踏まえて振り返りや1on1を行うようになった。 ◦ 変更のリードタイムが長引いた要因を、工程の内訳を踏まえて振り返れた。 61 1. スクラムイベント - 例えばふりかえりがどうなったか
  16. 63 …………………………… ☟変更のリードタイムが長期化する要因例 • 開発する … 担当者のスキル、要件の精度、システムの理解容易性、影響範囲 • レビューする …

    意識・習慣(仕事の優先順位づけ)、業務量、レビューしやすさ • 修正を完了する … 開発する同様の要因+認識違い、指摘の流儀、レビュアー数 • マージする … デプロイの仕組み、デプロイを阻む要素、QA体制 2. 対策策定 - 例えば変更のリードタイムを改善したい時
  17. 64 …………………………… ☟変更のリードタイムが長期化する要因例 • 開発する … 担当者のスキル、要件の精度、システムの理解容易性、影響範囲 • レビューする …

    意識・習慣(仕事の優先順位づけ)、業務量、レビューしやすさ • 修正を完了する … 開発する同様の要因+認識違い、指摘の流儀、レビュアー数 • マージする … デプロイの仕組み、デプロイを阻む要素、QA体制 2. 対策策定 - 例えば変更のリードタイムを改善したい時
  18. 65 • レビュー文化 ◦ 極力レビュー優先 ◦ レビューしやすいPR ◦ レビューに至るまでのコミュニケーション ▪

    要所を相談してから進める。 ▪ モブ設計により大きな認識のズレを無くしておく。 ▪ レビューをスムーズにする前提知識を事前に周知する。 ◦ レビューにおけるコミュニケーション ▪ 指摘のトーンや背景を伝える。 ▪ 参考資料やサンプルコードを示す。 ▪ 適宜口頭で説明する。 3. 開発プロセス
  19. 67 • PRサイズを小さく 段階的に浸透させた ◦ 啓蒙 ◦ 具体的な方法を紹介 ◦ ローカライズと自分事化

    ◦ 目標を具体化 ◦ レビューやふりかえりで相互フィードバック 3. 開発プロセス
  20. 68 • PRサイズを小さく 段階的に浸透させた ◦ 啓蒙 ◦ 具体的な方法を紹介 ◦ ローカライズと自分事化

    ◦ 目標を具体化 ◦ レビューやふりかえりで相互フィードバック • 注意事項 ◦ レビューが増えるので 早く行うこととセットで取り組まないと結局詰まる。 3. 開発プロセス
  21. 71 • 生産性向上の観点から他社事例、ベストプラクティスを収集 ◦ イベント参加 ◦ (Saasを利用している場合)CSのサポート • チーム間交流 ◦

    数値の差異がディスカッションの契機になる。 ◦ 他チームを観察し、プラクティスを取り入れる。 4. 情報収集
  22. 73 人によると思われるが • 目標が立てやすくなる。 • 目標に対する進捗がわかりやすくなる。 • アクションを起こしやすくなる。 • 注意事項

    ◦ 点で目標を立てるのは控えたい。環境要因によるブレがあるため。 ◦ 幅をもたせたり背景を考慮する必要がある。 ◦ 定量的なら白黒はっきりできると思いきやそうでもない。 5. 目標管理
  23. 76 • 新規作成したコードが検知されるのは稀。既存コードが検知されることはある。 • 検知が修正につながらないケース ◦ 所謂レガシーの場合リファクタのハードルが高い。 ◦ リファクタの旨みが乏しいドメインの場合優先度が上がらない。 ◦

    具体的にどこをどう直せばよいかわからない。 • そもそも費用対効果の高いところからリファクタしたいので、ランダムに見つかったそれを反射的 に修正しようとはならない。 循環的複雑度モニタリングの経過
  24. 77 • 新規作成したコードが検知されるのは稀。既存コードが検知されることはある。 • 検知が修正につながらないケース ◦ 所謂レガシーの場合リファクタのハードルが高い。 ◦ リファクタの旨みが乏しいドメインの場合優先度が上がらない。 ◦

    具体的にどこをどう直せばよいかわからない。 • そもそも費用対効果の高いところからリファクタしたいので、ランダムに見つかったそれを反射的 に修正しようとはならない。 • 複雑なコードが増殖していないことや既存コードののびしろが確認できた。 循環的複雑度モニタリングの経過
  25. 80 体感アンケート結果 • 自分の行動の改善案を考えやすくなった(レビューの速度やPRの大きさなど) • 「目標を立てやすくなった(数値で明確になった)」のが一番だと思っています • 自身の目標としても数値化されていることで、計測して改善までのプロセスが組みやすくなっていると感じます • Pull

    Request を小さくしてレビュー&マージを迅速に行うという共通意識がチームに定着しつつあり、リリースを素早くすることに活かせてきている • リアルタイムで目標の数値に近づいているor遠のいている状態が把握できるため、個人的な振り返りがやりやすくなった • オープンからマージまでの時間が分かりやすくなり意識するようになった • PRを細かく出すことにより、レビューがしやすくなった。また出す方でも大きなPRを作らないですむので負担感が減った • 自分の行動が数値化されて改善点を探しやすい • どのPRで実装が詰まったのかを明確にキャッチできている • そこからナレッジ化やチームでの問題解消などに取り組めている • チームのレビュー速度が上がり、直列になっているタスクを着手するまでの待ち時間が減った • 自分がレビューについて躊躇していることを伝えるきっかけになった • 自分の体感よりも「時間がかかっていたPR」や「早かったPR」を知ることができ、前者の問題点や後者の再現性を考えるきっかけになった (アンケート結果ではないが会話の中で拾ったこととしては) • ガイドライン等の整備により開発における迷いが減った。 • ビルド時間の短縮により迅速にデプロイできるようになった。開発環境の起動待ちの煩わしさが減った。
  26. 81 • 内省しやすくなった。 ◦ うまくいったことを確認したり、失敗したことに気づける。 ◦ 裏付けがあることで、体感に自信が持てるようになる。 ◦ 自覚してないことに気づけるようになる。 ◦

    数値が根拠となりフィードバックを受け入れられやすくなる。 ◦ 数値として見えることが自律的な改善活動のトリガーになる。 • 目標を立てやすくなった。 • プロセスを見直した部分の負担(感)が軽減した。 体感まとめ
  27. 89 • Four Keysを用いた生産性可視化をステップバイステップで進めた。 • 開発習慣や体感に変化があった。 • 生産性向上に繋げるべく保守性向上も目指している。 • 保守性可視化の仕組みづくりにもトライしており、のびしろだらけ。

    • 可視化は組織のオブザーバビリティを高めるのに役立つが、いくつかの注意点がある。 ◦ Four Keysで測れるものは限られている。 ◦ 定量的なら白黒はっきりできると思いきやそうでもない。 ◦ 測るだけは何も起きない。改善活動のリソースも必要。 ◦ 計測値を比較する際にはコンテクストを合わせる必要がある。 ◦ 計測値の評価にも労力がかかる。