おはこんにちばんは!ランサーズエンジニアの satoshi です。
今回は開発合宿のすすめ的記事を共有させていただきます。
はじめに
ランサーズ開発チームでは年に一度、日頃の業務から身を置き、技術やサービスに向き合うために、都会の喧騒から離れ、自然豊かな場所で開発合宿を行っています。
今回は、熱海駅からすぐ近くのホテルで行いました。
(ちなみに、前回の合宿は湯河原にて 行ってます。)
本題 – 【ハイパフォーマンスな開発合宿をする秘訣】
僕の所属するチームは、ランサーズ内で発生する、依頼金額の銀行入金充当業務を自動化出来ないか?という課題を解決するために、銀行入金情報を外部サービスを利用して自動でインポートする処理を作ろうという内容で合宿を行いました。
もともとは、今回の合宿チームリーダーが自身でやると1週間以上かかることから、この合宿の機会にチーム力を使って一気に作り上げたいという思いにより3名のメンバーが集結し、合宿チームが出来あがりました。
事前準備
当たり前ですが、効率的なミーティングなどをするためには、準備が八割と言われてたりします(持論)。
開発合宿でもしかり、準備が超大事です。
- どういう開発をするのか?
- それを開発する環境
- 前提の技術調査
- 参加メンバーの目的認識合わせ
僕らは、事前にチームリーダが、外部サービスのAPIを調べ上げており、必要なAPIリストやパラメータなどはすでにわかっている状態。
開発環境も事前に用意できていたので、いざ合宿が始まってから、環境構築に手間取ったり、外部システムの仕様調査に時間を使う必要がなく、今回向き合うべきシステムをどう作るか?どうしたら使いやすいか?という点に集中できました。
大画面でライブコーディングを全員でやる
午前中にホワイトボードに絵を書きながら、僕らが開発すべき Issueは以下となった。
- インポート実行画面
- APIアクセストークン取得処理
- APIからの入金履歴取得処理
- 入金履歴保存処理
- 入金データ保存処理
- APIアクセストークンリセット機能
これを分担して進めるにあたって、
- コントローラと業務処理をまとめたサービス層の実装
- 追加になるテーブルに関する ファクトリ、リポジトリ、オブジェクトクラスの実装
これらを基礎として作ってから分担したほうが効率的。また、普段は別のプロジェクトやサービスを開発している人もいるため、ランサーズ共通設計の理解が人によりばらつきがあったことから、上記の基礎の実装はモブプログラミングという手法を使って一緒にやってしまおうという話になったのが背景としてあります。
丁度、合宿前に カカカカックさんからとても素晴らしい内容 をLunchers(ランチ勉強会)で登壇いただいたので、僕らの意識もそっちに向いてました。
※ モブプログラミングとは…
ペアプログラミングが1台のPCで2名でプログラミングをするのに対し、モブプログラミングは4名以上で合意を得ながらプログラミングする手法です。
実際に、モブプログラミングで得たこととして、
- いくら良さそうな設計をしても、作っていく中で変わることや人による考え方は違う
一緒に同じ画面を見ながらやることで、その場で意思決定が出来る。関数の分け方、関数名から、実装の方法といった細かいところが合意できる。(こういう細かいところが非同期にコードレビューして見てもらうとお互い結構時間かかりますよね?) - オペレーターのミスもすぐFBもらえる
僕みたいなどっちかと言うとぱぱっと書いちゃうけど、ミスが多い人には嬉しいw - わからない設計や既存仕様も説明しながら実装できる
ナビゲーター側の人が質問することで、これはこういう作りなんだよ、こういう考え方なので、こういう実装します。など説明しながら出来る。この後に分担して開発するときの大きな知恵になります。
ということから、いきなり分担するよりも、
- 知識差分を埋め
- 共通処理のレビューが不要で
- 自分が担当する開発部分をどう作るかが想像できて
とっても効率的だったと実感してます!!
ちなみに、カカカカックさんに教えていただいたモブプログラミングとは違う形で、正式にはモブプログラミングとは言わないのかもしれません。
- オペレータは変わらない(手が早くてシステム理解が高い人がずっと俺のターン)
- 他のチームもいる会議室でやった(ワイワイ騒がしかったと思う・・・m(__)m)
とはいえ、実際のメンバーの声として
- そのコマンド初めて知った!
- そのデバッグ方法知らなかった!
- コミットコメントはこう書くといいよ
などの副産物もあって、双方に良い気づきもあったので、有効な手段だったと言えます。
転地効果
基本的にオフィスじゃない場所で合宿する事がほとんどだと思いますが、転地効果はとても重要。非日常感というのが、集中力を高めてくれます。
ちょっと離れた場所というより、非日常感を演出してくれるような場所に行くのがおすすめです。例えば、海が見えて、鳥や虫の声が聞こえる環境。
また、合宿では、差し込みもないし、「それしかやらない」という状況が自然と作れます。また、リフレッシュ効果もありますね!
そのため、会社でプチ合宿ということもあるかもしれないですが、ぜひ場所を変えて自然豊かな環境でやることを強くおすすめします。
結果
このようにして、僕らのチームは1日で機能を作りきりなんと、、、最優秀チームに選ばれました!!!
(優勝商品の日本酒を持って喜びのポーズの図)
最後に
-
事前準備をしっかりやる
-
モブプログラミングを活用して見る
-
転地効果を活かす
この3つを気にして合宿計画&当日を過ごしていただくと普段の仕事ではなかなか置きない科学反応が起こると思います。
とはいえ、ほぼ、モブプログラミングのボリュームがおおい内容になりましたが、合宿振り返って個人的に大きいなと思ったのは、先に書いた事前準備。
いかに、合宿中にやりたいことに集中できる状態。すぐに進めれる状態を作っているか?というのがめっちゃ大事なのでは?と思っています。
当たり前ですが、準備は何に関しても重要ですね。
以上ですが、参考になれば嬉しいです。