システム設計とは、要求を満たすアーキテクチャ、モジュール構成、インターフェイス、データ構造などを定義することです。
通常システム設計者は、細かな専門ドメインの知識は必要なくとも、幅広い分野での知識が要求されます。当然システムの規模が大きくなるほど広い知識が求められることになります。
上流工程であるシステム設計における問題は、多少設計が悪くても後戻りできず開発を続ける必要があることです。開発時に問題がないように思えても後になって性能の悪さ、保守性の悪さが発覚することもあります。
システム設計がうまくいったプロジェクトを見直すと、どうやらシステム設計者にハードウェア開発の経験があるかないかで差が出るように思えます。
システム上ハードウェアが欠かせない
組込みなどのシステムなど、ハードウェア比率が高いものは想像に容易いですが、システムを構成するものが全てソフトウェアのように思えるものもあります。しかしそれを動作させるハードウェアが必ず存在するのは事実でしょう。
技術の進歩がシステム設計を容易に
仮想化技術などが進歩して、ハードウェアの存在を隠蔽し、意識する必要がないかのような環境が多く存在します。
CPUやメモリなどのリソースは動的に獲得できるので実装者は意識しなくてよいし、データが実際にどのように流れてどこでボトルネックになるかなんて知らなくても、冗長でリッチなリソースの上にあたかも問題なく動いてくれたりもします。
ソフトウェア技術の進歩が、ソフトウェア開発のハードルを大きく下げ、特にハードウェアの知識がなくても大規模な設計も可能になっています。
できると錯覚してしまう弊害
本来であれば難易度の高いシステム設計が容易にできることは、多くの恩恵をもたらしています。技術はすばらしいですが、それを利用している人があたかも自分は全てを知り尽くしているかのような錯覚に陥る原因を作っているように思えます。
力業が表面化しづらいソフトウェア
設計には、よく考えられ必要十分で整った構成のものから、冗長で無駄の多いいわゆる力業のものもあります。
非機能要件で差が出る
ハードウェアへの考慮があるかないかで、結局システムのランニングコストであったり性能であったりに現れてくることになります。
ソフトウェアは設計が良かろうが悪かろうが、動いてしまうものだったりします。多少設計が悪く余計なメモリやCPUを使おうが、同じハードウェアで動いている限りコストに差が出ません。
一方ハードウェアの設計が悪いと、部品点数が増えたり必要以上に高価な部品を使ってしまい、即コストに跳ね返ります。
センスで片づけない
システム設計では、ハードウェアとソフトウェアの役割分担決めとそのバランスをとる必要があります。
システム設計に長けた人を単にセンスがあるとか、経験が豊富とかで片づけてはいけません。
あの人はセンスが良いからシステム設計が上手というわけではなくて、幅広い経験があるから多くが見渡せて総合的に判断して役割配置ができているだけです。見えている景色が違うのです。
更新が難しいハードウェア
もしもハードウェアは強いがソフトウェアが少し弱いシステム設計者と、ソフトウェアは強いがハードウェアが少し弱いシステム設計者がいるのであれば、前者のほうがシステム設計者にふさわしいです。
理由はシンプルで、リリース後ソフトウェア設計に失敗したことに気が付いてたらバージョンアップを繰り返してリカバリーできるけど、ハードウェア設計のやり直しは致命傷になるからです。
どれくらいハードウェアが占めているかによって影響度は変わりますが、マネジメントとしてはリスク対応策として、ハードウェアに強いシステム設計者を選択すべきということです。
まとめ
システム設計は、組込み商品、業務アプリケーション、クラウドサービスだけでなく、自動運転やIoTを活用した施設に至るまで、様々な分野で求められる技能といえます。
日本は書籍もそうですが、業務システムの機能開発をシステム設計といっている節もあってか、適切なシステム開発者が見つからないことが多いです。日本では言葉の定義が若干違うように思えます。
そういったときはハードウェア開発者をシステム設計者として育てていくのが、一番早く結果につながると思います。
コメント