システム開発とは?
システム開発は、よく建築の工程に例えられます。
- 要件分析/ヒアリング
- 設計
- 構築/建築施工
- 試験/検査
- 導入/引渡
似ている両者ですが、大きく違う点を挙げると、
1.建築は一度設計すると何度も使いまわして建築することができる。完全注文建築では設計は1回しか使用しないが、その場合は相応に高額になる。
また注文建築であっても家を構成する要素はほぼ決まっており、細部に至るまで全く新規の構成要素のようなものはほぼ発生しない。
一方システム開発では同じ設計が使えるケースではソフトウェアをコピーできるため、構築そのものが発生しない。開発案件となる場合は必ず新設計になる。
ソフトウェアは極めて広範囲の分野に適用されるため、全く新規の解法を編み出さねばならないことが多い。
2.建築は物理的に見える/触れるものを造る。システム開発はUI部分こそ見えるが、ソフトウェアとして動作している大部分は見えないので開発会社の外からは規模感、複雑さが判り難い。
人は見えない部分のサイズを含めずに全体の規模感を暗黙に想定してしまうのでソフトウェアは実際より小規模で安価だという予断を持ちやすい。
3.建築は物理的な建材を相手にしているので「切ってしまった」「穴を開けてしまった」ものは元に戻せない、との暗黙の認識が共有されやすい。ソフトウェアはキーボードから打ち直すだけで簡単に変更/修正できると思われがちで、作る前の検討が真剣に実施されにくい。
そのため構築後の修正要求で費用が嵩む。
4.建築では設計変更したとき、どこに影響が波及するかが比較的明らかで、物理的距離が近い、繋がっている箇所に影響することがほとんど。ソフトウェアでは変更が影響する箇所がコード上の距離の近さだけでは判断できず、確証を持つには動作テストをするしか無い。
5.建築では既に構築済みの物件への増改築は土地の制限や法的な制限、物件に使用されている建材の老朽化等から、限られた条件でしか実施されない。ソフトウェアではそのような制限がないので何回もバージョンアップと称した増改築が実施される。
法改正などがあっても建築物は急に適法改修などできないので新規建築から適用、とされることがほとんどだが、
ソフトウェアは既存システムであっても期限までの適法改修が求められる(法令の改定等)。
ソフトウェアの増改築は既存部分への影響を鑑み、追加されるソフトウェアの規模だけでなく元になるシステムの規模にも影響されて手間が増える。
これらソフトウェア/システム開発ならでは、の事情は開発を行う仕事に従事していないと中々感覚的に分からないものです。
ですので「中の人」からシステム開発、特に受託開発でのコスト構造を解説したいと思います。
コンピュータには「当たり前」「当然」が無い
人間が仕事を新人さんに手ほどきしているとしましょう。
ベテランさんは相手の前提知識、例えば前職職歴や学校で専攻していたことを鑑み、彼/彼女が知らないはず、という部分だけを教えると思います。
例えば「このプログラムは毎日9時に経理の人が使うから・・・」と教えているとき、両者の間で暗黙に「午前9時」と了解しています。
何故なら「経理の人」が使うと言っているので午後9時ではないだろう、と常識を自然と当てはめるからです。
しかしコンピュータシステムに「09:00」と指示したらどうなるでしょうか。24時間制の指定なら運良く午前9時に実行されるでしょう。
12時間制の指定なら1日に2回動作するという意味になってしまうかも知れません。
この「当たり前」が要求仕様に書かれていなくてもプログラム上にはきっちり実装しなければお客様が期待したシステム挙動にならないので、仕様を「補完する」技術が求められ、当然その部分を実装するコストが発生するのです。