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

PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜

Soh1121
February 20, 2025

PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜

Soh1121

February 20, 2025
Tweet

Other Decks in Programming

Transcript

  1. 5 背景 • Four Keys(※1) を測定し、開発の高速化を目指す ◦ 現状を把握して改善のアクションを起こせるようにする ◦ 2022年12月から運用開始

    • スモールスタート ◦ 「変更のリードタイム(※2)」に着目 ◦ 中でもレビューを迅速に行うことを目指してきた ▪ 取り組みやすく、効果があることが分かっているため ▪ 「レビューを迅速に行う」=「レビュー負荷を下げる」 ※1 ソフトウェア開発チームのパフォーマンスを測る4つの指標 ※2 commit から本番環境稼働までの所要時間 「エリート DevOps チームであることを Four Keys プロジェクトで確認する | Google Cloud 公式ブログ」より
  2. 開発スピードと品質の両立がしやすくなり チーム全体の士気と生産性を高めることができる! 7 なぜレビュー負荷を下げるのか? 1. チームの生産性向上 ◦ レビュー時間短縮により付加価値の高い作業へ集中 2. 品質向上につながる迅速なフィードバックループ

    ◦ 見落としが少なくなりレビュー精度が向上 3. コミュニケーションの活性化 ◦ 「早く終わらせたい」「まとまった時間がないとつらい」だと消極的になりやすい 4. モチベーションの維持 ◦ レビューがつらいとチーム全体のモチベーションが低下 レビュー負荷を 下げると
  3. 10 試行錯誤したタスクの分け方 1. 機能単位 ◦ 1タスク=1機能として実装・レビュー 2. 処理単位 ◦ 1機能を処理ごとにタスク分解して実装・レビュー

    3. レイヤー単位 ◦ ドメイン層・アプリケーション層・インフラ層などでタスク分解して実装・レビュー ◦ 今回は処理単位にタスク分解したものを更にレイヤー単位に分解した 4. 補完単位
  4. 11 補完単位とは? • 最初にミニマム実装で1タスク ◦ 本番用の正常系のみ ◦ プリミティブしか使わない • その後、不足部分を補完していくかのごとくタスク分解

    ◦ 例えば ▪ オブジェクトへの置き換え → 1タスク ▪ 本番環境・開発環境での処理の分岐 → 1タスク ▪ 異常系の実装 → 1タスク
  5. 12 タスク概要〜機能単位で分ける〜 タスクはすべて非同期処理基盤の構築プロジェクト • 4機能を実装・レビュー 機能概要 言語 実装難易度 設計 実装時期

    非同期イベント登録 Go 中 なし 初期 非同期イベント検索(サーバー) Go 高 なし 初期 イベントのステータス更新② Go 低 なし 中期 ファイルアップロード Go 中 あり 後期
  6. 13 タスク概要〜処理単位で分ける〜 • 3機能を実装・レビュー(※ 部分的にレイヤー単位に分割 → 集計外) • 計測対象:13タスク 機能概要

    タスク数 言語 実装難易度 設計 実装時期 非同期イベント発行(サーバー) 5 Go 中 あり 初期 イベントのステータス更新① 3 Go 中 なし 中期 非同期イベント リトライ※ 5 Go 高 あり 後期
  7. 15 タスク概要〜補完単位で分ける〜 • 3機能を実装・レビュー • 計測対象:14タスク 機能概要 タスク数 言語 実装難易度

    設計 実装時期 非同期イベント発行(クライアント) 5 PHP 中 あり 中期 非同期イベント検索(クライアント) 5 PHP 中 あり 後期 ファイルアップロード 4 PHP 中 あり 後期
  8. 18 計測における前提 • レビューは実装者以外のメンバー全員で実施 • CI で静的解析を実施 • 各々レビュー負荷を下げるために事前に PR

    にコメントを付与 ◦ Conversation に含まれている • 設計がないタスクはレビューで設計の議論が生じたものがある ◦ Conversation が膨らんでいる • PHP には慣れ親しんでいるが Go には不慣れ... ◦ 実装時期が後ろに行くほど慣れてきている
  9. 26 ご紹介したこと • レビュー負荷を下げたいモチベーション • レビュー負荷を下げるためにタスク分解の方法 a. 機能単位 b. 処理単位

    c. レイヤー単位 d. 補完単位 • タスク分解の方法ごとのレビュー負荷の計測結果 ◦ 変更行数・オープンからマージまでの時間・Conversation