- ソフトウェア開発者の面接で課される「take-home assignment」の非効率性と、応募者の時間の無駄という問題を強調している
- Kagi Searchへの応募過程で、過度に広範で曖昧な課題要件を経験した
- 提案した具体的な実行計画に対して、マネージャーから明確なフィードバックがなく、非効率なコミュニケーションを経験した
- 心血を注いで開発したプロジェクトを提出した後、明確な理由のない不採用や基準変更などに不合理さを感じた
- より良い採用プロセスの代案(例: リアルタイムのコードレビュー)と、課題型面接の過度な要求に対する問題意識を共有している
序文
- Take-home assignmentとは、ソフトウェア開発者の面接で応募者に課題を出し、それをコードで実装して提出させる評価方式である
- 本記事は、評判の良い会社だと思っていたKagi Searchに応募し、実際に課された課題とその経験を通じて、この方式の不合理さと応募者の時間浪費の問題を指摘しようとするものである
Kagi Searchへの応募
- Kagi Searchのバックエンド開発者ポジションに履歴書を提出した
- 当該ロールの要件は次のとおり
- バックエンドシステム構築経験
- Go言語の活用能力
- 大規模バックエンドシステムの拡張・保守経験
- SREなどのチームメンバーとの協業能力
- Dockerなどのコンテナ技術の理解
面接課題の案内と要件
- 書類通過後、take-home assignmentの案内メールを受け取った
- 課題テーマ: 「最小限のターミナル風メールクライアントの実装」
- ターミナルまたはWebアプリ形式のいずれかを選択
- 基本的なメールの閲覧/送信機能
- ダミーまたは実際のメールバックエンド(IMAP/POPなど)を自由に選択
- plaintextメッセージ処理のみ必須で、rich textは不要
- プロジェクト提出: GitHubリポジトリ、デプロイ済み成果物、インストール案内文書を含む
- 明確なガイド不足があり、プロジェクト規模もかなり大きい
- 評判が良い会社だったこともあり、課題に取り組むことを決めた
マネージャーとのコミュニケーション
- 明確な課題範囲や追加機能について問い合わせても、「何を追加するかは応募者の自由」という曖昧な返答しか得られなかった
- 課題に時間と労力を投じる前に、**具体的な実行計画(Proposal)**を共有し、それに対する返答を求めたが、特別なフィードバックもないまま進行した
課題提案と計画
- 実行計画:
- GoベースのWebアプリ
- AWS ECS FargateによるデプロイとSSL適用
- メール送信サービス(Postmark)の連携
- ログイン/認証機能の追加
- メール送受信およびUI表示
- 技術選定の根拠:
- バックエンド職と関連する多様な技術を活用
- Infrastructure-as-Codeツールを用いた実践的なシステム構築
- 単純なAPI連携を超え、実サービスに近い機能を実装
- 主な実装要素:
- Pocketbase(backend/DB)、TEMPL(テンプレート)、Pulumi(IaC)、Postmark(メールサービス)
- ページネーション、ログインなどを実装
- Stretch Goal: データのバックアップと復旧などの安定性
- 結論: 事前に十分な説明と根拠を提示しており、それに対する明確な検討と返答を期待していた
マネージャーの返答とコミュニケーション上の問題
- 具体的な検討もなく、「興味深い提案」という短い返答しか得られなかった
- 提案の適切性や改善要求などのフィードバックは皆無だった
- 応募者の立場からすると、時間投資と労力に対する尊重が欠けていると感じられた
プロジェクト課題の実施
- 与えられた要件と提案事項をすべて実装し、丸1週間のフルタイムを投入した
- プロジェクトのデモ動画、GitHubリポジトリ、詳細な文書まで提出した
不採用通知とそれに対するフィードバック
- 自動化された不採用メールを受け取った後、フィードバックを求めて得た返答:
- 「より強力な応募者の提出物があった」「採用競争が激しい」
- 問題点
- 単純なソリューションを好むのであれば、最初から案内できたはず
- 提案が不十分だったのであれば、その時点でフィードバックできたはず
- 不採用後も求人は依然として掲載中であり、単なる競争ではなく過度な時間消費を要求していると判断された
- プロジェクト提出後に要件がさらに強化され、提出したソリューションがかえって基準を引き上げた形になった
結論と問題意識
- このような方式は多くの求職者にとって不合理であり、実質的に生活への脅威さえ伴う
- 過度な無給課題の要求については、拒否したり問題提起したりする必要があることを強調している
- プロジェクト型課題に代わる、リアルタイムのコードレビューなどより良い採用プロセスは可能である
- 実際の開発における問題解決能力は、非同期/同期のコードレビューなどで見極められる
- Leetcodeスタイルの問題解きと実務要件の乖離を指摘している
- 求職者の消耗と不当な評価の文化改善を訴えている
より良い採用手続きのための提案
- リアルタイムのコードレビュー方式など、開発者の能力をより意味のある形で評価する代案を提示している
- タイマー付きアルゴリズムパズル中心ではなく、実際の能力と問題解決力を重視する方向への変化の必要性を力説している
1件のコメント
Hacker Newsの意見
応募者の能力と仕事への熱意は認める。少し違う視点から意見を述べたかった。
「ターミナルに着想を得たメールクライアントを開発して顧客にアルファテストしてもらう」というのは、初期スタートアップのエンジニアに対して妥当な依頼だ。仕様がもう少しあったとしても、多くの部分はエンジニアの判断に委ねられる。応募者は確実性を求めすぎている。
Kagi が課題完了後にどんなフィードバックをくれるのかを事前に気にしているのは、あまり良い兆候ではない。確定的な回答ができる状況ではない。おそらく彼らは何百、何千件もの応募を評価しているのだろう。
もし要件の明確化が必要なかったのなら、いっそ「1〜10の数字当て」をさせて、外した人を落とすのと同じだ。
課題に力を入れて仕上げを良くしたことを理由に落とす事例には賛成できない。
こういう曖昧な課題は、結局のところ「カルチャーフィット」を見極める別の手段にすぎない。
「コード先行、フィードバックは後で」という文化は、キャリア上もっとも有害な経験だった。この応募者は現代的なソフトウェア実務に従っていた。(私は 1000 人超のエンジニアを抱える会社の採用担当だ)
私も前回の転職活動で広範な takehome 課題に取り組み、どの部分が評価基準なのかわからないまま落ちた。この経験以来、こうした課題に強い拒否感がある。
会社は時間を無駄にさせるくらいなら、その時点で課題を打ち切るべきだったと思う。
もっとも基本的なメール機能(メールを開くなど)すらなく、バックエンドエンジニア職への応募でありながら、実際には postmark や turso のような外部製品を使っており、基本機能(プレーンテキストの整形、表示、フォルダなど)の欠如も見られる。
管理ページやログインのような付加機能はあるが、メールヘッダーマップのような最低限のデータ構造すら欠けていた。
良いエンジニアである可能性はあるが、そのポジションには不適切だと判断する。
takehome の提案書もあまりに異例だと感じた。
最初の募集要項を読み直すと、「最小限のターミナル着想のメールクライアント」と aerc、mutt、himalaya などの参考例が明記されていた。これは明白な要件解釈ミスだ。
ターミナルまたは Web アプリ形式のメールクライアントで、基本機能の実装が求められていたのだから、それは満たしていたと思う。
ターミナルベースのツールから着想を得るという部分は主観的だ。バックエンド職なら UI に気を配ることが非効率かもしれないとも思う。
フィードバックだけでももらえれば成長に役立つはずだが、それすら現実的には難しいことが多い。
だから takehome 課題に懐疑的になる。応募者と採用側の双方に、互いの時間を尊重する姿勢が必要だ。
2〜3 時間あれば応募者の評価には十分だ。時間制限があれば、応募者もその範囲内で適切な解決策を示せただろうし、会社が何を望んでいるのかも明確だったはずだ。
また会社は、「どんな解答でも OK」なのか、「最良の解答を期待している」のかを明確に案内する必要がある。
takehome の意図がテスト通過なのか、ミッション達成率なのか、コード品質なのかなど、種類ごとに違うので応募者が混乱しうる。
むしろ時間のない忙しい人たちをふるい落とす危険が大きい。
うちの会社では、単純な ETL 問題を出して 4 時間制限を設けている。
全部解けなくても大丈夫なようにし、その後の follow-up ではコードレビューと質問の時間を設ける。
本当の実力はこの後続ミーティングで把握できる。
公平な時間単位が守られる現場課題と違い、takehome は人によって投入時間が違うため不利が生じうる。
それなら 1 時間のオンサイトコーディングの方が良い。応募者と面接官が同じ時間を投資してこそ、互いの時間の価値を尊重できる。
デモ動画では一般的な Web アプリしか見えない。aerc、mutt、himalaya など既存のターミナルメールクライアントから着想を得るよう、明示的に求められていた。
自分が何か見落としているのか気になる。
ターミナルクライアント特有の UX は、いまだに「正解」がない分野なので、むしろそこを評価基準にしていた可能性が高い。
課題を求めたのなら、必ず follow-up ミーティングを経るべきだと信じている。
もともと Kagi を有料で使っていたが、今回の件でアカウント削除を考えている。
候補者と話す余裕すらないなら、最初から課題そのものを要求すべきではない。
レビューまでしたのなら、フィードバックを受ける権利があると思う。
だが現実には、何十人もの優秀な応募者の中から 1 人だけ採るとなると、不採用は必ずしも「実力不足」を意味しない。
法的にも、「なぜ A を採って B を落としたのか」という公式回答は、あら探しのようなものにしかならないのが現実だ。
多くの会社はこの点をうまく処理している。
こうした要件の誤解が大きい場合、議論自体が省略されることはある。
会社は自律的で、自分で目標を立てられる人を求めていた。
曖昧さは、応募者が答えを多面的に探りながら解く力を見るためのものだった。
プロトタイプ中心の会社には向き不向きがあるので、ある候補者なら 10 分考えて 60 分以内で最大限のものを作れたかもしれない。
しかし開発者にとって、こうした質問力は非常に重要な資質だ。だからこそ、この採用方式にはもっと期待してしまうし、失望も大きくなる。
実際には曖昧な説明のせいであることも多い。
優れた教師は、できるだけ多くの人が理解できるようにする。混乱する学生が多いなら、問題は出題側にある。
大学生は不可の禅僧のように公案を解く必要などない。
以前は Vlad が直接応募者を評価していて、課題もこういう形式だった。
会社が大きくなるにつれ、今は別の人たちが評価しているようだ。
Vlad には HN スタイルの気質があり、「クールだ」と感じる応募者と働きたがる。
たとえば、長い設計文書を書いて「Galactor を使う予定で、プロジェクトは flop-ready です」などと言うと、完全に逆効果だ。
「ターミナル着想」という要求には、すべてのキーボードショートカットなど、実際にターミナルアプリで実装される細部まで期待する傾向がある。
こうした基準が良いフィルターかどうかは議論の余地があるが、その文脈を理解して通過できる力があれば、課題は簡単に見えるだろう。
Kagi がこうした文脈をもっと上手く伝えてくれていればよかった。時間が無駄になったのは残念だが、自分に合う会社を見つけてほしい。
多様性のないチームは、全員が同じ壁にぶつかって停滞することがある。
この現象はスタートアップで特に多く、10 社中 9 社が失敗する理由にも関係していると思う。
明確な基準なしに採点する課題は不公平だと思う。
結局は「自分の頭の中の答え」を当てろという暗黙の課題と変わらない。
人への配慮が足りない印象を受ける。
こういう文化なら、誰もが潜入捜査のように調べて把握しなければならなかったのか分からない。
私のような「クールではない」応募者でも、明確なシグナルを受け取ってすぐ別の会社を探せる方がよい。
こうした細部の不備のため、レビューをやめる。
簡単な設計提案書から実装課題まで、時間制限を明確にして進めていた。
結果として採用には至らず、明確な理由も知らされなかった。
応募者が多すぎたのだろうとは思うが、この経験は長い間感情面で強く残った。OP の気持ちはよくわかる。
それでも、自分が採用担当でも筆者は不採用にしていたと思う。
スタートアップは、迅速かつ実務的に動ける人材を求めている。
過去の同僚に、周囲の意見を集めてから何日も一人で没頭した結果、その間に要件がすでに変わってしまっていた、ということがあり、誰にとっても良いことではなかった。