スキルの高いエンジニアを採用する方法について考えてみた
いままでにエンジニア採用をしたり、逆に採用を受けたりしたので、「スキルの高いエンジニアを採る」という観点で、経験したことのある方法についてメリット・デメリットを走り書きでまとめてみたいと思います。
方法は一つを用いるというよりは、組み合わせることもできるかと思います。
媒体やエージェントを選んだ経験はないので、そのあたりによってもまた変わってくるかもしれません。
GitHubのアカウントを提出してもらう
GitHubのアカウントを提出してもらって、書類審査などをする方法です。
- メリット
- コーディングのスタイルがよくわかり、エンジニアなら誰が見てもレベル感もなんとなく把握しやすい。
- デメリット
- GitHubをアクティブに更新している人が少ない
- 使っていても、ちょっとしたプログラムしか置いてなかったりする
- そのような人でも、バリバリ書ける人は結構いる
コーディング課題
候補者の方に、コーディング課題を課す方法です。
- メリット
- 課題をこなすだけの具体的な能力があるかが把握できる
- どのようなコードを書く人なのかを把握できる
- コーディング課題を課す外部のサービスもある
- デメリット
- (時間的な制約を考えると、)十分な難しさの問題を出すことが難しい
- 特に、設計の能力を確認することが難しい
- 簡単な問題を課すと、十分な実務スキルがない人でも通ってしまう
- 課題の作成に、スキルと手間がかかる
- 候補者を時間的に拘束してしまう
- (時間的な制約を考えると、)十分な難しさの問題を出すことが難しい
足切りとしては有効かもしれないと思っています。
コードレビュー課題
候補者の方に、コードをお渡しして、コードのレビューをする課題を課す方法です。
コードにはあえてツッコみどころを入れておき、それをツッコんでもらうようなイメージです。
- メリット
- 開発や設計に関する知識や思考力が具体的に把握できる
- コーディング課題よりも実施に時間が掛からない
- デメリット
- 課題の作成に、工夫と手間がかかる
- 回答されたレビューを見て判断するのに、一定のスキルが必要
結構いいかもしれないと、思いはじめています。
面接
面接を通して、スキルを把握する。(面接の目的は他にもありますが、ここではスキルの把握に絞って書きます)
- メリット
- 意外と、面接だけでもスキルは把握できる
- 設計の能力や、開発におけるコミュニケーションスキルをはかることもできる
- デメリット
- 候補者のスキルがどれだけ把握できるかが、面接の担当者のスキルに大きく左右される
- 漫然と話すだけでは、開発力は全く把握できない。
質問すべき項目を蓄積しておき、面接前にある程度決めておくことで、かなり精度を上げることはでき、質問事項をブラッシュアップしていくことができます。
他の方法でもそうかと思いますが、面接の担当者と採用の責任者で、採用する人に必要なスキル感の認識が合っていないと、ひどいことになります。
対面でのコーディング・設計課題
事前に課題を課すのではなく、直接お会いして、その場で課題をこなしてもらう方法です。
- メリット
- 課題をこなすだけの能力があるかが把握できる
- 課題の結果だけではなく、そのプロセスを見ることができる
- (課題の設計によっては)設計の能力を見ることもできる
- デメリット
- 非常に短い時間で解ける課題しか課すことができない
- ディスカッションが必要な課題になると、面接の担当者のスキルに結果が大きく左右される
目の前でFizzBuzzを問いてもらった経験がありますが、今考えるとあまり精度の高い方法ではなかったと思います。簡単な課題をやってもらうのは時間がもったいないと思いますが、設計課題をディスカッションしながら行うのは、設計力が見れていいかもしれないです。
作ったアプリ、サービスなどを見せてもらう
- メリット
- スキルが、最終的なアウトプットとして見ることができる
- 作られたアプリやサービスの複雑さや斬新さによっても、能力をある程度把握することができる
- (他社案件ではなく、個人制作の場合) アプリやサービスをまるっと作れるだけの広い(≠深い)知識や経験を持っていることがわかる
- デメリット
- (個人制作の場合、)他人が要件定義をした場合に、スキル的に要求水準が満たせない場合がある
- (他社案件の場合、)見せてもらった画面や機能が、他の人が担当していた箇所だったり、一部修正しただけというパターンもあるので、確認が必要
- 守秘義務や、サービス期間の関係で、必ずしも見せられるものがあるとは限らない
昔は、ハズレがない方法と思っていましたが、意外と落とし穴があります・・・