フルリモートチームでモブプログラミングをやってみて感じたこと
こんにちは、プロダクト開発部の高野です。
今回、チームで初めてモブプログラミング(以下モブプロ)に取り組み、一つのプロジェクトをモブプロのみで完遂したので、その経験を通じて感じたことをまとめました。
この記事では、一般的なモブプロの話に加え、フルリモートでのモブプロの取り組み方や、そのメリット・デメリットについても触れていきます。
以下についてはこのエントリでは触れません。
- モブプロそのものの説明
- 利用したツールの詳細
チームやプロジェクトの規模感
チームの規模
2024年10月現在、ロカオプのプロダクト開発部は四人のメンバーが在籍しています。 そのうち、今回のプロジェクトの開発に携わったメンバーは三人です。
対象となったプロジェクトと期間
我々が提供している予約サービスに、統計データ閲覧機能を追加するプロジェクトを対象としました。 プロジェクトの立ち上げ〜リリースのまでの約二ヶ月間、すべてモブプロで進めました。
本プロジェクトの機能としてリリースしたものは以下の通りです。
- 【ロカオプ予約】管理画面で統計データ(レポート)が見れるようになりました。
- 【ロカオプ予約】統計データ(レポート)の詳細画面で比較表示ができるようになりました
- 【ロカオプ予約】統計データ(レポート)に予約完了率が追加されました
- 【ロカオプ予約】統計データ(レポート)で単月指定ができるようになりました
- 【ロカオプ予約】統計データ(レポート)で毎月1日にメールでお知らせする機能が追加されました
モブプロを取り入れるに至った背景
これまで、プロダクト開発部では複数のプロジェクトを並行して進めていましたが、一つの機能をユーザーに届けるまでの時間が長くなるなどの問題が発生したため、プロジェクトを一つに絞って進めることにしました。
そこで、以前からモブプロに興味があったこともあり、全員で同じプロジェクトに取り組むならばモブプロを導入するのが良いのではないかと提案し、メンバーからも賛同を得ることができました。
ただ、モブプロがメンバーに合うかどうかは個人差があるため、初回は試験的に実施しました。 そして、その後の振り返りで好感触を得られたため、このプロジェクトはモブプロで進めることに決定しました。
プロジェクトを通じて得られたメリット
オンライン特有のメリット・デメリットについては別のセクションで述べているため、ここではオンライン・オフラインを問わず、モブプロそのものから得られたメリットを紹介します。
コードレビューを省略できる点
通常、私たちがリリースするコードは他のメンバーによるコードレビューを必須としています。しかし、モブプロで進めた今回のプロジェクトでは、この工程を省略しています。常に複数のメンバーが一緒にコードを書いており、設計に関する懸念や方針の決定理由について全員が把握しているためです。
タイピストが望ましくないコードを書いた場合でもその場でモブからのフィードバックが入るため、リアルタイムでのコードレビューが行われているといえます。
さらに、リアルタイムでのフィードバックにより、通常のプルリクエストによるコードレビューで発生しがちな以下の問題も緩和されていると感じました。
- レビュアーの時間が取れず、リリースまでに時間がかかる
- フィードバック ↔ 対応のループが複数回発生し、リリースが遅くなる
- フィードバックによっては大幅な手戻りが発生する、またはその手戻りを嫌いコードの品質が低いままリリースされる
- 細かすぎる指摘や主観的な指摘がしづらい (例: デザインの余白、細かな文言など)
コード品質やユーザビリティの向上
上記と若干重複しますが、リアルタイムでのフィードバックにより、コードの品質はもちろん、ユーザビリティ面での品質向上も期待できると感じました。 設計中、ユーザーの目線に立ち機能の使われ方を想像しながら行うことが多いと思いますが、その視点がモブに参加したメンバー分増えるためです。
具体例を挙げればキリがありませんが、画面の細かい余白やレイアウト、フォームのヘルパーテキストの文言など、プルリクエスト上の文面だけのレビューでは見過ごしてしまいそうな箇所が多々あったと感じます。
また、一度設計して終わりではなく、コードを書いている途中でもリアルタイムで設計を見直すことができるため、結果としてユーザーが使いやすい機能に仕上がりやすくなっていると感じました。
全員がメンテナンスできるようになる点
普段、私たちはユーザーからの調査依頼や不具合修正も行っているため、他のメンバーが書いたコードを理解して修正するケースが多々あります。通常、知らない機能を調査する際には、コードを読んで機能を理解するところから始める必要があります。
しかし、モブプロでは全員が仕様を把握しながらコードを書いているため、本プロジェクトに携わったメンバー全員がその仕様把握の過程を省略し、すぐさま調査・修正に着手できるようになります。
その他のメリット
詳細は省きますが、他にも以下のようなメリットを感じました。
- 常に会話をしながら開発をするため、外部からの干渉を受けにくい
- ネットサーフィンや他の作業などで気を散らすことが少なくなる
- コミュニケーションが増える
チームメンバーからも以下のような声が上がっています。
- チーム感が出てやりがいを感じられる
- どこまで作り込むかも相談しやすい (オーバーエンジニアリングの防止)
- 複数人のうち一人が欠けても作業が止まらない
オフラインでのモブプロと比較したリモートモブプロのメリット・デメリット
ここでは、オフラインのモブプロと比べて感じた、リモートモブプロのメリット・デメリットを紹介します。
メリット
使い慣れたデバイスやキーバインドを利用できる点
オフラインのモブプロでは、全員で共有するためのデバイスを用意することが多いかと思いますが、リモートワークの場合は各自のデバイスを利用できるため、作業効率が上がると感じました。
私は普段 Vim を利用しており、VSCode でも Vim の拡張を導入していますが、モブプロ中でもそのまま Vim のキーバインドを使いながら作業ができたため、ストレスなく作業を進めることができました。
また、使い慣れたキーボードやマウスをそのまま利用できるのも大きいメリットです。普段トラックボールや分割キーボードを使っている人も影響を受けません。
デメリット
ツールに依存してしまう点
リモートの場合は VSCode や VSCode Live Share (またはそれに準ずるツール) に大きく依存します。
Live Share への接続に手間取ったり、通信が安定しない場合、作業に影響が出ることもありました。 また、ローカルサーバー共有 1 も時折不安定になることがあり、その際はホストの画面を Slack のハドルで画面共有して進めることもありました。
物理ホワイトボードが使えない点
オフラインのモブプロでは、ホワイトボードを使ってアーキテクチャの設計やタスクの整理を行うことが多く、なくてはならないものです。リモートになった場合にこれをどう代替するかがポイントになりますが、私達は nulab 社が提供するオンライン作図ツールの Cacoo を利用しました。
このツールを利用するかしないかでは意思疎通にかなりの差が出たと思うので、利用してよかったと思う反面、慣れていないと物理ホワイトボードのように思った内容を迅速に書き込むことはできないため、多少やきもきする場面はありました。
また、ホワイトボードのように全員が同じ画面を見ていることを把握しづらく、コミュニケーションに齟齬が生じることもありました。
課題・改善点
ここではモブプロでプロジェクトを進行していく中で、実際に感じた課題や改善すべき点を以下にまとめました。
外部からの調査依頼が特定のメンバーに集中してしまった点
前述した通り、普段、我々は開発部メンバー全員でユーザーからの調査依頼や不具合修正を行っています。しかし、モブプロをしている三名は即座に対応することが難しいため、残りのメンバー一人に依頼が集中してしまうことがありました。
幸い、そのメンバーからは問題なしとフィードバックを貰えてはいますが、外部からの突発的な依頼は我々がコントロールできない部分ではあるため、今後もこの課題が発生する可能性があります。個人的には、ある程度の依頼が溜まった時点でその調査依頼などもモブで消化してしまっても良いのではないかと考えています。
モブプロそのものの練度
我々はモブプロそのものの経験は浅いため、タイマー管理が厳密にできておらず、一人のメンバーが時間を超過してしまうことがありました。切りの良いところまで進めたほうがいいのか、強制的に交代するべきなのか、といった判断が難しい場面もありました。
また、成果を出そうという気持ちが前に出てしまい、つい休憩を取らずに作業を続けてしまうこともありました。 モブプロは集中力を要する作業であるため、今後もチームで無理なく継続するには、休憩の頻度や時間を意識していく必要があると感じています。
まとめ
今回は、フルリモートのチームでモブプロに取り組んだ経験をまとめました。
スピード面では最も実装力のあるメンバーが一人で開発する方が速いと思います。しかし、レビュー時間の短縮により全体としてそれほど大きくは遅れを取っておらず、品質向上や知識の共有などの点を考慮すると、総合的にはモブプロの方が有効であると感じました。
今後も運用状況や発生した課題についてお伝えしていきたいと思います。
- ローカルで起動した開発環境を Live Share に参加している他メンバーからもアクセスできるようにする機能。編集中のコードを各々の画面から動かせるので、動作確認にとても役立ちます。↩