モブプログラミングを実施されてみた感想

## はじめに
### 本記事の内容について
この記事ではモブプログラミングをしてみた感想、メリデメ等々を個人的視点で記載します。
また、弊チームは世間一般と比べると稀有な方の開発チームの形式であることを念頭に置いてください。

### 事の発端
弊チームではツールの開発・保守をしており、自身らで評価、出荷、問い合わせ対応まで行う、フルサイクルエンジニアなチームです。
前提として、特に深刻な問題が起きていた訳ではありませんが、
**「世間もすなるモブプロといふものを、我らもしてみむとて、すなるなり。」**
というリーダーの号令にてモブプロを開始しました。

## モブプロを実施してみて
### 既存開発フローとの違いについて
弊チームの通常の開発フローは至極普通なものです。
チケットをアサインされ、開発方針の検討、実装内容、テスト内容を開発者は作成し、それらに対してレビューが行われます。
これをモブプロで実施すると、これも至極当然ながら、それぞれについて作成とレビューが同時進行で進みます。

### メリット
・一人で考え込まなくていい
　悩んだときはすぐに聞ける。
　そして全員で悩んで考えられる。時短にもなるし、選択肢の幅も広がる。
 
・レビューの時間を調整しなくていい
　全部作り終えた後、メンバー全員の空き時間をチェックして予定を入れて、ダメになったらリスケ……みたいなことが起きなくなります。
 
・誰かが分かっていれば先へ進める
　普段自分一人だと、わからないことが出てきたらそこで手が止まります。
　思考が止まり、調査を実施して、戻ってきてまた流れを思い出す、という流れは大変ですが、わかる人が一人でもいればそのロスが無く進むことができます。
　そして関連して、
・全員がそのことを理解できるようになる
　仮に一人で解決できたとしても、後々他のメンバーが同様の事象にハマる可能性があります。
　逐一ナレッジに起こすものでなくとも、属人化を防げる手立てです。

・全員がその機能を理解できる
　属人化の流れで行くと、開発あるあるだと思うのですが、機能を作ったり修正したりした人に、その機能に何か問題があった時に質問や対応が行きがちです。
　それがゆくゆくはなくなるのかもしれません。

・全員が分からなければ全員で調べる
　誰もわからなかったとき、全員で調べることができます。
　一人より圧倒的に効率的ですし、その場で全員に知識が共有することもできます。

### デメリット
・全員が手を取られる
　弊チームでは基本全員参加ですが問い合わせ対応も実施しており、実施している時間は問い合わせを受けることができません。
 
・工数削減として有意かどうかはわからない
　かかっている日数は短い気がしますが、複数人で集まっているので工数換算すると不明です。
　仮に工数がかかっていたとしても、品質が高いものができており後々の問い合わせ工数や不具合の削減ができているのであれば、おつりが来るとも考えられます。

・集団心理/傍観者効果（「誰も消防車を呼んでいないのである」のやつ）
　「みんないるから大丈夫でしょう」「誰も言ってないからこれは問題ないのかな」という心理や意識は起こる可能性が高いでしょう。
　全員がそういうことを念頭に置いて実施する必要があります。

・全員が開発者目線になる
　「全員の同意を得ながら進むからレビュー不要」というのは事実ですが、レビューという「批判的な目線でチェックする人」という存在も、意識しないと消滅します。
　意識しようとしても高速の意思決定によって押し流されたりもします。

・教育目的では最高効率ではない
　メリット側で「全員に知識が共有される」という話がありましたが、それは教育ではありません。
　新卒や中途など最近チームに加わったような、経験や前提知識に大きく隔たりがある人への効率は、他の人と比べると相当落ちるはずです。
　モブプロに参加することに問題はありませんが、その後の解説やサポート、別途教育コンテンツの準備は必要でしょう。

・モブプロのローテーション手順に慣れてないとロスが出る
　特にVScodeのmobの機能ですね。あれにみんな手こずってます。
　思った通りにコミットされてないとか、修正引き継がれてないとか、翌日やったら全部巻き戻ってたとか。
　未だにちょっと苦手意識が強いです。

### こうしたらよい
・あくまで「モブプロ」はツールや基本であり、アレンジしまくる
　弊チームは開発以外も実施しているので、そのすべてに「モブプロ」の形式に落とし込むことはできませんでした。
　また、モブプロにおける各役割は「開発慣れしてない人が多い」「発言しづらい雰囲気」「全員開発に強くて話が爆速になる」というようなケースを取りまとめたり、発言を機械的に促すといった効果を持たせるので、必ずしもその役割を全員に宛がう必要はないと感じています。

・チームでやることとして時間を決めて実施する
　おそらくですが「時間に余裕のある人が出ましょう」の自由参加形式は人が集まらないでしょう。
　弊チームも、問い合わせ対応は散発的に来るので、モブプロと被ることは多々あります。
　極論「この時間はモブプロをします。他は放っておいてください」とチームで決定しておくことで、参加しやすくなります。

・心理的安全性が高くないといけない
　当たり障りのないことやOKだけ、質問が言い辛い状況だと、モブプロは効果を発揮しないでしょう。
　個人的には、初歩的な質問をしたり、ひっくり返す話をしたり（ひっくり返して裏面を提示して元に戻すけど）、違和感は手を挙げたりして、ハードルを下げていけるものかと思ってやってます。

・モブプロをするチケットやフェーズは都度選んだ方が良いし変化させるべき
　「やる範囲がデカすぎて話が発散し続ける」「修正が自明すぎて何も相談することがない」「調査が難航しすぎる予定」などなど、チケット単位でも、そのチケットの中のフェーズでも、モブプロをするしないを変更できるようにした方がいいです。
　でないと、大人数では無意味だったり、逆効果を生んだりとする可能性があります。
　するしないは柔軟がよいです。

### 感想
脳が疲れる！

普通一人で開発をすると、基本は目の前のコードと調べているサイト、成果物と睨めっこです。
喋らないし、聴覚を意識して使うこともない。
現在位置はどこにいて、どう道筋を引いて、どんなペースで進んでいくか決められる、一人旅です。

モブプロだと、目の前のコードはスクロールされるし、先に進みたくても進めなかったり戻れなかったり反復して参照できないし、手元でコード読んでたら話の流れから外れていて、今どこを読んでるのか必死に戻ったり、めちゃくちゃ喋るし、他の人の話を聞いて理解しないといけない。
細かい現在位置は全員の力が加わるからコントロールできなくなるこっくりさん状況になるし、道筋は想定外の方面にも引かれるし、自分一人がわかってなくても話は先へ進んでいくし、どこかの誰かさん（自分）は突然終わった話を別観点で蒸し返して混乱を生む。

行先知らない休みなしの弾丸ツアーって感じですね。どうでしょう。

何も悪いことではないです。
その方が早く開発できるし、案や観点は多いに越したことはないし、話は必要なら蒸し返してもいい（と思ってるので発言してるんですけど）。
ただ、そう、普通よりか疲れます。

あとはこれ、コロナ前にやってみたかったな、と。
全員で一つのPCをくるくる使いまわしたなら、それはそれは楽しかったでしょう。
今はオンラインでやってますが、逆に全員で調査するのが早かったり、文字ベースで話を残すのが前提だから再開しやすかったりといったメリットも感じています。

## おわりに
みんなで押すような、猛烈なパワーで進めることができるモブプロには強烈なメリットを感じており、もっと自分たちで取り扱いやすくカスタマイズしていきたいですね。