クラスターの最古参社員、エンジニアリングマネージャーのmizogucheです。
クラスターも創業9周年を迎え、4名の新卒エンジニアを受け入れることになりました。*1
今まで中途採用しかしておらず、勉強会はあっても未経験者向けの研修は存在していませんでした。
ポテンシャルに期待して採用しているとはいえ、経験の少ない方に、いきなり「いまから仕事を始めてくださ〜い!」と言ってスムーズなタスクの遂行を期待するのは不親切なので、技術研修を設計・実施しました。そこで本記事では、私がリードして設計し、5週間にわたって実施されたエンジニア向けの職種研修についてご紹介します。
多様な経験を積んでもらう2ヶ月にわたる新卒研修
新卒研修は全体では2ヶ月。最初に基礎研修、各組織の紹介・社内ルール・ビジネスマナー・ソフトスキルなどの講義が行われ、次に職種毎にわかれた職種研修、最後にチームビルディング研修としてゲーム制作ブートキャンプが行われました。全職種向けの基礎研修とチームビルディング研修は、人事部にて設計・実施されました。
今回紹介するのは、この中の職種研修の部分となります。
エンジニア向け職種研修の設計
要件
研修の設計にあたって、クラスターのエンジニアとして求められることを整理し、以下の要件を定めました。
成長を加速するためのスキルを身につけることを重視する
ポテンシャルを顕在化させるため、スキルを素早く習得して使いこなすスキル=メタスキルを伸ばすことを重視しました。頻度を高めに振り返りをするなどして、PDCAサイクルを回すことを実践できるようにしました。
技術スタックを一通り経験すること
clusterはスマホ・PC・VR機器など対応プラットフォームが多く、使用している技術スタックが多岐に渡っています。研修中に一通り経験しておくことで、配属先のチームでもポリバレントなエンジニアとして活躍の幅が広がることを期待できます。
実践形式での演習を行うこと
研修のアウトプットを実務のアウトプットと揃えました。これは、座学でコードの書き方を学んだとしても、実際にコードを書いて動かさないと身につかない*2という自身の経験からきています。
これらの要件を実現するために業務の流れを研修中に再現する設計としました。以下では、実際に研修内で実装した教材について紹介します。
演習用教材「Cluster Learning Materials」
演習の実装目標や手順、習得してもらいたいスキルについて
今回の演習の実装目標や手順は下記のように設定しました。
-
- 実装の目標
- ミニマルなワールドクラフトを実装する
- 「ワールドクラフト」とはcluster内だけで3DCG空間(ワールド)を制作できる機能(紹介ポスト)
- ミニマルなワールドクラフトを実装する
- 実装の手順
- 実際のclusterをシンプルにした形のプロジェクトに追加実装する
- ひとりひとりが自分のリポジトリを作成し、個人でそれぞれ開発していく
- ドキュメントに課題や設計方針が書いてあり、それを読んで実装する
- 途中でわからないことがあったら、自分で調べたり、質問をしたりして解決する
- Pull Requestを作成し、マージにはプロダクションコードのApprove権限があるエンジニアのApproveを必須とする
- 実際のclusterをシンプルにした形のプロジェクトに追加実装する
- 実装の目標
この演習によって、以下のスキルを習得することを意図しています。
- 自分で調べて実装するスキル
- 質問するスキル
- ひいては自分一人では解決できない課題を、人の助けを借りて解決するスキル
- 自分にはない知見を自分のものにするスキル
- プロダクションコードにマージ可能な水準のコードを書くスキル
clusterの実装について学ぶ教材「Cluster Learning Materials」
この実装目標・手順に対し、今回の研修では「Cluster Learning Materials」という教材を用意し、これを実際の業務の流れに沿って実装してもらう形で演習を行いました。
具体的には以下の7つの領域に関してこちらでドキュメントとプロジェクトを用意し、新卒の方にはドキュメントに沿ってプロジェクトに追加実装してもらう形にしました。
どのような実装を行うかはclusterの開発組織の各専門分野を担う「ワーキンググループ」のメンバーにそれぞれ検討してもらいました。
- Unity(single-player)
- Unity(multi-player)
- room-server
- http-api
- iOS
- Android
- Web
ドキュメントには以下の内容が書かれています。
- 環境構築手順
- プロジェクトの構造・設計
- 課題と課題を完了させるためのタスク分解の例
- 参考URL
手厚く説明するのではなく簡素な説明に徹して、わからなければ自分で調べる・質問することを促すようにしました。
サポート体制
また、教材だけだと、スムーズに開発を進めることは難しいかな……と考え、今回の研修では以下のようなサポート体制を整えました。
Daily meeting
毎朝Daily meetingを行って、進捗を共有してもらいました。アジェンダは以下の2つ。
- 今日やることとスケジュールの予実
- 困っていること・相談したいこと
予実を意識することで、作業時間の見積もりの精度を意識してもらうことを意図しています。
振り返り
epic振り返りと同じフォーマットで振り返りを行いました。
最初の二週間は毎日行っており、尽きることなくKPTが生まれていましたが、三週間目以降からは慣れも生まれて付箋が少なくなってきたため、一週間に一回の頻度に落としました。
最初は私が進行をしていましたが、途中から新卒エンジニア4人にお任せして、私はただ見守(ってたまーに質問に答え)るだけにまでなりました。
Daily meeting と振り返りによって、開発サイクルのリズムを出すとともに、チーム配属後にもスムーズに振り返りに参加できるよう意図しています。
メンターとの1on1
4名の新卒エンジニアそれぞれに、比較的年齢が近く相談しやすい関係性を作れそうなメンターをアサインしました。研修中に困ったことがあったときの相談先として、最終的にメンターとの1on1で拾えるように、という意図で設定しました。
最初の一週間は毎日30分、それ以降は各自の必要性に合わせた頻度でメンターとの1on1ミーティングを実施しました。
Slackでのコミュニケーション
チーム配属後は基本的にリモートワークでの作業となるため、Slack上でのコミュニケーションをいかに適切に取れるかが重要になります。そこで、大声作業*3を推奨しました。
今から何を行うか、作業する中で何を考えているか、何がわからないか、何を調べたか……などを事細かにSlackに投稿し、自分の現状を可視化することを意識してもらいました。
最初は投稿にハードルがある人もいましたが、振り返りで話題に挙げてTryを生むことでハードルが解消されて全員が充分に大声作業している状態になりました。わからず詰まったところを言語化して投稿すると先輩エンジニアがアドバイスをするなど、大声作業のメリットを実体験できたという感想が挙がっています。
研修を終えて
5週間で1人あたり30~50件のPull RequestがApproveされてマージされました。
6月からはそれぞれチームに配属され、活躍し始めています。新卒エンジニアの方々は、研修を通して大声作業のハードルが下がっていて、チーム配属後も引き続き大声作業することができています。Slack上では既存の社員と同じくらい存在感を感じるようになっています。
研修の感想を聞くと、「学ぶ意欲さえあれば、エンジニアに必要な各種技能を実践を通じて鍛えることができる、とても良い教材だと思いました」「優しすぎたり手厚すぎたりしないのが逆に良い」「room-serverのシンプルな実装があったのは参考になった。リファレンスとしてたまに見てる。」などの声が挙がりました。
一方で、Learning Materialsの課題の前提条件がなさすぎて新卒エンジニアが自身で仕様を決定するのが難しすぎたためある程度前提条件を設定する、Pull Requestのレビュアーに偏りが生まれたので負担の軽減するためにPull Request Approverを組織化する、などいくつか改善点が挙がっており、次回の研修までにブラッシュアップする予定です。
*1:他の職種を含めると10人の新卒入社者がいます https://note.com/cluster_official/n/n21954babe8fe
*2:スポーツトレーニングの方法論である戦術的ピリオダイゼーションで言われる「ピアノはピアノを弾くことでしかうまくならない。サッカーもサッカーをすることでしかうまくならない」(素走りをしてもサッカーは上手くならない)という言葉に影響されています。
*3:Working Out Loud 大声作業(しなさい)、チームメンバー同士でのトレーニング文化の醸成 - スタディサプリ Product Team Blog