モチベーション
- もともとオフラインでのモブブロの仕事スタイル(以後リアルモブと呼ぶ)
- コロナウイルスにより弊現場は3月から好むと好まざるとフルリモートにせざるえなくなる
- リモートモブになって約5ヶ月経過したので、現在まで達成できてる事/課題を紹介。
モブプログラミング環境
ツール/SaaS類
- 画面共有/音声通信は
Discord
(未課金勢) - コーディングは
VSCode Live Share
- カンバンは
Trello
- ふりかえり等は
Jamboard
- デザインや図の共有は
Figma
- 資料等は
Google Spread Sheet
を使うこともある
- 資料等は
- リポジトリは
GitHub Enterprise
- CI/CDは
Bitrise
モブプロのスタイル
- 基本的にはドライバー1名、残りはナビゲーターとサポーター
- 人数は2名〜5名まで試験。
- 5名の場合、一番知見のある人を専属ナビゲータにして4人で回すのもありかも。
- この辺はリアルモブと変わらない
- うまく回ってると、サポーターにより次の実装に必要な情報(公式リファレンス、Blog記事、githubのサンプルコード)がDiscordにペタペタはられる
- ドライバーはひたすら書き続けるキーボード奴隷化
- ハマったり、解決方法が誰もわからないと皆で試行錯誤
- ドライバーは10分交代で1時間あたり10分は休憩を入れる
- 試した結果、5分ではせわしなく、15分では長すぎたので10分に収斂した。
- 手分けできる作業(複数ファイルにわたるソースコードの変更)などは短時間なら全員で直しにかかったりする。
- 「このメソッドの引数増やさんとだめだ」→「呼び出し部分書きかえてくる」「じゃぼくは中身を」みたいな
- そしてシームレスに合流
- カーソルが複数あるのってすごい
- めっちゃ疲れるので午前3セット、午後3セットぐらいが限界(途中13-14時がお昼休み)
- 経験則的に、ノッてても休憩を意図的に入れないと集中力が続かない
- トイレ行きたかったり宅急便も来るのでドライバー手番をパス等はよくある。
- 厳密に手番通り回す必要はない
TIPS/課題
ビルド速度がホスト依存
-
一番早いマシン持ってる人がホストをやる
- 最大でVSCode Live Share+Android Emulator+コンパイル+Discord画面配信という負荷になるので、結構なパワーがいる
- Macbook Pro松でもキツい
- 最大でVSCode Live Share+Android Emulator+コンパイル+Discord画面配信という負荷になるので、結構なパワーがいる
- 弊現場ではiMac 5Kを配布。家庭環境的に設置できない人はMacbook Pro。
- ちなみに僕はMac Proをどさくさにまぎれて奪取。非常に快適。
GuestだとGo To Definition動かない問題
- Guest側だと⌘+Clickでクラスやメソッドの定義に飛べない
- ホストを⌘+クリック奴隷にして、自分はホストのカーソルに追従すれば飛べるけど、ぶっちゃけダルい
- 機能的にできないのでなく、本来は動くはずだが、どうもTS以外動かないというバグっぽいので今は一旦我慢
- issueはこちら→https://github.com/rust-analyzer/rust-analyzer/issues/5644
- とりあえず「同じソースコードを別のディレクトリにおき、Android Studioで開いておいて対応」
- 大抵は調べごと&元の実装を見たいパターンなのでなんとかなる
Guestだとエミュレータ触れない問題
- 実行すると実機やエミュレータは、当然ホストマシン上でしか動かない
- エミュレータの画面そのものはDiscord経由で見れる
- Hot Realoadでの画面デザイン修正はわりと困らない
- しかし操作ができない
- ホストが操作奴隷になるしかない
Debug Session動かない問題
- ゲストとDEBUG CONSOLEの共有できない
- GuestにDEBUGメッセージ等がみれない
- しかし共有ターミナルから起動はできる
- DEBUGメッセージも読める
- そうするとBreakPoint等が動かない
- ガチハマりしたらAndroid Studioでデバッガ動かした方が残念ながら早い
所感
リアルモブに対してスピードはどうなの?
- 議論は遅くなった(コミュニケーションの高コスト化)
- コーディングは早くなった(ツールによる問題解決)
メンバー欠けに対する強い靭性
- 本来チームは固定したいが、家庭事情やら体調やらで現実には毎週フルタイム同じメンバーでやるのは難しい
- しかし、このモブスタイルによって、全休&短時間抜け等でもタスク進捗に影響が出にくい
- とはいえ知見者が抜けたときにハマると遅くなることはあるが、誰もわかならい、みたいな状況にはならない。
- 少々スピードが遅くなってもタスクが進むということは重要
- とはいえ知見者が抜けたときにハマると遅くなることはあるが、誰もわかならい、みたいな状況にはならない。
リモートモブはリアルモブプロのサブセットではなくスーパーセットになる
- 従来のモブに比べると***「すべてのツールが同時に操作可能」***であることは、従来とはかなり違う開発体験となる。
- 単一のタスクに対して、複数のソースコードを複数の人間がリアルタイムに書き換えていくというパラダイムシフト
- もはや最大のネックは「OSが単一のユーザしか想定していない事」 になっている
指示待ち型のチームには向かない
- Discordでは1->Nのコミュニケーションが主体になる(1<->1の会話を複数同時にはできない)ため、リーダーが音声によって全員に細かく逐次指示するコストが非常に高い
- したがって、ナビゲーターやサポーターは、タスクの先を見据えて、ぐいぐい先回りして仕事をしていくスタイルが要求される。
- 自律型のチームでないと、お見合い&指示待ちが発生してしまう。
- 全員がリードしまくるぐらいの、積極的なチームワークが重要
ほんとに仕事できんの?
- できたよ