/note/tech

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

ソフトウェアは運用コストが極めて高い、という事である。運用コストには以下のようなものが含まれる:

  1. 既存のシステムを動かすためのコスト:サーバーの稼働、監視、エラー対応など

  2. システムを通常メンテナンスするコスト:サーバーのOSや使用しているライブラリをアップデートするような、システムの機能そのものを改修しなくても継続して利用していれば自然発生するメンテナンスコスト

  3. システムを改善するためのコスト:システムのUI/UXや機能を改善・改修するためにかかるコミュニケーション、及び実装コスト

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

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

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