エンジニアが大規模開発アサインすることのメリット・デメリット

2020年2月20日

エンジニアとしてキャリアを伸ばしたい。そんな人が大規模開発にアサインすることのメリット・デメリットを僕の体験談から説明したいと思います。あらかじめ断っておくと、僕個人のケースが元になっています。主観的意見です。それでは、いこう!まずはデメリットから。

デメリット6つ

任される仕事の範囲が狭くなる。

大規模開発は大人数で巨大なシステムを作っています。大きなシステムに関われることは誇れることだとは思いますが、人数が多い為、あなたが担う仕事は全体のごく一部です。単純に、300人で開発しているならば、あなたの貢献度は1/300です。開発工程的に下流であれば、体感する貢献感はごくわずかだと思います。雀の涙! 開発経験がほしい若手エンジニアにとっては、その環境はベストとは考えにくいです。なぜならば、一定時間あたりの経験値が少ないからです。仕事の範囲が限定的です。

多くの経験値を積みたいならば、人数が少ない開発現場が有利だと思います。

2.独自文化により効率的に作業を進めることが難しい。

大規模システムは多くの場合、昔から動き続けているシステムです。昔からあった為に、独自の「生態系」が誕生してしまっています。例えば、独自の用語を作ったり、独自の開発方法ができてしまっていたり。一見効率的には思えないような場合が客観的に見ればあります。しかしこの生態系の中のマジョリティ(多数派)は何年も、何十年もそこで生きてきた人たちです。いきなり文化は帰れません。日本人が帰宅してから靴を脱がずにドカドカとリビングにはいってきたら「ちょいちょーい!」ってなりますよね。日本人が靴を脱がずにリビングに行く文化になるには相当な時間がかかりそうですよね。同じです。大規模システムの文化はそう簡単に変えることはできません。
 そして、往々にしてそれら独自の文化は、あなたの作業スピードを遅らせます。プログラムを”ABC-aa-565”など一定の規則性(この規則を覚えるのも大変)をもとに命名しており、日常会話でそれを普通に使うことが多い。
 またデジタルではなく、紙文化が残っていることが多い。私の現場でも紙文化が根強く残っていて、プログラムや仕様書は全て紙で管理されている。(故に、作業時間の何割かは、紙を探すこと、印刷、ファイリングに費やされる。)
私の知らない特殊な文化がまだまだ数多く存在していると思う。独自文化は避けては通れない。注意が必要である。

3.古い技術が多く、最新技術に触れれる機会が皆無。

大規模開発には古い言語が使われている。そのシステムを他言語に置き換えることはコストやセキュリティなどが理由となり、簡単ではない。結果、うなぎのタレ方式で、継ぎ足しで開発していくことが多い。エンジニアがそのシステムの開発に携われば、当然ながら最新技術には関われないことが多いと考えられる。

4.濃密なホウレンソウを行わないと、「連携」できない。

大規模開発は繰り返し述べている通り、参加する人数が多い。それは、元請けA社、二次請けB社、三次請けC社の3プレーヤーで構成される(無論、もっと規模の大きなケースもあるだろう)。現実的に、以下の図のように、A社のAAさん→A社のAさん→B社のBBさん→B社のBさん→C社のCCさん→C社のCさんという流れで、コミュニケーションは流れている。

スクリーンショット 2020-02-22 14.36.56.png

図に見て取れるように、CとAAはコミュニケーションが密に取れない。解釈やコミュニケーション不足などから、所謂「手戻り」が発生しやすくなる。システム開発にとって手戻りは致命的であり、「めんどくさい」ものである。

5.技術スキル以外に学ばないといけないことが多い。

すでに大規模開発では独自文化が築かれやすいことは述べた。ここではそれにともなう、ITスキル以外に学ばなければならないことがあることを強調したい。まず既述しているが、プログラムを”ABC-aa-565”など一定の規則性をもとに命名していることがある。これはOOP(オブジェクト指向プログラミング)の設計がない構造化プログラミングでシステムを作り上げることにより、部品が非常に多くなってしまい、結果としてプログラムを”ABC-aa-565”のようにして管理しないといけないことをが原因にある。そのプログラムが何を意味するかは「毎回仕様書で調べろ」というわけだ。さらに、紙文化があれば、それをことをより複雑に、且つわかりにくいものにしてしまう。紙文化が濃厚な現場では、プログラムや仕様書の保存、各種手続きを紙で行う。細かくなってしまうが、「プログラムの印刷方法、それの保存場所や保存方法」「仕様書作成方法、記述方法」「各種手続きの方法と提出方法」などなど。これはもう一言でいうなれば「雑務」である。僕の中では「雑務」≒「無駄」である。

以上がデメリットでした。

以上が、大規模開発のデメリットである。僕自身が非常に苦しめられているので、多少のバイアスがかかってしまっていることをここでお詫びしたい。しかし大規模開発には上記のような傾向があることは間違い無い。是非とも皆さんはそれを考慮した上で、人生の大切な判断をしてほしいと思う。少しでもその一助になれば幸いだ。

今度は逆に大規模開発のメリットを考えてみたいと思います。

メリット5つ

1.独自文化が故に、立場を築けば唯一無二の人材になれる。フリーランスになれば強い

大規模開発は独自文化がある傾向にあることは述べた。そのため、その独自文化に色濃く染まって仕舞えば、あなたはそこで唯一無二の存在になれる可能性が高い。なぜならば、参入障壁が非常に高いだ。文化Aで活躍できていた人でも文化Bの現場で、文化Aの知識がよく活かせるとは限らないからである。替わりの人材がすぐには見つからない、(というか独自文化が濃い為に見つかるはずがない。育てるしか無い。)。フリーランスなどで、確固たる地位を気づけば、低俗な言い方ではあるが、「無敵」である。参入障壁が高い為にライバルは少なく、且つ大規模開発のために中長期的にシステムが生きている可能性が高い。仕事がずっと供給される環境にある。

2.いろんな会社が参画している為に人脈を拡大できる。

大規模開発には多くの企業が参加している。構造はピラミッド型である。以下のようになる。上位にA社元請けがおり、その下にずらずらと続いていく。これらはセキュリティや利便性(?)のために同じ現場で開発することもあれば、請負契約などの場合の多くは開発現場が異なる場所になる。ここでは同じ現場を想定する。

スクリーンショット 2020-02-22 15.23.19.png

ここでは、あなたの席の左はX社、右はY社、目の前はZ社であることがある。少なくとも近くに他社の人がいる。よって所謂「人脈作り」に的しか環境が出来上がっている。人並みにコミュニケーション能力と、少しの勇気さえあれば簡単に人脈は作れるはずだ。他社と協力してなんぼの現場であるから、必然的に協力関係にあるため「信頼関係」が生まれやすい。人脈と作りたい人にとってはベストな環境だと思われる。
(しかし実態として、その現場にいる多くの人がコミュニケーションが苦手な人が多い傾向にある。)

3、社会の基盤を開発できる。

大規模開発は昔から存在していたシステムである。それは昔から社会に浸透していたことを示している。ので、ある種、社会基盤となっているシステムともいえる。社会を支えているようなシステムを作りたいと思っている人には、大規模開発はオススメだ。(無論、デメリットで述べている通り、あなたの貢献度は500分の1になってしまう。)

4、システム開発の底辺を知れる。

皮肉な表現になってしまうが、システム開発の最も底を知ることができる。エクセルでファイルを作ったり、手続きのために紙にボールペンを走らせたり。「貧乏だったからこそお金のありがたみがわかる。」それと同じだ。あなたがコーディングをスムーズにできているとき。あなたが思い通りにシステムを開発しているとき。あなたがどん底を知っているのであれば、それらはとても輝かしく嬉しいものになるに違いない!この世で最も優秀な調味料は「空腹」であるのだ!

5、IT知識以外のことに目を向けると様々な知識が得られる。

IT知識を習得しようとばかり思っているとイライラしてくる。なぜならば、大規模開発ではすでに述べた通り、IT関連の知識習得は難しいためだ。しかし少し視点をずらしてみて、「大規模開発のノウハウ」や「大人数をまとめる組織論」的な観点で現場を見てみると、これはこれで勉強になる。「僕が責任者だったらこうはしないな」「この工夫はうまいな。」など日々発見がある。それらの知識はまた別の記事で共有したい。

以上が、メリットです。意外と考えてみるとメリットもそこそこあるかもしれません。なんでも一長一短ですね。

最後に

以上が大規模開発にアサインするメリットとデメリットです。再度言いますが、これは僕の主観です!偏見です!騙されないように!笑

僕の夢はシェアリングエコノミーのサービスを作ることです。そのために今、頑張ってます。これからも。うむ、頑張ろう!!

最後まで読んでいただき、ありがとうございました。