SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

エンジニア組織の課題を解消するためにペアプロ会を定期開催している話

こんにちは!スマートキャンプ社でWebエンジニアとして働いている中川(@let_mkt)です。

みなさんは普段ペアプロやっていますか?

今回の記事では弊社のエンジニア組織で定期的に開催している「ペアプロ会」について紹介します!
昨年の夏からこれまでに5回ほど開催してきたペアプロ会の開催までの経緯や概要、メリット、課題などについてが主な内容になります。

リモートワーク下でエンジニア間のコミュニケーションに課題感を感じている方には一例としてご参考になれば幸いです。

そもそもペアプロってなに?という方へ

t_wadaさんによる素晴らしいスライドがあるので、ぜひそちらをご参照ください

ペアプログラミングの5W1HとFAQ / 5W1H and FAQ of Pair Programming - Speaker Deck

ペアプロ会とはなにか

ペアプロ会とは、文字通り「ペアプロをする会」なのですが、ざっくり以下のような特徴があります。

  • 担当プロダクトを超えて弊社に所属する全エンジニア(10名ほど)が参加する
  • ペアを組む相手は当日ランダムに決まる
  • 着手するタスク(プロダクト問わず)は事前に運営が用意したものをランダムに割り振る
  • 集合から実装、解散するまでを1時間でやり切る
  • ペアプロ会は定期的に(現在は月1)開催する

なぜ始めたのか

この取り組みは昨年の夏から始めていますが、当時エンジニア組織は以下のような状況にありました。

  • 2つの開発・運用しているプロダクト間でメンバーが異動する動きを活性化しようとしていた
  • エンジニアの入社ラッシュ

こういった状況に対する課題感は大きく2つあり、1つは担当するプロダクト以外のプロダクトに対してもある程度勘所を掴んでもらいたいというもの、そしてもう1つはエンジニア間の相互理解を促進したいというものでした。

この課題感に対して、プロダクトを越えてエンジニアが集まり、ランダムな組み合わせでペアプロをすることで解決の糸口にならないかと思ったことで始めた取り組みでした。

どうやっているのか

ここでは、実際にペアプロ会をどうやって開催しているのか、準備と本番に分けて説明します。

事前準備

アイテム探し

ペアプロ会で取り組んでもらうアイテム(タスク)をかき集めます。
これは主に普段Asana(タスク管理SaaS)上で管理されているアイテム群から見繕ってくる形になります。

単純計算で参加予定者/2の数のアイテムが必要となるので、この数を目標とし、そのうえでプロダクト間でアイテム数の開きが出ないように調整します。
このとき集めるアイテムの選定基準として、実際に実装に取れる時間は4,50分程度なのでなるべく時間内に完結する見込みの高いものをピックするようにしています。
また、自分が担当していないプロダクトのアイテムは代わりに見繕ってもらったりしています。いつもありがとうございます!

ドキュメント作成

ペアプロ会の開催ごとにドキュメントを作り、ルールや注意点、当日のタイムラインやペアとアイテムの組み合わせなどを記載します。
また、開催中は各ペアのメモや終了後の進捗共有などの欄として活用してもらっています。

ドキュメントの内容としてはペアとアイテムの組み合わせセクション以外はほぼ共通なので、テンプレート化しています。
以下のリポジトリに公開したのでご興味あればご覧ください!

github.com

本番

チーム分け・役割分担(5分)

弊社プロダクト組織はGatherを利用しているのですが、ペアプロ会もGatherで行っています。
Gatherに集まったメンバーを自作のSlack botでペア分けし、上述のドキュメントに結果を記載します。
その結果を見たメンバーは各ペアに分かれ、各々の作業場所に解散していく流れです。

また、ドライバー・ナビゲーターといったペアプロ時の役割もここで調整します。
前述の通りメンバーによっては担当したことのないプロダクトのアイテムを着手する場合があるので、その場合はドライバーになってもらい、担当経験のあるメンバーがナビゲーターとしてサポートします。

アイテムを理解する(5分)

それぞれのペアが、自分たちに割り振られたアイテムを確認し、理解するステップです。
各プロダクトのお作法や、必要なドメインの知識が存在するアイテムもあるため、そういった事情はこの段階で知っているメンバーが説明しておくようなイメージです。

このステップでペアのお互いがわからないアイテムだった場合や、アイテムの説明が十分でなく疑問点が出てきた場合は、運営(私です)にヘルプを出し説明を受けます。

作業(40分)

ペアでタスクに取り掛かる時間です。

お片付け(10分)

作業内容のコミットとPR作成の時間です。(作業時間のバッファとしての位置づけとして長めにとっています). もしアイテムが作業時間中に終わらなかった場合はPRにその旨を記載してもらうようにしています。

以上が1回のペアプロ会の流れです。

ペアプロ会で得られた効果

ペアプロ会の終了後に受け取った感想などのフィードバックから抜粋して紹介します。

  • ペアプロ楽しい!スタイル修正だけでも、ペアが普段考えていることを知れたりTipsみたいなことを教えてもらえるので、かなりいい勉強機会になる。
  • 初めて作業するメンバーとコード書いたけど楽しかった!スムーズに進んで良かった。
  • 最近一緒に仕事をしていないメンバーと久々に作業できて楽しかった。
  • 細かいコードのあれこれとか、意外と話す機会ないなと感じていい機会だった。(この人ここ知らなかったんだ!とか自分ここ曖昧だったなとか)
  • 細かい機能単位だとしても、そのプロダクトを担当したことのないメンバーに知ってもらえる機会になった。

運営として各ペアを観察しているなかでも、普段担当していないプロダクトに戸惑うような場面もあれば、逆にサクッと実装できて本人の自信となっていそうなシーンを見ることができたり、アイテム外の雑談が盛り上がっている場面にも遭遇しました。

企画時の「担当するプロダクト以外のプロダクトに対してもある程度勘所を掴んでもらいたい」、「エンジニア間の相互理解を促進したい」という狙いはある程度満たせたのではないかと思っています。

今後やっていきたいポイント

これまで数回開催してきたうえで、ペアプロ会で現状不足している部分や発展していきたい部分は以下です。

  • アイテムの準備に時間がかかる
    • 普段からメンバーが思いついた段階で気軽にペアプロ用のアイテムとして蓄積できる仕組み作りが必要そう
  • 長めに時間をとったバージョンでもやってみたい
    • 現状は正味40分が作業時間なのでアイテムが簡単な修正タスクに寄りがち。もっと長い時間を確保して確保して設計やアーキテクチャを考えるなども取り組んでみたい
  • 時間内に終わらなかったアイテムのPRをしっかり後始末する仕組みがほしい
    • 現状はそのアイテムに取り組んだナビゲーターがオーナーとなって責任を持つルールにはしているが徹底されてない。たとえばSlackでメンション付きでリマインドするなど仕組みで解決したい
  • ペアプロ会で発生した疑問を解消したい
    • 主に複雑なドメインモデルやアーキテクチャに対して時間内で説明しきれない部分があるので、そういったものは蓄積してドキュメント化したいorまとまった説明時間を取りたい

いずれも方法に検討の余地はあるものの解消可能なものばかりなので、今後少しずつ改善していきたいと思っています!

まとめ

今回は弊社のエンジニア組織で開催しているペアプロ会について紹介しました。

そう大掛かりな準備も必要ないので、もしご興味あればライトに一度やってみてはいかがでしょうか。

最後に、このペアプロ会は昨年読んだ以下の記事に触発され企画するに至りました。貴重な知見をありがとうございました!

www.yasuhisay.info

イベント情報

2/28に弊社開発チームのリモートワークコミュニケーションについてお話しするイベントを開催します! ご興味ありましたら以下のリンクから内容や参加方法についての詳細をご覧ください!

smartcamp.connpass.com