システム的配慮:目的と機能(規定)

http://d.hatena.ne.jp/mitty/20031229#p7
要点は、特殊な使い方まで、機能で解消すると、機能が複雑化して利用されないシステムになるという事です。

ソフトウェア技術者にわかる言葉で説明すると、ユースケースが多くなると、必要な機能が増え、理解する事が難しいシステムになるが、多くの人を満足する事ができる。しかし複雑なシステムは問題が多い。

という事なのですが、これをわかりやすく説明することが出来るか多少心配です。

ユースケースというのは、ソフトウェアの世界で使っている言葉ですが、今回の問題の場合は、様々な人の使われ方です。*1

さて、これを一般の人がわかる言葉で書き直そうとしているのだが、これが私にとって難しい。

[はてな]のキーワード機能を例にすると、キーワードを付けたキーワードは自動的にキーワードにリンクする機能。これは機能的に見てシンプルな考え方です。

これに、キーワードに対して、なんらかの機械的に出来る原則にもとずいて制限をかけるというのは、機能的に見てシンプルな考え方です。

ところが、話し合いの上、決定するというような機能は、非常に複雑な機能です。なぜなら、話し合いのプロセスを明確にする必要があるからです。

また、機能を増やして解消する方法は、ソフトウェア技術者がはまる大きな問題点で、作った人にしか、その機能の有用性が理解できないという問題と、使う側がシステムを理解しようとしなくなるという問題を持っています。
例えば、マイクロソフトのワードを使っている人がいると思いますが、スタイルシートや、アウトラインモードといった機能が付いています。使わないから、関係無いという風に割り切れればいいのですが、必ずこれを理解しないと使えないようだったらユーザーは離れてゆきます。

もう1つの難しい点は、ある機能を付け加える事で、他の機能の整合性が取れなくなる[機能の衝突](非直交性)があるが、これはおいておく。

というわけで、ソフトウェアをデザインするという事は、なるだけ少ない機能で、多くの利用者の使い方が出来るように、単純で強力な機能にまとめあげるという、デザインセンスが必要になります。

マフィーの法則に、主な原因は8割が1つの問題によって発生している。また、その1つの問題を排除すると、次の8割が1つの問題によって発生する事がわかり排除すると・・・無限に繰り返す。というのがある。

要はやりすぎるな。という点です。そういう風に考えると、機能を追加したり規定を追加するより、ある程度満足のゆく解消案を提示して、例外が発生しにくくする事が必要だと思います。

*1:概念は名詞じゃないと書いていましたが、名詞だそうです