わかるブログ

人生の後半に向かっていくにあたり、自分の引き出しの中身を色々書いて一旦空にし、新たに学びを深めていかざるを得ない環境を作ろうと思って始めたブログ

ソフトウェア開発は外注してはならない

日本の多くの企業はソフトウェア開発を外注しているが、ソフトウェアが事業のコアであれば、外注は絶対にしてはならない、と思う

 

ドワンゴの社長だった川上氏が、どこかで「ソフトウェアのいいところはソフトであること(つまりぐちゃぐちゃいじって改善できるところ)。日本人はソフトウェアをハードウェアのように扱ってしまっている」といった趣旨の発言をしているのを聞いたことがある。全くその通りだと思う。日本の企業の多くは、ソフトウェアを金型かなんかと勘違いしているんじゃないかと思うし、そもそもそういった企業の経営者の多くの発想は既にソフトウェアと水と油なわけである。

 

幾つかの企業でソフトウェア(=システムと同義で用いている)開発を手伝っていて痛感するのは、ソフトウェアは運用コストが極めて高い、という事である。運用コストには以下のようなものが含まれる:

  1. 既存のシステムを動かすためのコスト:サーバーの稼働、監視、エラー対応など
  2. システムを通常メンテナンスするコスト:サーバーのOSや使用しているライブラリをアップデートするような、システムの機能そのものを改修しなくても継続して利用していれば自然発生するメンテナンスコスト
  3. システムを改善するためのコスト:システムのUI/UXや機能を改善・改修するためにかかるコミュニケーション、及び実装コスト

 

ここで上記(3)に関し、重要な点が2つある:

A) このコスト、つまりシステムを改善するためのコストはソフトウェアの場合必ず発生し、しかもソフトウェアを重要視すればするほど(≒事業戦略のコアに位置付ければ位置付けるほど)大きくなるという事である。例えばマーケティングのためのWebサイトを作って運用を開始したとする。その担当者がちゃんと運用する気があれば、実際に公開してからユーザーの反応をみてUI/UXを変えたくなったり、あるいはキャンペーンが行われるたびに新しい素材を追加したり差し替えたりする必要が出てくるだろう。このようにシステムは、運用を開始してからが本番であり、逆に運用を開始して一度も改修されていないシステムはいわゆる「死んでいて」、放置されているだけだ。

 

B) 加えて、(3)に含まれるコミュニケーションコストが馬鹿にならない。つまり、どう改善したいか、というnon-エンジニアからの要望をエンジニアが実際にコーディングできるレベルに落とし込むために必要なコストである。これは、特に開発を外部ベンダーに依頼している場合、爆発的に大きくなる。なぜなら、その作りたいシステムに微塵も興味がない(単なる受託として受けている)人間に対して、一ミリも齟齬がないように要望を伝えなければいけなくなるからである。「いい感じでやっておいて」では済まないのである。多くの場合、どれほどコストをかけてもこのコミュニケーションがなかなかうまく行かず、結果としてクソなシステムが出来上がるのである。

 

上記のようなソフトウェアの特性を踏まえると、事業のコアとなるシステム開発については絶対に内製化したほうがいい。たとえ現状社内にエンジニアがゼロだとしても、時間はかかるかもしれないが採用から初めて構築したほうが得策である。何ならWebサイト程度なら、担当者自らコーディングを学んで作ってみればいい。外注する場合、当然外部ベンダーはかなりの金額を上乗せしてチャージしてくるが、逆に言えば、それでもROIを正当化できるシステムというのは極めて稀ではないかと思う。

 

欧米の企業はソフトウェアの特性がよくわかっていて、多くの企業がとにかく内製化しようとしているが、不思議と日本企業は外部ベンダーに依存するのがむしろ普通であり、だからこそSIerという巨大な業界が存在している。いい加減SIer業界は崩壊していく(実際に崩壊に向かっている)と思うが、システムを発注する側もシステムの特性を理解し、マインドを大きく変えないといけないと思う。