「なぜシステム開発はトラブるのか?」と聞かれて考えてきたこと
今回の記事は、すごいノウハウとか、主張などではないのですが、システム開発の仕事をする中で、たびたび頭をよぎるテーマについて、つらつら書いてみたいと思います。
それは私が業務系システムのパッケージ開発会社のエンジニアとして新卒入社して1年目の事でした。
大学時代の先輩に久々に会った際、こんなことを聞かれました。
「ビルやダムの建設ではそんなにトラブル発生しないのに、システムの開発はなんでこんなにトラブるの?」
先輩はWeb系企業の営業職に1年先に就職していたのですが、担当するクライアントのシステム開発プロジェクトでトラブルが発生し、その対応に追われているようでした。
当時から「システム開発プロジェクトの成功率は30%」と言われており、システム開発というものは、何事も無く成功させる方が難しい領域です。
私といえば、エンジニアとはいえ駆け出し、ごく初歩的なプログラミングに四苦八苦していた時期で、急に先輩に投げかけられたこの素朴な疑問に、考え込んでしまいました。
「うーん、なんででしょう。要件がどんどん複雑になるからですかね、、」くらいのコメントしかできなかったのを記憶しています。
その時の会話はそれで終わったのですが、「システム開発がトラブる根本的な原因は何なのか?」という疑問は、その後も自分の中でぼんやりとしたわだかまりとして、ずっと残っていました。
それから20年近く、主にエンジニアとしてシステム開発に携わってきましたが、望まないながらも大きなものから小さなものまで、さまざまなシステム開発トラブルを経験することとなりました。
それらを経験した今、あえてその疑問に答えるなら、
「規格化されていないから」
ではないかなと思っています。
システムトラブルの原因はもちろん様々な要因があり、決して単純化された唯一の答えというものはないとは思いますが、
多くの場合で品質が問題であり、そこに関わる要素で、インフラや建設のような(ITと比べれば品質の高い)領域との大きな差があるのが「規格」です。
例えば、ビルやダムの建設に用いられる様々な部材、部品や、工法には、厳格な規格や手順が存在します。
小さなネジ一つとっても、その材料やサイズ、強度、そこに生じる誤差の範囲まで含めて規格で厳密に定められており、それら規格は、長年の実績にも裏付けられて、高い品質を維持しています。
もしネジに規格が存在しなかったり、規格が守られていなければ、それがたとえ小さなネジ1つであっても建造物全体の品質に大きく影響し、様々なトラブルの原因となることでしょう。
ところが、ハードウェアやネットワークの領域を除いて、システム開発には厳格な規格というものがほとんど存在していません。
システムによっては、仕様書やコーディング規約などが細かく定められますが、規格の内容としては曖昧なものであり、厳密なチェックが困難です。
また、建設でのネジに当たるような部品として、コンポーネントやフレームワークというものが存在しますが、種類も多いとは言えず、建設における部品のような高い品質は保証されていません。
時にはコンポーネントの仕様が要件に合わない場合は、コンポーネントを自作してしまうケースも少なくありません。
建設の例で例えるなら、ネジのサイズが合わないので、建設業者がネジの自社開発までしているようなものです。
守るべき規格や細かな指示が存在しないので、開発を進める中で判断が必要なところがでると、担当者(エンジニアやプログラマ)が都度考えて判断するのですが、必ずしも個別と全体を見渡してベストな判断ができるかというと、なかなかそうもいかないのが現状です。
これではシステムの品質がなかなか上がりません。
では、なぜシステム開発における規格化や部品化が進まないのか?
システム開発の領域の技術進化/変化が早すぎるのです。
Web系の開発技術などでは、10年前の開発技術では、現在主流となるWebサービスを開発することはできません。
恐らく10年後の開発技術は、現在の開発技術とは別物となっていることでしょう。
それだけ変化が早いと、せっかく厳格な規格を作っても、すぐに役に立たなくなります。
規格を作ってもあまり意味が無いのです。
なので、技術の進化/変化スピードが変わらない以上は、今後も規格化は大きくは進まず、品質レベルが急激に上がるということは無いでしょう。
もし可能性があるとしたら、開発やテストでのAI活用が進み、開発やテスト手法に劇的な進化が起きる場合でしょう。
エンジニアとしてはそちらには大いに期待したいところですが、、、
ソフトウェアの開発の歴史はたかだか数十年、建設などのノウハウ蓄積に比べたらまだまだヒヨッコであり、トライ&エラーの時期が当面続くように思います。
この記事が気に入ったらサポートをしてみませんか?