昔は苦手だったモブプロを今は推進する側になっていた

3~4年前はモブプロにめちゃくちゃ苦手意識があったんだけど、最近はなぜか(?)モブプロを推進していく旗振りをしている。モブプロの取り組み自体については今度会社のTech Blogに書く予定だけど、このエントリでは自分の心境の変化にフォーカスを当てる。人間、数年すると割と変わるもんだなぁと思って面白かったので、記録に残しておく。

モブプロが苦手だった頃

前職の開発チームにいた頃(3年前くらい)で、状況はこんな感じ。

なぜ苦手と感じていたか。特にタイピストの役割がめちゃくちゃ苦手だった。

  • 大きなディスプレイ側をみんな見ているとはいえ、自分がコードを書いている様子を6~7人が見ていてかなり緊張する
    • 見ているメンバーは自分よりコード書ける人(エース級のメンバー)ばかりなので、緊張する
    • 笑われるなんてことはないけど、なぜか面接を受けているような緊張感を勝手に持っていた
  • ナビゲーターの人の指示をさっと咀嚼できていなかった
    • 「XXXを書いていきましょうか」となった時に当時の自分はコードベースが頭に入りきっていなくて「XXXはどこにあったっけ...」と固まってしまっていた
      • 今だと「頭が今ちょっと固まっています」とか「XXXのパスってどの辺でしたっけ」聞けばいいじゃんって思うけど、当時の自分はチームでの開発がまだ慣れきっていなかったのか、うまく質問したり聞き返したりということができていなかった
  • 複数のナビゲーターからあれこれ指示をもらって混乱することがあった
    • これはまあ普通に混乱しそうなので、「自分の理解ではXXXだと思ってますが、合ってますか?」など積極的に会話してけばよかったが、できていなかった
  • 7~8人分の時間を使っているわけなので「あそこまでは完成させないと...」と勝手に責任感を感じていた
    • 「知見共有が目的」と言われていても勝手に感じていたなぁ...
    • チームの中でも人一倍コードを書くのが遅い感覚があったからかもしれない

なぜモブプロしようとなったか

ここまで書いたように、私はモブプロはかなり苦手意識を持っていた。それがなぜ「モブプロをやろう」という側になっていたか。どっちかというと積極的な理由ではなくて「苦手とか言ってないで、何か動かないとよくないな」という意識からだったように思う。「会話量を増やしたり共通の認識を増やして、チームをよりよい状況に持っていきたい」というのが先にあって、モブプロはその解決方法の一つだった*1

  • チームメンバーがそれぞれ独立したタスクを担当している
    • 他のメンバーがやっているタスクのことは概観しか分かっていないため、コードレビューをする時に浅い理解で何となくapproveしてしまいそうになる
    • 最初はPull Requestで質問書きまくろうと思ったけど、分量が多くてかなり威圧感を与えてしまいそうな気がしていた
  • メンバー間でドメイン知識の差がかなりあった
    • 転職したてだったので、ドメイン知識がないのはそれはそう
    • 属人性は結構高い状態だった
  • 背景や作業手順がドキュメントに書いてないことがある
    • これは多かれ少なかれ、どこの会社でもあるあるかなと思う
    • 調べても分からないことは人に聞くしかないので、定期的にコードについて話す機会を作りたかった
    • オペレーション回りのdocsが十分にないこともあったので、事故らないように画面共有しながら進めていきたかった
  • メンバー間で課題感を共有する場所をもっと作りたかった
    • モブプロをやる前の時期はチーム内の振り返り会をやっていなかった
    • 自分たちのコードベースや仕事の進め方について、課題感や「もっとこうしていきたいと思ってるんですよね」といった感情を共有する場所を作っておきたかった
    • 提案をいきなりバーンと持っていっても、前提や認識が揃っていないと滑る可能性が高い
      • モブプロなど同じ作業をやった時間を共有していると「あの時のミスとかをなくせると思うんですよね」「これめっちゃ辛い!!」といった共通経験を元に会話できる
  • 自分の画面を共有しながらやるスタイルへの抵抗感が昔に比べて薄れていたから
    • コロナで在宅勤務が当たり前になってきたのもあるし、SQLレクチャー会などの経験をできたのもあるかも

今はどうモブプロしているか

  • 1回1時間、週2回モブプロしている
    • Zoomで画面共有をしながら
    • 1時間の枠はタイピストとナビゲーターは割と固定
      • 経験や知識ある側はナビゲーター、経験浅かったり聞きたいこと多い側はタイピストでやってる
      • モブプロをやっているメンバーは今は二人なので、回毎に交代しながらやっている
  • ネタ帳にストックを貯めておいて「次回はこれをやりましょう」というのを決めてからやってる
    • 事前の準備は特に必要ない形でやっているけど、何をやるか分かっていると心の準備ができて安心
  • ネタの例
    • Argoワークフローの作成
    • バッチ基盤の監視スクリプト作成
    • Lookerのmodelやview作成
    • 本番反映のペアオペレーション
      • 一発で動かないこともあるので、手順の準備やドキュメントの整備も含めて
  • 質問や会話の仕方
    • 10秒くらい無言が続きそうだったら「今XXXはどうすればいいかについて考えています」と明示的に言う
      • タイピストが固まってそうだったら、ナビゲーターは「今どこまで理解できているか、どこが分かってないか、どこが分かれば先に進めそうか」を解き解してやれない考えてみる
      • 急いで進めることを優先しない
    • ナビゲータは指示を曖昧に出さない
      • 知識量に差があるという前提でやっているので、知識があまりなくても分かるように指示を出す
      • 指示してもらいやすいようにフォントサイズを大きめにしておいたり、行番号をエディタに表示しておくなどは工夫できる
  • 雑談、脱線大歓迎
    • 知見の共有や気になりポイント(例: 「さっきの手順、READMEに書いてないですよね?」)を潰していくことに重点を置いているので、積極的に会話していく
    • docker pushで時間がかかっている時は会話チャンスくらいに思っておく
    • きっかけは何でもいい。「さっきの便利スクリプト、あれ何ですか」とかそういうの
  • テンションはいつもの3割増し
    • 一発で通った時には「天才じゃん!」くらいのノリで会話する
      • 作業を進めるだけではなくて、感情を共有するというのも大事な目的に置いているので、分かりやすいくらいで表現する
    • 全然動かなくて辛いときには「つれえーーー」と声に出すくらいでやる
      • 何が辛いのか、どうやると解決できそうかも会話して、ネタ帳のストックに追加しておく
    • リモートだから余計にというのもある
  • モブプロの趣旨ややりたい背景はメンバーやグループ長に事前に共有
    • 背景がしっかり共有できていないと「何か時間を使っているみたいだけど、進捗出てるの?」と思われても仕方ない
    • グループ長はエンジニアリングについて理解のある方なので、その辺は杞憂だった

所感

  • 書いてて思うけど、「自分も昔苦手だったくせに、必要になったからモブプロやり出すとは調子のいいやつだな...」とは思う
    • 苦手と感じている人に無理強いさせることはしたくない
    • 苦手だったから分かることもあると思うので、その辺うまくカバーできるように立ち回りたい
  • チーム内では割と好評
    • 「これもモブプロ会でやってみましょうか」という提案もガンガンもらえてる
    • 週2回だと時間が足りなくなりつつあるので、週3でやってみようとなった
  • 理想のモブプロ像が頭の中にあると大分助かる
    • 前職で他チームのヘルプに入っている時、id:hakobe932さんとid:cockscombさんがわいわい盛り上がりながらモブプロを定期的にやっていたのが記憶に残っていて、その雰囲気をイメージしながらやってる
    • 書籍で読んだだけだと、ああいう雰囲気はなかなか伝わりにくいところがあると思うので、めっちゃいい経験をさせてもらえてたなと思う

*1:その他の解決方法としては、同時期にチーム内振り返り会やドラッカー風エクササイズをやり始めたなどがある