海外エンジニア転職の採用プロセス概要・経験から傾向をまとめてみた
海外のソフトウェアエンジニア採用プロセスはほとんど似たプロセスでありながら、日本企業とは少し異なります。(経験上)
私はこれまでアメリカ・イギリス・ドイツのIT企業での採用プロセスを経験しています。
プロセスの傾向はほとんどの地域で似たようなものでした。一言で表すとエンジニア力を知識や経験からでなく、実際のアウトプット・プロセスから判断されます。その点をきちんと対策立てて準備しておかないと、通過するのは難しいです。
私自身、海外企業に加え国内企業でも数社面接を行っています。
最終的に転職を完結したわけではありませんが、面接の傾向は把握しているつもりです。(※一部国内企業でも海外と同じような採用プロセスを採っている企業もありました。)
今回はそれらの経験から、海外企業へ初めて転職活動を考えている方のために海外ソフトウェアエンジニア転職の採用プロセスと対策について紹介します。
1. 応募
まずは、応募先企業を見つけて応募しましょう。当たり前のことですがビザの問題をクリアしていることが大前提です。
以下のどちらかになるのではないでしょうか。
- 労働ビザのスポンサーが必要
- ワーキングホリデービザを取得済み
転職サイトによっては、ビザのスポンサーを行っている企業でフィルタリングすることができます。見つからない場合は募集要項に目を通しましょう。それでも見つからない場合は、とりあえず応募してみても良いでしょう。国によってはビザスポンサー企業の一覧を公開しています。(例:イギリス)
「数を打てばどこか引っかかる」というのも一理ありますが、本当に行きたい企業であれば専用の履歴書・カバーレターを用意しましょう。それ以外はある程度自身のスキルとマッチしていればどんどん同じ履歴書で応募してしまって良いと思います。
その際、一社ずつ全力を注いで結果を待っていても時間の無駄です。企業によっては合否にかかわらず数週間後に返信をしてくる企業もあるので、行きたい企業があればどんどん応募しましょう。
応募の際に必要なのは履歴書(CV)とカバーレターに加え、企業毎に志望動機など独自の項目が設けられていることがあります。初めは面倒なのですが、一番初めに時間をかけて作成することで次回以降同じような質問に回答を使い回せます。メモ帳などにしっかりと残しておきましょう。
2. 書類審査(スクリーニング)
応募が完了すると、企業側で書類のスクリーニングが行われます。
返事待ちの期間は企業によってまちまちです。翌日、数日後に通知が来るところもあれば、数週間後に次のステップへということもありました。
会社の規模によって誰がスクリーニングを行うのか変わりますが、ほとんどの場合、人事が候補者をリスト化してエンジニアまたはエンジニアリングマネージャのスクリーニングが入ります。
大きな企業では数百・数千という単位で候補者をスクリーニングしなければいけません。
また大企業であればあるほど一般的なエンジニアスキルよりも、ピンポイントに特化したプログラミング言語や技術スタックの経験を重視します。企業の募集要項を確認して、ある程度キーワードを散りばめた方が良いでしょう。
逆に中小規模の会社であれば、ある程度スキルがマッチした履歴書に加えカバーレターも重視します。応募フォーム内でOptional扱いであっても、手を抜かずにしっかりと添付しましょう。
3. 人事電話面接
書類審査を通過すると、人事から30分ほどの電話面談をセッティングされます。空いている時間を合わせてスケジュールします。その際、時差の関係で時間の認識に齟齬がないよう、日本標準時(JST)または応募先のタイムゾーン表記を正確に記載して候補日程を指定しましょう。
一般的な内容
ほとんどの場合、以下の一般的な内容がメインでした。★は先方の企業側からの説明になります。
どの質問も採用プロセスに進む上で双方の認識にズレがないのか確認する意図がメインです。
一度、企業側の募集要項と私のズレに認識があったので、この時点でこちらから辞退したこともあります。(フルスタックとして働くことを想定していたら、先方は主にフロントサイドのエンジニアを求めていた等)
- 自己紹介
- 先方の企業紹介★
- ポジションの認識すり合わせ★
- こちら側の会社やポジションに対する印象
- 履歴書レビュー(プロジェクトや技術スタックに関する経験)
- キャリアチェンジの動機
- 最も苦労・成果をあげたプロジェクト など
- アジャイル開発の経験
- ビザの取得関連
- 出社開始予定日
- 希望給与
英語に難がある場合、この段階で落とされてしまうかもしれません。ある程度想定できる質問ばかりですので、しっかりと英語での回答を準備しておきましょう。
英語圏の企業でない場合、アクセントが強く聞き取りにくいことがあります。その場合は、「Do you mind repeating your question?」や自分で解釈した質問内容を相手に聞き返すなどしましょう。要点が不明なまま先に進んでしまうことは避けた方が無難です。
簡単な技術的内容
一社のみ、この段階で簡単な技術関連の質問を受けたことがあります。とはいえ、面接者は人事の方ですので基本的な内容がほとんどで、以下のような質問のレベル感です。
- 2進数から10進数への変換
- 基本的なLinuxコマンド
- 基本的なgitコマンド
- プログラミング言語特有の質問(goroutineとは、deferの使い所 等)
- vagrantとdockerの違い
- パブリッククラウドの経験
あくまでも私見ですが、面接者は回答にいくつかキーワードが含まれているのか程度の確認しかしていないと思います。こちらの回答に対して深堀りしてくることもなかったので。わからなければ、黙っていないでハッキリとわからないと伝えましょう。
4. コーディング課題
人事との面接を終えて、大きな失態を犯さなければ次のフェーズに進めます。
次はコーディング課題になる場合が多いです。
形式としては以下の3通りに分類できました。
印象としてはアメリカ系の企業はアルゴリズムなどのCS基礎力を確認する傾向があり、その他の地域ではより実践的なコーディングスキルの確認を好む傾向でした。
- Hackerrankなどのオンラインでのコーディング課題(制限時間あり)
- 簡単なアプリケーションのコーディング課題(1-2時間)
- アプリケーションのコーディング課題(最大1週間程度)
オンラインコーディング課題
まずはオンラインでのコーディング課題についてです。
最も多かったのがHackerrankでした。Hackerrankとはweb上で技術試験用の環境を提供しているサービスで、企業は作成した問題のリンクを候補者に渡します。候補者は指定の期日までに、そのテストに取り組みましょう。
問題形式は企業によって様々ですが、基本的なアルゴリズムやコーディング知識に関するものが多かったです。あまり特定の言語で回答するよう指定はありませんでしたが、企業やポジションによっては言語も要件に含まれるかもしれません。
アルゴリズムだけであれば90分で2-3問、総合的な課題であれば90分で簡単なプログラミング、プログラミング言語の知識、DB関連の知識、システム設計などが出題されることがありました。
提出型コーディング課題(1-2時間)
上のオンラインコーディングが一番メジャーでしたが、それ以外にも制限時間付きでアプリケーション実装の課題が出されることもありました。
企業側から要件がいくつか指定されるので、その要件を満たすようにアプリケーションを実装する課題です。例としては簡単なAPIやCRUDの実装など。
時間があればファイルをきちんと分けたり、テストを書いたりできれば良いと思いますが、基本的に時間内に要件を満たすコーディングができれば問題なくパスできます。
提出型コーディング課題(最大1週間程度)
個人的に一番大変なのが、この形式の課題です。普段仕事以外でコーディングしない私にとっては仕事終わりに、またコーディングか。。という部分で負担が大きく感じてしまうことと、時間をかけて取り組んでパスできなかったときの落胆が大きいからです(笑)
期限は特に指定されませんが、遅くとも1-2週間くらいで提出することが求められていると思います。
形式としては企業側から簡単な仕様を受け取り、実装、githubなどで共有して提出することが一般的ではないでしょうか。
課題に取り組む際は、事前に明らかかでない部分(仕様に関して)を明確にしましょう。このステップは軽視されがちですが大事な点だと思います。実際に働く際にも要件が明確でないまま実装を始めませんよね?
また、この規模の課題となると次の面接時に追加で質問を受けることもあります。ある程度意図をもってコーディングしておくと良いと思います。
追加の質問としては以下のようなものを考えておくと良いでしょう。
- 困難だったポイント(理想的な姿を明確にした回答)
- なぜ対象の言語・技術スタックを選択したのか(運用コストなどを考慮した回答)
- 提出したアプリケーションの改善点(耐障害性やスケール、パフォーマンス、本番環境で動作させることを考慮した回答)
5. 技術面接
続いてエンジニアによる技術面接です。
技術面接は1課題を45分ほどで回答し、1-5課題取り組むことが一般的です。面接の回数としては1-3回に分けて実施されることが多いと思います。
内容としては、「4. コーディング課題」と大きく隔たりはないと思いますが、大きく以下の2種類に大別できます。
- コーディング課題(アルゴリズム・アプリケーション)
- システム設計
コーディング課題では面接者がアルゴリズムやアプリケーションの要件を出題するので、それに回答していく形です。この際、無言で進めるのではなく何を考えているのか声に出して進めることが重要です。
アルゴリズム問題であれば、頭に浮かんだ数通りの回答(1通りだけでも)を簡単に説明し、それぞれの時間計算量と空間計算量を明確にする。その際、データ構造などにも言及することで、あなたがどのような思考で課題にアプローチしているのか把握することができます。間違った部分があれば指摘して、正しい方向へ導いてくれることもあるでしょう。
オンラインでの課題と明確に異なるのは正にこの点です。「いかに同僚と議論しながら進めていけるのか」を面接者は評価しているのです。
システム設計に関しても同様ですが、さらにコミュニケーションが重要だと言えます。
出題者は「〜のシステムを設計してください」としか伝えないことが大半です。この一言からあなたが、要件を整理し議論をリードしながらシステム設計に取り組んでいくことが必要です。
いずれにしても、これらの出題形式は日本国内のIT企業ではあまり見られることのないもので「慣れ」と「訓練」が必要な部分です。私自身も色々と対策を立ててから面接に臨んだので、それらの詳細についても今後まとめます。
6. マネジメント層面接
技術的な部分で問題がなければ、エンジニアリングマネージャーや部署のトップ、CEOなどの企業規模に応じたマネジメント層との面接へと進むことができます。
このステップはいわゆる標準的な採用面接として臨んで問題ないでしょう。企業側はあなたのプロフェッショナルな部分に問題がないか最終的な確認を行います。エンジニアマネージャーであれば多少、技術的な質問(★)も含まれるかもしれません。私が経験したのは以下のような質問です。
- 最も困難だったプロジェクトとその成果
- 直近プロジェクトの改善点
- 強みと弱み
- 同僚からの評価(強みと弱み)
- 理想的な・嫌いな上司の姿
- メンター手法(後輩の育て方)
- 同僚と意見が一致しないときの対処法
- 将来的なキャリアプラン
- 移住に関してどのように捉えているか
- ★マイクロサービスとモノリスの違い
- ★技術選定と基準
- ★好きな・嫌いな技術
7. オファー交渉
実際のところ、「4. コーディング課題 〜 6. マネジメント層面接」のプロセスは企業によって順番が前後したり、スキップされる部分もあるかもしれませんが、概ねこれらのステップがあることを想定して選考に臨みましょう。
晴れて、これら全てをパスするとオファーが提示されます。メールでのオファーが大半です。
※一般的にはオファーの前に現地オフィスへ招待されることが多いですが(または、技術面接を現地オフィスで行う)、2020年はCOVID-19の影響でどの企業もオフィスへの招待は控えているのではないかなと思います。実際に私も全てのプロセスがリモートで完結しました。
回答期限が明示されている場合は、そちらに従いましょう。受諾・ホールド・拒否にかかわらず数日内には回答するようにしましょう。
実際に別の企業の選考も残っている場合は、その旨を伝えて最終的な回答期限を聞き出すことも選択肢の一つです。オファー内容に不満がある場合は、その旨を伝えることも大事ですが、まずはオファーへの謝辞と丁寧な対応を心がけましょう。英語だからといって、ダイレクトな表現で自身の要求だけを提示するのはオススメしません。英語であっても丁寧な表現や遠回しな表現は存在します。
また実際に移住の手続きを進めるわけですので、どの部分までサポートを受けられるのかも確認することが必要です。引越し先の手配やスケジュール、ビザ申請・現地提出書類のサポート、契約書発行(ビザや現地での手続きの際、収入や身元保証として重要)などを確認するようにしましょう。