ボクココ

サービス開発を成功させるまでの歩み

エンジニアがゼロからサービス立ち上げするメリット

ども、@kimihom です。

Web エンジニアの中で、案外ゼロからサービス立ち上げを経験したことのある人って少ないのかもしれない。大抵は企業に就職して、既にある成功したサービスの運営や新機能、他プラットフォームへの対応などをやることが多いかと思う。

そのような既にあるサービスを拡張する 10->100 のフェーズでは体験できない 0->1 フェーズについてのメリットについて語らせてもらう。

胸を張って自分の作ったサービスだと言える

単なる気持ちの問題だけど割とこれって個人的には大事で、誰かが作ったサービスをメンテしてます程度だとそのサービスに対して100%の情熱を注ぐことは難しい(あくまで私の場合)。100%の情熱が注げないとどうなるかというと、コードの品質に妥協が入ったり、第三者の意見をハイハイ言って実装するだけのイエスマンになりがちだ。

自分の作ったサービスで、思い入れがかなりある場合は、否応無くソースコードを今自分の持てる最高の限りを尽くした状態に保とうとするだろう。そして第三者が言った新機能に対し、エンジニアであっても 「~だからそれは良くない」と堂々と言えるような立場になることができる。私はエンジニアであってもそう意見の言える立場がもっと増えるべきだと思う。なぜなら俗にいうプロダクトマネージャーはほとんどソースコードを見たり触ったりしないわけで、その立場の意見はシステム側の考慮が全く入っていないためだ。

きっとここで反論が出てくるであろう、「どんな無茶な要求でも実現できるエンジニアこそ、腕のいいエンジニアだ」というパワータイプの意見が。これに対しては私は断固として No と言いたい。例えばシステム側の設計が考慮されていない実装をしたら、その一瞬はそれでなんとか凌げるかもしれないけど、そのあとはどうなる?そのコードのせいで今後ず〜〜〜っと負債を抱えたままサービスを運営し続けていかねばならなくなる。そんなことがきっかけでサービスの品質に対して愛着がわかなくなり、次の機能開発・改善で今までよりも適当なコードを書くようになってしまう。一度でも機能や品質に妥協してしまうと、綺麗にメンテされていたコードは雪崩のように崩れ去って行ってしまうのだ。

機能に関して、エンジニアでも妥協しない。そんな立場でいられるようになるには、サービスの 0->1 をやった人間こそ一番なれる可能性が高いのではないだろうか。むしろ他にあれば教えて欲しい。

システムの全てを把握できる

途中から入れば、今まで動いている状態のを手直ししていくことになる。その場合、裏側のコードがどのように動いているのかを把握せずして表側をそのまま実装してしまうことも少なくない。そんな状態のプログラミングは、毎回冷や汗ものだ。

全ての開発に自信を持ってできるってのは、ゼロから立ち上げて頭の中に全て入っている人間しかできない技だ。設計の"なぜ"を理解しているのは、どうしてもその作った本人にしかわからない。設計の"なに"に関してはドキュメントを書いてまとめて読めるようにすることはあると思うが、その裏の背景まで知りながら開発するってのは安心してプログラミングできる一つの材料になる。

途中から入った人でも同じような品質を担保するためにレビューって文化が大事なんだろう。しかしレビューはわざわざ開発する前に設計レビューをもらい、開発が終わったあとはコードレビューが入り、リリース前に手順書レビューが入り、、みたいな流れになりやすい。てかむしろ途中から入ったメンバーがいる状態で、このような手順を踏んでいない開発組織があればむしろ危険だろう。

そしてこれこそが、1つのシステムに対して1人と10人で開発するのとでそこまで効率が変わらないとまで言われる所以でもある。1人であれば全て頭の中に入れて一気に開発するぶん、メンバー間の合意形成をとる時間を割くことができる。スタートアップと大企業のスピードの違いってのは開発の現場でも同様なのだ。

成功/失敗に関わらず大きな成長を得られる

サービスが成功/失敗するかもわからない状態で、その発言は無責任だという方がいるかもしれない。それは確かにごもっとも。私自身、実に多くのサービスをゼロから作っては壊してクローズを続けてきた。でも、私は数多くの失敗がダメだったとは決して思わない。よく言われる話ではあるけど、なんでダメだったのかを分析し、それを強化するという次のモチベーションにつなげることができるのだ。例えば 1個目のサービスはユーザーに求められていないサービスを作ってしまったと反省するとしよう。そしたら次は自分や身の回りの人に事前にこんなサービスが欲しいかを確認するプロセスを踏むことになるだろう。2個目のサービスはデザインがイケてないという反省が出てきたとしよう。そうすれば自分でいいデザインとは何かについて学んだりデザインツールを勉強したりするだろう。

このような成長によって、1人のエンジニアの力量がどんどん増えていく。それは既に成功したサービスのメンテ開発をしているエンジニアとは比べ物にならないほど多くの量になっていることだろう。

10個開発して1個成功すればそれでいいのだ。その1個さえ成功すれば、今まで書いたメリットを最大限享受できる環境を、あなた自身で作り出すことができるのである。

終わりに

企業のどこもかしこもがエンジニア募集の札を掲げているけど、そこにホイホイついて行っていいのかってのは一度考えてみてもいいかもしれない。もしあなたに金銭的、時間的余裕があるのなら、空き時間からでもゼロからサービスを作り始めたり、思い切って会社を辞めて始めてみるのもいいだろう。その時間は決して無駄にはならなくて、人生で最も成長できたと言える数ヶ月を味わうことができるだろう。

「このサービスは私が作りました。何でも聞いてください。」そんなことを胸を張って言えるようになろうではないか。