エンジニア選考プロセスの改善

Mercari Advent Calendar 2020 の10日目は、メルカリ Engineering Office の sadah がお送りします。僕はエンジニア採用や育成を担当しています。所属している Engineering Office はこんなチームです!

TL;DR

メルカリでは継続的にエンジニア採用活動の改善を行っています。今回はエンジニア選考プロセスの概要と、ライブコーディングインタビューの導入についてご紹介します。エンジニア採用に関わっているエンジニアや人事の方、メルカリの選考に興味のあるエンジニアの方には、参考になる情報もあると思います。

メルカリのエンジニア選考プロセスの概要

エンジニア選考プロセスには、書類選考、コーディングテスト、技術課題、面接などがあります。各プロセスで確認しているポイントをご紹介します。

ライブコーディングインタビューの導入

ライブコーディングインタビューの導入にあたり、以下の各ステップをどのように進めたのかをご紹介します。

  1. 面接で確認するポイントの整理
  2. 質問内容とRubric(評価基準)の作成
  3. ライブコーディングで利用するコードの作成
  4. ロールプレイインタビュー
  5. 面接官の育成

目次

エンジニア採用に関する基本的な考え方

メルカリのエンジニアリング組織には「全員Software Engineer」というコンセプトがあります。

ソフトウェア開発に携わるすべてのエンジニアの垣根をなくし、全員を「ソフトウェアエンジニア」と呼びます。ソフトウェアエンジニアは、あらゆる機能の実現に向け、常に最適な技術を駆使し取り組む役割であり、特定の技術だけに役割を限定しません。これは専門性を否定する考え方ではなく、職種名によって役割を絞るべきではないという考えに基づいた考え方です。メルカリのソフトウェアエンジニアは、あらゆる手段を用いて理想を実現する役割を担っています。

Culture | メルカリエンジニアリング

上記の通り、「全員Software Engineer」というコンセプトは、さまざまな領域へのチャレンジを推奨しています。選考プロセスもこの考え方をベースにしています。そのため、募集要項はソフトウェアエンジニアとエンジニアリングマネージャーという2つが基本となります。ただ、SREなど明らかに必要となる能力が異なる職種や、募集要項を分けたほうが候補者の方が理解しやすい場合などは、募集要項をわけています。

ソフトウェアエンジニアとして応募していただいた場合、これまでの経験や希望されるキャリアなどを考慮して、面接官や選考プロセスを調整しています。

エンジニア選考プロセス

Hiring Process

選考プロセスは、技術領域によって異なります。メルカリでは統一的な選考プロセスを用意するよりも、技術領域や候補者の方の経験に合わせて、プロセスを調整しながら選考を進めています。ただベースとなるプロセスはあり、以下のページにまとまっています。

主なプロセスは、以下のような構成になっています。

  • 書類選考
  • コーディングテスト
  • 技術課題
  • 面接

書類選考

提出書類のフォーマットは特に決まっていません。いただいた内容は、リクルーターとエンジニアが確認しています。候補者の方の経験と、希望する業務内容を考慮して、面接官や選考プロセスをリクルーターが調整します。

コーディングテスト

コーディングテストは基本的なコンピューターサイエンスに関する知識を確認させていただくために実施しています。コーディングテストは外部のサービスを利用しています。TopCoderAtCoderといった競技プログラミングのような形式で、さまざまな言語が利用できます。コーディングテストの問題は定期的に見直しており、リークした問題を除外するといった対応も行っています。

コーディングテストの目的はあくまで基礎知識を確認することです。そのため候補者の方の技術力をしっかりと確認するのは、エンジニアとの面接になります。例えばコーディングテストは、問題がリークする可能性や、別の方が回答している可能性があるため、面接での確認が必要となります。

技術課題

技術領域によっては、技術課題を受けていただいています。技術課題では、課題となる仕様を満たすコードを実装していただきます。実装していただいたコードは、入社後ともに働く想定のエンジニアが社内の評価基準に従って確認しています。

面接

多くのケースでは、エンジニア、エンジニアリングマネージャー、DirectorあるいはVPと面接していただきます。面接の回数は状況に合わせて増減することがあります。

メルカリの面接は、「ミッションへの共感」「バリューの体現」「カルチャーフィット」の3点を判断するために行います。メルカリとメルペイのミッションに共感し、そのミッションを達成するためにバリューを体現できるかが、これからメルカリで活躍していただくうえで大切だと考えているからです。またエンジニアの選考プロセスでは、メルカリでどのようにこれまでの経験を活かしていただけるかを重視しています。エンジニアとの面接では、主に技術的な質問をさせていただいています。各技術領域でRubric(評価基準)を用意し、Rubricに従って評価を行っています。 また一部の技術領域ではライブコーディングインタビューを導入しています。こちらについては次のセクションで記載します。

ライブコーディングインタビュー

Live Coding Interview

一部の技術領域ではライブコーディングインタビューを導入しています。ライブコーディングインタビューでは、候補者の方にコードを共有し、そのコードを修正していただきながら、ディスカッションを行います。

ライブコーディングインタビューは約60分を想定し、以下のような流れになっています。

  • アイスブレイクや簡単な自己紹介
  • コードの共有と説明
  • コードの問題点などについてディスカッションし、修正してもらう
  • 上記を何度か繰り返す

候補者の方に共有するコードは、冗長だったり、バグがあったり、一部が未実装だったりします。これらの課題についてディスカッションしていきます。

コードを共有しながらディスカッションするため、候補者の方がどのような思考プロセスでコードを書いていくのかがわかります。候補者の方にも面接の最中に直接フィードバックができます。また、これまでの経験をメルカリでどのように活用できるかがわかり、メルカリのエンジニアと働く姿もイメージしやすくなります。

ただし、デメリットとしては、導入の準備にかかるコストが大きいことです。次の「導入するステップ」で、どのように準備していったのかをご紹介します。

導入するステップ

ライブコーディングインタビューを導入するにあたって、以下のようなステップで準備を行いました。

ライブコーディングインタビューの導入ステップ

  1. 面接で確認するポイントの整理
  2. 質問内容とRubric(評価基準)の作成
  3. ライブコーディングで利用するコードの作成
  4. ロールプレイインタビュー
  5. 面接官の育成

1から4のステップは、ウォーターフォールのような完成してから次のステップに進むのではなく、1から4を何度か繰り返し、それぞれの内容をブラッシュアップしていきました。この方法はとてもよかったと思います。質問内容やRubricは、実際に使うことで課題が明確になりました。1サイクルを2週間程度で繰り返すことで、全体のクオリティを上げていくことができました。ライブコーディングインタビューの導入にかかった期間は約3ヶ月程度でした。

面接で確認するポイントの整理

まずは、面接の中でどういったことを確認したいのか、エンジニアとディスカッションしながら決めていきます。 通常の技術面接で聞いていたことをまとめ直し、いくつかのポイントにまとめていきます。例えば、パフォーマンス、テスタビリティといったような確認するカテゴリーをまとめ、そこからより具体的な確認ポイントをまとめました。

質問内容とRubric(評価基準)の作成

次に、質問内容とRubricの作成をしました。作成にあたっては、Google re:Workを参考にさせていただきました。

確認ポイントに関連した回答を引き出すための質問と、フォローアップの質問を準備します。また回答を評価するためのRubricを作成しました。 「質問内容とRubricの作成」と「ライブコーディングで利用するコードの作成」は並行して行いました。それぞれを作成し、ロールプレイインタビューを実施し、そこから「質問内容とRubricの作成」と「ライブコーディングで利用するコードの作成」の改善を行いました。

最初から完璧な質問内容とRubricを作るのではなく、まずは簡単なものを作って、ロールプレイインタビューを通じてブラッシュアップしていきました。

ライブコーディングで利用するコードの作成

社内のエンジニア数名と一緒に、ライブコーディングで利用するコードを作成していきました。 コードは候補者の方に共有し、候補者のPCで操作してもらうことを想定しています。ただし、ビルドができないなどのトラブルも想定し、コードが表示さえできれば面接を進められるように準備しました。

ライブコーディングで利用するコードは、以下のようなことを気をつけて実装しました。

  • 短い時間で確認できるよう、全体のコード量が少ない
  • 他のライブラリなどへの依存性が低く、ビルドの問題などが起こりにくい

最初から上記のようなポイントを押さえてコードを作成できたわけではなく、ロールプレイを通じてコードを改善していきました。 ロールプレイでは、例えばコードが多すぎて時間内に把握しきれない、問題のあるコードが多すぎてどこから手を付けたらよいのかわからなかった、といったフィードバックをもらいました。初期のコードは、確認したいポイントやコードが多く、複雑な構成だったので、それを改善していきました。

ロールプレイインタビュー

ロールプレイインタビューでは社内のエンジニアが候補者役となり、面接のロールプレイを行います。ロールプレイインタビューでは、以下のような状況を想定し、複数回実施しました。

  • シニアなエンジニアと、ジュニアなエンジニア
  • オフィスでの対面インタビューと、リモートでのインタビュー
  • IDEが利用できるケースと、利用できないケース

想定するインタビュー時間は60分程度ですが、ロールプレイインタビューは120分のスケジュールを押さえて実施しました。最初の60分はロールプレイインタビュー、次の30分は候補者役エンジニアからのフィードバック、最後の30分で改善方法の検討を行いました。

ロールプレイインタビューを5回程度行い、実際の面接で利用する準備が整いました。

面接官の育成

ライブコーディングインタビューの内容ができたあとは、対応できる面接官を増やしていく必要があります。 こちらもGoogle re:Workを参考にさせていただき、リバースシャドーイングを導入しました。

ライブコーディングインタビューで利用する面接スクリプトを作成し、それをメインの面接官とサブの面接官で共有しながら、シャドーイングとリバースシャドーイングを行い、対応できる面接官を増やしました。

まとめ

メルカリでは候補者体験(Candidate Experience)を向上させるために恒常的に選考プロセスの改善を行っています。今回のライブコーディングインタビューは導入してからまだ日が浅いため、候補者体験にどのような影響を与えているか計測しきれていない部分があります。 メルカリでは候補者の方に選考プロセスに関するアンケートの回答をお願いしています。これらのデータを活用して、今後もプロセスの改善を継続していきます。

メルカリではミッション・バリューに共感できるソフトウェアエンジニア、エンジニアリングマネージャーを募集しています。一緒に働ける仲間をお待ちしております!

明日の Mercari Advent Calendar 2020 の担当は、 VP of Product Engineeringの kwakasa さんです。引き続きお楽しみください!