最近は既存の業務委託の仕事に加えて受託開発の仕事も受けている。まだ全然始まったばかりだが受託関連の技術選定について書いていきたい。 ここでいう技術選定はプログラミング言語とフレームワークという狭い範囲を指す。
まず自社サービス企業の技術選定はケースバイケースだ。よく議論でこうするべきだというのがあるが、サービスの特性だったりメンバーの経験であったり、それこそ今後の採用計画によって変わる。
それに対して受託企業の技術選定というのは実はもっと固定化しており、それほど自由が無い。 しかし、実は利益率に直結するので自社サービス企業の技術選定よりも慎重に決めた方が良い。
前提として請負だろうが準委任だろうが受託企業の仕事範囲は新規サービス・プロジェクトのリリースまでが一般的には担当範囲となる。そしてその前提が今後のほとんどのことを決定する。
受託企業はクライアントとの要件定義後に詳細見積もりを行う。ここでは仮に50人月という見積もりだしたとする。ただ実際にクライアントに提示するのは60人月とか多めに請求をする。それは不足の自体のバッファでもあるし利益でもあるので悪いことではない。ただ、仮に70人月で提案して40人月で終わった場合に差し引き30人月分の労働力を他に回せるため利益率が高くなる。
つまり良いプロジェクトというのは提案した人月よりも出来るだけ少なく作業を終わることでリスクを回避し利益率が高くなるのを目指す。ということは逆にリスクとなるような新技術を使うよりも社内では枯れた技術スタックを使って進める方がリスクが低く、万が一炎上した場合に補充もしやすい。
ここまで書いてわかるように受託企業の技術選定は本当に案件にあった技術を選定をしたり、新しい技術を取り入れることはリスクが大きいしそもそも利益率が悪い。そのため一般的な人気技術を選定していることが多い。
具体的にはどういう基準で選ぶのか
ここからは個人の考えだけど大きく外してはいないと思う。
初速が速い
だいたいのプロジェクトは開発期間が3ヶ月〜6ヶ月ぐらいが多い。そのため1年以上開発したらありがたみが分かるような技術は選定しない。分かりやすく言うとコンパイルが遅い言語は微妙である。結局3ヶ月〜6ヶ月ぐらいのプロジェクトであれば頻繁なリファクタリングは発生しないため、保守がしやすいよりも最初から開発効率が良いのが選ばれやすい。
人員を調達しやすい
Javaが金融・製造業を筆頭にしたエンタープライズで採用されることが多いことの理由の一つとして、大規模なプロジェクトでの人員調達がしやすいことがあった。これがScalaであると人員調達が難しい。 例えば、プロジェクトが炎上しており外部から人員を調達する時はあると思う。ここでニッチだが生産性が高い技術よりも、人員調達コストが楽な技術を選択が重要である。
フレームワークのデファクトスタンダードが決まっている
例えば、Rubyの中のRuby on Railsのようにデファクトスタンダードが決まっている。これは上の人員調達しやすいにも被っているが、要するにエコシステムとして一つのフレームワークに集中している方が問題があった時に情報量が多く対処がしやすい。
以上の要素を持っている言語とフレームワークの組み合わせを考えると自ずと選択肢として絞られる。
- Ruby: Ruby on Rails
- PHP: Laravel
- Java: Spring Boot
うん、、すごい無難である。
だが、これらのフレームワークで対応できない要件やパフォーマンスを求められるのであれば自社で開発した方が良いし、上記の中から選定をしてクライアントから後に怒られるということは無いだろう。
ここで別のギモンが生まれた。
受託企業の技術スタックに結構何でも対応しますと書かれていることが実は多い。例えば、JavaもPHPもRubyも何でも出来ますよという企業だ。完全な嘘ではないが上記の技術のクオリティを高く保つのは相当難しい。というよりも高く保てば技術スタックが分散して利益率が悪くなる。もちろん人数が多い企業であれば可能かもしれないが、現実的には人数が多い企業の方がその分の見積もりが高くなる傾向があるし、やはり同じWeb系のアプリケーションを作るのであれば分散する意味があまり無い。
そのためもし自分が発注者で技術選定を決めているのであれば、その技術に対して得意な企業を依頼する方がよい(病気の手術でもその病気の手術件数が一番信頼になると聞いたことがある)。 ただIT企業でも無い限り発注者が新規のシステムがJavaなのかRubyなのか気にするところは少ないのでよく見過ごされている。
最後に自分自身についても考えていく。
Webの場合はあまり上記の3つの技術に対してコミットするモチベーションは低い。技術が好きとか嫌いとかではないが、上記の1つを選択したとしても差別化が難しい。上の技術を選択するということは技術ではなくそれ以外の要素で勝負するということとほぼ同じ意味であるので。現状は子どもも小さく沢山営業活動をするというのも難しいのも理由のひとつだ。
ただ長くなってきたので別の記事にする。