※本記事は非常に古いため、新しく書き直した下記の記事を参照することをおすすめいたします。
いろいろな方とお話させて頂く中で必ず聞かれるのが「オフショアって品質どうなの?」ということです。皆様が品質に関して不安を抱かれるのはとても良くわかります。しかしこの点に関しては、プロジェクトにも依存しますし、委託する側と受託する側の相性にも依存します、としか回答できません。本記事では、「失敗」プロジェクトで開発会社側はどのような問題を抱えていることが多いかを紹介してみたいと思います。
最初にお断りしておきますが、本記事は「こういう会社は危険だ」というようなお話ではなく、下記のような点を踏まえて最適な委託先を選定されるのがよろしいですよ、という提案になります。
また、別の記事に書く予定ですが、「失敗」するようなプロジェクトは受託側である開発会社「のみ」の問題であることはまれで、往々にして委託側にも問題があることが多いです(それは日本国内のアウトソーシングも同じだと思います)。以上を前提にご覧いただければと思います。
どのような「失敗」が想定されるか
そもそも、「失敗」とはどのようなケースが想定されるのでしょうか。
私が様々なプロジェクトを見聞きしてきた限り、大体以下のようなケースに集約されます。
- 想定していたプロダクトと全く違うものが出来てしまう(結果、日本のベンダーに作り直してもらう)
- ものすごく遅延する
- 機能上は想定したものが出来ているが、動作が遅かったり、セキュリティが甘かったりして、修正すべき点がやたら多い
- あとで確認したらソースコードが大変なことになっている
なぜこのような事態に陥るのでしょうか。
以下に、開発会社側の問題点を列挙してみたいと思います。
開発実績と開発するプロダクトのマッチングが良くない
オフショアで一番難しいのは、要件を開発チームに正確に理解してもらうことです。
例えばECサイトやゲームアプリなど、開発者自身がユーザーになりうるアプリケーションであれば、似たようなアプリを探してきて参考として渡しておくとかなり理解は進みます。
しかし、特にビジネス向けプロダクトは開発者がユーザーになりえないケースが多いので仕様が伝わりづらかったりします。もしそのようなアプリケーションの開発、メンテをオフショアに委託することを検討している場合は(それを海外に投げるべきかどうかの判断は別として)、似たようなプロダクトの開発実績があるかどうかはかなり重要なポイントになります。
何らかの理由により(ありがちなのは上司の一存により)、実績のない開発会社に委託することになった場合は、要件を伝えるという最も上流で躓く確率が格段に上がります。
また、例え要件が正しく伝わったとしても開発実績が無いと、エラーハンドリングやログ出力、拡張性等を考慮した実装を期待するのはなかなか難しいのが実情です。
コミュニケーション方法が充実していない
ソフトウェア開発において、プロダクトオーナーと開発チーム間のコミュニケーションは非常に重要です。オフショアだと特に、海を隔てた物理的な距離と、外国人同士のコミュニケーションが前提になりますので、コミュニケーションの密度はどうしても薄まります。そのコミュニケーションギャップを以下に埋めるかは悩みどころです。
日系企業を主な顧客に持つオフショア開発会社は、主に下記のような体制を組んでいます。
- 日本支社を持ち、ブリッジができる社員を顧客企業のオフィスに常駐させる(いわゆるオンサイト)
- 発注側の社員に短期的、あるいは長期的にベトナムへ出張してもらい、開発チームと同じ空間でプロジェクトを進めてもらう
- 専門のブリッジエンジニアをアサインし、全てのコミュニケーションを橋渡しする
- 専門の翻訳をアサインし、メールやドキュメントを全て日越語翻訳する
また、コミュニケーション頻度を上げるため、様々なコミュニケーションチャネルに対応している企業が多いです。
- 直接の日本語での会話(同じ空間で仕事している場合に限って)
- メール
- チャット
- テレビ会議
このような体制は、発注側の予算や、日本側で用意できるリソースに大きく依存します。限られた予算とリソースの範囲内で、最も効果的なコミュニケーション方法を提供できる開発会社を選択することが重要になってきます。
品質保証の体制が整っていない
日本の企業がなかなかオフショアに踏み出せない主な原因は、コミュニケーション上の不安と品質です。品質を求めるレベルで担保できる体制を組めるかどうかも、委託先を探す上での一つの重要な判断基準です。
ベトナムの開発会社には一般的にテスターがいて、開発者が機能を開発した後に、きちんとテストケースを作ってテストをし、テスト報告書を作成しているところが多いです。ただ、私の意見ではこの程度の体制では不十分で、一般的な日本企業が求める品質には届かないことがあります。
テスター以外にも下記のような体制構築、あるいは資格保有をしている企業はありますので、求める品質レベルに応じて選定する必要があります。
<機能要件の保証>
- テストケース、テスト報告書の作成
- PHPUnit、JUnitなどで単体テストコードを書き、ある程度のカバレッジレートを確保
- Seleniumなどを使用したインターフェイステストの自動化、デグレ防止
- テスト環境に頻繁にデプロイし、想定していた要件と、実際出来上がったものの早期すり合わせ
<非機能要件の保証、資格等>
- 非機能要件も含めた要件定義書の作成、提案
- ソースコードの静的解析
- ソースコードレビュー
- ツールを使用したセキュリティテスト
- ISO国際標準規格の取得
- CMMI取得
- インシデントやベストプラクティスの社内共有
ローカル企業、あるいはフリーランサーは特に単価が安い分、体制が不十分だったりします。テスターもいない、開発者もまともにテストしていない、というようなチームを私は数多く見てきました。そのようなチームが、一般的な日本企業が納得するような品質を出すのはなかなか難しいでしょう。
評判を周りの誰からも聞いたことがないようなところに委託
あまりないケースだとは思いますが、ネットなどで検索して、なんとなく評判良さそうだとか、想像以上に安いからなどの理由で決めてしまうのは非常に危険です。お知り合いの方や開発会社に実際の生の声を聞けるのが一番確実です。
それでもどうしても試してみたい場合は、小さく、失敗しても問題ないプロジェクトで試運転してみて、その結果をみてその後どうするか判断するなど、慎重に進めることを強くおすすめします。
私自身も、グローバルに開発者をマッチングする某ウェブサイトで自分のプロダクトのプロトタイプ開発をベトナム人フリーランサーチームに依頼したことがあります。私はその時点ですでにある程度のベトナムでの開発経験があり、経験値の低い開発チームでもそれなりにコントロールできる自信はありました。
その時は、約1.5ヶ月エンジニア2名稼働していたので、実質3人月です。費用は600USDでしたので、単価に直すと200USD/人月という信じられない安さです。
そのプロジェクトで、一応製品は出来たことは出来たのですが、当初の計画に対してかなり遅延しましたし、品質の面もかなり妥協しました。正直、自分で作ったほうが早かったですし、品質もコントロール出来たので、ほとんど意味のないプロジェクトでした。皆様がこのような不幸に見舞われないよう、敢えて自分の恥を晒すことで、本ブログを締めたいと思います。