ベンチャーで自社プロダクト(WEBサービス)を開発する仕事について15年になる。大きく分けて3つのプロダクトを、立ち上げ初期の頃から5年ずつ面倒を見た。どの会社のプロダクトも死んでないので、自分がやってきたことはまあ間違ってないと思う。ので、まとめておく。
例えば、自社プロダクトがオーブンだったとしよう。温度を指定すると、庫内をその温度にする機能がすでに正しく備わっているとする。サービス係はこの自社プロダクトのオーブンを使って、最高の料理をする。
事業は鳴かず飛ばずの調子で動いてはいる。すると営業かコンサルが、「日本を市場にするなら米を作らねなならない。オーブンに米を炊くためのボタンをつける必要がある。ボタンを押すと、初めチョロチョロ、なかっぱっぱ、と火力を自動でコントロールして、赤子泣いても蓋を空けられないようにする、って機能のボタンをつけてくれ」って言ってくる。
俺の実力があれば、そのくらい作れますよ!と言ってしまう人は、ベンチャーで自社プロダクトの開発をしてはいけない。まったく向いていない。やるべきことは、すばやく要件を整理し、ステークホルダーと開発者の立場でささっと議論を交わし、作るものをシンプルな機能のみに絞ることだ。あるCTOは、この仕事を取締役ではなく「取縮め役」と呼んでいた。
今回の機能について言えば、ご飯を炊くボタンなんて要らない。必要なのは以下だ。
ご飯を炊くボタンをつけてはならない理由が大きく分けて2つある。
まず第一に、目的に特化した複雑な機能は壊れやすい。どんなに優秀なエンジニアでも、複雑な機能よりシンプルな機能のほうがバグを混入せずに作れる。人手の少ないベンチャー企業で、品質の悪い自社プロダクトを抱えることは自殺行為だ。バグがほぼ起きない、シンプルな構成のプロダクトを持つべきである。
第二に、複雑な機能はその後の開発を阻害する。ベンチャー企業のプロダクトは常に進化しなければならない。自社プロダクトを常に進化させるには、自社プロダクトの仕様も実装もすべてを熟知している必要がある。しかし、複雑な仕様を持つプロダクトの全仕様を理解できるのは、コアエンジニアの2、3名に限られてしまう。一言二言で語れるシンプルな仕様を持つプロダクトであれば、社員全員がそのプロダクトの本質を理解し、プロダクトの改善をすすめることができる。
ワンタッチのボタンをつけずに人力のマニュアルに頼ることは、タスクの自動化に逆行しているように感じるかもしれない。しかし、そうではない。タスクを自動化するにはタスクが固定化されてなければならない。しかし、ベンチャーではタスクも進化する。進化できないタスクを抱えてしまったら、それはベンチャー企業としては足かせだ。人力にすることで業務フローを日々進化させ、進化しきって枯れたところで外部APIでも作ってそこから最適化されたすごいフローの「コメを炊く」という機能を実装すれば良い。最初から自動化して進化を妨げるべきではない。
ベンチャー企業の社員は何でも屋で、なんでもやることが大切だ。が、自社プロダクトはシンプルに保たなければならない。自社プロダクトに何でもやらせてはいけない。エンジニアが死守する必要がある。
少なくとも俺はそうやって15年生きてきた。今でもそのやりかたでうまくいっているし、営業サイドと議論しながらプロダクトを作っていくのは楽しい。
例えが下手すぎだよ。 「ご飯を炊くボタン」の方がシンプルだし、ユーザーにもわかりやすいんじゃないの?
ためになりそうなことが書いてある雰囲気を感じたから読んだんですが・・・、申し訳ないが、雰囲気だけだった。 いやまぁ、そうなんですが、これ、自社開発に携わって1年目くらいの...
驚くことに、そんな基本的なこともわかってない人が多いんだよね。なので、そういう人たちのために書いた。