こんにちは、QA部SETチームのモーリーこと森島です!
SETチームではペアプロミング・モブプログラミングを週に2〜3回実施しており、イテレーション内に目標が確実に達成できるように取り組んでいます。
今回はその取り組みの事例とそれによりどんな効果を得られているかを紹介しようと思います。
はじめに(対象となる読者)
SETではイテレーションの目標となるトピックに紐づくタスクをペアやモブで作業しています。
一般的にペア・モブプログラミングというと複数人でコーディングをする作業を指すと思います。
SETチームでは一般的なコーディングをすることもありますが、大半はコーディング以外の作業が多い状況です。
そのため今回は記事のタイトルの通りモブプログラミングの手法を活用した内容になりますので、一般的なモブプログラミングに対するプラクティスを期待されていた方はご注意ください。
一方で、コーディング以外の作業にもモブプログラミングのエッセンスを取り入れてみたいと考えている方には参考になると思います。
ペアプログラミング・モブプログラミングとは
今回の記事では以下のように定義します。
- ペアプログラミング(以降、ペアプロと呼ぶ)=同じタスクを同期的にペア(2人)のチームで取り組むこと
- モブプログラミング(以降、モブプロと呼ぶ)=同じタスクを同期的に3人以上のチームで取り組むこと
これ以降の説明にペアプロ・モブプロと記載しますが、前述の通り一般的に想像されるものとは違い、複数人で同期的に同じタスクを進行する呼称として使いますので、誤解なきようお願いいたします。
SETチームで実施してるペアプロ・モブプロ
SETチーム(3人)のメンバー構成
hacomono在籍期間や製品知識もバラバラでチームとしては新しくできたばかりです。
- はま:
- ベテランSETエンジニア
- hacomonoの機能についてなんでも知ってると言っても過言ではない
- プロダクトコードにも詳しい
- モーリー(私):
- 準新入社員(4ヶ月)
- hacomonoの機能?完全に理解した(=わかった気になっている)
- muga:
- 新入社員(1ヶ月)
- hacomonoの機能はほとんど知らない
ペアプロ・モブプロで取り組んでいるタスク例
主にmablによるE2E自動テストの実装やテスタビリティの向上のためにプロダクトコードのフロントエンドにdata-testidの属性を追加するなどの作業でペアプロ・モブプロ活用しています。
- mabl
- テスト作成(モブプロ)
- テストリファクタリング(ペアプロ)
- 成果物ピアレビュー(ペアプロ)
- 新機能を試そうワイワイ会(モブプロ)
- data testid
- コーディング(モブプロ)
ペアプロ・モブプロ開催方法
イテレーションが始まるときに事前に計画したり、デイリーミーティングの状況により当日に計画したり、ここ詰まってますといったヘルプが必要なときに突発的に、とタイミングは様々です。
- 事前:Googleカレンダーで予定作成して開催する
- 当日:朝会の相談でタスク状況に応じてカレンダーに予定作成して開催する
- 突発:その場でSlackで呼びかけて開催する
ペアプロ・モブプロ進行方法
以下のような2パターンがありますが、基本的には1のドライバーとナビゲーターに分かれる一般的なペアプロ・モブプロと同じ手法を多く使っています。
- ドライバーがナビゲーターの指示に従って作業する
- 作業を細かく相談しながら手分けしてやる
2を使うときはペアプロ・モブプロというよりはただの同期的な作業と言えます。
hacomonoはフルリモート企業のため同期的な作業を実施するには、オンサイトでのコミュニケーションよりひとつ壁があると思ったためあえて列挙しました。
ペアプロ・モブプロ作業環境
前述の通り働き方はフルリモートになるため、オンラインでペアプロ・モブプロを実施します。
リモートでの作業環境は以下の通りです。
- Slack ハドルミーティングで通話しながら作業者の画面を共有する
- 作業者の画面を見ながら指示者は次に書くことを丁寧に指示する
- VS CodeでLiveShare機能を使ってコードを共同編集する
- date testidはこっちを利用(mablは共同編集機能がないため)
Slack ハドルミーティングを採用していて、以下のようなメリットがあると感じています。
- 共有した画面にペンで書き込みができる
- 口頭だけで伝わりづらいときに箇所を明示できるのが便利
- 他の人にもミーティングしていることがわかる
- ハドルミーティングにトピックを設定できてわかりやすい
- トピックに興味があれば気軽に参加できる(Google Meetだと招待されていないと参加しづらい)
LiveShare機能は最近使ってみたばかりですが、ファイルを共同編集できるので意思疎通も早く感じましたし、繰り返しの作業が必要になったときに分担できて楽でした。
ペアプロ・モブプロでやると嬉しいこと
これまでペアプロ・モブプロでやってみて感じたメリットを共有します。
- 一つのタスクの完了が早い(リードタイムが短い)
- 成果物完成までの不確実性が高い作業の場合、相談しながら一気に進められる
- 作成と議論/相談・レビューがその場で解消するので待ち時間が発生しない
- 待ち時間に別の作業をやるとコンテキストスイッチが発生し、また思い出すのが大変
- 他のタスクの邪魔が入らず集中できる
- 各自の知識・知見・TIPSが共有される
- 作業者の画面を見ているときに「あ、ここをこうすると早くできますよ」などのTIPSや便利なツールをアドバイスしてもらえる
- プロダクトの知識差があってもプロダクトに貢献しやすい
- ドライバーを新人が担当することでOJTのようにも利用できる
- 各自の得意分野やどの辺の知識の強化が必要なのか、が少し可視化される
- モチベーションや勝手な優先度に左右されない
- 時間が決まっているので時間がなくてできませんでした、がない
- ちょっと方針考えたり調査するのが大変だから後回しにしよ、もない。ただやるのみ
- みんなでワイワイやるのたのしい
ペアプロ・モブプロでやると嬉しくないこと
もちろんメリットだけではないので、デメリットもあります。
- ずっと話しながら作業するので疲れが早い
- 25分作業、休憩5分でワンセットなど適度な休憩は必須
- リソース効率はよくなさそう
- 3人でやったら3人分の時間が同じタスクに注ぎ込まれるので、アウトプット自体は少ない
- 一人でもくもくとやりたい人はイライラしちゃいそう
- メリット部分を享受できない場合は効率悪いと感じて不満がでるかも
まとめ
コーディング以外の作業にもペアプロ・モブプロをとてもおすすめしたいですが、むやみやたらにペア・モブにするのは注意が必要です。 個人的に下記のような使い分けをするとちょうど良いのではないかと思いました。
ペアプロ・モブプロに向いているタスク
- タスクの担当者が作業者とレビュワーの往復が多く待ち時間が断続的に発生する
- タスクの担当者がタスクをどう進めたらいいかイメージが湧いていない
- 原因調査など未知数な
- 新人が担当するタスクも同様と言える
- タスクの完了における不確実性が高い
- テスト作成のための仕様書確認
- 文面の理解が人によって異なるため全員で認識合わせをする
ペアプロ・モブプロに向いていないタスク
- 誰が作っても同じ成果物になる(熟練度の考慮は除く)
- テスト実行など手順書に従って作業するタスク(ただし手順書の完成度が高い必要がある)
終わりに
ペアプロ・モブプロの手法を利用したチームでの作業の進め方を紹介しましたが、いかがでしたでしょうか。少しでも参考になれば幸いです。
現在のところ一人で実施する対比としてペアプロ・モブプロを取り上げましたが、意識的にペアかモブかは分けてはいません。
SETチームはこれからも拡大して人数が増えていく予定なので、今後はもう少しこの点について深堀りしてより高い成果を目指していきたいと思います。
hacomono QAではQAエンジニアやSETエンジニアを積極的に採用しています。
少しでも気になったらぜひ気軽にお問い合わせやカジュアル面談を申し込みください。