メニュー

公開日:
8 min read
エンジニアリング

オフショア開発失敗の教科書:暗黙知と設計能力の欠如が生む惨劇

オフショア開発失敗の教科書:暗黙知と設計能力の欠如が生む惨劇のイメージ

第一章:都道府県がランダムに並ぶ営業支援システム

午後3時。クライアントから電話が鳴る。またか、と思いながら受話器を取る。

俺はコンサルタントだ。このクライアントが日本の開発会社に委託した営業支援システムの面倒を見ている。正確に言えば、管理しきれなくなったクライアントが俺に泣きついてきた。その開発会社は仕事をベトナムに丸投げしていた。

「都道府県の並びがおかしいんですが」

35年この業界にいる。Unix/Cの時代から生き残ってきた化石のような俺でも、この一言で背筋が凍った。都道府県の並びがおかしい?そんなことがあり得るのか?

画面を開く。確かに狂っている。東京の次に宮崎、その次に秋田。まるで酔っ払いがダーツを投げて決めたような順番だ。

「仕様です」

開発委託先から返ってきた答えはこれだった。500人のエンジニアを抱えるベトナムの会社に丸投げしているくせに、俺との直接のやり取りは許可しない。まるで伝言ゲームだ。俺は深いため息をついた。タバコでも吸いたくなったが、もう20年前にやめている。

第二章:暗黙知という名の常識

コードを追った。フロントエンドが悪いのかと思ったが、違った。バックエンドから都道府県リストを取得している。しかも、顧客データに存在する都道府県だけを抽出して送っているのだ。

graph TD subgraph "ベトナム人の発想" V1[顧客データ] --> V2[都道府県を抽出] V2 --> V3[存在する都道府県のみ] V3 --> V4[ランダムな順番で表示] V4 --> V5[東京<br/>宮崎<br/>秋田<br/>...] end subgraph "日本人の常識" J1[都道府県マスタ] --> J2[自治体コード順] J2 --> J3[47都道府県を全て表示] J3 --> J4[顧客データと照合] J4 --> J5[存在しない県は<br/>グレーアウト] J5 --> J6[北海道<br/>青森<br/>岩手<br/>...<br/>沖縄] end

なるほど、と思った瞬間、いや、なるほどじゃない、と自分を叱った。

さらに恐ろしいことに気づいた。この方式だと、顧客がいない都道府県は表示されない。たまたま数十万件のテストデータが全都道府県をカバーしていたから、問題が表面化しなかっただけだ。もし顧客が東京と大阪だけなら、選択肢は2つしか表示されない。

「なぜ愛知県が選べないんですか?」

そんなクレームが来てから気づくつもりだったのか。これをバグと認識できない開発者と、それを「仕様です」で済ます管理者。俺は恐怖すら感じた。時限爆弾を抱えたシステムを「完成」と呼ぶ神経が理解できない。

日本人なら小学生でも知っている。都道府県には順番がある。北から南へ、そして自治体コード。これは暗黙知だ。説明する必要すらない常識。だが、ベトナムの開発者にとって、日本の都道府県など外国の行政区画でしかない。俺だってアメリカの州を全部言えないし、並び順も知らない。彼らにとっては、ただの文字列の配列でしかないのだ。

だからこそ、管理者SEがいるんじゃないのか? Excelで画面設計をしているなら、日本人なら都道府県がランダムに並んでいれば違和感を持つはずだ。それを確認もせずに「仕様です」だと?寝言は寝て言え。

第三章:エラーメッセージという名の手抜き

さらに調査を進める。エラーハンドリングを見て、俺は乾いた笑いを漏らした。

   console.log('error getting list account');
message.error(API_ERROR_MESSAGE);

console.log('error getting account details by id');
message.error(API_ERROR_MESSAGE);

すべてのエラーが「API_ERROR_MESSAGE」。まるでソビエト時代の配給所だ。何を求めても同じものしか出てこない。 日本語化?そんな面倒なことはしない。指摘されなければ、エラーメッセージは全部同じでいい。これがベトナム流の効率化らしい。

第四章:管理という名の放棄

日本側には管理SEがいる。彼らは何をしているのか?答えは簡単だ。何もしていない。 Excelで作った画面デザインを「設計書」と呼び、あとはベトナムに丸投げ。 エンジニアリングの香りが1ミリもない。これをオフショア開発と呼ぶらしい。俺の知ってるものとはかなり違う。

本来のオフショア開発とは:

  • 要件定義:日本
  • 基本設計:日本
  • 詳細設計:日本が主導、一部オフショア
  • 実装:オフショア
  • テスト:両者で分担

だが、この案件は違った。全部丸投げ。500人いようが1000人いようが、設計能力がなければただの頭数だ。

第五章:7ヶ月という時間

納期から7ヶ月が過ぎていた。7ヶ月。赤ん坊なら寝返りを打ち、ハイハイを始める時間だ。だが、この営業支援システムは都道府県すらまともに表示できない。

クライアントが俺に告げた。 「もう、あの会社にバグ修正は無理です。直してもらえますか?」

俺は頷いた。やっと解放される。野良犬に餌をやり続ける日々から。

エピローグ:暗黙知の値段

本番環境に開発版をデプロイしたと言われたときから、俺はもう何も感じなくなっていた。この程度のことで驚いていたら、身が持たない。

オフショア開発は安い。確かに安い。だが、暗黙知は値段がつけられない。都道府県の並び順、エラーメッセージの適切な表示、本番環境と開発環境の区別。これらは日本では「常識」だが、世界では「仕様書に書かれていないこと」でしかない。

俺は静かにコードを修正し始めた。35年の経験を、都道府県の並び替えに使う。これが俺の仕事だ。シニカルな笑みを浮かべながら、俺はキーボードを叩く。

次は、どんな「常識」が「仕様外」として返ってくるのだろうか。


この物語は実話に基づいている。登場する企業、人物は実在するが、野良犬に罪はない。