Gunosy Tech Blog

Gunosy Tech Blogは株式会社Gunosyのエンジニアが知見を共有する技術ブログです。

徹底解説 リモートワークで行うモビングとフラクタル

広告技術部の石田です。

RSGT2021での学びをきっかけに、私たちのチームでは一日の業務をモビングとフラクタルという方法で行うようになりました。

しかし、ひとくちにそう言われても具体的なイメージが湧かない人も多いのではないでしょうか。

この記事では、モビングとフラクタルの二つをわかりやすく解説します。

特にフラクタルはなじみの薄い用語なので、まずフラクタルについて図を使って説明した後にモビングの解説をします。

フラクタルを図で解説

それではまずこちらの図をご覧ください。

フラクタルで過ごす一日の流れ

フラクタルとは元々は幾何学の概念で、全体とそれを構成する部分が自己相似(再帰)となるものをいいます。

フラクタルスプリントは一日をひとつのスプリントに見立て、その中を同じような構造を持った小さなスプリントで構成します。

私たちのチームでは30分の短いスプリントを一日中繰り返すこと、そして最初の30分スプリントをその日のゴールを設定するためのプランニングの時間に充てることでフラクタルを構成しました。

図を見ると出勤からプロジェクトの朝会まではひとりで過ごしますが、朝会の終了から退勤までの間は30分スプリントを繰り返していくことが判ると思います。

30分スプリントの内訳

図で「スプリント#1」と表記した30分スプリントは四つの工程に分かれます。

  1. プランニング -> その30分で達成すべきゴールを決める
  2. 開発 -> ゴールに向けて作業を行う
  3. レビュー -> ゴールが達成できたか、あるいはどこまで進んだかをメモに残す
  4. ふりかえり -> 作業中に感じた良かったことや新たな発見をメモに残す(Good & Newという手法)

このように、30分という短い時間の中でもプランニング、レビュー、ふりかえりを行います。

ただし、レビューやふりかえりであまり手のかかることをする暇はないので、誰でも編集可能なGoogle Docを作ってメモを残すことにしました。

30分スプリントのメモの例

最初の30分スプリントの時間だけは一日の計画に充てる

いま説明した30分スプリントをくり返すことが一日の過ごし方の基本ですが、最初の30分スプリントの時間だけは「デイリープランニング」という別のことをします。

これはその日のゴールを設定するためにまず以下の事項を確認します。

  • 他のチームから新たにプルリクが来てレビューを依頼されていないか
  • テスト環境が壊れたといったトラブルが起きていないか
  • すでに運用中のシステムについて問い合わせが来ていないか
  • 昨日やっていた仕事より優先すべき事項はあるか
  • 昨日の仕事が思わしい成果を上げられなかった場合は何が悪かったのか

そして、やるべきことの優先順位をつけ、その日にどこまで完了できるか達成ラインを引きます。

前日に終わらなかった仕事を漫然と続行するのではなく、新たに起きた出来事や状況の変化を踏まえ、優先順位を見直してから個別のタスクに移ることが大事です。

こうした一日の計画を立てる時間をデイリープランニングと呼んでいます。

今日やることをリストアップしたら達成ラインも引くと良い

60分ごとに10分の休憩時間を設ける

モビングしていると熱中して休憩を忘れてしまう問題があります。

これはモビングの大きなデメリットです。 延々と休憩なしで続けるとバテてしまってモビングを続けられなくなります。

このため、60分(=30分スプリントを2回)ごとに10分の休憩時間を設けています。

休憩時間は各々手洗いに行ったり、雑談をして過ごします。

モビングについて

ここまでフラクタルについて説明しました。

次はモビングの話に移ります。

モビングという用語

まずモビングという用語ですが、私は最初はこれをモブプロと呼んでいました。

しかし、私たちのチームの活動はプログラミングに限らず以下の業務も全員で行うため、モブプロと呼ぶには対象範囲が広すぎます。

  • プルリクのレビュー
  • 問い合わせ対応
  • トラブル対応

このため、『モブプログラミング・ベストプラクティス』という本からモビングという言葉を借用し、私はチームの活動をモビングと呼ぶことにしました。

作業の分担をしない

ところで、私たちは単に30分スプリントをくり返すわけではありません。

スプリント期間を短く設定しても、各々が異なる仕事をすれば状況報告や認識のすり合わせといったことが必要になり、短期間で学習を積み重ねるフラクタルの強みを十分に生かすことができないだろうと私は思いました。

このため30分間にやる作業はモブプロに限らず、すべて3名のチームメンバー全員で行います。

だから誰でも同時にメモを書けるGoogle Docを使っていて、Slackのオンライン通話も開きっぱなしにして常に会話をしながら仕事をします。 ソースコードもVSCode Live Shareを使い共同編集できるようにします。

要するに私たちのチームは作業の分担ということをしないのですが、これを読んだ人の中にはそんなことをして大丈夫なのか?と疑問に思う方も多いだろうと思います。

しかし実際は一日の業務をモビングで通しても分担のデメリットが抑制されたり、共同作業のメリットが発生するため、意外にもスケジュールは十分守れるのです。

これについては後ほど別の記事を書いて説明する予定ですので、ここではもう少し違う話をしたいと思います。

オンラインモビングのメリット

ペアプロやモブプロというとオフラインで集合して同じディスプレイを見ながら作業するイメージを持つかもしれません。

しかし、私はモビングはオンラインでやる方が適していると思います。 そう思う理由がいくつかあります。

うるさくしてもあまり迷惑にならない

まず、オンラインだと喋っていても周りの迷惑になりにくい点が挙げられます。

家族などと同居している人は同居人の都合もあるでしょうが、会社のオフィスという多くの部署やチームの人々が居合わせる場で声を出して会話するのと比べれば話しやすいと思います。

つい言ってしまう指示代名詞(これ、それ、あれ)に対処しやすい

会話をしているとつい「これ、それ、あれ」といった指示代名詞を使ってしまいます。

  • 「これを使えばできるよ」 -> 「これ」って何?
  • 「そこのメニューを開いて」 -> 「そこ」がわからない
  • 「あれだよ、画面の真ん中に表示されてる丸いやつ」 -> 「あれ」とは?

指示代名詞が伝わらないと喋る側・聞く側双方のストレスになり作業がスムーズに進まなくなります。

私はオフラインでモブプロをしていた頃は指し棒を使ってこの問題に対処してきましたが、SlackのDraw*1を使うともっと簡単にこれを解決できます。

モビングとフラクタルの必需品

ここまでモビングとフラクタルについて説明しましたが、次はモビングとフラクタルをやるときの必需品をいくつか紹介したいと思います。

インターバルタイマー

まずはインターバルタイマーです。

これがないと始まらないというくらい必需品です。

スマートフォンの基本タイマーは複雑な設定ができないので専用のアプリを使います。

アンドロイドアプリInterval timer。プリセットを登録できる

これを使うと4工程に分かれる30分スプリントを2回くり返した後に10分休憩を1回行う、といった複雑なタイムテーブルを作れます。

時間終了時に鳴らすホイッスルやゴングの音もよくできていて、時間が過ぎても作業してしまう問題も起きにくくなります。

コラボレーションツール

他人と共同作業するためのコラボレーションツールも必需品です。

VSCode Live Shareがあれば同じソースコードを参加者全員が閲覧・修正できますし、他人のカーソルに追従して画面表示する機能もあるのでモブプロがしやすくなります。

また、先ほども述べましたがプログラミング以外にもプルリクにコメントしたり問い合わせに回答する作業もモビングする上でSlackの画面共有とDraw機能がとても役に立ちます。

さらに、プログラミングの設計のような込み入った話を整理するときやスプリントのプランニングにはMiroのようなオンラインホワイトボードも役立ちます。

飲み物とお菓子

飲み物とお菓子

30分スプリントは常に集中して頭を使うので、非常に疲れます。 このため飲み物とお菓子が欠かせません。

休憩時間に雑談しながらコーヒーを飲んでお菓子を食べると体の回復が実感できます。

甘い乳酸菌飲料やジュースも気分を変えたいときに役立ちます。

ヨガマットとストレッチグッズもあると便利

ドライバーを続けると画面の前でずっと同じ姿勢で座るので肩や腰が疲れてきます。

そういうときはドライバーを代わってもらって、床にヨガマットを敷いてストレッチグッズでほぐしながらナビゲータをします。

肩や腰がつかれたらドライバーを代わってもらう

以上、リモートワークでモビングおよびフラクタルを使ってどう過ごしているかを紹介しました。

最後までお読みくださりありがとうございました。

*1:画面共有でシェアした画面に参加者がペンで書き込みできる機能