オフショア現地エンジニアのレベルを上げるために示している指針

オフショア先エンジニアが十分な技術を持っていても、日本と世界のエンジニアにはテストに対する考え方の違いがいくらかあるように感じています。本記事では、HinodeLabo社がオフショア現地エンジニアのレベルを上げるために示している指針を紹介します。

エンジニアの責任範囲

以下は私の経験則であり、一般論を記載しているわけではありません。

そしてもちろん、一律に「〇〇人は」ということではありませんが、便宜上そのように表現します。

私は、ベトナム人、ミャンマー人、スリランカ人はもとより、中国人、アメリカ人、メキシコ人、ウクライナ人、ペルー人、さまざまな国籍のエンジニアと仕事をしたことがあります。

その中で感じたのは、日本人のエンジニアは自身でかなり細かくテストを行う傾向にあるのではないか、という点です。

そしてこれは、日本語のドキュメントだからそのようにできるのか、あるいは日本人が例外的なのかはわかりませんが、私の経験上は、日本人のエンジニアは正常系テストはもとより、異常系のテストも自身で行える人が、相対的に多いのではないかと思っています。

しかし、少なくとも日本から見た海外のエンジニアは、エンジニアのプログラミング業務と、テスターのテスト業務を、明確に分担する傾向にあるように感じます。

そのため、テスターが拾い上げる不具合数が、海外のエンジニアが作るソフトウェアでは、多いように思います。

これは分業に対する考え方の違いでしょうか。
ここでは、多数のプロジェクトを経験してきた弊社のデータとして、そのようなケースもあるのだということだけ述べておきます。

その日本流の習慣をグローバルスタンダートだと考えてはうまくいかないため、弊社では必ず日本人のテスターを各プロジェクトに配置するようにしています。

とはいえ、担当のエンジニアがあまりに未熟な場合、
「テスターにテストを依頼する前に、もう少しだけ、エンジニア自身でよくテストをしてくれないか」
と思うことが多々あることも事実です。

そのため、弊社ではエンジニア以下の行動指針を示しています。

エンジニアに求めるレベル

優秀なエンジニアを以下のように定義しています。

(1) お客様のビジネスモデルを深く理解し、システム仕様やUIの意図を深く理解できる
(2) 1度の検修依頼で、限りなく、実装漏れ0件、不具合0件、reopen0件の状態を目指す

この2つのクオリティが高い人を「優秀なエンジニア」と定義しています。

一般的な評価基準である
・FullStackで、いろいろなスキルを広く持っている
・早くコードを書くことができる
などの評価は、合格していることが最低条件となります。

(1)については、海外のエンジニアにとっては、日本語の問題もありえるため、
発注側の指示が悪いこともあれば、翻訳を行うコミュニケーターのスキル不足や、日本特有のビジネスモデルが理解しづらい、などの要因によって左右されることもあり得ます。

(2)については前述の通り日本特有の(ひいては弊社特有の)考え方かもしれません。
少なくとも私がご一緒させて頂いた日本人の、もちろん優秀なエンジニアの方は、
提出したコードに関して、
・極めて不具合が少なく
・仕様書に記載されている事項の実装漏れが少なく
・仕様の理解を間違えない
という傾向にあり、そのようなエンジニアさんと、たくさん出会っています。
(もちろんそれができない人もごまんといます。)

つまり、開発体制に
「テスターを必要としないレベル」で仕事を納品できるエンジニアを「優秀なエンジニア」と定義しています。

こうしたレベルのエンジニアをオフショア委託先には求めており、その具体的な対策として、
必ずタスクの終了時に、

  • エビデンスとなるスクリーンショットや動画をPullRequestなどに添付
  • どういうクエリでテストしたのか記載
など、その結果が第三者が見ても最もらしい状態であることまで確認したことを示してもらうようにしています。

「PMやSEが想定し得なかった例外系の処理や異常系の処理について、網羅的に考えて実装しましたよ」というアピールをしてもらうために、このような指針を策定しております。