なんでもできるシステムのデメリット

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

システム開発を行なっている時に求められる要素として「汎用性の高いシステムを作ること」というのがあります。
 

僕も仕事の現場や、プログラムレクチャーやトレーニングの場などで、散々言ってきた言葉なんですが、「汎用性」というのは「柔軟性」というか、どれだけ多くのパターンを想定できているかという指向性で使っています。
 

とある時、システムを作って欲しいと注文をしてきた人から「シンプルなシステムにして欲しい」「いらない機能は極力つけないで欲しい」というオーダーだったのですが、ここには汎用性はどのくらい必要か考えさせられたので、ブログに書いておこうと思いました。

よくある何でもできるシステム


 

以前に顧問を務めていた会社で、エンジニアの人で成り立っている業界特化のシステム会社で、販売が芳しくなく、売れるシステムに変えたいという社長からの要望があり、数ヶ月訪問しながら状況を聞いていたのですが、
 

販売しているシステムは、その業界では、かなり早い段階から作られたWEBシステムで、大手のユーザーも多く、簡単にシステム改修できるというモノではありませんでした。
 

もちろん、システムはセキュリティや、プラットフォーム、利用するユーザーの環境などが刷新されていくとそれに合わせて作り直していく必要があるのですが、このシステムは何故か作り直すことが非常に困難だと言っていました。
 

サーバーOSもデータベースバージョンもコンパイル環境も使うクライアントアプリも、2世代ぐらい前のもので、正直セキュリティ的には問題アリという感じでした。
 

何故システム改修ができないのかというと、このシステムはカスタマイズ機能というのが充実していて、客毎に対してオーダーに見合うように、プログラムを追加することで、柔軟な納品ができていたため、基本システムのアップデートを行うと、全てのカスタマイズも見直さなければいけないため、導入客数や、カスタマイズ数、そのレベル感などを考えると、現在のエンジニアリソースではとてもじゃないが足りないし、経理業務が絡むシステムが加わっている為、不具合を出すことが許されない為、怖くて手が出せないという状態なのだそうです。
 

こうした状態になっているシステム会社は比較的良く聞くのですが、この会社が非常に残念だったのは、このシステムを構築した初期エンジニアが全員残っていて、その人たちがこうした事を言っているという点でした。
 

自分で作って「お手上げ」という状態にしている時点で、この会社の社長の悩む姿は手に取るようにわかります。
 

そして、このシステムの販売トークは、「何でも対応できます」という風に、実際に無いシステムも追加プログラムで販売することが当たり前のようにして、他社製品との差別化を測っていたのだそうです。
 

何でもできてしまうので、当たり前のように、導入障壁画無く、受注は簡単にとれるのですね。
 

何でもできるシステムのその先が全く施行されていなかったという事例で僕の中で勉強になった案件でした。

システム寿命の考え方


 

プログラマーという仕事をしていると、新しいシステムが出てきたらとりあえず内容を把握しておかなければいけません。
 

確かに全ての言語が使えてどんなフレームワークも使った経験があるという人がいれば、重宝されるとは思いますが、どんなに優秀なエンジニアであっても、特定の言語、特定の環境を得意分野としています。
 

浅く広く活動している人もいますが、エンジニアのジャンルとしては、狭く深く技術精通している人の方が人脈も広く、参入障壁の高いシステム構築ができる傾向があるようです。
 

そもそも、システムの寿命という言葉をご存知でしょうか?
 

基本的には、一度作ったシステムを永久に使うという事は不可能だと考えられています。
 

僕の自宅で、ついこの間、windows98時代に使っていたPCを引っ張り出して電源を入れて立ち上げたことがあったのですが、スピードが遅いというだけでなく、インターネットブラウザも正常に動作しなくて、全く使い物にならなかったという事がありました。
 

これは、インターネットブラウザが、今現在のjavascriptサイトやHTML5に対応しておらず、ページが崩れる上、ajaxが使えない為、まともに表示されない状態だったため、使える使えないというレベルではなく、マイナスネジにプラスドライバーを使うような感じでした。
 

しかし、MicrosoftOfficeのように、バージョンアップを繰り返して、広くビジネス現場などで使われているアプリケーションもあります。
 

もちろん、最初から何十年も使えるような設計を考えるのは難しく、新しい環境が出てきた時に柔軟に対応できるかどうかがポイントなのですが、ちゃんと今現在のシステム領域を見据えているか、機能追加や構築をする時にメンテナンス性などを考慮できているかが重要なのだと考えられます。

よくあるエンジニアの思想


 

デザイン経験の無いプログラマーがシステムを構築した場合、見た目はもちろん古臭く、とんでもなくズレたシステムが構築される場合があります。
 

作った時点では使わないボタンや、データ構成があった場合、「後に使う可能性がある」という事でプログラマーとしては事前準備したような状態になり、使う人から「このボタン何?」と突っ込まれるような場面も見た事があります。
 

利用するユーザーが求める事は「自分が行いたい事が実現できるシステム」というただ一つだけなのですが、エンジニアはもちろんちゃんと技術思考してプログラミングをおこなうのですが、ココに、ユーザー視点がある人と無い人との差が生まれてくるのですね。
 

製品クオリティをちゃんとあげたいのであれば、きちんと機能デザインも含めたUI/UXの知識を、プログラミング知識と同じように習得するべきなのだと改めて感じましたね。
 

非エンジニアの人から見るとプログラマーというジャンルの人は、自分のできないアルゴリズムが構築できる人というように見えるかもしれませんが、きちんと思考できるプログラマーとできないプログラマーというのは、確かに存在し、優秀なプログラマーと会社内で評価されているプログラマーでも、僕が見て厳しい評価を下さざるを得ない人は、これまで何人もいました。
 

趣味で自分のプログラムをしている人に対しては当てはまりませんが、会社などで商用プログラムを構築する人は、少なくても、システムデザインという視点を学問として勉強する必要があり、「なんでも出来るシステム」を生み出すという暴挙を食い止めなければいけませんね。
 

ちゃんと考えてデザインしなければいけないという事は、デザインは見た目ではなく、「理論」であるという事がよくわかります。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です