ソフトウェアを完全内製で作るのと外注やベンダー製品を採用する判断はどこでする?

感想おまちしてます!

Balancing Act

via Digitalnative from frickr

最近、組織としての視点と、開発者としての視点を比較して考えることが多く、2つの視点で考えると、開発って難しいジャッジメントが多いなぁと感じます。恐らく、今の結論は未来に変わっているでしょうし、「正解です!」というようなものもなさそう。

これも前に書いた「エンジニアを確保しやすい」という理由でプログラム言語を選んでいいのか?と似た話題だと思いますが、ソフトウェアを内製する場合と、外注する場合のメリットデメリットをちょっと考えてみました。

考えたきっかけ

ITPRO中田さんの「無いから作った人たち」という記事でも紹介されているように、Facebookが開発したCassandraとか、mixiのTokyo Tyrantとか、自分が欲しい物を作って公開しているエンジニアってすごいなぁと思います。業界に貢献とか、企業の技術ブランドUPにもつながりますし、新しいプロダクトはエンジニアのモチベーションを高めます。

ただ、会社で働いていると、作らずベンダー製品を活用するほうがよかったりする場合もあります。例えば、経理システムのような提携作業をの業務パッケージ化したものや、オラクルのような信頼と実績のあるデータベースとか。サービス企画までして開発は外注したり、いろんな方法でシステムは作られます。

こういった「どういう風に作る?」という判断はとても難しく、たまに、こういう相談を受けることがあるので、そのときによく考えることを整理してみたいと思います。

OSS開発、内製、ベンダー採用、外注・・・といろいろなケースがありますが、今回は単純に「中でなんとかする場合」と「外だけや外も活用する場合」にわけています。

中で何とかする場合

このメリットとしては、以下が考えられます。

  • 自分が欲しい物を実現しやすいため、オーダーメイド感覚で作ることができる
  • 外部調整がないので調整コストが低い
  • 作るのが楽しそう
  • 自社の開発力が上がる

逆に、デメリットは以下が考えられます。

  • ある程度の技術力が開発に必要なので、人の確保(採用、広報)が必要になる
  • オープンソースのプロダクトのほうが優秀な場合があったりする
  • いけてない社内ツールが量産されるリスクがある

デメリットについては、やっぱり人の問題があります。オープンソースを使い倒して作られたシステムがあり、キーマンが抜けて維持できなくなるケースも見たことがあります。このへんは、組織的に人を育てるなどの対策をしなければ、人に依存したシステムに苦しめられます。

外も活用して何とかする場合

では、外パターンを考えてみます。まずメリットとしてどういうものがあるでしょうか。

  • 安心の製品サポートがあり、困ったときに助けてもらうことが可能
  • 専門エンジニアをあつめて開発されているわけなので、高性能・高品質をゲットできる
  • 企画などに会社の資源を集中することができる

デメリットは以下でしょうか。

  • ベンダーロックインで方針変更が難しくなってしまう
  • 外部に依存するリスクがある
  • 外部との調整で時間をとられる
  • お金がかかる

「お金がかかる」点に関しては、場合によっては安く手に入るケースもあると思います。ただ、友人エンジニア何人かに聞くと、「外注のほうが高い」と答えることが多かったので、とりあえず外パターンのデメリットに入れておきます。

で、結局どっちがいいの?

答えはコンテキストにより変わると思いますが、自分が質問されたときの答えは以下です。

  1. どういう開発部隊にしたいかで決める組織視点
  2. メンバーのモチベーションで決めるエンジニア視点

「どうなりたいか?」という理念次第である程度の方針が出る気がしています。

1については、開発力で業界を生き残る戦略であれば内製を重視し、そうでもないなら外注寄りを視野に入れることができそうです。また2のように、新技術や技術動向に明るい人がいたり、「チャレンジしたいぜ!」というエンジニアが多いなら、内製という判断をしても後悔しない気もします。そのときは、エンジニアの興味とこれからの運用のトレードオフが必要でしょう。

一つの方針で走り続けるのも大変なので、だめそうになったら切り替え、またできそうになったら切り替え・・・という形で「歴史は繰り返すパターン」でやるのも、効率は悪そうですがアリな気がしています。内製はわかるんだけど踏ん切りがつきにくい。。。という意見はよく聞きますし。ただ、「やる!」と決めて走りつづければ、時間がかかっちゃうかもしれませんが、GoogleやFacebookのような、突き抜けた開発文化も作れる気がします。

私はエンジニア採用で社会人になった人間なので、自社で作りたいという気持ちが強いほうです。ただ、やるなら「無いから作った人たち」のように、作ったものをWebに公開していけるような開発がいいなぁと思っています。

そういうエンジニアが喝采を浴びるような世の中って夢があって素敵じゃないですか。