はじめに

こんにちは、タップル誕生を運営する株式会社マッチングエージェントでサーバーサイドエンジニアをしている島谷です。

突然ですが開発合宿って良いですよね!いつもと違った環境で、普段の業務とは離れて作業に没頭できるので、たくさんアウトプットするぞ!という意気込みで行く方がほとんどだと思います。 しかし温泉や美味しいご飯、お酒などたくさん誘惑もあり、終わってみれば大して成果が出なかった、なんてことはありませんか? タップル誕生では前年に続き、今年度も開発合宿に行ってきました。その際しっかりと準備や工夫を行い、満足できる成果を上げることができたので、今回はその内容を紹介したいと思います。

実施した準備や工夫点

合宿の目的はしっかり決めた

去年の合宿では、主に技術的負債を返却することに重きを置いていました。普段やりたくても、なかなかまとまった時間が取れずに後回しにされ続けたタスクを集中して思いっきりやる。開発合宿の目的としてはスタンダードなものだと思います。 今回のタップル誕生ではそうした作業に加え、新たに「MOVE UP to the Next Stage」というテーマを持つことになりました。 技術的負債の返却自体はとても大事なことですが、マイナスをゼロに持っていくだけでは組織として成長できません。そうした危機感を抱いていたタイミングだったので、今回は合宿を通して開発チームとして成長するという視点を加えました。

何のために合宿に行くのか。この辺りを事前にしっかり認識合わせしたことで、この後実際に合宿で何を作業するのかをスムーズに考えることができたと思います。合宿中ダラダラしてしまうことが少なかった理由にもつながっているでしょう。 作成した社内wiki

合宿での作業内容は、時間を掛けて決めた

課題の洗い出し

タップル誕生の開発チームは、Android, iOS, バックエンドチームの大きく3つに分けられます。今回はこのチームごとに合宿中に実施することを話し合いました。

私が所属するサーバーチームでは、まず各メンバーが抱えている挑戦してみたいことやチームの課題点を挙げていき、その中から腰を据えて解決したいこと、チームとしてどういう状態になりたいかを全員で考えるところから始めました。 全員で案だししている風景

テーマの設定

沢山課題点が出て来ましたが、最終的に「自信を持ってリファクタを進められる状態になる」というテーマを設定することになりました。 前回のブログにも書きましたが、タップル誕生は運用開始から今年で4年目になり、サービス開始当初のコードはかなりのレガシーコードとなっている現状があります。こうしたコードはコツコツ改善を続けているのですが、依然として開発効率を低下させる要因にもなっています。開発メンバーが少しずつ増えつつある今、このままのスピードで改善させていくのでは、今後必ず足を引っ張ることが目に見えていました。 とはいっても元々あったコードに、しっかりと整備されたテストコードがあったわけでもありません。なのでリファクタリングをする際は、対象のコードがどういう挙動をすることが求められているのかをしっかり調査し、テストを書きながら恐る恐る実施しているという現状でした。

こうした負債・状況を一掃するための基盤作ること、また新たな負債をできるだけ産まず、高い開発スピードを持ったチームへと成長していくための足がかりとして、今回の合宿を使うことにしました。

合宿前のt-wadaさんワークショップ

当然、合宿内だけで上記のような状態にいきなり進化することは難しいので、合宿の前段としてt-wadaさんにテスト駆動開発についてのワークショップを実施していただき、チームメンバーにテスト駆動開発についての理解を深めてもらいました。講演までの経緯や詳細については、こちらの記事にて述べられているので、よろしければ御覧ください。

このように各チームそれぞれで合宿を通してのアウトプットイメージをしっかりと設定し、それに合わせて事前準備を入念に行いました。前回の合宿でも実感しましたが、合宿当日にいかに集中して作業に没頭できるかどうかは、事前の準備にかかっていると思います。

タイムスケジュールは決めておいた

集合時間や宿でのご飯の時間など、合宿全体のタイムスケジュールは勿論なんですが、それとは別でチーム毎の作業スケジュールも決めておくと途中でダレること無くやれると思います。追い込み効果ってありますよね。この時間までにここまで終わらせないと!っていう意識で、皆かなり集中して作業していました。 到着後すぐにスケジュールをホワイトボードに書いてました

合宿地はやっぱり大事!

今回の合宿地は湯河原温泉にある、おんやど恵にしました。

おんやど恵は開発合宿のためのサポートがかなり手厚くされています。ホワイトボードやディスプレイなどもレンタルできるため、自分の作業用PCを持って行くだけで他に特に必要なものは特にありませんでした。素晴らしい。

プロジェクター・スクリーンもレンタルできます。今回はこれを使ってモブプログラミングをやってみました。
プロジェクター・スクリーンもレンタルできます。今回はこれを使ってモブプログラミングをやってみました。

開発合宿の会場の床が畳だったことも個人的には嬉しい点でした。机での作業に疲れた場合、床にだらっと寝転んで作業するっていうのも、普段会社ではできないことなので新鮮だったりします。

畳開発の良いところ。やりすぎると肩凝りますけどね。
畳開発の良いところ。やりすぎると肩凝りますけどね。

あと個人的に、旅館内で一番気分良く作業できた場所が足湯です。足湯の場所が外にあるため、12月の寒空が骨身にしみるんですが、熱めの足湯が足元から温めてくれ、頭寒足熱の状態で作業できます。とてもリラックスして作業できますよ!おすすめです。

湯気によってPCが壊れないかだけ心配でしたが
湯気によってPCが壊れないかだけ心配でしたが

振り返り

今回の合宿では全チームが目標としていたところまで無事やりきれたと思います。

Firestoreを使ったメッセージのリアルタイム通信の導入やiOSのテストカバレッジ向上、Androidのkotlin化促進などなど、様々な成果を出すことができました。ブログにて成果をアウトプットしている人もいるので是非ご覧になってください。

また合宿自体の振り返りでは、軽めの改善dayのようなものを小まめに設定していった方が良いのではという意見も出ました。確かに年一回のペースでは、進められる量に限りがあります。今後はその辺りの運用も改善していくつもりです。

まとめ

今回は開発合宿をチーム全体が成長する機会と捉えて、普段なかなか実施できなかった作業に加え、チャレンジする要素を取り入れたものにしてみました。 去年の合宿時と比べて開発メンバーの数も増え、全員を巻き込んでの開発合宿の難易度は少し上がった気がします。実りある合宿にするため、目標の設定や事前準備に多くの時間を割いたので正直かなり大変でした。

しかしやっぱり開発合宿はメンバーの団結感も作れるし、なにより全員で集中して作業するっていうのは単純に楽しいです。 様々な目的があって開発合宿を実施されると思いますが、普段の業務サイクルから離れ、開発チームにメリハリをもたらす良い機会としても合宿という手法は使えると思います。行きましょう!合宿!

IMG_9939

2012年新卒入社。現在は株式会社マッチングエージェントにてサーバーサイドエンジニアをしています。