アジャイル開発では当初、クラスター化したチーム、つまり物理的に同じオフィスにいるチームを想定していました。「開発チーム内で情報を伝達するには、直接向き合って話すのが最も効率的で効果的な方法である」という考えを踏まえ、初期のアジャイルチームでは近接して活動することが前提となっていました。
しかし現在、ほとんどの企業が分散チームを展開しています。これは単なる流行ではなく、合理的なトレンドです。分散チームは 24 時間プロジェクトに取り組むことができ、競争の少ない市場において優れた人材を確保できます (望まれない再配置が不要なため、人材の維持も容易です)。 ただし、分散チームの利点の裏には欠点もあります。 多くの分散チームにとって、アジャイルプラクティスである対面でのやりとりは困難です。
分散ソフトウェアチームには他にも次のような課題が生じます。
- タイムゾーン間での調整
- 全員が同じオフィスにいるわけではない場合の人間関係の構築
- 異なる開発文化間での協力
- 双方のチームが同時にオンラインであるときの数時間程度のミーティングや非公式の話し合いのスケジュール設定
これらは現実の問題ですが、解決不可能というわけではありません。ローカルオフィスとリモートオフィスの距離を埋めるのに役立ついくつかの方法と、他の問題を軽減するためのアイデアを見ていきましょう。
グローバルなチームを構築する方法
優れたソフトウェアアーキテクチャはモジュール設計です。チームも同様に構築しましょう。すべてのオフィスが自給自足でテクノロジーを開発できる状態が理想的です。タイムゾーンの異なるチームとの共同作業が最小限で済み、一般的に自律性を確保できるからです。 プロジェクトでさまざまな場所のチームが活動する必要がある場合は、それぞれのインテグレーションポイントや API に重点的に取り組むことができます。
コードレビューも重要な役割を果たします。オンラインになるタイミングはチームによって異なるため、オフィス間でコードの知識が分散されることになり、サポートと保守が容易になります。チームがオンラインではないときに本稼働環境で問題が発生した場合も、チームや場所の壁を超えたコードレビューで得たノウハウを活かして別のオフィスがサポートを行い、問題を解決できます。
人間関係の構築
あらゆるプログラム、特にアジャイルプログラムにおいては、チーム全体でしっかりした人間関係を構築することが重要です。個人的なつながりは信頼を生み、失敗を最小限に抑えるとともに、自己組織化を容易にし、やる気を高めます。オフィス内でチームメンバー同士が親しくなれるよう配慮しましょう。また、リモートオフィスの仕事仲間とも、可能な限りお互いを知る努力をしましょう。個人的なつながりは大切です。個人的なつながりが強いほど、お互いを遠い場所の見知らぬ他人ではなく仕事仲間として認識しやすくなります。
ヒント: アトラシアンに新しく加わった従業員は、コンテンツコラボレーションツール Confluence の社内インスタンスに自己紹介ブログを投稿します。このブログは新しい従業員の仕事とプライベート (趣味、興味分野、家族など) の両方を取り上げ、オフィス間の橋渡しに役立ちます。お互いを深く知るほど、チームとしての結束力が強まります。
直接顔を見て話すことに勝るものはありません。各オフィスのチームメンバーが定期的に顔を合わせれば、好ましい効果が得られます。これには、ビデオ会議やリモートオフィスへの訪問も含まれます。
Zoom のようなビデオ会議ツールは、特に分散アジャイルチーム間の溝を埋めるのに役立ちます。ただし、Zoom を利用するチームでは、特定の制限事項に留意が必要です。
- ビデオ会議では、多くの場合、短時間のコミュニケーションしかとれません。同じオフィスにいれば、お互いの課題、成功、機会がしっかりと見えます。
- Zoom はネットワーク障害にうまく対処します。とはいえ、オフィス間にネットワークの問題があるとビデオや音声が途切れとぎれになったり、話の内容を理解しにくくなったりします。
- 多くの人は、Zoom ビデオ会議を設定された時間に行うものだといまだに考えています。カジュアルな会話にいつでもビデオチャットを使用する文化を作り上げるには時間がかかります。また、すばやく質問するには Slack のようなインスタントメッセージツールを使用しましょう。
ビデオ会議に関する問題を軽減するには、チームメンバーが毎週 1 対 1 のチャットセッションを行うとよいでしょう。気軽な会話を通じて、知識の共有を促進します。チームはこの機会を活かして人間関係を構築し、協力して仕事に取り組むことができます。
コミュニケーションにおいては、口調や声、態度が大きな役割を果たすことに注意しましょう。直接顔を合せることで、別の場所にいる仕事仲間がどのような人物かをより正確に理解し、その後のビデオ会議の効果が高まります。
家であれ製品であれ、ビジョンを定義し、戦略的なテーマを大まかに設定することが重要です。テーマとは、組織全体が注力すべき分野だと考えてください。次の四半期、半年、1 年において何に重点を置くのか、時間やリソースはどこに割くべきかを検討します。パフォーマンス、ユーザーエクスペリエンス、セキュリティ、競争力を持つ新たな機能 (ホットタブなど)、またはこれらすべてです。
配置換えは新しい職務や勤務地への一時的な異動であり、その期間には数週間から 1 年ほどの幅があります。人間関係の構築やチーム全体への文化の広がりに効果的であるほか、異文化を経験する機会でもあります。
団結した開発文化の構築
チームがさまざまな場所に分散して活動し、共通の開発文化を共有するには、4 つのシンプルな方法があります。
- すべての場所に意思決定を過剰なほど伝える
- 開発環境の設定における摩擦を最小限に抑える
- 「完了」がどのような状態を意味するかを明確に定義する
- 効果的なバグレポートを作成するためのガイドラインを策定する
では、順番に解説していきましょう。
第 1 に、共同オフィスから分散文化に移行すると、コミュニケーションが非常に困難になります。まず、意思決定が行われた場合はそのことを伝えなければならないということをチームに理解させるのが一苦労です。当然のことのようですが、実は忘れがちなことです。重要な決定が、廊下での会話やローカルチームの非公式のミーティング、または個人によって行われることもよくあります。さらに、小さな決定を些細なこととして片付けがちです。
双方のオフィスが軌道に乗るまで、事細かに伝えるようにします。
意思決定が行われた場合は、それぞれのオフィスの全員が決定事項およびその理由を理解する必要があります。メールは使用しないでください。重要な情報が簡単に失われます。Wiki のようなコンテンツ管理システムを使用して、チームメンバーが簡単にチーム全体の最新情報を見れるように (また、メールや Slack グループチャットツールを通じて更新通知を受け取れるように) します。また、Slack を使用して個人やチームのチャンネルを作成し、最新情報を伝達、確認できます。情報が古いため活動が遅れ、問題が発生し、問い合わせをする事態に陥ることは、情報を積極的に共有することよりも長い時間がかかります。
アトラシアンでは、プロジェクトや目標に関する最新情報を複数のチーム全体で共有しています。最新情報の通知は、毎週のダイジェスト メールまたは Slack を通じて受け取ります。これによってチームはオープンに意思疎通を行い、作業のコンテキストについて共通認識を持てます。つまり、次の質問の答えがわかるということです。
- 何に取り組むのか?
- それはなぜですか?
- 担当者は?
- 作業の進捗状況
第 2 に、チーム全体で一貫した開発環境を使用することで、共同作業や課題管理がしやすくなります。時間をかけて簡単な「スタートアップガイド」を作成し、設定をできるだけ自動化することで、初日の摩擦を和らげます。
第 3 に、オフィス間での作業では、「完了」がどのような状態を意味するかを明確に定義することで、例外管理やチーム間での人間関係の構築が容易になります。「完了」の定義がしっかりしていると、仕事における曖昧さがなくなります。たとえば、複数のチームが関与するリリースでは、「完成」が意味することを明確にしましょう。コードの記述、プルリクエストの作成、コードレビュー、テスト、適切なブランチへのマージが考えられます。
最後に、分散型開発では、問題が発生した時点で全員がオンラインである必要はありません。バグレポートやトラブルシューティング方法のガイドラインを明確にすることで、チームの誰もが課題を簡単に管理できるようになります。コードレビューと十分な自動化テストでも、コードベースに関する知識を共有し、影響を受けるチームが修正を行って、変更によって予期しない副次的影響が生じないことを確認します。したがって、チームがブロッカーとなることはありません。
ゴールデンアワーを最大化
写真家であれば誰でも、「ゴールデンアワー」を知っています。美しい風景写真を撮るのに最もよい、日の出や日没の直前直後の時間帯のことです。分散ソフトウェアチームにとってのゴールデンアワーは、ローカルチームとリモートチームの両方が同時にそれぞれのオフィスで在席しているときを指します。すべてのチームがオフィスにいる時間はスタンドアップに最適です。
異なるタイムゾーン間で活動するチームにとって、スタンドアップは作業を引き継ぐのにちょうどよい機会です。オンラインになるチームが、オフラインになるチームの作業を引き継ぎます。ビデオ会議でスタンドアップを行えば、質問をしたり作業スピードを上げたりするのが容易になり、ミーティング終了と同時に全員が作業に取り掛かれます。
ときには、オフィスが非常に離れていて、一方のチームにとってミーティングが非常に苦痛になることがあります (午前 5 時にもう一つのチームとのスタンドアップを行うのは遠慮したいものです)。ミーティング時刻を交代で設定することで負担を共有し、リモートチームに無理を強いてやる気を低下させることのないようにしましょう。スタンドアップでは、チーム全体の意欲をよく観察します。過度の緊張がある場合や、あまり成果が挙がっていない場合、チームメンバーの意欲が低下し始め、意見を聞いたり共有したりといった行動が止まります。スタンドアップは絶対に毎日開催しなければいけないわけではありません。リモートチームとのミーティングを週に数回行い、残りの日にローカルスタンドアップを行ってもかまいません。同様に、スタンドアップを朝行わなければならないというわけでもありません。参加者全員にとって最も都合のよい時間帯に行うのが最適です。
すべてのチームが分散
分散型組織では、すべてのチームがリモートです。すべてのチームが、オフィス間での作業の共有、効果的なコミュニケーション、さまざまな場所での一貫した文化の構築のための方法を学び、適応する必要があります。効果的なチームはリモートオフィスを本社の文化に合わせることをしません。なぜなら、すべてのオフィスはお互いに学べることを知っているからです。成功しているプラクティスを見つけて、すべての場所で共有しようとします。「こちらのチームとあちらのチーム」が対決するのではなく、「私たち」という意識も持っています。
同じオフィスにいるチームでも、ときどき分散状態になることがあります。出張のためオフィスを離れたり、仕事とプライベートのバランスを考えて自宅勤務したりすることもあります。構造と透明性の両方を尊重するチームでは、効率的な拡張が可能です。プロジェクトがオフィスを超えて広がれば、仕事に適した文化が自然と醸成されます。