開発合宿をリモートで実施する工夫

はてなでは、日々の業務を離れて興味のある技術を検証したり、開発の課題解決についてチャレンジする場として、開発合宿を定期的に開催しています。

以前の開発合宿では、貸し会議室を借りて参加メンバーが一カ所に集まり、集中できる環境を作って成果を出すことがポイントでした。しかし、新型コロナウィルス感染症の影響により、これまで通り同じ場所に集まって合宿を開催することが難しい状況になりました。

また合宿の意義は成果だけでなく、普段は業務上関わりがないエンジニア同士の交流の場にもなっていたので、コロナ禍でも継続して開催したい思いがあります。そこでリモートで開発合宿を行い、一カ所に集まらなくても合宿の体験を得られるようにしようと試みました。

これまで6月と9月の2回開催し、うまく実施するための工夫や課題が見えてきました。ここでは過去2回の振り返りをもとに、リモートでも開発合宿をうまく行えるようにする工夫を紹介しようと思います。

これまでの開発合宿

リモートでの工夫を紹介する前に、これまで行ってきた開発合宿について簡単に説明します。

開発合宿では、取り組んでみたいテーマごとに2〜3人程度のチームを作って合宿に臨みます。テーマは事前に「数日間まとまった時間があったらやってみたいこと」というお題で集め、テーマごとにチームが作られれば合宿参加となります。

合宿は3日間行われます。当日は貸し会議室が用意され、そこに参加メンバー全員が集まって、それぞれのテーマに取り組みます。時間は普段の業務と同じで始業から終業までですが、1日の終わりに進捗報告を、最終日には成果発表会を行います。

また合宿開催後には、毎週行っている社内の技術勉強会で、合宿に参加していないエンジニアに向けた成果発表会を行っています。

リモート開発合宿で変わってしまうこと

合宿の形をリモートにすることで大きく変わってしまうのは、当たり前ですが、みんなで一カ所に集まって開発できないことです。

チームメンバーがすぐ隣にいる環境なら、コミュニケーションや意思決定が同期的にできたり、すぐにペアプロに入れたりなど、素早い開発が実現できました。これは、短い期間で成果を出す合宿形式の開発には欠かせない条件です。

それだけでなく、他チームで作っているものが動いたときの盛り上がりが共有されたり、普段の業務環境から離れることでの非日常感が得られるといったメリットもあります。非日常感は大切で、参加者が合宿テーマに集中することにつながるだけでなく、合宿に参加していないメンバーからの割り込みを減らすといった効果も見込めます。

リモートでの合宿は、会場を貸し会議室から自室に移すことで形としては実施できますが、これらの変化を意識しなければ、以前のような体験は失われてしまいます。

一カ所に集まれない問題を解消する工夫

リモート化で変わってしまうことを補うため、リモート合宿開催時では次の点を意識しました。

  • 常時ビデオ通話をつないで合宿感を出す
  • 普段の業務に戻ってしまわないよう気をつける

常時ビデオ通話をつないで合宿感を出す

一カ所に集まっていたときに実現できていた同期的コミュニケーションによる素早い開発を再現するため、合宿中はGoogle MeetやDiscordなどのビデオ通話をつなぎっぱなしにすることを、各チームに推奨しました。

これにより、Slackのようなテキストを介したやり取りよりも素早いコミュニケーションが実現できるだけでなく、時折の独り言が会話やペアプロのきっかけになるなど、同じ空間で開発しているときに近い状況を再現できました。

またそれだけでなく、合宿に参加していないエンジニアもDiscordのチャンネルに様子をのぞきに来るなど、リモートでなければ実現しなかった出来事もありました。

普段の業務に戻ってしまわないよう気をつける

リモート開発合宿では自室から合宿に参加するので、普段のリモート業務と作業スペースが変わらないことになります。このため合宿の非日常感を演出しづらいこともあって、リモート合宿中は普段の業務に戻りやすくなってしまう問題があります。

実際、1回目のリモート合宿を実施した後の振り返りでも「リモートだと普段のMTGに出やすくて、その時間は抜けてしまう」といった声が複数あり、課題に感じています。

2回目を開催した際には、参加者に「普段のMTGに戻らなくてよい」と周知したり、参加しないメンバー側にもお願いすることで意識づけをしましたが、まだ実効性のある工夫までは考えられていません。

合宿の期間をうまく活用するための工夫

リモート開催と直接の関係はありませんが、3日間の合宿期間をうまく活用する工夫もいくつか見えてきました。

事前準備を行って当日は手を動かすことに集中する

合宿では使える時間が3日間しかないので、できるだけ手を動かすことに時間を使えると効率的です。

そこで、合宿当日までに準備できることや考えられることは、事前に用意しておくことを推奨しました。例えば、「1日目にはこれを、2日目にはあれを」といった3日間の段取りを考えたり、新しいSaaSを利用する場合にはアカウントを作成したり課金を調整しておくなどがあります。

こういった準備をやっておくことで、当日に手を動かせる時間が多くなり、スムーズに開発できるようになりました。これまでの参加チームでは、日ごとの段取りを書いたページをScrapboxに用意して、それに乗っ取って手を動かしていくチームが多かったです。

もちろん事前の段取り通りにいかないことも多いですが、事前にメンバー間で3日間で作るものの規模感や想定をすり合わせできるので、時間が足らなくて消化不良になってしまったり、逆に時間が余ってしまうといったことが起きにくくなります。

当日には式次第を用意してメリハリをつける

合宿当日には、簡単な式次第があり、

  • 初日には開会式を行って、3日間の流れの説明する
  • 毎日の終わりには、各チーム一言づつ進捗共有する
  • 最終日は各チーム3日間の成果発表を行い、お疲れさまの閉会式を行う

といった流れがあります。成果報告を毎日行うのは、もともと人に説明できるような成果を出しやすくする後押しの側面がありました。

ところが、リモート開催時の参加者からは「進捗共有のリマインドのおかげでメリハリが出た」といった声もありました。意識はしていなかったものの、リモート下で合宿の非日常感を演出することや、発表の時間に間に合うようにまとめるといった1日のリズムを作ることに役立ったのではないかと思います。

進捗共有会の開催Slackリマインダーで知らせる画像
進捗共有会の開催を告げるリマインダ

進捗共有などの会もGoogle Meet上で行ったので、SlackでURLを共有すると合宿に参加していないエンジニアも様子を見にこれるというメリットもありました。

参加者による振り返りと感想

合宿が終わった後には毎回、合宿運営側に参加者を交えて振り返りを行っています。リモートで開催したときの振り返りから、参加者の声をいくつか紹介します。

  • Discord、VSCode Live Shareなどのツールが揃ってきたのでリモートでもいける
  • Discordで気軽に会話できるのが良かった

このようにリモートワーク下でもコミュニケーションしやすいようにツールの整備が進んでいたことで、合宿もうまく開催できるようなったと思われます。

一方で、先ほど書いたような課題の声も上がっていました。

  • 一カ所に集まって合宿した時よりも仕事/MTGに戻ってしまいやすい
  • 他の参加チームの様子がわからず、一カ所で合宿していた感覚がない

こうした面については、リモート下でのコミュニケーションを越えた合宿感の演出や工夫が必要になってくるため、まだ模索中といったところです。

まとめ

リモートで開発合宿をうまく実施する工夫や課題について紹介しました。まだまだ模索中の部分はありますが、ツールの整備やいくつかの工夫でリモート下での開発合宿もうまく実施できるようになってきました。

これにより一カ所に集まれない状況でも、エンジニア同士のコラボレーションの場を提供できる道が見えてきたのではと思います。