ボーイング737におけるソフトウェア外注の結果

Boeing’s 737 Max Software Outsourced to $9-an-Hour Engineers

長い原文を私から見て要約/意訳するとこうなります。

  • ボーイングは航空ソフトウェアの開発費を減らすためにオフショアを企業戦略として大々的に検討。H1B ビザで渡米している優秀な技術者に頼ると時給 $35 になるのを減らしたかった。
  • 時給の安いインドのソフトウェア開発企業に外注することに決めた。中には時給 $9 の人も。
  • ただし、この企業は航空ソフトウェアの開発経験がなかった。
  • ボーイングはこのインド企業に、できるだけ上位の仕様を送り、より下位の仕事を任せるようにした。
  • その結果、航空業界人から見れば自明な仕様の理解に 18 回もやりとりするなど、ボーイングの社員はより多くの監督作業をすることになった。
  • 作られたソフトウェアは、ボーイングが培ってきた設計原則に違反していた。テストもろくにされなかった。
  • 監督作業や彼らの誤りの修正を換算すると、安くしたはずの時給は $80 にもなっていた。
  • ボーイングのベテランエンジニアは、「ボーイングの設計者の能力は時間と共に低下しているように見える」と語った。
  • 結局、新製品の市場投入は 3年も遅れ、予算も数十億ドルオーバーした。
  • ソフトウェアの欠陥によって、2018年10月と2019年3月に2件の墜落事故を起こし、346人が死亡した。
  • 長年ボーイングの技術者を務め、2015年から CEO となった Dennis Muilenburg は「これまで外注していたソフトウェア開発を内製に戻す」と述べた。

私の知識と経験では、高品質なソフトウェアを開発するには、医者が持つような体系的知識とスキルに加え、数学者やアーティストのようなセンスが求められます。 ユーザビリティが重視されるゲームやモバイルアプリ、セーフティが重視される自動車や医療機器など、製品分野によって求められる品質は異なりますが、 ベースとなる知識・スキル・センスは同じです。重要なのは素人にはできないということです。

素人でも、高校までに文系でも概ね身につくであろう命題論理・述語論理をもとに要求仕様を自然言語で書き、簡単なループや条件分岐のあるコードを書くことは 見よう見まねで可能でしょう。しかし、それだけでは、影響範囲を局所化して再利用するための構造設計、高速なアルゴリズムの設計、システムの一部が故障しても継続稼働可能な信頼性、バグを狙い撃つテスト設計、 成果物間のトレーサビリティ確保、円滑なバリューストリームを実現するツールチェーン、ソフトウェアの特徴を考慮したプロジェクトマネジメントと品質保証といった、 高品質ソフトウェアに求められるエンジニアリングは到底実現できないことでしょう。

中には、工学や科学を専攻していなくとも、独学と実務経験をもとにソフトウェアエンジニアリングのスキルを身につける方々がいます。 大学でソフトウェアを学んだ人を追い抜くケースも見ますが、そう多いものではありません。

なので、企業は能力の高い人材を探したり、育つ仕組みを整備することが重要です。 そして、そのような人が自国に限られるのであれば、海外に活路を求めるというのは良策かと思います。 それはオフショアという呼び方かもしれませんし、その企業のグローバル開発拠点かもしれません。

逆に、人件費を下げたいだけがために経済発展途上国の企業に外注すると、自分の首を絞める結果となるのではないかと考えます。 ボーイングの件は、それを示す良例ではないでしょうか。

それは能力不足によることだけではありません。 オフショアに限らず外注の場合、要求仕様に基づくものさえ作れば売り上げることができるので、ユーザーにとって価値のないソフトウェアを作るリスクがあります。

外注か内製かについて、どのような条件であれば、どのようなバランスをとるのがビジネス上最適なのか。 それを工学的、統計的に示すには多くの実験をしなければなりません。

そのような工学的、統計的な判断を時間をかけて行うか、 センスや信念をもとに素早く定性的な判断をするかという概ねの二択があります。 企業にとっては前者を選択する余裕は無いと思います。 ボーイングはソフトウェアエンジニアリングにおけるセンスのない経営者が後者を選択して失敗したのではないかと想像しました。

さて、このブログがソフトウェア開発に携わる誰かの目に留まり、何らかの意思決定に影響するでしょうか。はてさて。