テーマ:ペアプロ
こんにちは、今年4月に入社した新人プログラマの@flatbaです。クラウドワークスでは、開発手法にペアプログラミング(ペアプロ)を取り入れています。
今回、既存メンバーが新人(僕)を新たにチームに受け入れるにあたって、
既存チームへ新メンバーのスムーズな受け入れ
新メンバーと既存メンバーとの早期の相互理解
を目的としてチーム内で ペアプログラミング + メンタースイッチ を導入して実感したメリット、実践するなかで出てきた課題とその解決の様子、 を今回のブログのテーマにします。
目次
ペアプロとは
ペアプログラミング(英: pair programming)は、2人のプログラマが1台のワークステーションを使って共同でソフトウェア開発を行う手法である。一方が単体テストを打ち込んでいるときに、もう一方がそのテストを通るクラスについて考えるといったように、相補的な作業をする。 実際にキーボードを操作してコードを書く人を「ドライバ」、もう1人を「ナビゲータ」と呼ぶ。30分ごとか、単体テストを1つ完成させる度に役割を交替するのがよいとされる。また、1日に一度の頻度でパートナーを変えるのがよいともされている。 ペアプログラミング - Wikipedia
ペアプログラミング + メンタースイッチ
上記のような一般的なペアプログラミングの手法に習って、ドライバとナビゲータとに分けて2人で1つのモニタで同じタスクに取り組むという形式を取りました。 今回はそこに、技術メンタリングも組み込んで、 1週間おきにメンターを入れ替える(以下、メンタースイッチ*1)という試みに挑戦しています。
新人1人に対して、密に関わってくれる技術メンター2人という、とても贅沢な受け入れ体制です。 うちは人数が少ないからそんなに教育リソースは割けないという声も聞こえてきそうですが、この ペアプログラミング + メンタースイッチ を組み合わせることで、 むしろチーム内の教育リソースが分散されるメリットがあると思います。 また、新メンバー受け入れ時にもお互いの期待を合わせることができ、チーム全員で新人の受け入れについて考えられる様になっています。
導入してみて良かった点
受け入れの早い段階から適切にチーム内に新人のスキル感が共有されたり、教育のリソースが一極集中にならないでの集中した時間を確保してもらいやすい、同じタスクに取り組むので質問がしやすいなどのメリットを感じました。
ペアプログラミングによって得られた効果
- 言葉では伝えきれていないスキル感を共有しやすい。
- 質問や確認などコミュニケーションが取りやすい。
- 一緒に作業する時間を集中的に確保すると理解が深まりやすい。
メンタースイッチによって得られた効果
- チームメンバーに適切に新人のスキル感が共有される。
- 新人に与える適切なタスク量をチームメンバー単位で把握しやすい。
- メンターを個人のタスクとして持つのではなく、チームのミッションとして全員で考えられる様になった。
ペアプログラミング+メンタースイッチによって得られた効果
- 開発効率化のためのTipsを短期間で複数人から得られるので学習効率が高くなる。
- 教育リソースが分散されるのでまとまった時間を確保してもらいやすくなる。
- 短期間で複数の開発の観点を得られる。
課題と解決の様子
効率を上げるために、一日の終わりに口頭ベースでお互いに思っていることを共有するミニ振り返りを行うようにしたことで、日々やり方がアップデートされるようになりました。 日々上がってくる課題は、このミニ振り返りで改善をしています。
会話例
新人: 知識的に知らないからハマっているのか、考え方が悪くてハマっているのか判断できないことがあるんですよね...。
メンター役 A先輩: Slackに個人の分報チャンネルを作って作業の状況をつぶやいてみましょうか!
=> 自分がどこでハマっているのかをメンターに把握してもらいやすくなった。
メンター役 B先輩: 説明を受けて習得する方式 or ヒント少しづつ与えて自分で考える時間多い方式のどちらが良いですか?
新人: "説明をがっつり受ける日" と "自分なりにじっくり考えてみる日" を一日おきに繰り返していくと覚えていきやすい気がします!
=> 一方的に教えられるばかりではなくて、より自分に適した教え方を聞いてもらえたことでより効果的になっていくと感じたし、もっとがんばろうと思えた。
あえてペアプログラミングと称する理由
ここまで読んでくださった方は、ただのOJTじゃないか。と思う方もいるかと思いますが、 ここで大事なことは、今回の取り組みをOJTと言わずにあえてペアプログラミングと称することに意味があると思いました。 OJTと称してしまうと、教える側 / 教えてもらう側という上下関係ができてしまって、人によっては意見が出にくくなるなど、 心理的な壁が生まれることもありますが、ペアプログラミングと言われることで、そこの垣根が低くなりました。 また、ペアプロとして一つのタスクに取り組むことで新人でも成果に繋がりやすいので達成感が得られやすく、かなりモチベーションが上がります!!
まとめ
お互いの期待を合わせることができ、チーム全員で新人の受け入れについて考えられる様になった。
複数の価値観に触れながら開発スタイルを育むことができるので、技術の効率化(エディタやツール選定、技術の志向性など)の取捨選択を意識してするようになる。(技術に偏りが生まれにくくなる)
新メンバーのチームへの受け入れが早くなる。
まとめるとこのような感じですが、 新人として ペアプログラミング+メンタースイッチ を受けている感想としては、 ペアプロを通していることで メンタリングしてもらうときに新人側のスキル不足で言語化できない課題をメンターに把握してもらいやすいとか、 質問するとかの心理的な壁が低くなるとか、 ペアプロの延長で技術的な相談もしやすくなるとか、 単純なOJTよりもチームに加わりやすいのではないか、 ということも強く実感しています! チームで成長していける環境を作っていけるのはうれしいですね!!
以上、「ペアプログラミング + メンタースイッチを組み合わせてやってみた!」でした!
クラウドソーシングのクラウドワークスでは、成長し続けたいエンジニアを募集しています!
*1:メンタースイッチとは、 "意図的に新人のメンターを入れ替える取り組み" をチーム内でそう呼ぶようになり、自然とチーム内での共通言語として使われるようになった独自の取り組みです。