フルスタックエンジニア

自分はあくまでフロントエンドプログラマであって、バックエンドアプリケーションもそれなりに書けるし、DB設計も平均よりちょい下くらいには出来るつもりでいるんだけど、インフラ構築はひとりではようやらんわという感じだし、フルスタックになりきれてない、微妙に周辺技術や知識をかじっている程度の、フロントエンドプログラマである、という前提で話をする。

フルスタックエンジニア、という言葉が示す範囲がでかすぎてそんな人間はもはやいないと思わないでもないんだけど、昨今のWebアプリケーションの話をするなら、Webアプリケーションを一人で組めるくらいのフルスタックエンジニアは普通にいる。AWSにIaCで環境つくってバックエンドアプリケーションとフロントエンドアプリケーションの設計からコードまでを一手に担うようなエンジニアは別段不思議ではない。Webアプリケーションはもともとバックエンドのフレームワークに全部載せだったのが、そのうちにフロントが分離して、バックエンドはAPIミドルウェアの繋ぎ込みを担うようになり、そこからバックエンドがAPIだけ、DBだけ、というふうにアプリケーションとミドルウェアが分離していくようになっていったんだけど、そうするともともと全部にそれなりに通じていた人間にとっては周辺技術が地続きなので、そのまま業務レベルで関わっていくことになり、フルスタックでできるようになった、そんな人が、かつて Rails 書いてて今 Firebase と React やってます、みたいなところには割といるんじゃないかと思う。

で、じゃあそういう人を一人連れてきたらウェブサービスが一人で完成するかというと全然そんなことはない。もちろん規模にもよって、小さなものだったら作れる。大きなサービスを一人でやるのは無理。人間が一人で大きなものを作るには時間的な制約がきつすぎる。

フルスタックエンジニアがどうして必要なのかというと一人でなんでも任せられる人材がほしいから、ということなんだけど、これはつまるところそこに複数のスペシャリストを入れるだけの余裕がないか、あるいは真に必要な人材のスキルセットを把握できていないかのどちらかだと思う。

巷で求められるようなフルスタックエンジニアは、先発エースもスタメンマスクも代打も代走もリリーフも守備要員もすべてこなせる監督のような人材で、基本的にはその広い分野に精通した知見に基づく全体を俯瞰する能力こそが重宝されるんだけど、監督を雇うのに現役エンジニア相当のスキルを付属させるのはオーバースペックとしか言いようがない。別にピッチャー兼任できなくてもいいし打率が低くてもホームランが打てなくてもいいじゃんという。せいぜいが優秀なキャッチャーでいいでしょ。でもフルスタックエンジニアを雇いたい人は、たいていエースで四番みたいなスター選手のことを思い浮かべている。そいつがキャッチャーをやるのは無理だし、なんなら監督はもっと無理ですよ。

もしWebアプリケーションを開発したいってなったときにフルスタックエンジニアを一人入れてそいつに全部任せようって思ってるんだったら、並のフロントエンドエンジニアと並のバックエンドエンジニアを雇うほうがいい場合のほうが多い。

まあその判断をするために広範な経験を持ったスーパーエンジニアがいてほしいということは、まあまああったりはして、結果的にフルスタックエンジニアが必要だった、ということにはなったりするんだけども。