エクストリームプログラミングをうまくやると、すごい成果が出る。普通こういう直接的な言い方はしないものだが、議論のとっかかりとして、ここではあえてそう言ってしまおう。
なぜすごい成果が出るのかは、けっこう論理的に説明することができる。
スキルの最小単位は個人だ。各個人が、さまざまなスキルを持っている。ここで、ほとんどの場合、各個人のスキルセットはそれぞれ異なる。
ハードスキルだけでなくソフトスキルまで含めれば、まったく同じという人がまず存在しないのはもちろん、たまに言われる「上位互換」という概念さえ怪しいのではないだろうか。チームの他の誰かと比べたとき、「すべてのスキルで上回る人」というのは、たぶん思いのほか少ない。(絶対にいない、とまでは言わないが)
エクストリームプログラミングをうまくやると、チームのスキルは、各個人のスキルの「いいところ」を集めたかたちになる。
単純に「いいところ」を足し合わせるだけではない。「いいところ」同士を掛け合わせることで、どの単一の個人によっても成し遂げられない、「ペアやチームだからこそできた成果」が生み出されることもある。(いわゆる「創発」という現象)
また、他のメンバーの「いいところ」を習い、各個人の「いいところ」を増やしていくこともやりやすい。「エクストリームプログラミングはメンバーの成長につながる」というやつだ。各個人のスキルが伸びていけば、(長期的な)チームの成果も伸びていくだろう。
単なる個人の集まりがそれぞれにプログラミングをした場合よりも、短期的な最大出力も、長期的な総和としての出力も、両方を大きくできるのがエクストリームプログラミングだ。これをもって「エクストリームプログラミングをうまくやると、すごい成果が出る」と言った。
実は、この記事で言いたいことはここからだ。
短期的な最大出力と、長期的な総和としての出力。いずれについても、「個人のスキル」が根底にあることにお気づきだろうか。
「各個人のスキルが全体的に低いチーム」というものを想像してみよう。多少のでこぼこがあるにせよ、全体的に低い。その場合、短期的な最大出力も、長期的な総和としての出力も、やはり低くなる。
単なる個人の集まりがそれぞれにプログラミングをした場合よりは高くなるかもしれないが、いずれにせよ低いのだ。また、スキルが全体的に低いということは、エクストリームプログラミングに不可欠なソーシャルスキルも低いということになる(そう仮定したから、そうだ、というだけの話だが)。だとすれば、エクストリームプログラミングの効果自体もまた低くなってしまう可能性が高い。
では、エクストリームプログラミングに必要なこと、すなわち前提条件は、「各個人のスキルが高いこと」なのだろうか?
答えは「半分イエス」だと思う。
まず、前述の通りで、低いよりは高い方が「大きくよい」。普通によい、ではなく、大きくよい、だ。ある程度は高くないと、効果がかなり低い、という言い方をしてもよいかもしれない。ただ、全員のスキル全体がまんべんなく高い必要はなく、チーム全体としてある程度のカバレッジがあればよい、というイメージだ。メンバーの中にある程度の尖りがあればよく、人によって尖っているエリアが違えばなおよい。
一方で、それだけでは足りないと思っている。これがこの記事の核心だ。
必要なこと、その答えの残り半分は、「個人がスキルを高め続けること」だ。どういうことか。
エクストリームプログラミングに取り組み、他のメンバーの「いいところ」を習い、各個人の「いいところ」を増やしていく。これをずっと続けたとする。
このとき、極端な例を想像してみよう。各個人が、各個人としてのスキル向上には一切取り組まず、チームの活動のみに人生を捧げた。するとどうなるか。
すべての個人のスキルが、チーム内でもっともスキルが高い人と同じになって、頭打ちになる。
もちろん、現実にこのようなことはなく、仕事をする中でもスキルは伸びていくだろうし、ふつうそれぞれのメンバーがそれぞれなりに日々の生活の中で学び、スキルを伸ばしていくだろう。それはそう。
ただ、ここで言いたいのは、その重要性だ。エクストリームプログラミングの価値や原則、またチームプラクティスやビジネスプラクティスのほとんどは、個人のスキルをチームの成果に最大限つなげようとする取り組みなんじゃないだろうか。だとすれば、個人のスキルは「非常に重要」ということになる。このフレーズに出てくる、「チームの成果」や「つなげようとする」といった、他の要素と同じくらいに。
エクストリームプログラミングでは、個人のスキルが重要だ。プログラミングの活動にチームで取り組もうとすることと同じくらいに、いかに個人のスキル、特に「その人の、チームの中で誰よりも高いスキル」を伸ばすか、ということに、もっと注目した方がいいんじゃないかと思っている。