見出し画像

「汎用性」とは? ー 汎用的であることはシステムの理想形じゃない

システム開発をしていると「汎用」って言葉をよく耳にします。「今は決められないから、汎用的なしくみにしておいて後から変更対応できるようにしておきましょう。」なんて、よく耳にしませんか?

汎用性が高いっていうと、多くの場合イメージされるのはさまざまな状況の変化や使い手に対応した柔軟性のことを指しているように思います。

ただ、ここには落とし穴があります。この言葉を使う時はたいてい、柔軟性のみに焦点を置いた議論になっているからです。するとどうしたって、汎用性の高いもののほうが優れているという判断になります。

ここで思考停止してしまうと、これ以外の答えは出てきません。「将来的にビジネスがどう変化するかもわからない。今はこの規模だけど将来的にもっと多角的な業務に発展している可能性がある。それを今推し量ることができない。(これって当たり前で、むしろ問題の先送りだと思いますが)だから「汎用的」なしくみを採用しておこうじゃないか!」十中八九このような結論になります。

汎用型 vs シャア専用

汎用的っていうのはようするに、応用が効いて誰でも使えるっていうことです。量産型のザクのようなものです。戦闘力で言ったらシャア専用にはかなわない。

でも、職場での議論を聞いていると、汎用性っていう言葉がでた時点で、結論は「量産型ザク」に決まってしまうんです。そうやって、みんなザクに乗って他社のガンダムとやりあおうとしているわけです。

シャアザクは、シャアだから乗りこなせる?

シャアザクはシャアだから乗りこなせるんだよ、そう言う人がいます。それはある意味正しいと思います。でも、シャアという言葉をプロフェッショナルという言葉に置換えてみると、少しそのハードルが下がった見方ができます。みなさんはもう何年、何十年も携わっている自身の職業に対して少なからず専門性を持っているはずです。程度の違いこそあれ、あなたの専門分野に限って言えばあなたはすでにその道のシャア・アズナブルなんです。

もうちょっとわかりやすく、レーシングカーで考えてみましょう。速さを競うという「専門」に特化しているからこそ、フカフカのシートはいらないし、カーステレオだっていらないし、後部座席だっていらないし、内装もいらない。それよりも必要なのは軽量化です。シフトギアやエンジンや足回りもパワーよりもスピード特化に際どいチューニングをするでしょう。乗り心地よりもスピードに特化するために「削ぎ落とす」のが専用性です。そうやってできているのがF1です。

一方で、もしかしたらお客様を乗せるかもしれないからちょっといいシートがあったほうがいいかもしれない。せっかくなら荷物運びにも使うかもしれない。後部座席もつけて、トランクもあればほしいし、なんて無限に続く未来の不確定要素を決めきれない。そうやって汎用性の高いちょっといいオプションを付けたカローラを選択することになってませんか?

自分たちがなんの専門家で、何に特化した機能が必要で、何が不要なのかが「自分たちで決めきれない」ということです。それは専門性の欠如から来ています。シャアザクにはシャアしか乗れない。それは、シャアにとっての必要最低限に機能が絞り込まれているからです。それだけ自分に必要なものが極限まで理解され再現されているということです。

わたしたちが汎用性を選択するとき、ほとんどの場合は「決断できない」ことに対する将来の安心を買っているだけなのだ、ということにそろそろ気がついたほうがよいと思います。

公共バスと汎用性

なんだか、汎用性は悪だ!みたいになってますけども、決してそんなことが言いたいわけではありません。汎用性を選択するのか専用性を選択するのかは時と場所を選びますよ、ということがいいたいのです。

公共バスなどをイメージしてみるといいと思います。様々な人が利用するからこそ、乗車券の発行が必要だったり、料金体系が必要だったり、三丁目から乗車する人もいれば、駅北口から乗車する人もいて、途中下車する人もいます。そういった様々な利用者に対応できるようにしたのが公共バスのしくみです。考慮すべき範囲が広く複雑化するため、むしろ本来は汎用的なしくみを選択することのほうがより高度で綿密な設計思想を要求されるものです。これが汎用性のあるべき姿です。

専用型はそこに特化したもの以外は「いらない!」と切り捨てるので、それだけ考慮すべき設計範囲が狭くてすみます。だからこそ、その一点に注力できるのです。

汎用性は何かを犠牲にしているという視点

停留所と停留所のちょうど真ん中あたりで降りたい時なんか、よく「あぁ、ここで降ろしてくれたらいいのに。。。」なんて思うことがあります。汎用的なしくみにはそういう融通が効かないところがあります。

単に、利用者の要望を叶えるだけであれば、わざわざそんなしくみなんて作らずに一人一台専用車が用意できるのがいいわけです。乗客が乗りたい時間に乗りたい車に乗って、降りたい場所で降りれるのが一番いいに決まっています。でも、利用者が増えてくるとそんなことできません。限られた予算で、より多くの異なる目的をもった乗客をなるべくスムーズに手間のかからない方法で輸送するために「公共バスのしくみ」はあります。適用範囲が広くなる分「汎用性を予測できる範囲に限定する」必要があるということです。そのために料金体系を固定化したり乗降できる停留所の位置や時間を制限して設計されているのです。

汎用的な設計の裏には、ほぼ必ず何か別の利便性が犠牲になっているという視点を忘れないことが大切です。システムが複雑になり運用性が落ちたり、返って他のシステムとの連携ができなくなったり、速度が遅くなったり、それは専門知識がないと表から見えないこともあります。いずれにしても汎用性とは単一化させることのできない複雑さからくるので、なんの犠牲もなく汎用性が実現できることはまずありません。

それでも、公共バスのようにしくみとして汎用性が必要なケースは必ずあります。だから、それを選択しようとしているとき、それとトレードオフになっている制約はなんなのかを見極めることがとても大事だと思います。

追加作業はどのみち必要

汎用的に作っておけば、将来何かがあっても追加作業が不要になるなんて思っているかもしれませんが、そんなことはまずありません。

(公共バスのように「予め予測された範囲内で起こる」汎用性であれば別ですが)その汎用性って「予測不能だから」という理由で残した機能ですよね、、、。トランクが付いているから荷物の運搬にも使えますよ!って言われていたのに、いざ使おうと思ったらスーツケース二個しか入らないじゃないか。。。ガタガタ揺れるもんだから運んでいたものが破損してしまったじゃないか。。。結局、トランクの大きさを拡張する修正をしたり、衝撃に耐性のある構造を埋め込んだり、追加作業がその新案件が発案(要件が明確化)されたタイミングで必ず必要になります。無計画に汎用的だからといって残した「ありもの」を活かそうとして、機能はどんどんハリボテ化していきます。複雑化するので不具合も起きやすくなるし、障害時の原因究明や復旧作業にも手間がかかります。そのくせ何者にも特化しない汎用型の中途半端さも残るのです。

不具合続きの銀行システムなども、おそらくはいろんな銀行のお客様との繋ぎこみや機能を「汎用的に」残し、予測しうる運用の範囲を限定せずにシステムの方を無尽蔵に拡張しながら、どんどんハリボテ化していったのではないかと想像しています。システムは思っている以上に有機的で複雑に絡み合う生体のような構造を持っています。一度その溝にハマると身動きが取れなくなります。わたし自身も(そんな大規模なシステムじゃないですけども)顧客からの決まりきらない要望を汎用性という言葉で押し通してハリボテのようなしくみを構築してしまったことがあります。その後、数年間そのシステムに深夜に電話で叩き起こされ悩まされることになりました。だから、「汎用性」という言葉を軽率に口にされると、わたしのこめかみのあたりの筋肉が未だにピクリと反応してしまうのです(笑)

追加作業(費用)は、どのみち必要になるもんさ。

「汎用的」って言葉が会議に登場したら、この言葉を一回声に出してつぶやいてみてください(笑)それで、きっと半年後の状況が救われます。

予測された汎用性

繰り返しますが、決して汎用的な設計が悪いって言っているわけではありません。量産型のザクや、汎用的なジムだって絶対に必要なんです。船外作業にガンダムを出動させるのはどう考えたって不相応です。

だから、「汎用的」な何かを選択しようとしているとき、それは「予測された汎用性」に適用されるものかどうか?ということをまずは目安にすることです。もしそうであるなら、それは必要な機能です。

一方で、将来の予測不能な事案に対して、「決めきらない・安心だから」という理由で選択するのであれば、おそらく将来何かしらの問題の原因になるでしょう。なぜなら、汎用的なしくみを採用することで多くの場合はバーターとなる機能や品質、構造を犠牲にするからです。どのちみ追加作業は必要だと一言つぶやいて一旦冷静になってみましょう。

現場からは以上です。

りなる



この記事が気に入ったらサポートをしてみませんか?