Gunosyデータ分析ブログ

Gunosyで働くデータエンジニアが知見を共有するブログです。

Airbnbを利用した開発合宿のススメ

はじめまして、データ分析部の松嶋です。
現在は、ユーザの行動ログの分析や記事選定ロジックの可視化に取り組んでいます。

先日、Gunosyデータ分析部で開発合宿を開催しました!

Gunosyデータ分析部の開発合宿は4回目となり、このエントリではこれまでに蓄積してきた合宿運営ノウハウをご紹介します。

そもそも開発合宿とは

開発合宿とはその名の通り、普段はオフィスでやっている開発を、寝泊まりできる環境に移動して合宿形式で行ってしまおうという取り組みです。

温泉や自然が豊かだったりと、適度に気分転換を行える環境に身を置くことで、リラックスしながら集中して開発を行うことができます。 f:id:TMat:20160829181744j:plain

また、普段の業務の中ではなかなかできないような機能の実装を一気に行うといったことも可能になります。

しかし、いざ開発合宿に出かけたはいいものの、予定していた業務ができなければ本末転倒。このような自体はどうしても避けたいものです。

Gunosyデータ分析部の開発合宿

いままでの開発合宿

Gunosyデータ分析部では開発合宿を4半期に1回、定期的に実施しています。

前回の開発合宿では、個人の属性に合わせた記事配信を行うために、性別や年齢層などユーザのデモグラフィック情報の推定ロジックの開発をコンペ形式で行いました。

今回は

  • CNNとSVMを利用した年齢推定の比較
  • 休眠ユーザの行動分析
  • 地域性のある記事の分析・予測

など、各自でテーマを設定して開発を行いました。

今回の開発合宿の様子

ここで今回のデータ分析部の開発合宿の様子をご紹介します。

時間 内容
1日目 9:30 オフィス集合
9:30-13:00 作業(合宿の準備)
13:00-1400 昼食
14:00-16:00 移動
16:00 チェックイン
16:00-19:00 作業&お風呂
19:00-20:00 夕食(メンバーの手作りイタリアン)
20:00- 再び作業&お風呂
各自 就寝
2日目 8:00 作業開始
10:00-11:00 成果発表会
11:00 チェックアウト
11:00-13:00 昼食
13:00-16:00 日帰り温泉&作業
16:00 帰宅

今回の宿泊先は16時チェックインだったため、1日目の午前中はいつも通り、六本木のオフィスに出勤して各自作業を開始しました。 (オフィスのファームと呼ばれるソファーのみの部屋で作業している様子です) f:id:TMat:20160829183344j:plain 各自オフィスで作業にメドをつけた後は、ついに今回の合宿地、箱根へ移動です。 f:id:TMat:20160829184535j:plain

f:id:TMat:20160901092915j:plain

移動中、メンバーのもとに連絡が。
急遽、社長も開発合宿に参加し、分析を行うことになりました。 f:id:TMat:20160829184110j:plain 到着後は温泉など、気分転換を挟みながら、開発を続けます。

今回はAirbnbを使って、こちらのお部屋を利用しました。 www.airbnb.jp

温泉が備え付けで部屋数も多く、各自がリラックスして、とても快適に開発を進めることができました。 f:id:TMat:20160901094244j:plain

f:id:TMat:20160901094233j:plain

イタリアンレストランで厨房に立った経験のあるメンバーが夕食を作ったり、 f:id:TMat:20160829191230j:plain

(とても本格的...) f:id:TMat:20160831190530j:plain

先日誕生日を迎えた部長を祝ったりと、チームカラーの溢れる合宿となりました。 f:id:TMat:20160829192105j:plain

開発は深夜まで続き... f:id:TMat:20160901094526j:plain

f:id:TMat:20160901094637j:plain

最後に成果発表会を行い、各メンバーの進捗の共有と意見交換を行いました。
なお、業務ではMacBookを使用しており、プロジェクタに直接HDMI接続できなかったため、各々のPCでプレゼンを行う運びとなりました。 f:id:TMat:20160829192708j:plain

開発合宿を成功させる7つのTips

【その1】2通りの目標設定

Gunosyデータ分析部で行う開発合宿では、大きく分けて2種類の目標設定の仕方があります。

チーム一丸となって事業課題を解決するパターン

企業、部署レベルの1つの大きな事業課題にメンバー全員が取り組む合宿です。

コンペ形式で実施することにより、メンバー全員のモチベーションも高まり、大きな成果につながります。

注意点として、事前にレギュレーションを定める必要があります。
前回のデータ分析合宿ではデモグラ推定ロジック開発を行いました。 この時は、使用するデータ、評価方法をレギュレーションとして定めました。

コンペ形式の最大のメリットは競い合うことです。
ロジックを組み、評価を行い、推定の正解率を競います。時々刻々と変化する1位の正解率に悲喜こもごもするのはコンペ形式開発合宿の醍醐味でした。

反省点としては情報共有のタイミングが遅れることが挙げられます。
目的はあくまで事業課題を解決することであって、競い合うことではありません。
前回の合宿では競い合うのに夢中になり、メンバーが開発した良いロジックの情報共有のタイミングが遅れてしまう事態が発生しました。

コンペを行う時間と、その後メンバーが一丸となって開発する時間は事前に定めておくことが大切です。

メンバーが各自の課題を解決するパターン

自分たちの興味や普段の業務内容、スキルに合わせて、各自で目標を定めて開発を進める合宿です。

今回の合宿はこの形式で行いました。
気になっているが普段は手の届かない業務の改善、新技術の調査活用など大きくはないが、個人レベルでの業務改善、スキルアップに適切な合宿パターンです。

注意点としてはテーマ・課題設定にあります。
個人で気になっているテーマはたくさんあると思います。 あれもこれもやりたいと思いたくさん着手するが、結局形になったものは一つもなかったなどの結末に至ることもあります。
時間も限られているのでテーマは1つから2つが適切です。合宿1週間前くらいからテーマ選定することをおすすめします。

また、個人開発だからといって気を抜いて、テーマを選定しないで開発合宿に望むのは最大の悪手です。

合宿テーマを決めよう

事業課題を解決するのか、個人のスキルアップを図るのか合宿テーマを決めましょう。
チームメンバーで話し合って現状に最適なテーマを見つけましょう。

【その2】目的によって場所を使い分ける

コンペ形式の開発合宿では、宿泊する部屋のほかに、情報共有のしやすい貸会議室を借りて、開発を行うのが良いでしょう。

備え付けのホワイトボードを使えば、みんなの結果をまとめたり、今後の方針を話し合ったりするためのツールとして利用することができます。
また、各メンバーが同じ場所で開発を行っているので、全体としてのオン・オフを切り替えやすいというメリットもあります。

その点では、各自がそれぞれ目標を設定して行う開発合宿では、必ずしも会議室を借りる必要はないかもしれません。
むしろ、個々が自分の好きな場所で、リラックスして作業ができる環境が好ましいように思われます。

広いところでみんなと作業をしたいメンバー、部屋にこもって集中して作業をしたいメンバーの双方がいる場合には、Airbnbでたくさん部屋のある物件を借りるのも一つの手です。

【その3】忘れがちな必需品

着替えや歯ブラシなど、旅行に出かけるために必要なものはもちろん開発合宿でも必要になってきますが、開発合宿に特有な必需品もあるので、忘れずに準備するようにしましょう。

まず、何かと忘れがちなのがケーブルの類です。
旅館としても、部屋で複数人が同時にコンピュータを開くことは(おそらく)想定していないので、コンセントが圧倒的に不足します。 電池がなくなるとそもそも作業ができません。電源タップを忘れずに持って行きましょう。

また、もしプロジェクターが設置されている貸会議室などを利用する場合でも、MacBookを接続するための変換アダプタまで用意されているとは限りません。 MacBookを利用している際はHDMI変換アダプタを準備しておくと良いでしょう。

さらに、データの事前の準備が効率に関わる大きなポイントになります。
開発合宿先でオフィス以上に通信環境が良いことはほとんど望めません。次のTipsで詳しく述べますが、必要になるデータは必ずローカルに保存してから合宿に出かけるようにしてください。

合宿を使って、新たなサービスやプログラムを設計する際には、アウトラインをざっとメモすることができるプロジェクトペーパーがあると便利でしょう。
バラついたり、荷物に紛れてしまったりしないノートもオススメです。

【その4】必要なデータは保存してゆく

オフィスにいる時は目的のデータベースに当然のように接続して開発を進めていますが、合宿のようにいざ外へ出て作業をしようとすると、想定外のところで落とし穴に見舞われることがあります。 ありがちな落とし穴としては

  • 部屋に用意されているwifiに接続してもVPNが繋がらない
  • テザリングしようとして、携帯電話の電波が圏外
  • やっと繋がったとしても通信が異常に遅い
  • 挙げ句の果てに、月の通信容量をオーバーして速度低下

などが挙げられます。最悪のパターンですね。

さっさと成果を上げてゆったり温泉に浸かりたいのに、接続するために奮闘しているだけで、帰宅の時間が刻一刻と迫っています。

また、せっかくプログラムを完成させても、その後初めて必要なデータを取ってくるようでは、クエリが帰ってくるのを待っている時間がもったいないと思いませんか?
普段の業務では、クエリを待っている間に他の業務をすることができますが、合宿のように一つの目的に対してガツガツ開発を行っている状態では、すぐに結果を見て、修正を行えることが理想的です。

必要なデータは事前にすぐ使える形に成形してから、合宿に向かうようにしましょう。

さらに、コンペ形式で行う合宿の場合は、各自実装したアルゴリズムの評価のためにテストデータも準備しておくことも必要でしょう。

【その5】宿泊先候補は旅館だけじゃない

お盆休み周辺や行楽シーズンに開発合宿をしようとすると問題になるのが、予約の難しさや費用の高さです。
目的地によっては、そもそも繁忙期にまとまった人数の予約が取れないことがあります。

今回の合宿は夏休み中で、旅館の予約を取ることが難しかったため、Airbnbを利用して宿泊場所を確保しました。 www.airbnb.jp

部屋(家)全体を貸し切れる「まるまる貸切」の条件を指定できたり、ベットルーム数から物件の絞り込みができたりするので、比較的大人数になる開発合宿にはもってこいのサービスです。

なお、旅館やホテルに比べて、紹介ページでの情報が少ない場合があるので、事前にオーナーさんとコンタクトをとって確認をしておきましょう。

【その6】温泉旅館 vs Airbnb

開発合宿で温泉合宿とAirbnbを利用する際のメリット・デメリットをまとめます。

温泉旅館
メリット

  • 最寄りの駅まで送迎がつくことが多い
  • 買い出しの手間が省ける
  • 事前に設備の情報が詳しくわかる
  • 会議室を提供していることが多い

デメリット

  • 宿泊費が高くなりがち
  • 時期によっては予約が取りにくい

Airbnb
メリット

  • 比較的安い
  • 合宿直前でも予約が取りやすい
  • 予約から決済までオンラインで完結する

デメリット

  • 食事の準備が必要
  • 宿泊先まで自力で辿りつく必要がある
  • なにかと時間をとられる(買い出しなど)

ご自身の合宿ニーズに合わせて、旅館とAirbnbのどちらを選択するか参考にしてください。

【その7】裏合宿テーマを決めよう

開発合宿は非日常で開発するものです。
参加者のモチベーションを高めるために裏テーマを設けることをおすすめします。

参考までにデータ分析部の裏テーマを紹介します。

  • 1回目: うまいマグロを食す
  • 2回目: 温泉で疲れを癒やす
  • 3回目: 事業課題を解決する(裏じゃない...)
  • 4回目: 温泉で疲れを癒やす

箱根はお蕎麦もおいしい。 f:id:TMat:20160901094740j:plain

温泉とおいしい食事、これがあればいくらでも頑張れますね。

「どこに行こうか迷う」時の決め手はこれに尽きると思います。

まとめ

いかがだったでしょうか。

開発合宿はいつもと違った環境でじっくりと開発を行うことができる一方、準備や雰囲気にパフォーマンスが大きく左右される可能性があります。

ご紹介したようなGunosy式の開発合宿が、皆様の効果的な開発にお役立ていただければ幸いです。