だいごろうのブログ

熊本出身で大阪、東京、パリを転勤して、今は福岡でデータエンジニアです

リモートでのモブプログラミングの紹介

リモートチームでモブプログラミングを導入してみてうまく動き出したので、ご紹介したいと思います。モブプログラミングの記事は多いけどリモートでの記事はまだ少ないので何かしら、感じ取ってもらえると嬉しいです。最初に言っておきますが、チームの数だけモブプログラミングの形はあると思うので、参考程度に見てください。

(読書メモ) モブプログラミング・ベストプラクティス まとめ・感想 - だいごろうのブログ

モブプログラミングとは

モブプログラミングとは、1箇所にチームで集まり、1台のPCを用いて、複数に同じ課題に取り組む手法。少しだけルールがあります。

  • 基本は役割が2つあり
    • ナビゲーター:問題に対し、考え、意見し、タスクの解決のために全力を注ぐ人たち
    • ドライバー:別名タイピストであり、キーボードを触る唯一の人。ナビゲーターの意見に対し、手を動かす人。
  • ドライバーの人は短いサイクル(15分とか)でローテーションする。

基本的には、これだけです。このブログが非常によくまとまってると思います。 medium.com

リモートのモブプログラミングでは、このブログが非常に良い。 www.remotemobprogramming.org

リモートにモブプログラミングは向いているのか?

この議論は非常に重要な部分だと思います。

どのモブプログラミングの本などを見ても、前提条件にチームが1箇所または1部屋に集まれることということが必ず書いてあります。これはメンバー全員が1つのタスクに集中するため、邪魔を極力減らすためなど、重要な要素です。では、リモートで、ビデオ会議で同じような環境を再現できるのか。ここができなければ、モブプログラミングの恩恵を受けることが難しくなるでしょう。

僕が導入しようと決意した経緯

リモートチームで仕事をしていると、チーム全体で知識共有やコミュニケーションがすくなることが課題となってくる。モブプログラミングの良いところは、全員でタスクに集中し、知識や手法などをオンタイムで共有しながら、お互いをより深く知ることができる点であるので、リモートチームこそ、モブプログラミングなどを用いて、より密にチーム作りをする必要があると思っている。もちろん、チャットなどでもそういったことは可能だが、やはりまとまった密な時間はその恩恵を何倍にも増やせると思っている。また、リモートだとチームメンバー同士のコミュニケーションが疎かになることがあるので、全員がお互いを”知っている”と実感するのに1役買うと思う。

僕たちのリモートモブプログラミング

リモート

リモートチームでは、チームコミュニケーションをいかに補うかが非常に重要となってくる。そのため、こういったことを意識しなければいけない。

  • コミュニケーションの量を増やせるようにすること
  • お互いに干渉するのを苦に思わないように状況を整理すること。
  • 情報伝達を行い認識合わせを行うこと。
  • ありがとうとごめんなさいを伝えること

ちなみにリモートは場所にいるメンバー限定ではなく、仕事を一緒にしたいメンバーでチーム構成できるのですごく良いです。

リモートで1箇所に集まる

ビデオ会議をするアプリというのは最近多くなっています。それらを利用して、できたらカメラでお互いの顔を見ながら会話できる状況を作ります。顔を見ながら話すことはコミュニケーションにおいて非常に重要です。顔が見えたら、モブプログラミングに集中してるか一目瞭然ですし。

ドライバーとナビゲーターをローテーションすること

これがモブプログラミングの基礎だが、意外とこれが難しい。作業に集中してると時間が経つのは早すぎる。 まず、リモートだとローテーションの時間が来たことを全員が周知することを時計などで知らせるのが意外と難しい。時間を管理する人を作ってもいいが、それ自体がその人のモブプログラミングへの集中力を下げてしまう。また、口頭で「時間だよ」っと言っても、「すぐ終わるから、ここまでやらせてくれ」っと言うメンバーがいる、それに「すぐ」には終わらない。 解決策としては、ツールを導入すると良い。チームではmobsterを使ってる。時間を測り、全画面を強制的に mobsterの画面にしてくれるし、ローテーションも管理してくれる。「だれかが、時間だよ!」っていう心理的に大変な作業を代わりにやってくれるし。画面が強制遷移すると、あ、交代だって全員思う。これを導入してから、みんな時間を守れるようになった。

Mobster - Pair and Mob Programming Timer for Mac, Windows, and Linux

リモートコントロールを利用したローテーション

リモートのモブプログラミングをしている人の多くがgitにpush/pullして、コードをドライバーから次のドライバーへ継承していくことが多い。しかし、このやり方は交代時のオーバヘッドがあるし、gitの問題によって時間をロスすることが多々ある。(gitになれない人が間違えて、他の修正をコミットしちゃったり)。また、作業時のコード以外のターミナルのログやブラウザの状態は、失われてしまう。 そこで僕たちはzoomのリモートコントロールを利用している。一人のPCをマスターPCとし、全員がそのPCとZoomでVideo会議をする。で、作業はそのマスターPCで行い、ドライバーのローテーションに合わせてリモートコントロールを権限を移していく。こうすることで、作業中のすべてを次のドライバーへ引き継いでいる。

*ちなみに、過去にslackがscreenheroという会社を買収し、screenheroのリモートコントロールの非常に優秀な機能を取り込んだが、複雑でメンテナンスが難しいという理由で機能の削除をした。なので、今はZoomを利用している。

Removal of remote screen control in Slack Calls – Slack Help Center

振り返り

この振り返りは非常に重要である。リモートチームではチームのコミュニケーションが密になる場面が足りないことが多いので、モブプログラミングをするとチームの問題点が浮上することがある。しかし、それはタックマンモデルの混乱期に差し掛かったといういい状態なので、ちゃんと振り返りをしチームでそれを乗り越える良い機会である。

タスクの選定はメンバーと共に。

リモートのモブプログラミングのタスク選定は慎重にメンバーと共にやったほうが良い。選び基準としては

  • 全員の学習となるようなタスクである
  • 全員に恩恵のあるようなタスクであるとなお良い。 また、この利用としては
  • リモートでのモブプログラミングだと、それぞれ1台ずつPCを持っていることになるので、モブプログラミング中でも別作業ができてしまう。それは人の心理なので止めれないので、できるだけ全員がモチベーションが高いタスクでないと行けない。
  • また、リモートでのモブプログラミングは非常に貴重な時間なので、お互いに学習になるようなタスクを選ぶことでコミュニケーションの量を蜜にし、無駄な時間を使わないようにする。
  • 自分たちで選んだほうが楽しいし、より技術的なことをタスクにしやすい。

疲れることを認知する

ビデオチャットでの共同作業も、モブプログラミングも疲れる作業だ。なので、定期的に長めの休憩時間を儲けよう。リモートだと、メンバーがつかれたタイミングを知るのが難しい。あと、コーヒーのおかわりほしいし。 あと、なれない頃は長すぎるモブプログラミングは控えましょう。それだけで、モブプログラミングが苦痛なイメージになってしまうので。

素人やエキスパートのどちらでもが安心して意見できること

リモートかつモブプログラミングだと、意見を言うことに対しての敷居が上がってしまう。なので、モブプログラミングの目的は、作業を進めることだけでなく、メンバーの全員の成長も含まれていることを周知します。エキスパートに先生になってくれとお願いし、素人の意見にはまず意見を言ってくれたことに感謝する。つまりは、心理的安全性のコンセプトを理解することは非常に大事だ。

場所にこだわらない

モブプログラミングの難しい理由の一つは、定期的にメンバー全員が集まれるスペースを用意し、大きなディスプレイを用意することである。しかし、リモートの場合、ビデオチャットのアプリがあれば、ほかは何もいらない。特にMTGルームを確保するのが大変な会社だと、これは大きな恩恵になる。

より実験的に。

モブプログラミングの導入自体が実験的であるのに、リモートチームでモブプログラミングをすることはより実験的であることをメンバーにも上司にも通知しておくことが非常に大事である。そのため、メンバーからのフィードバックは定期的にたくさんもらって、常に自分たちに合う方法にたくさん改良したほうがいい。

お互い信頼すること

最後に、もっとも重要なことだが、リモートチームであること、モブプログラミングをすること両方とも信頼関係を気づくことが大事である。なんでも意見を言い合って、いけるように頑張ろう。

最後に

リモートチームでは、どのようにチーム作りをしメンバー同士の関係性を向上させるかが非常に重要になってくる。お互いを信頼し、顔が見えない中でも、コミュニケーションを取らなければいけない。モブプログラミングは、それらを改善するのに非常に重要なやり方だし、僕らのチームでも上手に作用しているし、メンバーの成長とチームの成熟に貢献していると思う。

最後に、Googleが提唱しているReWorkの「イノベーションが生まれる職場環境をつくる」の中で、コラボレーションについての記述について紹介したいと思う。

つながりとコラボレーション - 従業員が仲間を見つけやすく、協業しやすい環境をつくる。

Google re:Work - ガイド: イノベーションが生まれる職場環境をつくる

ベテラン、新入社員問わずいろいろな人とつながりを持ち、アイデアを出しやすい、成熟させやすい環境を作ることはイノベーションを生むことに繋がる。 モブプログラミングはリモートチームで、チーム内での関係性を向上させ、より面白いイノベーションを生むために非常に強いツールだと思っている。なので、もっとモブプログラミングを楽しく実行していければ、ビジネス価値やアイデアも生まれるのではないかと思っています。リモートでもそれは大丈夫です。

これからも、どんどんリモートでもモブプログラミングを実験していこうと思います。

ハッピーモビング!!