スムーズにコミュニケーションをとるのは簡単なことではありません。リモート チームなら、なおさらでしょう。でも安心してください。分散型のチームでも、同じ場所に集まっているチーム以上とまではいかなくとも、同じくらい効果的にコミュニケーションをとることができます。CircleCI のチームは、リモート コミュニケーションにおける 2 つの大きな課題である「トーンの理解」と「コラボレーション フレームワークの維持」と向き合う中で、さまざまなことを学びました。今回の記事ではそれについて掘り下げてみたいと思います。

この記事には、エンジニアリング マネージャーとしての私の見解をまとめていますが、ご紹介している実践方法やリンク先のテンプレートは、CircleCI のエンジニアリング部門が全員で協力し、アイデアを出し合い、実体験からの教訓を共有しながら作り上げたものなので、リモート チームのどの立場の方にもお役立ていただけると思います。

チームを知る

濃密なコミュニケーションは、チーム メンバーが仲間の考えをきちんと理解するうえで大きな役割を果たします。まだチーム結成から日が浅く、信頼関係が構築され始めた段階においては、特に重要でしょう (信頼関係が構築できていることは、効果的なチームに見られる特徴の 1 つです)。相互理解の基礎を築くには、メンバー 1 人ひとりをよく知ること、相互理解を深めるために協力し合うことに時間を費やす必要があります。

その実践方法がこちらです。

  • 情報収集と期待値設定のために、非リアルタイムでの下準備を行う
  • 「シンクロ時間」のミーティングにおける基本ルールを取り決める
  • メンバーからの意見を基に、必要なときには方針を見直す

メンバーが世界各地に散らばっているチームでは、全員の業務時間が重なる時間帯を見つけるのが難しいこともあります。この時間帯を「シンクロ時間」と呼んでいます。全員がリアルタイムに集まれる時間はたいへん貴重なので、有意義に活用しなくてはなりません。マネージャーは、シンクロ時間のコミュニケーションで何を達成したいのか事前に整理しておくことをお勧めします。業務時間が重ならない「非シンクロ時間」は、各々の業務に専念したり、シンクロ時間のコミュニケーションに向けて準備したりするために活用しましょう。

非リアルタイムの下準備

チームの結成初期 (組織の進化段階をまとめた「タックマン モデル」で言うところの形成期) には、非シンクロ時間に情報収集と期待値設定を行って、各自の役割分担を明確にします。

  • 社内のコミュニケーションに関する期待値をきちんと理解する: 同僚を足止めさせてしまうような行為は、関係を構築するうえで望ましくありません。チームの新しいマネージャーになったときには、たくさん質問しながらコツをつかんでいく方針である旨を簡潔なメッセージで伝えるとよいでしょう。Slack を利用しているなら、自分のステータスを更新して、同様の内容を記載しておきます。

  • 詳しいアンケートを実施し、チーム全体 (またはいずれかのチーム メンバー) が必要としていることを把握する: チームの新しいマネージャーになったら、こちらのフォームを基にアンケートを作成し、できるだけ多くの意見を募って、現状を調査することをお勧めします。

  • チームのマニフェストを作成する: なるべく早いうちにマニフェストを作成しておきます。このドキュメントを作成する中で、健全なチーム運営と価値観形成のためにどのようなプロセスが存在しているのかについて理解を深められるはずです。私が以前作成したマニフェストでは、次の 2 つのセクションにわけました。

    • メンバー (全員の記載内容を詳しく把握しましょう) - 私は、チーム メンバーにお互いのことを 1 人の人間として理解し合ってほしいと考えています。それぞれが豊かな生活を送り、さまざまなことに興味を抱き、仕事以外に大切な何かを持っているのです。私がマニフェストを作成したときには、最初に自分のプロフィールを書いてから、全員の名前を書き出して各自のセクションを設けることで、1 人ひとりを大切にする気持ちを表現しています。
    • チーム プロセス (参考程度に目を通してください) – チーム内の決まりごとに即して定義されたフレームワークは重要であり、私はメンバーがそれに従ってくれることを心から期待しています。とは言え、プロセス自体が目的化してしまっては有用性が下がってしまうため、方針が 8 割程度達成できれば十分だと思います。

    非リアルタイムに行う最初のコミュニケーションや、フィードバックの方法、プログラミングに関する価値観といったトピックについて、私が設定した大まかなベンチマークは、こちらのテンプレートでご確認いただけます。

  • シンクロ時間に向けて準備する: リモート チームがお互いの顔を見ながら会話する時間を設けるのはなかなか難しいものです (サマータイムで世界的にずれが生じる数か月間は特に)。ですから、メンバーには事前にタイム スケジュールとマニフェストの個人プロフィールを記入してもらうよう依頼しておきましょう。

シンクロ時間の関係構築

チームが発展していく段階 (タックマン モデルにおける混乱期、統一期、機能期) では、シンクロ時間がとても重要です。マネージャーは直属の部下についてよく知るために、またメンバーたちが相互理解を深める場を作るために、この時間を有効に活用する必要があります。

非リアルタイムのコミュニケーションが不要になるわけではありません。シンクロ時間のミーティングと並行して、非シンクロ時間でのコミュニケーションもフレームワーク (後述) に沿ってさらに促進していきます。

  • 1:1 のコミュニケーションを最大化する: 相互理解のエクササイズ は、マネージャーが部下のことをよく知り、連携を強めていくためのものです。1:1 の充実したコミュニケーションを継続させるには、こちらの広範な質問集を参考にするとよいでしょう。

  • 井戸端会議の時間を作る: リモート チームのメンバーは、昼食時や廊下ですれ違うことができません。親睦の機会として、シンクロ時間に雑談のミーティングを開きましょう。また、共通の趣味に関するチャット グループを作るのも 1 つの手です (これは非シンクロ時間にも使えますね)。CircleCI では雑談、読書、キーボード、育児、財テクなど、たくさんのハッシュ タグが使われています。

  • ペアでのコミュニケーションの場を設定する: ラランダムにペアを決め、週ごとに組み合わせを変えながら、少なくとも 1 回は全員とペアを組むまでローテーションを続けます。一周するまでは、毎日 3 時間、ペアの相手とコミュニケーションを取ります。3 時間という数字はベスト エフォートなので、場合によっては 1 時間でも十分です。特に時差のずれが大きいチームは、コミュニケーションのスケジュールを明確に決めておくことで、業務時間中に終えられるようになります。

    CircleCI の場合は、チーム全体で数回のローテーションを行った後、だれかに助け舟を出したり、必要なときにだれかとペアを組んだりといったことがスムーズに行われるようになったので、そのタイミングでペア コミュニケーションは終わりにしました。

  • チーム用チャネルを作成して最新情報を共有する (非シンクロ時間にも有効です): CircleCI では、プライベートのチーム用チャネルを用意して、そこにあらゆる種類の最新情報を投稿しています。たとえば、業務を開始したときの朝のあいさつ、仕掛中の作業に関するメモ、昼休憩の連絡、とりあえず急いで残したメモ、とりとめのない考察 (「octopus」の複数形についての議論や、Xbox が外出自粛時の必須アイテムであるかどうかの議論) などです。

    CircleCI では JIRA と Namely を使用していることもあって、このチャネルにはカンバン ボードの最新情報が組み込まれており、また、同僚の有給休暇や誕生日などの情報も毎週 Namely からアップされます。

コミュニケーション フレームワークを組み立てる

リモート チームでは、情報の伝達漏れが起こりやすくなります。そのため、コミュニケーションの確実性を高めることが重要です。とは言っても、情報やコンテキストを確認しようとしているメンバーをずっと監視している必要はありません。プロセスに仕掛けを施しましょう。CircleCI では、アジャイルに着想を得たアプローチを採用し、2 週間サイクルでミーティングを実施しています。

3-31-20-Planning Chart.jpg

ヒント: ミーティングの時間を設定するときには、初めの下準備で収集した情報を参考にしましょう。

知識移転のためのミーティング

スクラムを取り入れた手法は、効果が見られやすいため人気です。しかし、リモート チームの場合、スクラムの標準的なミーティングを行うときの重点の置き方が少し異なり、先に情報の断絶やずれをなくすことに注力します。

CircleCI でスタンドアップ ミーティングを実施しているのは、ヨーロッパだと 1 日の終わり、アメリカ西海岸だと朝の時間帯です。双方のエンジニアの業務時間は 4 時間も重なっていません。

  • スタンドアップ (毎日 30 分): 毎日の情報共有を行います。各日のシンクロ時間にスケジューリングされているのはこのミーティングのみです。一般的な 5 ~ 15 分ではなく、雑談を交えながら詳しい背景情報を十分に確認できるよう 30 分間を確保しています。毎回カンバン ボードを確認しますが、ここで重要なのは、確実に認識を統一するために、スタンドアップ リーダーが画面を共有して、更新情報があれば対象のカードに書き入れます。こうしてメモを取っておくと、チームを超えたコラボレーションや、インシデントの対応にも役立ちます (たとえるなら、うまくまとめられている git ログにコミットの理由を書き加えたようなものです)。

    スタンドアップと他の定期的なチーム ミーティングを連続して予定しておくと、マネージャーは、次のミーティングへとそのまま参加でき、時間が許せば早めにミーティングから退出できます。

  • プランニング (毎週 1 時間): 毎週金曜日までにバックログを整理し、非シンクロ時間にストーリー ポイントを設定します。火曜日にメンバー全員でプランニング ポーカーを行って、見積もりを詰めます。

    プランニング ミーティングでは、このポイントの見積もりをたたき台にして、各ストーリーに対する適切な対応を決定していきます。このプロセスを通じて、コンテキストを掘り下げます。ある点について難色を示す若手のメンバーに、その理由を説明するよう求めるのはやめましょう。代わりに、高めに見積もったベテランのエンジニアに、ポイントが高くなる要因について説明してもらってください。目標は情報を共有することであって、だれかに意見することではありません。

    プランニングが終わるころには、今後の作業予定が決まり、優先度順に並んでいるはずです。概ね適正で、すぐに着手できるようなプランの作成を目指しましょう。

  • レトロスペクティブ (隔週 1 時間): チームのプロセスを振り返り、ニーズに合わせてどう調整するかを決めるためのミーティングです。CircleCI では Slackbot のリマインダーを使って、ミーティングの議題にトピックを追加するようメンバーにお願いしています。

    私の場合、1:1 のコミュニケーション中に、チームで話し合いたい懸念事項が挙がったら、レトロスペクティブ用のドキュメントに書き留めておきます。たとえば、コード レビューをいつ、どのように行うべきかというトピックが、1:1 の対話から大きな議論に発展したことがありました (どの時点で完全な検証を要求すればよいのか、どの時点だとダメなのか、意見の相違をエスカレーションせずに差し戻すにはどうすればよいか、など)。また、ペアの組み合わせについての希望、オンコール エスカレーションについての反省点が取り上げられたこともありました。

    可能な限りチームのメンバーの疑問、懸念、考えを出し合って、このミーティングでどんどん議論すべきです。

  • ビッグ ピクチャー (隔週 1 時間): このミーティングは、自分たちが何を行っているのか、その目的は何かといったもっと大きなビジョンについて、プロダクト マネージャーがエンジニアリング チームに最新情報を伝える場として実施します。より広範な方向性をチームのメンバーに提示することで、以下についてのメンバーの理解が深まります。

    • 各自の作業の価値

    • 会社の目標に沿った意思決定を下すための判断基準

    CircleCI では、このミーティングを利用して、進捗状況がどのように追跡されているかをレクチャーすることもあります。たとえば、プロダクト マネージャーがセグメント分析を基にユーザー利用率についてざっと説明したり、経営陣がチームの進捗状況を確認している方法を紹介したりしています。

    このミーティングの目的は、そのときの PM とチームのニーズに合わせて柔軟に変更してかまいません。事前に確保していたシンクロ時間ですが、中止にしたり、インシデント後のレビューを行ったり、あるいはスタンドアップに変更して余った時間はコーヒー ブレイクに充てたり自由に楽しんだり、有効に活用しましょう。

ご紹介した各ミーティングの詳細については、2 週間サイクルのチーム ミーティングのドキュメントをご参照ください。このドキュメントには、各ミーティングの招待状に記載すべきこと (特にアジェンダや、必要な情報が見つけやすいよう 1 つのフォルダーに保存された会議ノートへのリンク)、質問事項の具体例、テンプレートが含まれています。

カレンダー設定のヒントとコツ (複数のタイムゾーンの管理)

複数のタイムゾーンを管理するのは手間がかかるので、カレンダーの機能を有効に活用しましょう。私は Google カレンダーを次のように活用しています。

  • 自分の業務時間を記入: この機能を使用すると、業務時間外に同僚から招待状を受け取った場合にその旨が相手に通知されます。
  • 世界時間機能を有効化: カリフォルニア、日本、ドイツの時刻が表示されるよう設定しています。カレンダー上でいずれかの時間帯をクリックすると、その時間帯の各現地時間が表示されます。
  • セカンダリ タイムゾーンを表示: アイルランドとカリフォルニアの時刻を表示するよう設定しています。現在のチームがこの 2 つのタイムゾーン内のメンバーで構成されているためです。
  • カレンダーに PagerDuty のローテーションを追加: オンコール中でなければ PagerDuty からの通知は目にしたくありません。カレンダーにローテーションを追加しておけば、余計な通知を見ずに自分がいつオンコールなのか確認できるようになります。
  • カレンダーに Zoom Scheduler を追加: 私が出席するミーティングの 99.9% はバーチャルなので、会議室へのリンクが必要になります。この設定は面倒ではありますが、ブラウザーの拡張機能を使用すると、Google カレンダーで招待状を作成する際に [Make it a Zoom Meeting (Zoom ミーティングにする)] ボタンが表示されるようになるため、非常に便利です。

まとめ

リモート チームの効果的なコミュニケーションは、意識して作り上げるものです。今回ご紹介した方法を試しながら、皆さんのチームに適したものを取捨選択することで、信頼関係の基礎とコミュニケーション フレームワークが確立され、リモート チームを活気づけることができます。その結果、同じ場所に集まるチームと変わらないレベルのコミュニケーションが実現されると共に、自然とコンテキストの共有が促され、情報が見つけやすくなるでしょう。

*本ブログ内のリンク先のサイトやドキュメントは英語の場合がございますことをご了承ください。お手数をおかけし、申し訳ございません。