『More Effective Agile ― ソフトウェアリーダーになるための 28 の道標』の読書メモです。本書ではアジャイル開発における 28 の基本原則と、それを支えるプラクティスについて紹介しています。

表紙

感想

  • 数多の原則の中でも「フィードバックループをタイトにする」と「成長マインドセットを培う」という原則に思わず膝を叩いた。あらゆる原則・プラクティスはこのフィードバックループを短くするためにある。
  • ソフトウェアエンジニアとして駆け出しの頃にこの手のソフトウェア開発方法論に関する本を読んでも眠くなるだけでしたが、経験を積んできたおかげか自分ごとのように捉えられる話も多くなり、今回は楽しく読めました。
  • 既にアジャイル開発に取り組んでいてそれを改善したい人や入門書を読んだことがある人は本書から多くのことが得られると思います。本書はアジャイル開発の手順書ではないため、最初の一冊目として読むのにはあまり向いていないと思います。
  • 私の理解だと、アジャイル開発で真に重要なのは特定の開発管理手法ではなく、開発プロジェクトやチーム運営を成功させる上で認識すべき基本原則であり、それらを学ぶことはチーム内の立場やアジャイル開発の導入の有無に関わらず普遍的に役立つのではないかと思います。

読書メモ

Twitter でのメモ書き

Part 1 より効果的なアジャイル

第 1 章 はじめに

  • アジャイルの重要性や本書の対象読者・構成など。

第 2 章 アジャイルの本当の違いは何か

  • シーケンシャル開発とアジャイル開発の違いと共通点、アジャイル開発の恩恵、組織におけるアジャイルの適用範囲など。
  • ウォーターフォール開発はシーケンシャル開発の一種って感じなのかな?

第 3 章 複雑さと不確実さという課題に対処する

  • 不確定性や複雑さを理解するためのフレームワーク Cynefin と、複雑系のプロジェクトを回すための OODA フレームワークの紹介、など。
  • Cynefin によって問題をいくつかのドメインに分類することができ、特にソフトウェア開発に関係してくるのは煩雑系と複雑系。ドメインごとの推奨アプローチが示されてるんだけど、自分には全然しっくりこなかった。こういうのをセンスメイキングフレームワークと呼ぶらしい。知らなかった。
  • OODA の方が分かりやすいけど、いまいちピンときてない。

Part 2 より効果的なチーム

第 4 章 より効果的なアジャイルの始まり:スクラム

  • スクラムの仕組みと参加者の役割、スクラムの失敗パターンと成功要因、など。
  • 最近私のいるチームもスプリントプランニングをしながらプロジェクトを進めているんですが、見様見真似でやってたので参考になった。

第 5 章 より効果的なアジャイル:チーム構造

  • 機能横断的なチームの重要性、テスト技術者のチームへの統合、プロダクションサポートの組織化、マネージャーはどのようにアジャイルチームを管理すべきか、など。
  • 急なプロダクションサポートによるスプリントへの影響の対処法についてはとても気になるのでもう少し掘り下げたものが読みたい。

第 6 章 より効果的なアジャイル:チーム文化

  • チームの文化はチームの自己管理能力を養う上で重要となる。特に自律・熟達・目的を要にした内発的動機づけが大事、という話。あとはプロジェクトの成功だけでなくチームの成長に目を向けることが重要という話、など。
  • 本書ではある調査に基づいて「ソフトウェア開発作業にとって重要となるのは内発的なモチベーションだけである」と書かれているけど、個人的に違和感がある。究極的には内発的なものがクリティカルになると思うけど、それを下支えする賃金などによる外発的なものも重要になってくると思う。あとメンバーのライフステージによっても変わってくるはず。1981 年の調査みたいだから、当時とだいぶ意識が違いそう。調査結果を読んでみるべきか。
  • 動機づけについては以前読んだ『小学生の子が勉強にハマる方法』という本が面白かったことを思い出した。参考文献を深堀りしようと思って忘れてた。

第 7 章 より効果的なアジャイル:分散チーム

  • タイトなフィードバックループの重要性、分散チームにおける責務の割り当て方、分散チームを成功させるためのプラクティス、など。
  • あらゆるプラクティスはフィードバックループを短くするためのもの、というのは目から鱗だった。

第 8 章 より効果的なアジャイル:個人及び対話

  • 対話を通じて個人やチームのポテンシャルを上げる上で有用なフレームワークやモデル、またソフトウェア専門職が精通しておくべき知識の種類、など。
  • 本章はわりと雑多なことが書かれている気がしてまだうまく咀嚼できていない。

Part 3 より効果的な作業

第 9 章 より効果的なアジャイル:プロジェクト

  • プロジェクトやスプリントを小さく保つことの重要性、バーティカルスライスによるデリバリー、技術的負債の種類と管理・対処方法、など。
  • これらもやはりフィードバックループを短くする上で重要になる。

第 10 章 より効果的なアジャイル:大規模なプロジェクト

  • 大規模なプロジェクトにおけるアジャイルプラクティスについて。
  • 大規模なプロジェクトではアジャイルプラクティスをスケールアップしていくのではなく、プロジェクトを自律的で完全な単位に分割することで小さなアジャイルチームを構成していくべきで、アーキテクチャの適切な分割がそれをサポートしていく、という話。

第 11 章 より効果的なアジャイル:品質

  • バグの混入とその検出までの期間を短くすることの重要性とそれを助けるプラクティス、完成の定義 (DoD: Definition of Done)、リリース可能な品質水準の維持、など。

第 12 章 より効果的なアジャイル:テスト

  • アジャイル開発におけるテストはどうあるべきかという話。特に目新しい話はなかった。

第 13 章 より効果的なアジャイル:要求の作成

  • アジャイルプロジェクトにおける要求獲得の方法とその管理について。要求のライフサイクル、シーケンシャルプロジェクトにおける要求との違い、ストーリーによる要求の表現、プロダクトバックログによる要求の管理とその手入れ、など。
  • アジャイル初心者過ぎてストーリーの使い方やその他要求獲得のプラクティスについてよく分かってないので、次何か読むときはその辺り詳しく書かれたものが読んでみたい。

第 14 章 より効果的なアジャイル:要求の優先順位付け

  • 有能なプロダクトオーナーの特性、ビジネス価値と開発コストによるストーリーの優先順位付け (T シャツのサイズ分け)、ストーリーマッピングによる優先順位付け、など。

第 15 章 より効果的なアジャイル:デリバリー

  • ソフトウェア開発のライフサイクルと作業の自動化、継続的インテグレーションと継続的デリバリー (継続的デプロイ)、それらを支えるプラクティス、など。
  • デリバリーとデプロイの違いを理解してなかった。デリバリーは本番環境への投入準備でデプロイはしないのね。デプロイまで含むと思ってた。
  • プロダクトやその他様々な都合で頻繁なデプロイはできなくとも、継続的なデリバリーをすることで恩恵を受けることができる。例えばチームの学習ペースが上がる。これは前述のフィードバックループを早く回すという原則に繋がる。

Part 4 より効果的な組織

第 16 章 より効果的なアジャイル:リーダーシップ

  • リーダーとしての振る舞いの基本原則について。チームをブラックボックスとして扱ったり、「司令官の意図」を明確にしたり、など。
  • 「司令官の意図」は自分の環境だと OKR とか project charter かな。

第 17 章 より効果的なアジャイル:組織文化

  • 間違いを許容し学びに繋げる文化、心理的安全性の確保、チームのキャパシティプランニング、など。

第 18 章 より効果的なアジャイル:計画

  • 作業量や作業品質を定量的に評価するための計測方法、など。
  • 品質の測定に手戻り率を使うというのはなるほどと思った。ここで重要なのはこれが「作業の品質」であって「完成物の品質」ではないところかな。最初読んだ時「完成物の品質」だと誤読して「手戻り率から完成物の品質は直接評価できないでしょ」って思ってた。
  • 測定値の用途の透明性とか測定する意義の周知は本当に大事だなと思う。じゃないと無意味なデータや無意識的に良く見せようとするデータが集まりがち。

第 19 章 より効果的なアジャイル:プロセス改善

  • アジャイルの肝は作業を早く終わらせることではなく、改善によって作業を加速させること。そのための生産性の検討、WIP 作業の可視化、レトロスペクティブに関する話など。

第 20 章 より効果的なアジャイル:予測可能性

  • 予測は何を予測するか (コスト・スケジュール・機能など)、どの程度の厳密さが求められるか、によっていくつかのアプローチに分けることができる。本章ではそれぞれで使える手法を紹介している。
  • ストーリーポイントやベロシティをまだうまく自分の中で消化できていないので、それらを使った手法についてはザーッと読み流してしまった。普段感覚的にやっている予測を実測値に基づいて理論的にやってる感じかなぁ、と思っている。
  • 一方、本章を読んで第 3 章で紹介されていた Cynefin の複雑系と煩雑系の話がだいぶ腹落ちした。複雑系の問題は予測が困難なため、まずは予測可能な煩雑系の問題へと変換する必要がある。

第 21 章 より効果的なアジャイル:規制産業

  • 何らかの規制が存在する産業におけるアジャイルプロジェクトについて。
  • アジャイルはそういった産業においても有効に働くが、上流工程などにおいてシーケンシャルなアプローチを組み合わせる方がよいこともある。
  • 規制が法令によるものなのか、それとも自社の内部的な理由もしくは経験によるものなのかを区別することで、実は既に形骸化している社内規制を取り除くことができるかもしれない、という話はなるほどと思いました。

第 22 章 より効果的なアジャイル:ポートフォリオマネジメント

  • フィーチャー開発の優先度の決め方。CoD (Cost of Delay) を開発期間で割った値が大きいフィーチャーから開発していく WSJF (Weighted Shortest Job First) の話、など。

第 23 章 より効果的なアジャイル:導入

  • 組織に新しい施策を導入する際のやり方についての話。組織変革のために必須となる 6 つの要素を定義したドミノ変革モデル、イノベーター理論に基づいたパイロットチームの運用と施策のロールアウト時の注意点、など。
  • 本章の話はアジャイルに限らず様々な施策の導入に適用できそう。

Part 5 おわりに

本書で紹介された 28 の基本原則のまとめ。