inSmartBank

AI家計簿アプリ「ワンバンク」を開発・運営する株式会社スマートバンクの Tech Blog です。より幅広いテーマはnoteで発信中です https://note.com/smartbankinc

株式会社スマートバンクの技術面接を再設計するときに考えたこと 〜過去問を公開します〜

こんにちは!株式会社スマートバンクでサーバーサイドエンジニアをしている mitani です。

このブログでは、株式会社スマートバンクでサーバーサイドエンジニアの技術面接をどのように行っているのか、過去の方法と課題点、そしてアップデートした今の形について紹介したいと思います。

株式会社スマートバンクのバリューの一つBe Openに従って、このブログでは皆さんに公開できるギリギリまで我々の採用にかける姿勢をお伝えしようと思います💎

TL;DR

  • 技術面接では①仕様を漏れなく正確に理解する力②仕様を理解しアプリケーションのモデルに落とし込む力の2点を重視しています
  • 過去のスキルチェックのお題と問題点を公開します
  • 限りある時間のなかでお互いのマッチング度をできるだけ確認できるように問題を再設計し、普段の力が発揮できるように事前のドキュメントで予習をできるようにしました

株式会社スマートバンクの選考フロー

株式会社スマートバンクの選考フローは職種に関係なく以下の流れになっており、一次面接で各職種の専門スキルを確かめるため、いわゆる技術面接を行っています。

  1. 書類選考
  2. 一次面接(= 技術面接)
  3. 二次面接
  4. 最終面接

smartbank.co.jp

二次面接では過去に成果を出したエピソードを掘り下げる形で、いくつかの評価観点から問題解決力を確認しています。二次面接ではエンジニア以外にもPMやBizDevなど他職種の面接官も参加する形をとっているため、一次面接ではサーバーサイドエンジニアとしての専門スキルを主に確認し、二次面接では専門スキルに依らない問題解決思考や行動に関して確認するという流れとなっています。

技術面接で確認したいこと

技術面接には過去に実装したシステムについて質問したり、コーディングテストを行ったりと色々な形式があります。それぞれの会社・組織で重視しているポイントに合わせて面接を設計していると思いますが、株式会社スマートバンクの技術面接で重視したいポイントは次の2点です。

  1. 仕様を漏れなく正確に理解する力
  2. 仕様を理解しアプリケーションのモデルに落とし込む力

なぜなら弊社のサーバサイドエンジニアには次のような職務特徴があるからです。

  • サーバーサイドアプリケーションの設計・実装タスクに集中できる環境
    • B/43はスマホアプリの提供のみで、Webサイトを提供していないためフロントエンドの技術の必要性が低いです(社内の管理画面はReactを使用)
    • SREチームがいるため、インフラの管理はお任せしています
  • 機能改修よりも新機能開発が多いフェーズ
    • PJが立ち上がってからはデータフローやテーブル設計、API設計から関与することが多いです
    • また外部のSaaSと連携して開発する機能も多く、他サービスの仕様書を理解して設計する機会も多いです
  • プロダクトの複雑性が高い
    • B/43はカード決済機能、家計管理機能、マイカード・ペアカード・ジュニアカードといった複数の口座種別を管理する機能などが組み合わさってできており、リリースから2年ちょっとのフェーズにしてはアプリケーションのモデル数やコード行数が多く、ドメイン知識の理解が難しいです
    • 参考までにRailsのControllerが227クラス、Modelが722クラス、テーブルが340個ほどあります

技術面接の流れ

上記の内容を確認するため、以下のようなステップで技術面接を行っています。

  1. 自己紹介
  2. 過去に開発したシステムや開発フローについて確認
  3. ある機能を実装するための設計をしてもらうスキルチェック

2のステップでは過去に開発されてきた経験をB/43の開発に活かせそうかだったり、得意としている技術領域、チームでの開発経験について確認しています。3のスキルチェックのステップがメインとなり、ここで仕様把握力や設計力を確認しています。

上記の技術面接のステップは今も昔も変わらないのですが、3のスキルチェックの”お題”を2022年の夏頃からアップデートし始め、今年の春頃に新しい技術面接をリリースしました。

過去のスキルチェックの内容と課題点

まずは過去のスキルチェックの紹介です。今はお題をアップデートしているので、このブログでは過去のお題をそのまま公開してみようと思います。当時は以下のように、B/43のホーム画面にある過去の取引履歴を一覧表示するタイムライン機能をお題に、既にあるテーブルを拡張して仕様を満たすテーブルを設計するものでした。面接では面接官から一つずつ仕様を説明し、仕様を満たすためにシステムに加えるべき変更を口頭で説明いただく流れとなっていました。

過去の技術面接お題1

過去の技術面接お題2

このような形にした理由として、面接中にお見せする上記資料から仕様を読み取り、不明な部分については口頭で質問をしてもらいながら仕様の理解力やコミュニケーションの取り方を確認したり、1対多リレーションや正規化の方法などのテーブル設計力を確認するためでした。

このお題でのスキルチェックは2年ほど利用しており十分ワークしていたものの、以下のような課題もありました。

候補者にとっての課題

  • 面接という緊張する場で当日スライドを使って仕様が説明されるため、細かい仕様の把握が困難でした。また、質問しなければクリアにしにくい仕様もあり間違い探し的な要素が含まれていました
  • 問題数が多く1問あたりにかけられる時間が限られていました。じっくり時間をかけて考えるのは得意だけど短時間で瞬発的に回答するのが苦手な方にとっては不利になる進行になっていました

面接官にとっての課題

  • スライドを使ったディスカッション形式で面接を進めていたため、進め方や説明内容に多少のアドリブが必要となり、技術面接の面接官の育成に一定のハードルがありました
  • 既にあるテーブルを拡張する形式のため、一般的なテーブル設計のスキルのうち確認できるものが絞られており、候補者の方の回答内容によって確認できる内容が左右されていました
  • 評価をする際に上に記載した候補者にとっての課題の内容を加味して調整することがあり、評価軸がブレてしまうことがありました

上記課題感が高まり、2022年の夏頃からスキルチェックのお題と進め方を改善すべくアップデートPJが立ち上がりました。 CTO の @yutadayo@ohbaryeと共に、上記のような課題点を踏まえてどのような問題設計にすれば自分たちが確認したい事項をブレなく公平に確認ができるかを議論してきました。

アップデートした内容

新しいスキルチェックのお題はお見せすることができないのですが、旧Verの課題を踏まえた新しい方針と悩みポイントをお伝えしたいと思います。アップデートする際には以下の方針で問題設計をすることにしました。

  1. テーブル設計の基本的なスキルを確認できるように課題を作る
  2. “隠れた仕様” を作らず、全ての仕様が記載されたドキュメントをお渡しする
  3. ドキュメントは面接前にお渡しして、内容を事前に理解してもらう
  4. ディスカッションのみの形式をやめて、設問ごとに一人で作業 → 完了後に質疑応答の形式に変更する
  5. すべての情報をドキュメントに載せるようにして面接官ごとの説明のばらつきを抑えつつ、評価軸も明確にすることで育成ハードルを下げる

アップデートする際に何度も議論して悩んだポイントとしては、下のようなものがあります。

  • 宿題形式にして回答を持ってきてもらうか?当日回答してもらう形式にするか?
    • 🤔 力を十分に発揮してもらうには宿題形式で事前にやってもらう方が適していそうでしたが、その分準備含めた時間を取ってもらうことになり候補者の負担になるのではないかと懸念していました
    • ✅ 当日に使うドキュメントを事前に配布してある程度準備は可能とし、回答は当日してもらうことでそこまで負担を増やさない形式にしました
  • 時間をどの程度まで伸ばしても良いか?
    • 🤔 新しい方式では候補者にじっくり考えてもらう時間を設定したかったため、トータルの時間が旧Verよりも長くなってしまい、どこまで許容できるか検討しました
    • ✅ 旧Verよりも長くはなってしまいましたが、お題を見直すなどして一部短縮しました
  • 各設問の正答例の準備
    • 🤔 あるお題に対してテーブル設計は一つになるとは限りません。重要視するポイントによって幾つかのパターンがあるため、設計パターンごとのメリット・デメリットを話し合いました
    • ✅ 社内で複数名で実際にテストを受けてみて出てきた回答例を使いながら良し悪しをディスカッションし、回答例のパターンを作成しました
  • 合格の基準をどこに設定するか?
    • 🤔 お題は複数の設問から構成されているので、どこまで答えれれば合格と判断するのかを話し合いました
    • ✅ 社内のグレードと照らし合わせて設問ごとの想定グレードを設定し、その時の採用戦略に応じて合否ラインを設定できるようにしました

アップデートしてみて

技術面接にアサインされる人には、必ず新Verを模擬で受けてもらってから面接官になってもらうようにしています。また新Verで何名かに実際に受けてもらった感触として、

  1. 旧Verよりも設問毎に回答例を準備しチェックポイントが明確化されたことで面接官の共通認識が作りやすくなりました
  2. ドキュメントに記載されてない仕様は一切考慮しなくて良いとなったので、より公平に確認できるようになりました
  3. 候補者が自分の作業内容や考えを説明する時間をたっぷりとることでより業務でのディスカッションに近い形式となりました
  4. 候補者の方に一人で作業してもらう時間を増やしたことで、作業中に次の質問内容などを考える時間が増え、余裕を持って進められるようになりました
  5. ディスカッションがメインの旧Verでは、候補者の発言を解釈するときに面接官の間でズレが発生することがありましたが、作業しながら回答を書いてもらうことでズレが発生しにくくなりました

といった良いフィードバックを得られました。一方で旧Verに比べてスキルチェックの時間を長めに取るように変更したため、候補者の負担が増している面もあります。今後は何度か経験する中で省略しても良い設問などを見直して短い時間で同じ質で確認したい内容をチェックできるように更にアップデートしていきたいと考えています。

終わりに

技術面接は限られた時間の中で、決められた課題を解いてもらう形式をとっているため、候補者の方の能力を正確に確認することは難しいと考えています。技術領域にも得意・不得意があったり、面接という場の緊張感・ストレスで普段なら何気なく答えられることに時間がかかったり、パッと出てこなかったりすることも多々あると思います。

今回のアップデートでは、限りある時間のなかでお互いのマッチング度を確認できるように問題を再設計し、できるだけ普段の力が発揮できるように面接用ドキュメントを事前にお渡しして予習ができるようにしました。

技術面接と聞くと”難しそう”とか”怖そう”と感じる方もいらっしゃると思いますが、このブログを公開することで少しでも面接に臨む心理的ハードルを下げたり、受けてみたいと思ってくださる人が現れてくれれば幸いです!Be Open!

株式会社スマートバンクではプロダクト以外にもこういった技術面接や二次面接の内容を定期的に振り返って改善していく活動を日々行なっています。そうした活動の裏話や、それ以外にも行なってる活動に興味がある方はぜひカジュアル面談でお話しましょう!

smartbank.co.jp

speakerdeck.com

We create the new normal of easy budgeting, easy banking, and easy living.
In this tech blog, engineers and other members will share their insights.