一日8時間、60日間ペアプロしてみて思った日常ペアプロのコツ

一日だいたい8時間、今日まであわせて60営業日くらい、固定ペアのペアプログラミングで新規アプリのクライアントからサーバまで開発してみました。チームにエンジニアがちょうど二人だったので。

もはや日常がペアプロです。ペアプロ以外でやってるのは簡単なバグ修正やちょっとした環境整備で、あとはすべて二人で開発しています。ちなみにまだまだ続いています。狂気です。

いい大人が二人集まって狂気を選ぶことになったわけは、成果も出てないしまだ書けません。でも今って、ペアプロやモブプロがブームだって聞きました。それじゃあアホみたいにやってる人間としては黙ってられないです。基本的なことはおいといて、とりあえずこれだけはってつくづく思ったのとか、ペアプロを有意義に長く続けるコツをまとめてみました。

(ちゃんとした話は ペアプログラミングの5W1HとFAQ / 5W1H and FAQ of Pair Programming // Speaker Deck t_wada 先生のお話をご覧ください。2017年の最新スライドです)

言葉を飲み込まない

  • 嬉しいときは嬉しいって言う。
  • 悲しいときは悲しいって言う。
  • いま頭が真っ白になってると思ったら、いまおれ頭が真っ白になってるって言う。

よく語られる話ですが、これ、すごくすごくほんとです。これをお互いうまくやれていれば、あとのことは乗り越えられる気がします。

ちなみにこないだ実家帰ったんですけど、母ちゃんに「あんたちょっとキャラ変わったね。言うようになった」って言われました。母ちゃんにもペアプロ口調。しかし家族でもそうなのに、同僚なんだから、言わないとわからないです。

休憩時間くらいは(物理的に)距離をとる

  • 40分〜90分のセッションを1往復するごとに15分休憩してます。
  • やってるうちに自然と別々の場所で休憩するようになりました。

当然同じチームなので、昼ごはんを一緒に食べたりすると1日中しゃべりつづけることになってしまいます。そんなことしてたら誰が相手だって喧嘩になります。どうなっても知らないです。

一人で書いたコードは、二人でレビューする

  • 片方が休んだらもう片方も帰っちゃうだと、あまりにも狂気すぎます。ある程度空くとわかってるときは一人でコードを書きます。
  • でも、一人で書いたコードは PR -> レビューでやらず、ペアプロ形式でレビューします。
  • レビュワー側がドライバーになるとうまく共有できることが多かったです。

僕らがペアプロに求めていることの一つは「全部俺が書いた」感です。二人で書けば二人とも「俺が書いた」って思いながら家に帰りますけど、プルリクエストになった瞬間にあいつのものです。あいつのものになってしまえば、あらを探してネチネチ言ってやりたい気持ちもめばえちゃうというものです。

でも、二人でレビューしてみたら悪い自分がめざめません。レビュワー(ドライバー)は、 IDE を操作しながらなんでこうなったとか、ここはこうじゃないのかとか、ブツブツと書いた人(ナビゲーター)に伝えます。書いた人はそれを受けて一緒に考えて、それもそうだなって思ったらレビュワーがその場でコードを書き換えます。

ペアプロでやるレビュー、言うならばペアレビューです。

これだと、プルリクエストになっても俺が書いたと思えます。レビュー中にちょっと書き換えたりすればするほどいいみたいです。でもやりすぎ注意です。

タスクによって距離感を使い分ける

  • ペアプログラミング: 1台のモニタ、ドライバー・ナビゲーター。
  • サイド・バイ・サイド: 2台のPC、隣りに座って話しながら分担作業。
  • アイソレート: 完全に別れて作業。遮音性のあるイヤホンやヘッドホンをつけたりもする。

当たり前ですが、単一指向のペアプロがすべてのタスクに向いているわけではないようでした。思考よりも手を動かすことが効果的な作業については、ペアプロ中に時間を相談してぱっとサイド・バイ・サイドに移ったりしてやってます。

無いのが理想かもしれないですけど、ある程度やみくもな試行錯誤が必要な場合は、ペアプロでああだこうだと言い合っていると本当に空気が悪くなるので、完全に分かれて作業することを選んだりもします。この場合も時間を決めたり、30分に一度声をかけあったり、どちらかが突破口を見つけたらすぐペアプロに戻るようにすれば、案外別々にやってる感じは残らないみたいです。

二人で作業するといっても「ペアプロかそうじゃないか」の二択ではなくて、そのペアなりのいろんな形を探してみるのがおすすめです。

自分たちで試す

  • この頃は出勤から退勤までずっとペアプロしてますが、全然やれます。
  • やれるどころか、ベロシティ出てます。

「ペアプロはX時間が限界」かどうかは、プロジェクトの状況とか、触らないといけないコードベースとか、メンバーのスキルとかドメイン知識とか雇用形態とか、いろんな条件があって決まるんだなと思いました。

僕らも最初は数時間、1〜2週の情報共有が目的で始めたんですけど、結局今はデフォがペアプロで、途中で手数が必要なときだけバラけるような感じになってます。

最初から決まりがあるわけじゃなくて、本やネットにあるのはあくまでベストプラクティスであってそれぞれだと思うので、いろいろ試してみてほしいです。集中力の問題も、メリハリの付け方次第だと思います。

良し悪しを測る指標を持つ

  • スクラムならベロシティが使えます。

ビジネス的な進捗と現場的な楽しさの両方が測れていると進むにも戻るにも決断しやすいです。いろんなところで言われるように、ペアプロが合わないプロジェクト、合わないメンバー構成、合わない人、というのは絶対にあります。

僕らは最初にまる三日使ってかなり本気の見積もり(アジャイル・プランニング)をして、その上でベロシティをとっています。これがたとえば前週比・前月比などの相対的には信頼できるパフォーマンス指標になっていて、「ずいぶん苦労したと思ってたけど、実はいいパフォーマンスだった」といったような、感覚だけに頼らないふりかえりができています。

やめなくていいのにやめちゃったり、やめるべきなのに続けたり、そういうのは辛いです。

ambieをつける

  • ambie で音楽聴きながらやるのもいいですよ

周囲の音が聞こえ、音楽聴きながらお互いの声が聞こえるイヤホン ambie 、ほとんど常時使ってます。デプロイゲートさんに遊びに行って似たようなのを見せてもらった二日後、二人とも別々で買ってました。

ペアプロの最大の敵は沈黙です。あのださいジャケのペアプロの本にも書いてあります、会話の無い30秒は永遠だって。

だからって、沈黙を埋めるためにどうでもいいこと言っててもしようがないし、相手に時間を与えることが大事な場面もあったりします。そんなときお互いに ambie でうっすら好きな音楽を聴いていると、沈黙耐性もつくし、一息待てます。このコツ、かなり本気です。

書いてて気がつきました。これが効いてるのは、せっかちな人間が二人集まったからかも……。

そのうち慣れる

  • 最初の頃お互いストレスあって、自分は十二指腸が荒れに荒れました。
  • でも1ヶ月もやったらすっかり慣れました。べつに普通になります。

最後にコツっていうか心がまえですが、絶対そのうち慣れるんでせめて4週は続けてほしいです。その頃にはベロシティも上がってきたりすると思います。

おわり

繰り返しですけど、(いい意味で)やってれば慣れます。あと、大人同士なので、プロジェクトを成功させてやるんだって二人とも心から思っていれて、かつベロシティのような指標が出ていれば、大抵の問題は調整できると感じました。

また今度、もうちょっと目に見える成果が出たら、ちゃんとしたおすすめの理由とかもっといろいろ書きたいと思います。