ある日の、アサインしたてのテックリード経験ありの業務委託エンジニアXさんとの会話。
ワイ「XさんがコーディングしたService Classのカバレッジが85%達してないので、テストコード実装してください!」
Xさん「いいえ。テストサマリーは100%になっています。」
ワイ(...カバレッジゆうたやん)「テストサマリーはテスト成功数/失敗数を表示しているところで、カバレッジとは別です。」
Xさん「そうですか。どうやったらカバレッジ85%になりますか?」
ワイ(えぇ...あんた面談でテスト実装のリードしてたゆうてたやん)「あー、Xさんの実装のケースだと、こういったケースの引数を渡せばここの処理到達できそうですね〜」
Xさん「すみません。カバレッジってなんですか?」
ポカーン
なんでこんなことが起こるの?
これは私のケースですが...
業務委託面談は正社員の面談とは異なり、面談前準備・面談時間をかけず、代替コストも正社員と比較して軽いため比較的雑にアサインを決めてしまうケースが多いと思います。
雑にアサインを決定してしまった結果
- 面談者/候補者間で認識のギャップが生まれる
- 営業や候補者の誇張したセールストークを鵜呑みにしてしまう
- 求めるスキルレベルに達していない
のではないかなと。
とわ言え、あまり工数をかけるのも非効率なので、業務委託面談についてちょっと真面目に考えてみました。
注意事項
個人的な見解であり、所属する会社、組織とは全く関係ありません
候補者の言葉に余計な推測を加えない
実際にあった例
候補者: 「このプロジェクトではPLとしてアサインされ、顧客との要件定義から開発メンバーのマネジメント、コードレビューまで担当しました。同時に、プレイヤーとしても開発を実施していました。」
このような発言から、私は以下のような解釈をしました。
- 顧客と直接要件について協議していた
- 要件定義書や設計書などのドキュメント全般を作成
- 開発チームのタスクやスケジュールの全てを管理
- 独立して開発を行う能力がある
しかし、実際の内容は以下のようなものでした。
- 顧客との調整はPMが主に行っており、直接の接点はなし
- 要件定義書は作成したが、開発者向けの基本設計や詳細設計のドキュメント作成の経験はなし
- 開発チームのタスクやスケジュールの管理は、PMが作成したタスクリストやWBSに基づき進行。要件やスコープの変更、遅延が発生した際の調整はPMが実施
- 開発経験は入力フォームの追加程度で、大規模な機能の実装経験はなし
すべてを詳しく確認するのは難しく、限られた時間内での確認は特に難易度が高いです。したがって、求めるポジションや役割に基づき、重要なポイントに焦点を当てて質問を絞ることが大切です。
たとえば、要件定義やビジネスサイドとのブリッジが主要な役割であれば、顧客との要件定義
について深く探る必要があり、開発のスキルが中心であれば、プレイヤーとしての開発経験
について詳しく聞くべきでしょう。
正直いえばなんでもできる人が欲しいので、広く浅く聞いてしまいがちなのですが、そんな人材は滅多にいません。
実際のコードを見せ、ディスカッションを通じてコーディング能力を確認する
これはもっと早くやるべきでした。
正直、業務委託面談でここまでやるべきかなぁ〜と考えていたのですが、この工程を挟むことで、かなりギャップが減ります。
正しい答えが出せるかも大切ですが、私はどういったコミュニケーションをとるかの方を重視しています。
例えば、
「こうでしょ、ここはこうでしょ。え〜こうでしょ!」
「いや〜それってどうなんですかねぇ〜(嘲笑)」
このような、少し攻撃的なコミュニケーションをとる方もいますし、
「最近コーディングしてないから分かんないっす!」
「Java...分かんないっす...」
なんでこの面談きた? って方もいます。
逆に、答えられなくても、
「すみません、この処理ってこういうことですか?」
このように、問題解決に向けて前向きなコミュニケーションをとる方もいます。これは実際の業務でも大事なスキルです。事前に確認することで、トラブルを減らせると考えています。
実際に、私はこういった問題を出しております。
下記のようなJavaのコードを10-15分程度の間で見せ、それに関する質問を投げかけます。
public class Fibonacci {
public static int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
public static void main(String[] args) {
int result = fibonacci(5);
System.out.println("Fibonacci(5) = " + result);
}
}
質問例:
Q.このコードを実行した際の出力結果は何ですか?
Q.このコードをレビューするとすれば、どのような指摘をあげますか?
言語モデルの活用に関する質問を取り入れる
近年、ChatGPTやGitHub Copilotのような言語モデルを活用したAI技術が急速に発展・普及しており、これらの技術を活用することで、エンジニアの情報処理能力に天と地の差が出ると考えております。
しかし、多くのエンジニアがまだこれらの技術に触れていないのも事実です。
セキュリティ上の制約や業務環境の問題で、これらの技術を導入することが難しいケースも存在します。ただ、このような最新の技術トレンドに疎いことは、エンジニアとしての情報収集能力や適応能力に疑問を感じさせます。
私は、現代のソフトウェアエンジニアにとって、言語モデルの理解や活用は必須のスキルの一つだと考えています。そこで、面接では、言語モデルをどのように活用しているか、またはなぜ活用していないのかの理由を質問しています。
まとめ
良い人材と働くことよりも環境・現場とマッチしていない人材と働かないことが大事。
なので、面談ではマッチしてない部分の確認を主軸で行うべきだなぁと思いました。
こんな観点もあるよ〜 や こんな質問も良いよ〜 などあればアドバイスをいただきたいです!