SIerでは技術力は本当に必要とされないのか?
SIerのいいところを書こうと思っていたのですが、脱線してきたのでメモです。ネットで見ると、SIerでは技術力が必要とされない、レベルが低いのでWEB系に転職しました!という記事をよく見ますが、本当にそうなのでしょうか。
SIerで働いて7年目、直近の2年は自社サービスの開発に関わっていたのでそこはWEB系に近い感じかなと思います。そんな中で色々見えてきたものがあるので、まとめてみました。
TL;DR
SIerでも技術力は必要とされるが、タイミングは製造工程ではなく設計より上流の部分となります。なので、SIerで技術力を求められる/評価される仕事をしたいのであれば
・元請け企業で
・アーキテクト、あるいはテックリードとして
・技術の選定、技術検証、設計、あるいは技術支援などをおこなう
ではないかと。
(いずれにせよ実装からはある程度離れますが…)
技術力の定義
技術力って、何気なく使ってますけど曖昧な言葉ですよね。っていうことに、この記事を書いていて気づきました。ここでは一旦、以下のように定義して話を進めていきます。
・ハードスキルの一種
・特定の専門領域の対する知識、及びそれを実現できる力
SIerでは技術力は不要なのか?
必要か不要かで言えば、必要です。
但し、必要とされるタイミングが問題なのかなと思います。
SIerで受託の場合、前提条件として
・納期は必達
・ウォーターフォール型
・チームは都度構成される
・チームメンバは自分で選べないことが多い(誰が来るか分からない)
というものがあります。
ある程度はスキルセットがマッチしたメンバが来るとはいえ、スキルレベルは不明です。実装直前まで誰がアサインされるか分からないこともざらです。なので必然的に、実装工程では高いスキルレベルが求められる作業は極力排除する方向に動きます(リスクが高いので)。実際、過去見た案件で3人必要って言ったら新人が3人アサインされたのとかありますし。
これが、プログラマから見て技術力が求められないと言われる理由かなと。実際、今まで要件定義から設計、実装、その後の保守運用までやってきましたが、実装工程で高い技術力が求められることは少なかったですし、そもそも設計段階でそうなるようにしていました(一番細かく書いた詳細設計書だと、IPO形式の処理フローや検索用のSQLまで書いていました)。
あまり好きな言い方ではないですが、SIerでのプログラマの役割はコーダーに近いような気がします(会社によりきりですが)。設計には関わらず、コーディングだけする、みたいな。要は、SIerでは実装工程は労働集約型に近くなるので、技術力は求められないし、評価もされにくいということ。
じゃあどこで技術力が求められるかというと、もっと上流の設計段階や、それ以前の技術検証、あるいは共通部品の実装、などとなります。
実際に自社が元請けの案件で、人が足りないので他社の方に協力頂いたこともありますが、上記の選定や共通部品の実装などは自社の人間がやるようにしていましたし(理由を聞いたら、保守まで残る人がそこを抑えてないとまずい、とのことでした)。
ウォーターフローで工程ごとに分断されている、さらに担当する人も違うので製造から設計やそれより上流がよく見えない、ということなのかなと思います。SIerでも技術力は必要とされていますが、それは上流工程での話なので必要とされる人数も少ないですし、技術をやりたい!という人は実装工程を好む傾向があると思われるので(自分もそうですが)、そこでミスマッチが起きてるのかなぁと。
結論、SIerで技術をやりたいのであれば、実装工程ではなくてもっと上流に行く必要がある、ということだと思います。役職としてはアーキテクト、あるいはテックリードなどでしょうか。
自分は技術がやりたかったので、今の案件でアーキテクト兼テックリード(兼TL)的な役割をもぎ取って、技術の選定や検証、多少の実装などをおこなっています。まあ、とはいえ実装からある程度離れることにはなるので、どうなんだという気もしますが…。
#WEB系で必要とされる理由は?
WEB系で働いたことがないので想像混じりですが、今ちょうどサービス開発をしているのでそんなに外してはいないかと。
サービス開発では受託の場合よりもさらにスピード感を求められると感じています(早く実装しないと他社にユーザーを奪われる)。また、要件も結構コロコロ変わったりすることが多いです。
なので、ウォーターフォール型だと対応が難しく、アジャイル型にならざるを得ない(あるいはプロトタイプ型とか)という印象です。実際、WEB系ってアジャイルのイメージが強いですよね。
じゃあ、アジャイル型だとどうなるのかというと、
アジャイル開発では、少人数のチームで「多能工」という考えかたのもとで、一人のプログラマが多くの役割をもちます。そして、工程を分けること無く、実際に動くソフトウェアを中心に開発を進めていきます。
(ソフトウェアをつくるための3つの役割〜アジャイルに外部設計は必要か より引用)
工程が分断されないので、プログラマが上流工程の作業もおこなうことになる、んですかね。そうしたときに、設計や恐らくは技術検証、選定などもおこなうことになるので技術力が求められる、評価される、なのかなと。後はチームも固定なので、タスクの難易度も調整しやすいですし。
まー、そのうちWEB系でサービス作るーに向かおうと思ってるので、実際に経験したらまた書きます。
ぶっちゃけた話
SIerでも技術力は求められますが、そんなに人数は要らない、というのが自分の印象です。なので、技術的な話に興味を持つ人が少なくて結構寂しい、というのが本当のところ(部内で技術強い人って誰?と聞いて、自分ともう一人くらいしか上がらない…)。
もっと技術に揉まれて生きたい…と思うので、まー次はWEB系いけるようにがんばります(マネジメント側をやるにしても、軸は技術に置いておきたい…)。後、他職種の人たちと働くのも楽しいですしね。
後で気づいたんですが、これって要は好き勝手できるくらい信頼を勝ち取れ、あるいは偉く成れってことっぽいですね。基本、成果出してればそんなに口出しされないので、言語何使おうとアジャイルだろうと文句は言われない気がします。