こんにちは、LayerX インボイスのAI-OCRを開発しているTomoakiです。最近推しのセブンイレブンの商品はマーラーカオ(中華風蒸しパン)です。
さて、LayerXでは開発効率を上げるために日々様々な施策を行なっておりますが、今回はその中でもリモート下での新メンバー加入時に実施したモブプロが良かったので紹介したいと思います。
TL; DR
- 新加入のメンバーにコードの知識を素早く共有する必要があった。
- リモートワーク下では綿密なコミュニケーションが取りにくかった。
- モブプロを通じて書いた人しかわからない、コードに込められた意味・お気持ちを素早く共有できた。
- 結果的に新メンバーのスムーズなオンボーディングに繋がった。
- リモートでも従来のモブプロの効果は薄れることはなく、むしろ画面がしっかり見えてGoodだった。
- 「同僚の開発環境の設定がそれぞれ見れる」「コミュニケーション不足解消」などリモートならではの効果も。
- 毎日ではなく、コードのナレッジの共有ができていない時や新メンバーへの共有目的にショットで行うと良さそう。
通常の開発スタイルは前回紹介したので、ぜひご覧ください。
解決したかった課題
4月ですし新しくチームにメンバーが増えた会社も多いとは思いますが、オンボーディング用の資料が整っていなかったり、活字だけのオンボード資料では十分伝えたい事が伝わらず頭を抱えている方も多いのではないでしょうか。 何かしたいけど、開発のスピードを落とすわけにはいかないので横で付きっきりになる訳にも行かないですし、コードリーディングを片っ端からやるのも時間がかかりすぎてしまったり、情報過多で消化できない可能性があります。
弊社でも一時的に一人で開発していたOCR機能を新年から三人でやることになったのですが、(筆者を含む)新加入のメンバーはOCRの事前知識がほとんどない状況で、コードの知識を素早く共有する必要がありました。 とはいえ、開発スピード落としたくない。また、リモートワークなのでちょっとしたコミュニケーションが取りにくいという状況でした。
そこでモブプロで知識を素早く共有できるのではないか?ということで試しにやってみることにしました。
先行事例・そもそもモブプロってなんだっけ・ペアプロと違う?
そもそもモブプロとは何でしょうか。Wikipediaによると
Mob programming (informally mobbing) (aka. ensemble programming) is a software development approach where the whole team works on the same thing, at the same time, in the same space, and at the same computer. This is similar to pair programming where two people sit at the same computer and collaborate on the same code at the same time. With mob programming, the collaboration is extended to everyone on the team, while still using a single computer for writing the code and inputting it into the code base
https://en.wikipedia.org/wiki/Mob_programming
とのこと。簡潔にいうと、一人がPCを操作し、全員で同じ画面を見ながら指示を出し合い一つのことを実装することですね。ペアプロとはペア(組・対 = 二人)で実施するかモブ(群衆)で実施するかという違いで、大きな相違はないみたいです。
ざっとモブプロ関連の記事を調べましたが、主な実施目的としては、
- 新規エンジニアメンバーへナレッジを共有するため
- デザイナー、QA、PM/POなどエンジニア以外のメンバーと合意を取りながら進めるため
- 若手の育成のため
- 気分転換のため
などが散見されました。
ただ、一般的にペアプロやモブプロは物理的に同じ空間で行うのがほとんどでした。 今回はリモートワークという条件の下で、コードナレッジ共有を目的に実施するモブプロはいかがなものか検証してみました。
手順
1. タスクを決める
ここが一番大事なポイントです。ほんの一部しかコードをいじらないタスクだと、最終的に共有できるナレッジも限られてしまいます。とはいえ、あまりにも大きすぎるタスクだとタスクを完了させるのに時間がかかり過ぎてしまいます。コードを横断的にみる必要があり、かつ2~3時間以内には終わるタスクがちょうど良いかなと思います。
もし、コードを横断的にみる必要がそこまでない場合は適宜コードのリファクタリングも合わせてやると、コードもスッキリしますし、幅広い箇所のナレッジの共有もできるのでおすすめです。
今回は実装だけでなく、OCRの学習用のデータ作成などオペレーション周辺のタスクも実施しました。
2. 実装する人の順番を決める
今回は3人で行うので一人一回実装を行うことにします。最初に手を動かすのは新メンバーが良いかと思います。すでにコードを知っている人がいきなり書いてしまうと、慣れているため本当は説明が必要な箇所の説明をすっ飛ばしてしまったり、スピードが早く新メンバーがついて行けなくなってしまう恐れがあるからです。
3. 実装開始
zoomでエディタを画面共有し、開発を開始ます。モブプロのポイントを一つ挙げると、キーボードを持っている人はタイピングに専念して、自分で考えて勝手に実装しない、というのがあります。実装者は他のメンバーの指示を受けながら実装を進め、だいたい30分~1時間を目安に区切りがいい所で交代します。ちなみにずっと集中しっぱなしなので結構疲れます。
3. 交代(二人目)
次の実装者に交代します。前の実装者は一旦コードをコミット・プッシュするなどして引き継ぎます。
4. 交代(三人目)
同様にして次の実装者に交代します。今回は3人での作業なので最後マージするところまで担います。
検証結果・感想
良かったこと
- コードの知識の共有ができた
- 事前準備なしでできた
- 他のエンジニアの技を盗む機会になった(ショートカットキーとか、実装する順番とか)
- 初期メンバーにとって当たり前になってしまってた作業や課題に対して、新メンバーからより効率的な手法や課題の解決策の提案があった
リモートならではの良かったこと
- 画面が全員しっかり見える
- 全員の開発環境が見れて面白い(オフラインだと通常一つのPCで行う)
- 物理的に会えないがために不足していたチームのコミュニケーションを補完できた
- 一人暮らしメンバー(筆者)としては久しぶりに数時間ぶっ通しで会話ができてメンタルが回復した
- キーボード含め、開発環境は各々慣れているものを使える(オフラインだと他人の環境を利用する)
デメリット
- 三人分の時間を使う
結論
三人分の時間を一つのタスクに使うので流石に毎日やると開発速度落ちますが、ナレッジの共有が足りない時にショットで行うのが良いかなと思いました。 リモートであっても、従来のモブプロの効果は薄れることなく、むしろ画面がしっかり見えるので他のメンバーの開発環境の設定や実装の仕方を学び合うことができ、またリモートワークに伴う日頃のコミュニケーション解消にも繋がるなど、副産物も多く一石三鳥でした。 (ちなみに第二回も開催したのですが、すぐに終わってしまったので以降はしばらくやってないです。チームの練度が上がった証拠ですね!)
今回は実際に試して良かった開発手法を紹介しました。LayerXでは新しいことを試しながら日々開発の効率を高めています。少しでも興味がありましたら、一度お話を聞きに来てください。