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

Improve Our Development Habits by Measuring Pro...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for inouehi 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

Avatar for inouehi

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で測れるものは限られている。 ◦ 定量的なら白黒はっきりできると思いきやそうでもない。 ◦ 測るだけは何も起きない。改善活動のリソースも必要。 ◦ 計測値を比較する際にはコンテクストを合わせる必要がある。 ◦ 計測値の評価にも労力がかかる。