開発生産性の教科書
2024-08-25
engineering最初にまとめ
こちらの本は個人のエンジニアの生産性向上に焦点を当てた本ではなく、組織として生産性向上を上げていくにはどうするとよいかを書かれた本です。
全体的に自社開発とアジャイル開発の組織向けの内容に感じました
ですがエンジニア個人としてもやれること、現場に対して提案できるところがありました。 スモールスタートでできることから始めて行くのが良さそうです
第1章 開発生産性とは何か
プロダクトから得られる売上や利益が重要 プロダクトを使ってもらう事で達成されるKPIが重要
- 開発生産性の向上について考える前にプロダクトのゴールを決める
- どの課題に対して取り組むべきか
を考える必要がある
KPI(Key Performance Indicator)とは、業績を評価し管理するための定量的な指標です。KPIを用いて、目標達成に至る各プロセスでの達成度合を計測、監視することで、組織のパフォーマンス状況が確認できます。またKPIで目標達成に対するギャップを明らかにすれば、取り組むべき施策が明確になり、効率的な目標達成にもつながります。
1.1.2 開発生産生向上に取り組むべき箇所
エンジニアリングに特化した部分は取り組みやすくコントロールしやすい 組織を横断した取り組みはすり合わせなどに時間がかかるため手が出しづらい
エンジニアリングのみ開発生産性が高くてもそれぞれの工程の連携が不十分であったりするとプロダクト全体で見た時にあまり生産性が上がっていない可能性がある為注意すること
1.1.3 開発生産性の定義
「開発生産性」が指す範囲は広い 得られた成果物(アウトプット)÷ 投入した生産要素(インプット)= 生産生
開発生産性を考える上でのインプット、アウトプットの例
|種別|項目| | --- | --- | | 開発生産性におけるアウトプット |リリースされた機能や修正の数<br>開発されたコードの行数| | 開発生産性におけるインプット |開発に費やされた時間(人時、人月など)<br>開発に使用された予算|
1.2.3 開発生産性のレベルについて
レベル1: 仕事量の生産性 レベル2: 期待付加価値の生産性 レベル3: 実現付加価値の生産性
1.3 開発生産性レベルごとの分類とタスク例
開発生産性レベル1
いろいろな取り組みがあるが代表的な例として下記のようなものがある
- ソースコードのメンテナンス性向上
- リファクタリング
- UTの強化
- タスク自動化スクリプト作成
- ビルド、デプロイスクリプトの自動化
- コードレビューの効率化
- リンターを使った軽微なエラー検出、コード品質可視化、依存関係のチェックなどをCI/CDを使って自動化
- コミュニケーションとチームワークの効率化
- 自分の抱える課題間や持っている情報を口頭で共有する会を開く
- ペアプログラミング
1.4 なぜ開発生産性向上が必要なのか
人口減少と高齢化による労働者不足 働き方改革 デジタルトランスフォーメーション
などで開発生産性の向上が必要になってきた
エンジニアリングの場合
エンジニアチームの開発生産性を上げることで以下のようなメリットがある
- 少ない投資でより多くの成果を獲得
- 組織の可視化による課題の明確化
- 改善のサイクル
- プロダクトサイクルへの貢献
- 採用への好影響
第二章 開発生産性のためのステップ
2.1 現状の可視化
- 開発生産性を何故高める必要があるのか
- 自分たちにとってどのようにポジティブな結果につながるのか
をチームのエンジニア全員が理解を示しノウハウや考え方を共有する状況を作ることが最初の重要ステップ
以下の指標を元に観測し、分析する。
開発生産性フレームワーク Four Keys vs SPACE
FourKeys
Four Keysとは開発チームの生産性を測る 4 つの指標で、以下の指標が含まれます:
|指標|説明| |---|---| |デプロイの頻度| デプロイ(開発した機能をお客様が使える状態にすること)した回数<br>高いほどよい| |変更のリードタイム|機能を開発してからデプロイまでにかかる時間<br>短いほどよい |変更障害率|プロダクトに障害が発生する割合<br>低いほどよい| |サービス復元時間|プロダクトに障害が発生してから復元するまでの時間<br>短いほどよい|
SPACE
SPACEフレームワークは、2021年に「LeanとDevOpsの科学」の著者、Nicole Forsgren氏がGithub、ビクトリア大学、Microsoft Researchなどのチームと共に開発した、開発チームの生産性を測定するためのツールです。
このフレームワークでは、生産性を総合的に評価するために以下の5つの重要な指標を用います。
|指標|説明| |---|---| |Satisfaction & Well-being| 仕事、チーム、使用するツール、職場文化にどれだけ満足しているかを評価します。| |Performance| チームが生成したコードがもたらした成果の大きさを評価します。| |Activity| メンバーが業務遂行の過程でどれだけの行動や成果を出しているかを評価します。| |Communication & Collaboration|チーム内外でのコミュニケーションや協力の様子を評価します。| |Efficiency & Flow|チームや組織全体の活動がどれだけ効率的に、スムーズに運ばれているかを評価します。|
SPACEフレームワークを導入して開発生産性の改善活動ができる環境作り
観測・分析を終えたら、メンバーにヒアリングなど行い課題の洗い出しを行う その中で見つけた課題に対して優先順位づけを行い目標と改善策を実行する
注意点として、生産性向上の取り組みを継続的に行う際にはチームメンバーに負担がかからないように調整すべき チームメンバーを大切にしよう
開発生産性向上に有用なツール紹介
P223
海外事例の紹介
NetflixのKeeperTest P242
ネットフリックスが従業員を解雇するときに使う「キーパーテスト」とは
最後に
皆さんの開発現場での生産性向上の取り組み事例などが聞きたいです!