はじめに
こんにちは。Product Teamの中嶋です。
前回の記事では、Product Teamが普段どんなペアプロをしているのかを書かせていただきました。
今回はペアプロとXPの価値の一つである「フィードバック」について、自分なりに言語化していこうと思います。
ペアプロは最小のフィードバックループを形成する
XPの価値の一つに「フィードバック」があります。*1
XPチームはできるだけ早く、できるだけ多くのフィードバックを生み出そうとする。フィードバックのサイクルを数週間や数か月ではなく、数分や数時間に短縮しようとする。フィードバックが早く手に入れば、その分だけ早く適応できる。 『エクストリームプログラミング』p. 18
アジャイル開発は変化に適応することが大事です。フィードバックを頻繁に得ることで、変化に適応できる機会を得られます。
フィードバックというのはプラクティスのいたるところで得ることができます。
以下はXPのプランニングとフィードバックのループを示した図になります。
図を見て頂いくとわかる通り、ペアプロによるフィードバックはユニットテストよりも早いです。
ユニットテストは数分ですが、ペアプロは数秒です。
これはペアが頻繁にコミュニケーションを取ることによって、秒のフィードバックをお互いが回し続けるからだと思います。
ペアプロは秒のフィードバック
エンジニアA(ドライバー)「API呼び出しをするメソッドはこんな感じでどうでしょう」(コードを書きながら)
エンジニアB(ナビゲーター)「ちなみに、エラー処理はどうします?」
エンジニアA(ドライバー)「ああ、たしかに必要ですよね。じゃあここにエラーハンドリングの処理を書きましょう」
ペアはいま取り組んでいるストーリーを実現するために、どんな設計にするのかを相談・提案をしながら進めていきます。
ナビゲーターはよく指示を出す役割と言われたりしますが、慣れていればそこはあまり囚われずに、お互いが相談や提案をして、それに対してパートナーが意見を出していくと上手くフィードバックループを回せます。
先生と生徒の関係性では、先生以上の意見が出ない
弊社では入社したメンバーに対して、ペアプロの基本的な姿勢や考え方を伝えています。
その時ペアプロの注意点の1つとして「先生と生徒のような関係にならないように気をつける」と言っています。
理由としては、社歴が長いメンバーが先生役となり、入社したばかりのメンバーに教えるような関係性だと、先生役が持っている知識以上の意見が出てこなくなってしまうからです。
ペアプログラミング―エンジニアとしての指南書の専門家-新人のペアの章の課題点にもこう書かれています。
このペアでの主な問題は、専門家が指導をしたり、教師/見習いの関係で相互作用したりできない場合です。(中略) もう1つの問題は、教師が見習いの意見や助言を聞くことに心を開いていない場合です。(中略)専門家は「私は万能だ」という仮面を取り去って、新人と協力関係のもと、仕事をしなければいけません。
『ペアプログラミング―エンジニアとしての指南書』 pp.125-126
一見コミュニケーションを取っているように見えても、一方的に教える関係性ではペアプロで期待される相互作用が起きづらいです。
ペアプロをちゃんと機能させるために、お互いがちゃんとコミュニケーションを通じてフィードバックループを回し続ける関係性こそがペアプロの理想だと私は考えています。
ペアでフィードバックループを回していくには?
ここまでで、ペアプロとフィードバックの関係性を説明してきました。
次からはうまくペアのフィードバックループが回るように気をつけた方が良いことを書いていきます。
わからないことは素直に伝える
コードを書いているときに、次に何をしたら良いのかわからず、手が止まる瞬間があります。
このとき「わからない」と言うことができなくて、無言になって考え込んでしまうことがあります。
そのときは素直にパートナーに「わからないんですけど、次は何をやるんでしたっけ」と尋ねるようにします。
コードを書こうとして「わからない」となるのは恥ずかしいことではなく、立派なフィードバックです。
ちゃんとパートナーへフィードバックをして、その「わからない」問題を一緒に解消していくのがペアプロの大事な在り方です。
よくProduct Teamが参照するペアプロの心得にもこう書かれています。
4.自分がすごいと思ってる人は、思っているより何でも知っているわけではないことを認識していますか? 自分のプログラミングスキルに自信が無い、不安に思う場合も気に病む必要はありません。
「わからない」を言うのは心理的なハードルは高いかもしれませんが、相手だって知らない可能性もあります。何がわからないかをわかることも大事な情報なので、素直に伝えた方がチームのパフォーマンスを上げることに繋がっていきます。
ドライバーは自分のやっていることを実況する
ペアプロの心得にコミュニケーションについて以下のような記載があります。
6.ドライバーをしているときに進行中の作業についてこれから何をするのか、いま何をしているのかについて話してますか? ペアプログラミングでは、15秒の沈黙ですら長すぎます。
沈黙が続くということは、ペアによるフィードバックループが途絶えてしまっている状態です。
ドライバーは自分のやろうとしてることを声に出して実況していきます。
そうすることで自分の思考のプロセスをナビゲーターに伝え、ナビゲーターはそこに違和感があれば止めたり問いかけることができます。
実況をしながら進める例
エンジニアA(ドライバー)「じゃあまずはXXユースケースのテストを書いていきますねー。えーっと…どうすればいいんだっけ?」(手が止まる)
エンジニアB(ナビゲーター)「まだXX関連のテストケースって無かったから、新しくファイル作ったほうがいいんじゃないかな」
エンジニアA(ドライバー)「なるほど、じゃあ新しくファイルをYYフォルダに作ります。その中にテスト名はXXができることにして、アサーションはユースケースメソッドを呼んだらZZを返したいですね」
1つ目にも書きましたが、次にやることがわからなかったら、素直にそれも伝えます。
ここでドライバーが何も口に出さずに手が止まってしまうと、ナビゲーターの目線から見た時に、何に悩んで止まっているのかがわからなくなります。
手が止まらなかったとしても、無言でコードを書いているとナビゲーターにそのコードを書く意図が伝わらない場合があります。
「いま何をしているのですか」や「こういうことをしたいんだと思うけど合ってる?」とパートナーから尋ねられることが多いと、自分の意図がうまく伝わっていない可能性があるので注意が必要です。
積極的に質問をする
パートナーがやっていることがわからなかったら、流さずに積極的に質問をするようにします。
ペアプロの心得にも、こう書かれています。
7.パートナーが何をしているのか理解できない場合、中断して尋ねてますか? それでも理解できない場合、もう一度尋ねてください。
「よくわからないけど、たぶんこういうことをしたいのだろう」と思った場合は、「こういうことをしたいんだと思うけど合ってる?」などの確認のための質問をしていくと良いです。
ペアプロ自体に慣れていなかったり、スキル差があるようなペアの場合だと、質問のタイミングだったり、「こんなこと質問していいんだろうか…?」と心理的なブレーキが掛かることもあると思います。
これについては、気負うことは全くないですし、スキルレベル差のあるペアから質問はとても価値のあるものだったりします。
ペアプログラミング―エンジニアとしての指南書には、質問をすることの効能についてこう書かれています。
質問をすることによって、ドライバーの考えを徹底的に公開する手助けをします。これはペアプログラミングを、1人が作業してもう1人が監視するのではなくて、もっと共同作業的なものにします。(中略)効率的なペアの関係では、何らかのコミュニケーションがない状態で1分以上経過させてはいけません。このためには、質疑応答を多く行なうこと。そして、話をよく聞くことが必要です。 『ペアプログラミング―エンジニアとしての指南書』 p.102
たとえ熟練者であったとしても、パートナーの質問に対してうまく回答ができない場合もあります。
その質問に対して言語化ができるほど、ちゃんと理解ができていないというフィードバックを得たと言えます。
肯定のフィードバックも大事
個人的に結構大事にしているのが、肯定のフィードバックです。
ドライバーがコードを書きながら自分のやっていることを実況できていて、ナビゲーターがやっていることに疑問がない場合は質疑応答は減ります。
その時には「うん、うん」と相槌を打ったり、「いいですね」などの『あなたがやっていることは私は肯定している』といったフィードバックを与えます。特にリモートペアプロの場合だと相手の顔が見えにくい状況がある(コードを書くのでビデオチャットを最小化していたり、カメラがONじゃない時など)ので、肯定のフィードバックを与え続けるのは大事だと感じています。*2
おわりに
以上、ペアプロとフィードバックの関係性を書いてみました。
書いてみて気づいたのは、数秒おきにフィードバックが手に入り、方針を変更することができるというのが、ペアプロが上手く機能している状態なんだと思いました。
変更することが「できる」というのがポイントで、フィードバックを得た結果、方針を変更しないことをペアは選ぶことができます。
これはXPの原則にある「機会(Opportunity)」を数秒おきに得られている状態なのだと思います。
アジャイル開発は出来るだけ早くフィードバックを貰い、変化への対応をしていきます。
ペアプロには知識の共有やリアルタイムでのコードレビューができるといったメリットはもちろんあります。
ただ、ペアでフィードバックループを秒で回し、問題に対する適応を早く行えるようにするのが良いペアプロなんじゃないかと思っています。