
basal.のフルスタックエンジニア=熟練した仕立て屋である
こんにちは。Co-Liftのミドリです。
最近、眠りが浅いのが悩みです。
寝る前にスマホを触るのが良くないのだと思い、Audibleを導入してみたところ、今のところ寝落ち率90%です(そして夜中にボソボソとしたAudibleの声で「…んがっっ」と起きます)。
眠りに落ちる時間が早くなったので非常に良いのですが、どこまで聴いてたか分からなくなり、下手すれば、起きたタイミングでミステリー小説がネタバレとなってしまうこともあり、「そこまで興味ないわけではないんだけど、寝落ちしても途中でネタバレしても悔しくない小説やエッセイ」を聞き漁っています。
眠りが浅いゆえに、ふと考え事をしていて仕事のことで思いつくこともあります。
今回は、そんな私の浅い眠りから導出された「フルスタックエンジニアのスキルについてビジネスサイドの人に分かりやすく伝えるメタファー(比喩)」をお伝えしたいと思います。
フルスタックエンジニアとは?
以前のnoteでも書いたのですが、Co-Liftの子会社であるbasal.に所属しているエンジニアは、全員フルスタックエンジニアです。
エンジニアのスキルレベルについては、IT系企業だったり、システム開発を実際に行ったことのある企業であれば割と想像がつきやすいと思うのですが、馴染みのない企業だと「エンジニアスキルと言われても、よく分からない・・・」ということも多いかと思います。
時折、コスト重視の方が相手だと「エンジニア単価高くないっすか?」とか単価で見られてしまうことも。
以前のnoteでは、フルスタックエンジニアについて以下のようにご説明しておりました。
フルスタックエンジニアとは?
設計、サーバサイド(バックエンド)の開発、フロントエンドの開発(WEB、ネイティブアプリ)、IaaS上でのインフラ構築、システム運用等、ソフトウェア開発で必要な工程をEnd-to-Endで1人で遂行出来るエンジニア
「これをもっとシステムに馴染みのない人にも分かりやすく伝えることは出来ないかなー」と夜中にぼーっと天井を眺めていたところ、思いつきました。良いメタファーを。
フルスタックエンジニアとは仕立て屋である、と。そして弊社basal.は、なかでも熟練した仕立て屋であると。
フルスタックエンジニアとは仕立て屋である
どういうことか、ご説明しますね。
「欲しいものによって、どのような手法を取るべきかは異なる」ということ
「仕立て屋」とは、お洋服を作る人やお店のことを指します。洋風に言うと「テーラー」とも言います。このnoteでは、個人のスキルについて考えたいので、「仕立て屋」や「テーラー」はお店のことではなく個人のことを指していると思ってください。
さて。
まずは、私が着ているTシャツがどのように作られているかを考えてみましょう。
私が今着ているTシャツは、1枚1,000円の無地ベージュのTシャツです。みんな大好き頭文字Uのお洋服屋さんで買いました。着心地は最高です。いつでも着てます。ヨレてきたらまた同じのを買うくらい好きです。

さて。このTシャツはどのように作られているでしょう?
どのような光景が頭に浮かぶでしょうか?
こんなんじゃないでしょうか?
(↓良い素材なかったので画像検索の結果をどうぞ)

そう。
このように、完全分業制のライン縫製工場を思い浮かべるのではないでしょうか。
生地を裁断する人
袖のパーツを縫う人
身頃を縫う人
身頃と袖を縫い付ける人
ポケットやボタンを縫い付ける人
工程それぞれに担当がいるわけです。工程が多ければ、当然、関わる担当者も多くなります。
工程を分けることで、早く多くのお洋服を量産することを実現しているのです。

では、自分サイズ・こだわりデザインのオーダーメイドのお洋服を作ろうと思った時、このような縫製工場に発注するでしょうか?
おそらく、テーラーさん(仕立て屋さん)に依頼するのではないでしょうか。

この場合、生地の裁断や縫製などの各工程は細かく区切られておらず、一人で何役もこなせる職人が、一枚のお洋服を仕立て上げていきます。
そして、技術が卓越していればしているほど、当然ながらこの職人さんの時間あたりの単価は高くなるでしょう。
つまりこういうことです。
欲しいものによって、適した手法は異なるのです。

どうか心を鎮めて。一般論です。
では、これをシステム開発に置き換えて考えてみましょう。
エンジニアリングに置き換えて考えてみる
ソフトウェアを開発し、ユーザーに提供するためにはいくつかの工程が必要です。
アーキテクチャ設計
プロダクトマネジメント
フロントエンド開発
バックエンド開発
インフラ構築
ソフトウェア開発の受託会社の多くは、これらの工程を分業しています。
つまり、「フロントエンドは得意だけれど、インフラ構築は出来ないエンジニア」「バックエンドに特化してめちゃくちゃ詳しいエンジニア」など、それぞれの分野に得手不得手がある状態です。
個の知ではなく集合体としての知でシステム開発が成立しているということです。
一つのシステムを開発するには、人数が必要となるのでチーム編成は自ずと大きくなる傾向にあります。
それぞれの分野に卓越したスペシャリストが揃っているので、(言い方は良くないかもしれないですが)チームに替えが効きます。たとえエンジニアの一人がツチノコを探しに旅に出たとしても、システム開発の手を止めることなく進行することが出来るのです。これは大きな利点です。
そして、分業した方が、各工程の専門性は高まりやすく、工程間のインターフェース(繋ぐ部分)が標準化されるために再現性を高めやすいので、品質が安定しやすいという利点もあります。
ミシンで縫う工程をずっと一筋でやってたら、そりゃ熟練してきますよね。って話と同じです。
では、フルスタックエンジニアの場合はどうでしょう。
フルスタックエンジニアは、先ほどもお伝えしたように、全ての工程を一人で遂行できる能力を持っています。
すなわち、システム開発に係るチーム編成は最小限で済むのです。
勘の良い方はもうお気づきでしょうか。
そうです。
もしフルスタックエンジニアが、急にツチノコを探しに旅に出てしまった場合、そのプロジェクトは代わりのフルスタックエンジニアが見つかるまでは進行停止してしまう恐れがあるのです。
何としてでもツチノコ探しは止めなくてはなりません。
一方で、フルスタックエンジニアがいれば、大体のことには対応できるので「この機能を付け加えたいんだよね」というクライアントのご要望にも、フロントエンド、バックエンド、インフラなど、あらゆる知を結集して、即座に判断できるという利点もあります。
では、フルスタックエンジニアであれば誰でもいいのか?
ここで疑問に思う方もいらっしゃるかもしれません。
「なら、フルスタックエンジニアなら誰でもいいのかしら」と。
そうではありません。ここでも、テーラー(仕立て屋)の例で考えてみましょう。
言い忘れていましたが、最近私は洋裁にハマっておりまして、自分で生地を買ってきては、土日に自分の洋服を仕立てています。
つまり、生地選択、裁断、ミシン、アイロン、刺繍と、あらゆる工程が一応出来ている状態です。
でも、この日曜テーラーの私にお金を払って「スーツを仕立ててくれ」というお客様はいません。
答えは簡単です。
熟練していないので、縫製が甘く、よく見ると裾はガタガタ、左右の袖の開き具合が違う、などの不具合が生じるからです。
そしてセンスもないので、決められた型紙でしか作れないのです。つまり、オーダーメイドに対応できないのです。
「このシャツの着丈を長くしてワンピースに仕立ててちょうだいな」なんぞ言われようもんなら、軽いパニックを起こすことでしょう。
フルスタックエンジニアでも同じです。
それぞれの工程に熟練してこそ、オーダーメイドに対応できるようになります。そして、そこにセンスがひと匙あれば、アウトプットも一段上の仕上がりになります。
まあ、センスってのが一番定量化しづらくて厄介なんですけど、実は結構重要です。アーキテクチャ設計のセンスがないと、「AシステムとBシステムを密結合で作っちゃったから、後からCシステムを統合させようと思ったら出来なかった」「むしろAシステムにあるデータを統合させるだけでも一苦労」みたいなことが起こり得るのです。
アーキテクチャの例については、以前のnoteでわかりやすく書いているので、こちらもご覧ください。
だから、もしチーム編成を小さくしてスピーディーにシステム開発を進行したいのであれば、できれば熟練していてセンスのあるフルスタックエンジニアがいると安心ですね、ということです。
もちろん、目的によっては、それぞれの領域に卓越したスキルを持つチーム編成で取り組んだ方が良いこともあるので、システム開発会社を選定する際には、目的に応じてきちんと判断することが重要です。

「オーダーメイドだけど、こんな仕上がりだったら既製品の方が良かった・・・」
というのは、システムで言うところの
「カスタムメイドのシステムだけど、こんなに使いづらいんだったらSaaSの方が良かった・・・」
みたいなことです。
開発しようとしているシステムに求めるものは何か?
コスト、スケジュール、機能、デザインのうち、優先順位をつけるとしたら?
絶対に譲れないポイントはどこ?
これらの問いは、シンプルなようで実はとても重要なのです。
以上、フルスタックエンジニアについての考察でした!
読んでいただきましてありがとうございました。