技術本部 Bill One Engineering Unitの山邊です。
クラウド請求書受領サービス「Bill One」の開発をしています。
先日、チームビルディングと開発についての共通認識を得るために、合宿を行い、学びが多かったのでブログにまとめようと思います。
前提:合宿って?
みんなで集まって、みんなで何かをする事を広く合宿と呼んでいます。
実際にどこかへ行き、宿泊しながら合宿をすることもありますが、今回の合宿は時期的・時間的な問題から会社に集まり、1日で行う形式としました。
前提:Bill Oneのチーム
Bill Oneには既に40名を超えるエンジニアが所属しています。
最速で開発をするために5名前後の小さなチームを作り、特定の分野や機能の開発をしています。そして、このチームは四半期毎に変更され、メンバーが入れ替わっています。
Bill Oneはコミュニケーションが活発な組織だと思っていますが、人数も多くなったため、チームの編成によっては初めて一緒のチームになる人もいます。
チームで開発する上でメンバー間でお互いを理解することは大切だと思っています。タスクに対する考え方や、強み、好きな事など知っていれば知っているほど円滑に仕事ができます。そこで、チームビルディングが大事だと思い、合宿を企画しました。
合宿の目的
合宿をする上での目的はチーム全員で話し合い、以下に決定しました。
- チームビルディング
- チームのなりたい姿を考えて、課題を導き出す
- メンバー個人の特性をもっと知る
- 開発について(開発全般・ストーリー)共通認識を得る
- 技術力の向上、既存コードの理解
- プロダクトと向き合う
前提にも書いた通り、チームビルディングはとても大事だと考えており、目的としました。
それと同じく、開発について共通理解を得ることも重要だと考えています。
既存のコードがどのようになっているのか、どんな機能があって、次に何を作ろうとしているのか?どんな手順で開発していて、PR (Pull Request) のレビューはどうやっているのかをお互いに知ることができれば学びも多いと考え、目的の一つにしました。
準備
ワークを考える
丸1日分のワークを考えるのはとても大変です。1人ではできません。そこで、アイデアをチーム内で出し、担当者を決めて準備をしてもらいました。
僕らは6人のチームなので、1人1時間の枠として、全員が1つのワークを用意しました。実際は1.5時間やったワークもあり、いい時間配分となりました。
時間・場所を押さえる
次に時間をおさえます。今回は2週間くらい前に全員のカレンダーに予定を入れました。
それと同時に会議室を押さえました。会議室のセットは遅れてしまい、色々な会議室をセットすることになり、移動時間が発生してしまいました。ただ、これが気分転換にもなりよかったです。
ワーク紹介
合計で6つのワークを行いました。全てが有意義な時間となり、全部を詳しく紹介したい気持ちはありますが、長くなってしまうため、ワークの目的と実際の様子に絞って紹介します。
ドヤ会
名前がちょっと怖いですが、中身はむしろ逆の内容になってます。
今までの人生の成功体験など、ポジティブな事をなんでもドヤる会です。普段謙虚な人もドヤ会では自慢話をする事が求められます。なんでもドヤってOKで、周りの人もポジティブなフィードバックを行います。
詳しくは「成功事例を楽しくシェアする「ドヤ会」で組織実行力が強まる理由(note))」の記事が参考になると思います。
目的
以下のような個性が分かれば、組織がより一層強くなると思います。それらを共有し、お互いろより深く理解することが目的です。
- 強み
- こだわり
- モチベーション
- パーソナリティ
- 自分と違う視点
実際の様子
事前に軽めのスライドなどを用意し、1人15分程度で発表と深掘りを行いました。
実際のドヤ
- 高校生時代に文化祭の代表を行い、完全黒字にした
- LT大会の主催者をした
- 友人とアプリ開発を行なった
- 大学生時代の論文の紹介
機能を使って、改善案を出そう
エンジニアとしてBill Oneを開発していても、請求書の処理が業務として発生する機会は少なく、Bill Oneを使うことは多くありません。もちろんテストや開発のためにBill One画面を使っていますが、ユーザーの立場になりきって、細かな問題を見つける事は難しいと思います。気になっても優先度が低く、忘れてしまうことも、、、
そこで、Bill Oneをユーザーの立場になって使い、改善点を挙げる活動をしました。
目的
- 自チームがこれから開発する機能周りを実際に触り、現状の仕様への理解を深める
- 改善点を挙げて、UI/UXの向上を目指す
実際の様子
あらかじめストーリーを用意しておき、それにって画面を操作していきます。ざっくりとした指示のみ与えられるため、どこにボタンがあるか分からないと操作できません。これこそユーザーの立場です。
2人1組で実施した結果、大小合わせて25個の改善点が見つかりました。
改善点の例
- モーダルのバツボタンが小さい
- 送付されるメールの本文で気になる部分がある
- 1つ目の項目を選択後に2つ目の選択肢が表示される画面で、1つ目を選んでいないと2つ目の選択肢がLoadingと表示されるので、Disableの方が良い
- 項目の編集を永続化するボタンのラベルが「変更する」になっている。Bill Oneでは「保存する」に統一したい
- スクロールしないとボタンの存在に気づけない部分がある
今後は挙がった項目を精査して、開発内の小さなタスク置き場に投稿する予定です。
わくわくDay
自身がわくわくした事を発表し合うことで、メンバー間の理解を深める会です。
これは元々は毎週の振り返りでやったら面白そうというアイデアが出ており、それを実現したものです。普段、アイデアとして出ていて、実現できていない事ができるのも合宿の良いところです。
目的
わくわくを知っておくことで、タスクの依頼を誰にしたら楽しくやってくれるかの判断がしやすくなります。
テンプレート
- いま一番わくわくしていること
- Bill Oneで過去にわくわくしたこと
- 前職でわくわくしたこと
- 学生時代わくわくしたこと
- その他わくわく
実際の様子
みんなのわくわくを紹介します。
- 知人と個人開発をした際に自分の能力よりちょっと挑戦的な課題が与えられたときわくわくします。
- めんどくさがりなので、面倒な作業とかを楽できるようにするのがとっても楽しい
- 鈴鹿8耐を見に行く予定がある
- 子供・家族の成長
インセプションデッキを作る
インセプションデッキは10個の質問を通して、チームビルディングや対象となる事側のWhy/Howを明確にできる方法です。今回の合宿ではチームビルディングを目的とし、時間的な理由もあったため1個の質問のみ実施しました。
詳しくは「2種類のインセプションデッキ(Qiita))」が参考になると思います。
目的
- 1つの事柄に対して話し合うことで、お互いの考え方を理解する
- 今後の業務への理解を深める
実施の様子
初めに、話したい質問のアンケートを取った結果、「夜も眠れない問題」について話すことになりました。この質問は、プロジェクト内で発生しそうな問題、発生している問題を洗い出し、その解決策を考えます。
Miroと呼ばれるツールを使って課題を出した後に、気になる課題について解決策を考えました。
PRレビュー祭り
PR (Pull Request) のレビューはかなり個性が出るものですし、経験から学ぶことが多いと思います。そこで、1つのPRをみんなでレビューし、良い点・改善点を挙げます。
目的
- 他の人のレビュー方法や考え方を知り、レビュー力を向上させる
実際の様子
過去にマージされており、直近の業務に関連のあるPRをレビューする事にしました。そしてポジティブコメントをするチームと改善点をコメントするチームに分かれ、レビューを行いました。
ソースコードを出す事はできませんが、コメントを紹介します。
ポジティブな意見
- ドメインイベント化が適切に行われていて良い
- 開発途中で後からコードを追加する部分にTODOコメントを残していて良い
- ほぼ同じ用途のクラスについて共通するクラスを定義して、継承することでコードの共通化をおこなっていて良い
- Null制御が美しい
改善点
- DBで冗長なカラムが定義されている
- Check制約を書いた方がわかりやすそう
わくわくモブプロ!
1つの課題を全員で解決します。今回は6人でモブプロを行い、タイピスト(1人)と、モブ(5人)としました。モブが方針ややる事を話し合いで決定し、タイピストはそれを指示通りに遂行します。(タイピストは指示以外の事はやってはいけません)
タイピストは3分で交代する方式で回しました。
課題はapp-ideas/Projects/2-Intermediate/Emoji-Translator-App.md (Github)を行いました。
目的
- 仲良くなる
- 他メンバーのエディタの使い方、コードの書き方から学ぶ
実際の様子
実際にやってみるとコードの書く順番が人によって違ったり、エディタの新しいショートカットを知ることができました。
時間が1.5時間程度で、80%くらいの課題はクリアすることができました。
振り返り
全体の最後に振り返りも実施しました。意見としては以下の通りです。
よかった点
- お互いの事を知れて、リスペクトの気持ちが大きくなった
- 他の人のレビューのやり方を学ぶなど、普段時間を取らない事ができた
- 全員がセクションを持って、能動的に関わった事がよかった
- 明日のチームは今日より強くなる感覚
改善点
- もっと早い時期にやりたかった
- 時間が足りないセクションがあった
- モブプロのキーボードでUS/JIS配列問題があった
- 各セクションごとにフィードバック・振り返りを行ってもよかった
振り返りではポジティブな意見が多かったです。メンバー全員が積極的に関わった事もあり、丸1日集中して、楽しく取り組めたと思います。
まとめ
目的のおさらい
- チームビルディング
- チームのなりたい姿を考えて、課題を導き出す
- メンバー個人の特性をより知りたい
- 開発について(開発全般・ストーリー)共通認識を得る
- 技術力の向上, 既存コードの理解
- プロダクトと向き合う
定量的に達成度を出すことは難しいですが、目的通りのイベントになったと思っています。振り返りの意見にも「やってよかったねーという感じが共有できている」が出ています。
合宿を通して、チームがより一層強くなったと思うので、これからは最速よりも速く*1開発を進めていきたいと思います。
*1:Sansanの企業理念 =「Sansanのカタチ」の中のValuesに「最速を目指す」というものがあります。https://jp.corp-sansan.com/company/philosophy