XPチーム全体とは、様々な人が相互に関連しながら一緒に仕事をして、プロジェクトをさらに効果的にするものである。
各自が成功するためにも、グループとして共に働かねばならない。
テスターはシステムレベルの自動テストの選択や記述について開発前に顧客を支援したり、プログラマーにテスト技法をコーチしたりする。
テストファーストプログラミングを浸透させ、週次サイクルの頭にシステムレベルの自動テストに変換するプロセスを挟む。
テスターは想定通り動く「ハッピーパス」を視野に入れつつ、そこから外れた部分についてコミュニケーションを通じて考えさせる役割を持つ。
システム全体のメタファーの選択や、ストーリーの記述、新たなストーリーの機会の創出などを担う。システムに求められるものを特定したうえで、プログラマーへの橋渡しを行う。最終的なユーザーの課題に取り組む開発チームの顧客理解や分析に役立つ。
ストーリーの実装や大規模なリファクタリングの調査・実施、システムレベルテストの構築などを担う。 システムの成長に合わせて適切な大きさのアーキテクチャを選択する。テストによってアーキテクチャの意図を伝えたり、システムの分割(統治分割)を担う。統治分割は、小さなチームで小さなシステムを作ってから、自然な切れ目を見つけて分割する。その分割の選択を担うのもアーキテクトである。
チーム内のコミュニケーションの円滑化や顧客やサプライヤーなどのチーム外の組織とのコミュニケーションの調整を行う。チームをまとめ上げるとともにその進捗に目を配り、外部へのクリエイティブなプレゼンを行う。プロジェクトに対する数多くの変更をうまく伝達するスキルが求められる。
チーム内外とのコミュニケーションを円滑にし、一体感や信頼関係を築く必要がある。
ストーリーを書き、四半期サイクルのテーマや週次サイクルのストーリーを決める役割を担う。
主に四半期や週次でのチーム計画を主導する役割であるが、チーム計画は起こり得るものが何かを示したものであり、計画して終わりではない。チームの実情に応じてストーリーやテーマを適応させる役割も担う。
週が終わればシステムは「完全」である必要がある。そのための必要ストーリーを選択し、実践させる力が求められる。
XPチームに勇気、自信、説明責任を提供する役割を担う。 会社のゴールという大きなゴールの明確化と維持が、チームの監督として経営幹部に求められる役割である。
経営幹部はチームに対し、筋の通った明確な説明の提供を求める。その情報は、意思決定の重要な判断材料となる。
XPチームの健全性を判断する指標として、開発後に発見された欠陥数とアイデアに投資してから収益が生まれるまでのタイムラグがある。これらの結果が優秀なほど、優秀なチームである。
チームが組織の期待に添わない場合は、組織へのチームのプレゼンも重要な役割である。
フィーチャー(機能)のフィードバックの早期提供や、ユーザーとの密接な関係構築を担う。フィーチャーを一番最初に目にすることになるため、そこからフィードバックを真っ先に提供する。
また、ユーザーとの橋渡し役として、発表資料の作成やデモの実演などを行う。
フィーチャーが完成すると同時に出来上がり、簡単に更新でき、コストのかからないドキュメント作成を行う。現状から理想に進むための重要な役割を担う。
開発中のストーリーをの記述や選択の支援を行ったり、専門領域の意思決定を行う。ユーザーはコミュニティの代表者であり、コミュニティの人と会話するまでは、影響範囲の大きな意思決定は遅らせるべきである。
ストーリーやタスクの見積もり、ストーリーのタスク分解、テストやフィーチャーのコードの記述、自動化や設計カイゼンなど多岐にわたる。技術的に密接に協力しながら一緒に働く。
人事評価の問題:チームのパフォーマンスに集中しているにもかかわらず、評価は個人の目標度や達成度であること。
XPにおける重要性の高い従業員の指標としては、
役割は固定化された不変のものではない。全員がチームの成功に最善を尽くして貢献することが目的である。 また、役割と人数の関係も特に制限はない。
大事なのは権限と責任のバランスを保つことである。
XPのスコープ外である営業やマネジメントといった分野なども含めて、ソフトウェア開発の全体像を見定める必要がある。
制約理論では、あらゆるシステムに1つの制約が存在すると考える。この制約を見つけ出し、最大限に稼働しているかどうかを確認する。そして、制約のキャパシティーを増やすか、それ以外の負荷を下げるか、制約を完全に排除するのかの検討に移る。
ウォーターフォール型等のプッシュモデルは開発段階が進むにつれて山積みになっていくため、インテグレーション(統合)プロセスがボトルネックになりやすい。
一方、XPはプルモデルを採用している。 ストーリーは採用直前に仕様化する。テストは仕様からプルする。コードはテストやインターフェスにあわせて書く。これによって次に仕様化するストーリーが決まる。
制約を理論はこうした全体的なスループットへの集中を行える半面、モデルであり、人間のプロセスとは異なるという弱点がある。それでも制約理論はそのプロセスを認識する優れた方法である。
XPによる最適化が行われると、制約理論上のボトルネックは徐々に外側へと押し出される。ボトルネック解消にはその外側の最適化が行われる必要がある。
但し、XPによる急速な最適化は、ボトルネック側の反感を買い、排除されてしまう恐れもある。経営幹部の支援がない場合は、たとえ評価や保護が得られなくても、自分自身でより良い仕事をする覚悟が必要である。
お互いの合意の上に成り立ち、現実の変化を反映して調整された計画は、リスペクトに満ちた相互に重要な人間関係を表す。 逆に現実離れした計画は、不明確で不安定な人間関係を表す。
計画づくりはあらゆる可能性の中から次に何を行うかを決定することである。意思決定に使う情報は日々変化するため、フィートバックを用いて見積もりをカイゼンさせたり、意思決定をできるだけ遅らせたりする。
計画は明日起こりそうなことについて、今日知っていることを表したものである。不確実性は計画の重要性を否定するものではない。
スコープを明確にすると、以下のメリットがある。
実施には以下の4ステップを用いる。
欠陥は効果的なソフトウェア開発に必要な 「信頼」をぶち壊す。 信頼できないと、誰かが間違いを犯す可能性からの保守に必死になり、効率的な仕事ではなくなる。
だが、全てのバグを取り除くのは不可能である。欠陥はコストになるが、欠陥を無くすのにもまたコストがかかる。但し、欠陥のコストのほうが、対策コストを上回る。 なぜなら欠陥修正のコスト+信頼を失うコストの両方がかかるためである。
XPは、明確なコミュニケーションにより、最初から欠陥を発生しないようにする。発生した時は逆にそれを利用して回避方法をチーム全体で学ぶ。
欠陥の許容レベルはシステムにより様々で、通常のサイト等、経済的に持続可能なレベル(99.99%以上等)で良いこともあれば、宇宙船の打ち上げシステム等、一切の欠陥が許されないレベルが求められることもある。
この 「経済的に持続可能」な水準 は、開発の一つの目的となる。
また、もう一つの目的は、チーム内の信頼がある程度成熟するまで欠陥を抑えることである。互いに信頼を失い、チーム内の効率的なやりとりができなくなっては生産的な仕事はできない。
XPでは欠陥に直接対処して欠陥を減らす取り組みを行う。
テストを先に書くかコードを先に書くかは決まっていないが、XPではテストを先に書く。 インターフェースに左右されない他、確信が持てる、進捗を計測できる等のメリットがある。
インクリメンタルな設計を受け入れる理由を掘り下げる。
パーマカルチャーとは、バランスの取れたエコシステムにおける持続可能な生活の哲学及び実践のことである。このような「各要素が有益に関連したシステム」が設計であるとしている。
設計はソフトウェアの価値を高める。設計はコスト不要で無限に要素を複製できる。したがって、有益な関連は既存のすべての要素の関連に広げられる。
物理的に不可能な既存システムを段階的に置き換えて完成させるような方法は、ソフトウェアではコストのかからない 普通の手段としてみなされる。したがって、漸進的なインクリメンタルな開発は、物理的に無理でもソフトウェアでは可能である。
ソフトウェアの設計者が持つべきは能力は、まず十分なフィードバックが得られるまで「忍耐」のスキルを身につける必要がある。
ソフトウェアは建築のメタファーが良く使われる。建築の世界では段階的に変更するのは極めて難しいが、ソフトウェアでは可能である。
大事なのは誰がするかではなく、いつするかである。
BDUF(Big Design Up Front:前もって大部分を設計)にとって代わるのは、なにも設計しないことではなく、LDUF(Little Design Up Front:前もって少しずつ設計)かEDUF(Enough Design Up Front:前もって十分に設計)である。
実装前の設計にとって代わるのは、実装後の設計である。
実装前の設計は以前のMVPを参考にできるだけ小さく実装する。最初は簡易な実装ができる部分だけで十分で、実装後に本当の制約が明らかになってから詳細を決定する。
XPの戦略は「何も設計しない」ではなく、「常に設計する」である。
直感ですぐにでも設計して成功する場合、熟考する必要がある場合、経験に基づいた知識が必要な場合に分かれる。
経験が役に立たない場合は、熟考レベルですぐに設計に取り掛かるべきであり、逆に経験により大きな価値を生む場合は必要な分だけ取り掛かってあとから設計すると良い。
なお、設計は費やした時間分のコストがかかるため、後で間違っているとコストが膨らむ。経験に照らした確実な設計はコスト面でも役立つ。
データ、構造、ロジックなどは、1か所に固まっておくべきである。
全体処理を担うコントローラー、処理の材料となるモデル、ページを表現するビュー(MVCアーキテクチャ)といった、機能別に切り離して特化したコードが理想的となる。
こうしたコードの構造的最適化処理は、リファクタリングの一つである。
リファクタリングを繰り返すうちにたどり着くのが、重複がほぼ取り払われた「パターン」である。
長所として、1つの概念を変更した際に、変更するコードは1箇所で良くなる。
また、前提もできる限り局所化しておくことで、影響を限定的にとどめられる。
XPは人数だけではなく、様々な尺度でスケーリングを行う。
小人数チームで行っていた規律を、大人数チームに適用してもうまくいかない。
まず大きな問題を小さな問題に分割する。 ここでは、まずチームの分割から始めてみる。
ここでうまくいかなければ、プログラミングの問題を小さく分割し、簡単な解決策から始めてみる。
例えば、統治分割戦略(自然な切れ目で分割し、複数チームで作業。こまめに統合)
こうした解決策が失敗した場合のみ、複雑な解決策に移る。
XPプロジェクトの会計は開発費用?それとも資本投資?
開発費用扱いの場合:継続保守名目で正当化可能。
資本投資扱いの場合:全体のスコープを明確にはできないが、四半期単位・年単位で開発費として承認可能。
特に大規模プロジェクトの場合は、早めに財務担当者の協力者を見つけておくと良い。
大きな組織の一部でXPを取り入れる場合、これまでのやり方でやってきた人々が敵になる恐れがある。
そこで、月例会議等でスキルの高いプロジェクトマネージャーが、組織が受け入れられる形で情報提供を行う。
その一方で組織の要求には原則応える必要がある。
大変ではあるが、ありのままの現実を隠さず、組織の意向をリスペクトすることがうまくいくコツである。
長期間のXPプロジェクトはうまくいく。 テストによる保守間違いを防ぎ、開発プロセスのストーリーがうまく伝わる。
さらに、自動テストやインクリメンタルな設計により、システムを維持しつつ、さらなる成長が可能となる。
プロジェクトが開始と停止を繰り返す場合は、「ロゼッタストーン」という将来の保守に向けたガイドを書くことが多い。
XPは専門家同士の密な連携が必要な場合に最適である。
お互いに専門分野を学びつつ、全員を協力させることができれば、チーム力の劇的な向上につながる。
システムが複雑になり、問題を解決しても新たな問題を発生させるような状況では苦しい。
こういう時にXPは力を発揮する。
自動ビルドやストーリーマッピングなどのプラクティスを利用して、余計な無駄を排除しながら欠陥を修正すれば、大幅な改善が見込める。
継続的にデリバリーしながら少しずつ複雑さを削り取る。そして計画づくりの見える化で見積もりも受け入れられやすくなる。
安全性やセキュリティが重要なプロジェクトの場合、たった一つの欠陥が命取りとなる。 このような場合XPだけでは不十分である。
セキュリティの原則に則り構築し、専門家による審査をパスするというプラクティスを日常業務に取り込む必要がある。
審査はプロジェクトの最後のフェーズにならないよう、フィードバックが得られるよう早めにこまめに行うべきである。
リファクタリング時も当然ながらセキュリティの担保が求められる。
審査官と継続的な関係を築けば審査の成功率も高まる。
なお、情報を記録する手順は決まっていないため、トレーサビリティの実現には物理的に記録するだけでよい。
Sabre Airine Solutions社の、ブラッド・ジェンセン航空製品開発シニアバイスプレジデントのインタビュー
読書