aratana Tech blog

ECテクノロジーで 世界をもっと楽しく もっと笑顔に

モブプログラミングの実践と使いどころ

こんばんは、夜のチーズ饅頭。木目沢です。

まだまだ、最大限に使いこなしてはいないものの、僕たちが実践してきたモブプログラミングを紹介します。

モブプログラミングとは

簡単に言えば、1つの画面、1つのキーボードで、開発メンバーが交代しながらプログラミングをしていく開発手法です。

有名なのが、Hunter Industies社の以下の動画ですね。

www.youtube.com

一見、一人ひとり別々のタスクを持って、それぞれの画面とキーボードで開発するより非効率かもしれません。

モブプログラミングの効果はモブプログラミングカンファレンスでWoody Zuillさんが語った以下の記事がわかりやすいかと思います。

www.infoq.com

ソフトウェア開発中にチームが直面する主な問題は、モビングすることで消えていく。

  • コミュニケーションの問題がなくなる。チーム全員が同じ場所にいて、必然的にむき出しになるためだ。
  • 質問のための(質問に答えるための)待ち時間。問題は生産性ではなく、回答を得ることだ。この場合、バックログに新しい項目を追加するのは無駄でしかない。一日中一緒に仕事をすることで、問題は消えていく。
  • 技術的負債。これはソフトウェア開発で最も形のないものだろう。ITでは、チームが製品にゴミを持ち込むと、そのままにされるものだ。モビングにより、品質は継続的に高まる。

弊社でも実施してみたところ、これらの利点を大きく感じる結果となりました。 そこで、今回は弊社で実践している2つの事例を紹介します。

技術的スパイクを全員でやる

弊社のサービスaratana gatewayは、サーバーレスアーキテクチャを採用しています。

lab.aratana.jp

開発当初、メンバー全員がサーバーレスの技術を使用したことがなく、仕方なく!?始めたのがモブプログラミングでした。

f:id:kimesawa:20181205113435j:plain

意識して撮ったのでわざとらしい写真になっていますが、1つのモニターを使って交代して全員で調べながらプロトタイプを作っています。 うまくいけば採用してプロダクトに組み込んでいきます。

このやり方の利点は

  • 共有がいらない。全員でやるので共有の時間がいらない。
  • 調査が早い。全員で当たりに行くので調査が早い。
  • 採用・不採用の判断が早い。全員が理解しているので、採用するのか、諦めるのかその場で判断できる。

新しい技術やアーキテクチャを採用するときなど、今でも全員が集まって解決に行きます。

新卒OJTを全員でやる

今年、バックエンドチームには、3人の新卒が加入しました。 早く、チームのやり方、アーキテクチャ、技術に慣れ親しんでもらうためにOJTの課題を3人一緒に解決してもらうことにしました。 OJTが終わったあともしばらくは3人で実際のIssue・ストーリーに当たってもらいました。

やり方としては、

  1. Issue、ストーリーに対するタスクを全員で洗い出す。
  2. ドライバー(書く人)以外の2人は指示したり調べたりしながら協力してタスクに当たる。
  3. 交代しながら課題に当たる。
  4. YWT(やったこと・わかったこと・次にやることの洗い出し)や振り返りを通して今のやり方を振り返る

ということを徹底してもらいました。

結果、想像していたより大きな効果がありました。

  • 3人で相談し、誰もわからないときに聞くので、わかるわからないの線引きが確実で、同時に共有するので聞かれるほうの負担も減る
  • 交代でソースを書くので3人とも理解していないと進められない代わりに別途共有とかが不要になる
  • 誰かが風邪や打ち合わせで欠けても進捗できる
  • タスクを予め立てないと進めにくいので自然とタスク整理ができる
  • レビューしながら進めているようなものなので1つのタスクあたりの進捗が早い
  • 3人同時に同じ経験をするのでチーム全体の成長のスピードが上がる

これは実際にやってみないとその効果は実感できないと思います。 実際やってみて、思った以上の効果が出ていてびっくりしています。

なぜ、実践してみないと効果がわからないのか・・・それはモブプログラミングと聞くと大方こんな疑問が浮かぶからだと思います。

効率性が下がるのではないか

そこで、効率性について考えてみます。

2つの効率性

効率性という言葉には2つの意味があります。

  1. リソース効率性・・・各メンバーに常に何らかのタスクを与えられていること、つまり稼働率100%を目指す。暇な人が出ないこと。
  2. フロー効率性・・・1つのタスクをいかに短縮して完了させるかを目指す。つまり、多くの人で事に当たり効率よくタスクを完了させていくことを目指す。

疑問に感じる『効率性が下がる』と思ってしまうのは、リソース効率性のみを追い求めているからです。 リソース効率性とフロー効率性、どちらを重視すべきということはありますが、フロー効率性を目指すならモブプログラミングはかなり効果的と言えます。

まだまだ活用しきれていない

弊社の事例で言えば、まだまだモブプログラミングを活用しきれているとは言えません。 もっと使い所があるかもしれませんし、もっとフロー効率を上げるやり方があるかもしれません。

アラタナではそんな弊社のチームを発展させてくれるメンバーを探しています。 興味がありましたらぜひお問い合わせください。