【チェックリスト付き】開発合宿 運営マニュアル 〜計画から実施までの流れ〜

f:id:ikenyal:20190828094634j:plain

こんにちは、ZOZOテクノロジーズ CTO室の池田(@ikenyal)です。今回は7月に実施した開発合宿に関して、計画から実施まで運営側がどのようなことを行ったのかをお伝えします。これから開発合宿を計画している方や今ある開発合宿をより良いものにしたい方々に一つでも有益な情報を提供できたら幸いです。

合宿実施概要
日程7/11(木)-12(金)
場所おんやど恵(湯河原)
参加者34名(エンジニア32名、広報1名、人事1名)

実際に開発合宿の計画から7月の実施までどのようなことを決めていったのか、ここから時系列に沿って説明していきます。

前期

あらかじめ確保しておくと実施がスムーズになるのが予算です。

予算確保

開発合宿を行う場合、予算が当然必要になります。そのため、まずは予算の確保を行っておきましょう。前期のうちから、来期予定している開発合宿の予算を確保します。これがないと、なかなか「今期開発合宿やりたい」となった時に予算外で取得は難しいことが多いでしょう。必要な場合は経営会議などで予算と実施の承認も事前に得ておきます。

4月上旬

新年度になり、「今期は開発合宿やりたいね」と実施を計画し始めた時期です。

実行委員メンバーの選出

実際に開発合宿をやろうとなったら、推進役となる実行委員を選出しましょう。今回のZOZOテクノロジーズの場合は、CTO室が主軸となり計画をしました。しかし、CTO室は今年4月に新設されたばかりの部署でありCTO室だけではリソースが足りなかったため、開発部より有志で1名実行委員として動いてもらいました。CTO室1名、有志1名の2名で計画から実施まで行いました。

4月中旬

ここから本格的に実施に向けて内容を検討していきます。

テーマと実施概要の検討

今回はZOZOテクノロジーズとして初の開発合宿であり、業務として1泊2日の時間を利用しました。そのため、合宿の成果が業務に貢献できるもの、業務の効率をあげるようなものを作るというテーマを設定しました。

このテーマにした背景には、合宿参加者だけでなく、参加しないエンジニアや他職種の人も開発合宿の恩恵を受けられるようにしたかった点があります。「エンジニアが開発合宿で2日間オフィス不在になるけど、帰ってきたらすごい役に立つものを作ってきてくれるから是非行ってきてくれ」となるような全社で開発合宿に対するポジティブな空気づくりを目指しました。その結果、次回以降の開催時に周囲の理解も得やすくなり、開催がスムーズになることを期待しています。

そして、テーマとは別に開発合宿の意義と目標を明文化しました。合宿後にこれらの項目に関しての達成度を確認をします。

【1】成果物で業務の効率アップにつなげる
・普段の業務の隙間時間ではなく、集中してまとまった時間を確保することで短時間で効率的に開発できる
・成果物が合宿後の業務に役立つ

【2】技術に集中する時間を設けスキルアップ
・普段いじらない・軽くしか触れていない技術を深く利用し、技術スキルUP
・ものづくりをする思考トレーニング
・周りの人がすごいことをやるのを見て、自分も頑張らないと、と思う機会にし、今後の成長曲線を上振れさせ、今後のスキルアップへつなげる

【3】一つの場所で、「開発」をすることによりお互いを深く知る
・新旧・別拠点メンバーの交流機会を設け、今後の業務をさらに円滑にしやすくする

【4】対外的PR
・テックブログで#ZOZOは楽しく働くな発信、及び技術的に面白い成果があれば、それ自体もネタになる

宿の仮予約

次に、宿の候補を絞り込み、宿が空いている日程を確認します。これによって日程の候補は自然と絞られていくでしょう。 同時に、必要な費用も見えてきます。

宿の候補は他社のテックブログなどを参考にしつつ検討しました。合併前のVASILYの時に一度開発合宿を実施したことがあり、その際に利用したおんやど恵も候補でした。前回の知見を活かせることや、前回の課題としてあげられていた「気軽に行ける距離にコンビニがない」という点が今では宿のすぐ隣にコンビニができて解消したこともあり、「おんやど恵」に決めました。

足湯に浸かりながら開発できるのもおんやど恵のポイントです。

f:id:ikenyal:20190830125653p:plain

この段階では参加人数は見えていないので、最大人数を想定して予約しておきました。その際には人数変動があることを伝え、いつまでに最終的な人数を連絡すればよいか確認しておきます。

5月上旬

宿も仮押さえができて開発合宿の開催も具体的にイメージができるようになってきました。そこで、経営会議にて開催の承認を得ます。

経営会議での承認

予算は確保していましたが、宿や場所も見えてきたのでそこから算出した費用と、エンジニアが1泊2日でオフィス不在になることを経営会議で伝え、今期実施の承認を得ました。

その際の資料には、開発合宿の目的、日程、場所、参加想定人数(今回は40人想定とした)、概算予算と内訳、を記載しました。

5月中旬

より具体的に準備を進めていくため、参加者の規模を把握します。

人数調査(第1回 アンケート)

これから準備を進めていく上で、実際にどれくらいの参加者がいるのか規模感を把握しておく必要があります。これによって成果発表の時間などタイムスケジュールに影響したり、費用が変動したり、はたまた参加者がいなければ開催ができなくなることも考えられます。なお、今回の開発合宿は強制参加ではなく、参加の意思があって業務の都合が付く開発部のエンジニアの任意参加としました。

エンジニアに開発合宿を実施することを展開して、現時点の参加意思を確認します。まだこの段階では業務の都合がどうなるのかも不明瞭で参加者の確定はできませんが、ざっくりとした規模感を確認するために簡単なアンケートをSlack上で実施しました。合宿の概要は経営会議向けに用意した資料をベースに、費用などは除いた簡易版にして展開しました。

f:id:ikenyal:20190828094703p:plain

特に宿の予約人数が変更になる場合、人数を減らす対応はできますが、急に人数が増えてしまうと空き部屋の数など物理的に対応しきれなくなる可能性もあります。そのため、このタイミングの調査では少しでも参加する可能性がある人は全員カウントしておきたいという気持ちがありました。そのような数字を取得できるよう、この回答がそのまま参加表明ではないということを伝えた上で、合宿に興味があるエンジニアの人数を調査しました。また、この段階では参加者不足で開催不可の可能性も無いとは言い切れないので「開発合宿開催します」とは言い切らず「開発合宿を開催した場合」という表現をするように気をつけました。

なお、開催日は全社的な予定やリリースが無さそうな日程を運営側で定め、さらに宿に40名規模でも空きがある日程を確認し、実施予定の日付を絞り込んで決めました。

声がけ

前述のアンケートを開始し、翌日には30人の回答がありました。しかし、回答者の内訳を確認すると、拠点の偏りがありました。開発部は大きく青山オフィスと幕張オフィスの2拠点に分散しています。そのため、今回の合宿では普段接しない別拠点エンジニアとの交流も目的の一つです。ところが、この時点では青山オフィスと幕張オフィスの参加希望者の比率が 2:1 でした。そのため、幕張オフィスのリーダーなどに声がけをし、幕張オフィスで参加したい人が他にいないのか確認をしてもらいました。

その際のやり取りの中から得られた知見としては、特に開発合宿にこれまで一度も参加したことがないメンバーだと「何かすごいものをつくらないとけないのでは」というようにハードルを高くしてしまっている可能性が高いということです。そのため、何を作るのか・どんな難易度のものを作るのかは気にせず、それぞれの状況・レベルに合ったものを作れたらそれで良いということを説明し、心理的ハードルを一つ取り除きました。それにより、幕張オフィスの参加者も増加しました。

5月下旬

参加者の本応募を実施し、実施に向けて準備を進めていきます。

本応募(第2回 アンケート)

事前アンケートにより最少催行人数以上の参加希望者がいることが確認でき、拠点間の偏りも解消できたので予定通り開発合宿の実施が確定しました。

業務上の都合が今後どうなるか分かりませんが、現時点での参加希望者の本応募を受け付けました。やはり、事前調査の回答と差は出てくるので、このタイミングでも再度声がけをします。応募を開始し、翌日には14名、1週間後には31名、6月上旬には最大で38名の状態にりました。38名の内訳は青山オフィスのエンジニア19名・幕張オフィスのエンジニア17名・広報1名・人事1名です。

このタイミングで、広報と人事が1名ずつ参加することも決まりました。広報と人事は開発はしないので、リモートワークをしつつ開発合宿というものを肌で感じてもらいました。広報はカンパニーブログの執筆や写真撮影、Twitterの公式アカウントでの発信を行いました。人事は今後社内イベントで合宿をする際の勉強のために参加しました。そのため、人事へは準備段階から経費精算の出し方まで情報を逐次共有しました。

その後、業務上の都合などで参加できなくなる人も発生し、最終的には34名(青山オフィス16名・幕張オフィス16名・広報1名・人事1名)となりました。

6月上旬

合宿まで残り約1ヶ月。各自が合宿で何を作るのか事前に考えておきます。

開発内容の事前共有

合宿に行ってから何を作るのか悩んでいては時間がもったいないです。合宿の2日間は開発時間に使えるよう、事前に作るものとそれが今回のテーマである業務効率化にどうつながるかを考え、書き出して事前共有してもらいました。「当日までに考えておいてね」とリマインドするだけでなく事前に全員の決まったものを共有することにより、なかなか作るもののイメージがわかない人にとっては他の人のテーマがヒントになったり、他の人たちが決まっていく様子を見て「自分も早く考えなきゃ」と考えるきっかけになったりを狙いとしていました。

合宿のしおり作成

いわゆる合宿のしおりのような、情報を集約したページを用意します。タイムスケジュールや目的など、確定しいる情報の共有が目的です。決まっていない部分は随時アップデートしていくページとなるので、「合宿のことを知りたければここを見ればOK」という場にしました。また、参加者への連絡用にSlackに専用チャンネルも用意しました。

6月下旬

交通手段を確定するために、追加の調査を行います。

懇親会・遅刻・早退調査(第3回 アンケート)

合宿2日目には成果発表会を実施し、その後懇親会を開催します。懇親会は強制ではなく、任意参加としました。その懇親会の参加有無や遅刻・早退の予定があるのかを調査します。この人数により、電車の指定席予約人数を決めます。そのため、このアンケートの目的も伝えた上で、何か変更の可能性がある場合は事前に相談してもらうようにしました。今回は業務上、2名が遅刻しての参加になりました。

なお、懇親会はこの調査段階では数名参加せずに先に帰る予定でしたが、合宿当日は発表もオンスケで進み、終了時間も遅くならなかったので全員参加して帰りました。

7月上旬

合宿まで残り1週間程度。準備も最終段階です。順次予約も確定していくので、実際に掛かる費用の明細も固まってきます。

予約の確定

人数は確定したので、宿や昼食の予約を確定させます。宿は合宿プランの場合、宿泊人数を伝えたらそれに応じた部屋数が指定されます。昼食は、宿に依頼するのではなく近隣の弁当を配達してくれる業者に注文し、駅弁を16種類用意しました。同じ弁当を配布するだけでなく、弁当争奪じゃんけん大会で楽しめる要素を用意しました。

機材の用意

2日目の成果発表会では、プロジェクターを2台レンタルしています。1台は運営側でスライドを表示、もう1台のプロジェクターでデモを行うように計画しました。デモを行うプロジェクターは発表者の入れ替えをスムーズにするため、HDMI切替器とHDMIケーブルを用意して持参しました。しかし、当日はHDMI切替器とプロジェクターの相性が良くなかったためか、HDMI切替器経由でのプロジェクター出力はできず、1本のHDMIケーブルで実施しました。

f:id:ikenyal:20190828094657j:plainf:id:ikenyal:20190828094700j:plain

賞品の用意

成果発表会では、賞品付きの賞を6個用意しました。具体的にどんな賞を設けるのかは、当日の発表の内容を見ないとなかなか適切なものを定められません。そのため、賞の数だけは6個と事前に定めておき、賞品を用意しておきました。賞品はArduino・Raspberry Pi・IoTデバイス・スクリーン付きスマートスピーカーなどを用意しました。

特急踊り子のきっぷ購入

往路は最初から参加できる32名で移動です。そのため、確実に座れるよう、特急踊り子で指定席を確保しておくことにしました。

計画時、特急踊り子の情報をオンラインで調べるのには苦労しました。曜日だけでなく時期により列車の有無が変化したり、そして今回の目的地である湯河原に止まらない踊り子もあるため、そもそも選択肢としてどの列車があるのかも把握が難しかったです。結論として、みどりの窓口に行き、そこに置いてある紙の時刻表を見るのが一番分かりやすいという結論に至りました。何でもオンラインが最適なのではなく、アナログな表現手法や仕組みが適している場合もまだまだあるなと感じる瞬間でした。

無事に同じ車両にまとまって座席を用意することができました。復路は懇親会終了後のちょうど良い時間帯に踊り子が無いことと、発表会や懇親会で時間が変動する可能性もあるのできっぷは事前に用意しませんでした。

座席・部屋の割り振り

往路の踊り子の座席、開発時の席、昼ごはんの席、宿泊する部屋の割り振りも事前に決めておきます。今回の合宿の目的に別拠点のエンジニアとの交流も含めているため、まず座席を拠点ごとにバランス良く混ざるように2種類に分割しました。左右前後が別拠点の人になるよう、交互に配置しました。その後、各拠点のメンバーをランダムにシャッフルして割り振っていきます。発表の順番も同様にシャッフルをして決めました。

開発部屋は2部屋用意しました。

f:id:ikenyal:20190828094436p:plainf:id:ikenyal:20190828094440p:plain

スライドの雛形用意

合宿で使うスライドの雛形を用意します。今回は、発表時のスライドと表彰時のスライドの2種類を用意しました。

1つ目は発表用のスライドです。発表用のスライドは、参加者がスライド作成に時間をかけ過ぎないように心がけました。そのため、各自発表スライドは1枚までとしました。Googleスライドに発表順に氏名だけ埋めたものを用意しました。発表時間も一人2分と短いので、スライドも発表も要点を簡潔にまとめてもらい、発表はデモをメインで行う形式にしました。32名の発表で、全体で約2時間の発表会です。

2つ目は表彰時に使うスライドです。表彰時のスライドもこのタイミングで仕込みをしておきました。6個分の賞のスライドを用意し、そこには賞品の内容や写真を埋めておきました。当日は賞の名前・受賞者・発表タイトルを入力するだけの状態にしておきます。スライドはGoogleスライドを利用しているので、この段階ではスライド作成者と当日の審査を行うVPoEのみに権限を付けておき、開発合宿後に社員全体へ閲覧権限を付与しました。

タクシー乗車準備

湯河原駅と宿の移動はタクシーです。タクシー約8台に分乗することになるので、誰がどのタクシーに乗ってもスムーズに宿に行けるよう、台数分の封筒を用意しました。その封筒にはお金と宿の住所を印刷した紙を入れておき、タクシーから降りたら領収書とお釣りを入れた状態の封筒を回収しました。回収後は領収書と残金の確認をし、封筒に納入されている現金の金額を記載して、復路の際に再度利用します。

封筒には通し番号を付けてあり、タクシーに乗る際に誰に何番の封筒を渡したのかはチェックしておきました。このような誰に何をしたのかのメモをしやすいよう、参加者の名簿は何枚か印刷して持参していました。

なお、前述の遅れて参加するメンバーには前日までに封筒をオフィスで渡しておきました。

各部署との連携

今回の合宿費用は運営側で一括で立て替えて支払うものが多く、念の為経理に内容と申請フローの確認をしておきました。また、参加者の勤怠登録の確認など、参加者自身が問い合わせをしなくて済むよう、疑問点として上がりそうな部分は事前に関係部署に確認し、前述のしおりのページにまとめておきました。

事前に各部署と連携し、参加者が困るであろう点は情報をまとめてしおりにまとめておきました。

合わせて、宿や弁当の業者は当日の支払いにしてあったので、現金なのかカード払いなのかの確認もしておきます。これにより持参すべき現金の量が大きく変わってきます。

次に、会社からの貸与PCを持ち出すことになるので、社内のPC全台に導入しているデバイス管理ソフトが入っていることの再確認と、紛失には気をつけるよう周知を行いました。

また、開発合宿の様子をTwitterへ投稿する際のハッシュタグ #zozotech開発合宿の運用も広報と相談しました。ポイントとしては、夜の懇親会時にはアルコールも用意することになると思いますが、日中の業務として開発中の投稿では、良からぬコメントをされないためにも、未開封のアルコールの缶や空き缶などが机の上に放置して写り込まないよう気をつけるのが良いかと思います。

直前のメンバー変更

合宿1週間前、業務都合で行けなくなるメンバーが発生しました。キャンセルで予約を再調整するのも手ですが、せっかくなので代わりに参加できるメンバーを募集し、予定通りの人数での決行になりました。参加者は最後までどうなるか分からないので、予約をする際にはそのことを忘れずにリカバリ策を検討しておくことが必須です。

写真への写り込みの確認

開発合宿の様子はブログやTwitterなどに発信します。その際、写真に写り込みたくないメンバーもいます。写り込みたくない場合は、それを考慮する必要があるため事前に調査し、当日の撮影時には配慮をします。

7月中旬

合宿まであと数日。最後に細かいアサインを決めて事前準備は完了です。

最終的な動きとアサインの決定

細かい運営側のタスク確認とアサインを行います。以下にそれぞれ検討したタスクをまとめています。

前日までUSB Type-C HDMIアダプタとバインダーを用意するタスク。
集合時出席確認と該当の座席指定のきっぷを渡すタスク。事前に電車の座席番号を記載した出席者リストを印刷しておく。
湯河原到着時タクシー代と住所が入った封筒を渡し、誰にどの封筒を渡したのか出席者リストに記載するタスク。
宿到着時宿にチェックインするタスク。
チェックイン後タクシー代表者から領収書とお釣りを回収し、確認をするタスク。
昼食前弁当の受け取りと支払いをするタスク。
昼食時弁当を配布するタスク。
発表時発表資料のスライドの表示・操作をするタスクとタイマー係。前半と後半でそれぞれアサイン(前半に発表する人は後半にアサイン、後半に発表する人は前半にアサイン)
発表後表彰までの休憩表彰の内容を考えてスライドを埋めるタスク。
表彰時表彰をするタスクと、賞品を渡すタスク。
宿出発前宿をチェックアウトするタスク。
宿出発時タクシー代と住所が入った封筒を渡し、誰にどの封筒を渡したのか出席者リストに記載するタスク。
駅到着後タクシー代表者から領収書とお釣りを回収し、確認をするタスクときっぷをまとめて購入するタスク。

当日

いよいよ合宿当日です。

東京駅に全員定刻集合

初日の朝が最大の難関とも言えます。全員指定の電車に乗るという重要なイベントが待っています。予想はしていましたが、運営側としてもやはりこのイベントが一番の難所でした。いくら準備をしてもコントロールできない部分です。

当日は9:00発の特急踊り子に乗車のため、8:45東京駅集合にしました。集合場所はしおりに地図のリンクも添えて共有し、当日も一番乗りで集合場所へ行って写真をSlackで共有しました。準備は整いました。以下、手に汗握る15分間の流れです。

8:45指定の集合時間。出欠を確認するが3名ほど足りず。
8:48実行委員の代表者だけ集合場所に残り、他の参加者はホームへ移動。
Slackでやり取りしながら全員集合場所に現れるのを待つ。
8:55最後の一人が集合場所ではなくホームに出現。Slackのその連絡を見て、実行委員も集合場所からホームへ移動開始。
8:56電車の扉が開いて順次乗車
8:58全員乗車
9:00出発

なんとか全員間に合いました。次回以降はきっぷは事前配布にした方が良さそうです。

昼食の弁当争奪戦

合宿中に2度ある昼食。宿に依頼すれば仕出し弁当を手配してくれます。そうすれば注文や支払いもまとめてもらえるので楽なのですが、今回はあえてそれは利用せず、直接、駅弁を注文しました。特に高いものやおにぎりのような簡易的なものを除いた全種類、16種類を揃えました。この中から好きなものを選んでもらえば昼食も一つの楽しみになります。

じゃんけん大会を実施し、VPoEとじゃんけんで買った人から順に選んでいく形式にしました。

f:id:ikenyal:20190828094445j:plain

2日間のスケジュール

2日間の開発合宿、全体のスケジュールは以下の通りです。集合が遅かったり、昼食を弁当ではなく外で食べようとすると、初日の開発時間が短くなってしまうため、なるべく初日の午後はすべて開発時間に当てられるようにしました。

1日目
8:45集合
9:00東京駅発
10:14湯河原駅着
10:30宿到着・チェックイン
11:00開発開始
12:00昼食
開発
18:00夕食
開発
2日目
8:00朝食
開発
9:30チェックアウト
開発
12:00昼食
13:00発表
15:15表彰
懇親会
18:00宿出発
帰路

合宿後

事務処理

合宿終了後、忘れてはいけないのが経費精算。すべての領収書をなくさずに保管しておきましょう。参加者には集合場所までの交通費精算と勤怠登録の案内を出しておきます。

事後アンケート(第4回 アンケート)

次に、記憶が鮮明なうちに参加者にアンケートを回答してもらいます。このアンケートでは、当初目標としていた項目に対してどれくらい達成できているか、次回の合宿に向け、今回の合宿で良かった点・改善点などを回答してもらいました。回答率は100%です。

集計結果の一部を公開します。

Q. 開発合宿全体の満足度を教えてください

f:id:ikenyal:20190828094651p:plain

Q. 次回があれば参加したいですか?

f:id:ikenyal:20190828094653p:plain

どちらの質問も、参加者の6〜7割が最高点を付けています。初回の合宿としては成功と言えるでしょう。2つ目の設問で3と回答している理由としては、「ネタがあれば参加したい」「別の人にも参加して欲しいから」というものがありました。

成果物

合宿で開発したソースコードは、記録として残すためにGitHub上にリポジトリを作り、そこに集約しました。また、この合宿で開発したもので業務で利用しているものや、Rubyのgemとして公開されたものもあります。

報告書の作成

開発合宿の締めくくりとして、報告書を作成します。上記のアンケート結果や成果も含め、一つのページにまとめます。このページを参考に次回開催時の説明材料にしたり、次回の開発合宿計画時にPDCAしていくための備忘録にもなります。

リスト

今回紹介したタスクのリストをGoogle スプレッドシートにまとめたので共有します。是非ご活用ください。

docs.google.com

まとめ

ZOZOテクノロジーズとして初めての開発合宿開催に伴い、その準備工程をお伝えしました。開発合宿は開催頻度も多くはできないのでなかなかPDCAもしにくいイベントです。そのため、各社の開催レポートなどの情報発信が大切かと思います。今回お伝えした内容のうち、一つでもみなさまの開発合宿計画の改善につながれば幸いです。

最後に

ZOZOテクノロジーズでは、開発合宿の企画・運営を行った「全社における技術的な戦略策定および、エンジニア組織強化のための施策の推進」をミッションに掲げたCTO室のメンバーも募集中です。また、開発合宿に参加したり、一緒にサービスを作り上げてくれる方を募集中です。 ご興味のある方は、以下のリンクからぜひご応募ください!

tech.zozo.com

カテゴリー