はじめに
メルペイ ML Platformチームの@ysk24okです。この記事は、 Merpay Advent Calendar の4日目の記事です。
本記事では自チームにモブプログラミングを導入し、チーム一丸となってタスクに取り組むようになった話を共有します。
モブプログラミングとは
モブプログラミング(以下モブプロ)とは、モブプログラミング・ベストプラクティスでは「3人以上の人々が1台のコンピューターの前に座って協力しながら問題を解決していくこと」と定義されています。Hunter Industries社のWoody Zuill氏が2015年頃からカンファレンスなどで発信しはじめたことで世の中に広まっていったと言われています。
モブプロでは1人のタイピストとその他のモブに分かれ、10分でタイピストを交代します。その他のモブは基本的にコードは書かず、問題解決のためのアイデアをタイピストを含むその場の全員に説明します。タイピストはその他のモブが考えたアイデアを理解しコードに起こします。
私のチームでは、以下のような流れでモブプロを実施しています。
- モブプロを始める前に、今回のモブプロで進める開発について前提や内容を共有します。ここで参加者全員で前提や内容についての認識を合わせます。
- モブプロでどんな手順で進めていくかの作戦を立てます。あらかじめ手順を整理しておくことで、これから書くコードのイメージを参加者間で共有でき、コードを書いている最中の手戻りを防ぐことができます。
- 実際にモブプロを進めます。
- モブプロが終わった後の流れを決めます。特定の誰かが残りの作業を引き継ぐのか、別日にまた時間を確保してモブプロをするのかなどを決めます。
導入の経緯
2021年になって採用活動が再開し私を含む2人が新しく入社しましたが、既存のチームメンバーとの知識差が大きい状態でした。そのためタスクと人が強く結びつき、他のメンバーの取り組んでいることがわからない、他の人からコードレビューを依頼された際にコードの理解に時間がかかるという問題が頻発していました。
私は前職でモブプロを経験しており属人性の解消に効果があることは身を持って体感していたので、チームに導入してみることにしました。
モブプロによって得られた効果
2021年12月現在でモブプロを導入してまだ数ヶ月しか経っていませんが、チームメンバーからの反応も良く、モブプロがチームのプラクティスとして定着していると言ってもよい状態になりました。現在は週2回・1回あたり約2時間でモブプロを継続しています。
知識の共有による属人性の解消
モブプロで開発するコードの周辺に既に詳しい人がいる場合、その人の助言をその場で得ながら開発を進めることができ、知識の共有が進んで属人性を下げることができます。あまり詳しくない部分の開発に1人で取り組んでいると、既存のコードの把握に時間がかかったりSlackなどコミュニケーションツールで詳しい人に質問をしても回答がすぐに得られずその間作業が止まったりしがちですが、モブプロでは全員その場にいるのでフロー効率が非常に高いです(フロー効率については後の節で詳しく説明しています)。
全員で新しい知識を獲得
新しい技術に触れるなど誰も詳しい人がいない場合でも、全員で試行錯誤しながら取り組むことで比較的短時間で不確実性を削減することができ、かつ全員でその技術についての知識を獲得することができます。
コードレビュー時間の短縮
モブプロで取り組んだ作業は、その後メンバーの誰かが引き継いで完成したらコードレビューを他のメンバーに依頼しますが、モブプロを経たことで全員がその部分について把握かつ合意できているため、コードレビューにかかる時間を短縮することができます。
チームの一体感の向上
それまでは各メンバーが別々のタスクに取り組んでいたこともあり、チームというより個人の集まりに近い状態でしたが、モブプロで1つのタスクに全員で取り組むことでチームの一体感を得ることができました。新型コロナウイルスの影響で出社できずチームビルディングがなかなか難しい中で、一体感が向上したというのは大きかったと思います。
モブプロ導入にあたり工夫した点
リソース効率からフロー効率へ
リソース効率とは端的にいうと開発者の稼働率のことで、フロー効率とは1つのタスクが終わるまでの早さのことです。リソース効率を重視すると開発者の作業時間をなるべく使い切るように複数のタスクを1人の開発者に割り当てますが、フロー効率を重視すると1つのタスクをなるべく早く終わらせるように複数の開発者を1つのタスクに割り当てます。
上のスライドを引用して具体的に説明すると、リソース効率を重視すると(上側)開発者3人にそれぞれ別の機能の開発を割り当てるのでどの機能もリリースまでに3週間かかってしまいますが、フロー効率を重視すると(下側)全開発者で1つの機能の開発に取り組むので1週間でリリースできます。もちろんこれは簡略化された図のため、現実的にはフロー効率を上げると開発者の稼働率が下がって1週間プラスαかかると思いますが、それでも分担して作業をするよりも早くリリースできるでしょう。
私のチームではモブプロ導入前は各メンバーが独立して作業していた(=リソース効率を重視していた)ため、いざモブプロを始めてみると自分の作業が進まないという意見が出ました。モブプロはフロー効率を重視するプラクティスなのでリソース効率の考え方とは相性が良くありません。
そこで、自チームではスクラムを採用しているのですが、これまでは決めていなかったスプリントゴールを決めるようにしてスプリントゴールを達成するための開発をモブプロで取り組むようにしました。これによりスプリントゴールの達成にチームとして注力する状態になり、結果としてフロー効率が向上しました。
柔軟なモブプロ
モブプロには様々なメリットがあるものの、モブプロに向かない作業もあったり、1人でじっくり考えたりといったことも重要だと考えています。そのためモブプロをスキップするスプリントもあります。
逆に、プログラミングでなくてもモブで取り組むこともありますし、基本的には週2回ですが回数を増やすこともあります。自分たちがやりやすいように柔軟にモブプロに取り組んでいます。
VS Codeを使ってリモートでモブプロ
自チームのメンバーは基本WFHなので、モブプロで推奨される共有PCを使ったモブプロを実施することができません。そこでVS CodeのLive Shareというプラグインを使ってエディタを共有しながらモブプロをおこなっています。これによりエディタはVS Codeに制限されるものの自身の慣れ親しんだ開発環境でモブプロに参加することができます。
まとめ
本記事ではモブプロをチームに導入するにあたり得られる効果や工夫した点などを紹介しました。
私自身は前職でモブプロを取り入れていたこともあり良いプラクティスであると身をもって体感していたものの、今回新しくチームに導入する際はどう受け止められるのかと多少不安でした。ただ実際取り組み始めると非常に評判がよく、積極的に続けていきたいという意見も得られました。
モブプロは実際やってみないと分からないプラクティスだと思うので、まだモブプロをやったことがない方やチームは一度試してみることをおすすめします。
明日のMerpay Advent Calendar 2021は@1000chさんの「メルペイのクライアントエンジニアリングの話」です。