For Your ISHIO Blog

データ分析や機械学習やスクラムや組織とか、色々つぶやくブログです。

モブプロやってみた。

モブプロをチームで初めて実施しました。やってみた感想とかをこの記事では書きます。

モブプロとは

モブとは「チームで一緒に働くこと」みたいな意味があるらしいです。モブ・プログラミング(モブプロ)は、チーム全員が一緒になって、一つのコードを映した画面を見ながら、議論を行い開発・実装を進めるプログラミング手法です。1人がドライバーとしてPCでタイピングを行い、残りの人は議論・発信をしながらドライバーに対して実装の指示を出します。一定時間でドライバーを交代しながら進めていきます。 ペア・プログラミング(ペアプロ)が2人で進めるのに対して、モブプロは3人以上のメンバーで実施します。

目的

モブプロは、チームのソフトウェア開発力を高めることを目的に実施されます。人によって開発スタイルやモジュールの切り出し方が違ったりしますが、同じ開発ゴールに対してお互いの考えをシェアし議論しながら実装を進めることで、各人が学びを得てチーム全体の開発力底上げに繋げます。特に開発力が低い初期のチームにおいては、他人の開発環境(例えばvimやtmuxの使い方)も知れるので、生産性が高まる様々な学びを得られると思います。

役割

一般的には「ドライバー」と「ナビゲーター」の2つの役割があります。ドライバーはタイピングを行う人、ナビゲーターはドライバーに指示を出す人です。また、開発初期のチームでは、実装経験が低くうまくディスカッションができないことがあるので、チームがうまく学びを得ることができるように、開発力が高いエンジニアを「ファシリテータ」にすることがあります。私たちのチームでも、スーパーエンジニアにファシリテータの役割を担ってもらい進めました。

  1. ドライバー(タイピスト

    • PCでドライバーの指示通りにタイピングを行う。
    • 自分の意思で実装は行わない。
    • 自分が実装しないような指示に対しても躊躇なく実装を進める。
    • 20分程度で、他のナビゲータと交代する。
  2. ナビゲーター

    • ナビゲーター同士でコミュニケーションを取りながら、ドライバーに実装の指示を出す。
    • お互い傾聴を忘れずに実施する。
  3. ファシリテータ

    • チームが学びを得られるように、チームの議論を支援する。

準備するもの

  • 全員が平等に見れる大きな画面
  • PC1台(ドライバーが交代しながらタイピングをする用)
  • 全員が利用できるエディタ
  • コーディングしながら確認できるタイマー
  • 議論ができるホワイトボード
  • リラックスできる何か

心がけること

  • 参加者全員が、モブプロに集中する。
  • 人を批判しない。コードを批判する。
  • 技術的負債の実装者を批判しない。負債を作らなくてはいけなかった状況を批判する。
  • 傾聴の姿勢

進め方

  • 最初に開発内容とゴールについて説明する。
  • チームで実装方針について、ホワイトボードで議論しながら設計を行う。
  • 最初のドライバーを決める。
  • ナビゲータ同士が議論をしながら、一つの画面を見ながらドライバーに指示を出しつつ実装を進める。
  • 20分でドライバーを交代することを繰り返す。
  • 1時間半くらいで休憩を入れる。
  • 実装が完了したら、最後に振り返りを行う。

やってみた感想

  • まず、開発力が低いチームだと、そもそも何から手を付けてよいかわからず、うまく議論ができない。ファシリテーターファシリテーションを行ってもらうことをおススメする。
  • 議論が空中戦になり実装が進まないことが出てくる。実装を進める中で新たに見えてくる・理解が進むことがあるので、空中戦に終始せず、とにかくコードを書くことを意識する。
  • 開発スタイル(vimとかpep8とかpyflakesとかgitコマンドとか)で、開発初期のメンバーは学びを得ることができる。初期ほど効果あり。
  • 書籍を読んでも理解が難しい、抽象化や継承や共通化などを、コードの実装を進めながら深く理解できる。
  • 技術的な知識を得られる。
  • コードの品質を上げることができる。
  • 自分が開発に携わっていない他者のタスクについても、チーム全体で理解が深まる。
  • チームは一体感を得る、チームビルディングの観点でもよい。
  • めっちゃ疲れる。でも楽しい。

個人的には、チーム全員が参加するので、モブプロを実施するコストは高いですし、ペアプロ同様結構疲れます。でも、モブプロを数回行うことでチームの開発力や実装における生産性は大きく向上すると思いますので、是非チームの初期段階で実施するべきだと思います。

以上です。