ソフトウェアは以下の3つの存在に対して境界面を持ちます。
- ユーザ
- コンピュータ
- 開発者
もちろん、
- ユーザにとっては使いやすく
- コンピュータにとっては計算しやすく
- 開発者にとっては、保守も含めて開発しやすい
ソフトウェアが理想です。
必ずしもこれらは互いに対立するものではありませんが、
- 全てを1つにまとめる必用があること
- 人とコンピュータとでは得意/苦手なデータ構造やアルゴリズムが異なること
- 人は立場によって欲する情報が異なること
等の理由よって、トレードオフの関係になることもあり、
なかなか理想通りにはいきません。
これだけでも大変なのですが、ソフトウェア開発においては、
ユーザと顧客とが異なる場合も少なくありません。
たとえ顧客とソフトウェアの間に直接の接点はなくても、
何分お金を出して頂くスポンサー様です。
開発者は顧客を満足させるために、
いろいろと考えなければなりません。
開発者は、(コンピュータも含む)4種類の異なる方々を
満足させるソフトウェアを設計/実装する必要があります。
大変なわけです。