システム関連の仕事をしてると、その殆どはSIといういわゆるシステム開発請負という形になるかと思います。

この請負、要は他の人がやりたいこと、実現したいことを情報システムで実現してあげましょうということ。当然、そのやりたいことのノウハウは発注者側が持っていることになりますので、どのようなシステムを構築するかという定義(要件定義)が必要となってきます。

システムの請負側もひとつの業界にいると、同様なシステムを作ることが多くなり自然とそのノウハウがついてくるというのが普通でしょう。しかし、このシステムの請負だと、そのシステムの作り方には熟知するのですが、何をやるか?という一番大事な部分に関するノウハウはいつまでたっても得ることができません。

そうなると、システムを作ることだけは得意。これは目的と手段を取り違えていることになります。情報システムとは目的を達成するための手段ということができるので、システムを開発すること自体は目的ではありません。

別に目的を達成するためにはシステムを作ることが必要条件ではなく、実は滅多に行わない作業で手作業であっという間にできることをシステム化するということは全く費用的にも合わないし意味がありません。

そういう意味で言うと、システムの要件定義時にはシステム開発することがありきですすめるわけでもなく、全体的に見ていく必要があるということです。
そうなってくると、SI会社にはそういう判断はできませんので、必然と無駄なものを作っていくことになる可能性もあります。

最近では、大企業でもシステムの内製化という、SIに頼らないシステム開発が多くなってきています。アメリカではSIによる開発と内製が半々かそれ以上という話を聞いたこともあります。まあ、これは内製化とはいいつつ、大規模システムを開発する際には人を雇って終わると解雇するという、人材の流動性が高い社会だからという理由もあるのですが。

あと、SIに仕事を頼むと、間に入る人間が多く非常に時間がかかってきます。契約、見積もり、プロジェクト管理、それぞれ時間がかかる。そのため、最近ではその遅さを嫌って、内製化という流れになっているということです。

ただ、このSIが遅いという話は数十年前から出ていた話でもあるのですがなかなかSIからの脱却は進んでいないとも言えるのです。
まあ、遅かれ早かれシステム開発を請け負ってるだけの会社はなくなっていくことでしょう。