ボクココ

個人開発に関するテックブログ

開発スピードを保ち続ける唯一の方法

ども、@kimihom です。

f:id:cevid_cpp:20200320231733j:plain

先日、顧客からのフィードバックを元に機能追加・改善をしたところ、「そのスピードが羨ましい」とお褒めの言葉をいただいたので、本記事では私の思う開発スピードを高速に保つ方法を紹介してみよう。

サービス担当者が長くサービスと関わり続ける

サービスを 0 から作った人が、そのサービスを長く運用し続ける。これこそが開発スピードを高速に保ち続ける上で最も重要な点であると考えている。

私はまさに今、 0から作ったサービスを運営し続けている。今まで作ったソースコードの全ての関係を把握しているので、ここのコードを修正すると、他のどのコードに影響を受けるかが全てわかる。だから、そもそもトラブルが起こりにくい。仮に起こったとしても、どこが問題かが一瞬でわかるのですぐに修正できる。コードの影響範囲がわかると、コードを削除するという決断をしやすいという点がとても重要だ。影響範囲がわからないと、コードを削除する判断ができず、とにかく過去の酷いコードを残し続け、似たようなコードが量産されていく。そうして開発スピードはどんどん下がっていくのである。

最近、大きな組織にいるエンジニアがソースコードの削除を自慢するようなツイートをよく見かける。Git での +20, -1600 の差分をシェアしている。とても素晴らしい仕事だ。これを可能にしたのは、テストコードの存在だろう。正しくテストコードを書けば、失敗した時点で何かおかしな修正をしてしまったということを把握できる。ただしテストコードが完璧であり続けることは不可能だ。必ずどこかで抜け漏れのテストコードが出てくるし、そのテストコードを細かく書き続けるための追加の時間が必要になる。

サービス開発を最初からずっと担当していれば、そもそも最低限の需要なテストコードだけを記しておくだけで十分だ。テストコードに時間をかけるより、その分、新しい機能開発・改善に時間を費やすことができる。しかも、書いたコードはバグが少ない。全てのソースコードを既に把握しているからだ。

これは他の競合や大企業が類似サービスを作った時でも確実に強みになる。彼らはエンジニアがコロコロ変わっていく環境に身を置き続けている。コロコロ変わる前提でサービスを開発運用しないといけないため、開発速度よりもバグが起きづらい環境を維持し続ける必要がある。システム安定性を無視してスピード重視を保ち続けると、必ず深刻なトラブルを引き起こす。そして新しく入ったエンジニアを責め立て、次々とエンジニアが辞めていくわけである。そんな企業が運営しているシステムと、サービスを作った本人が運営し続けているサービスとで、あなたはどちらのサービスを使いたいと思うだろうか。前者を選ぶ場合には、どうぞ大企業の作っているでっかいシステムを使っていただければと思う。

リスクをどう考えるか

この話をすると、「でもその専任の人がいなくなったら、さらにリスクになるよね」というレスポンスを多くいただく。これに関しては、その通りである。リスクをとってエッジを利かせてより良いサービスにするか、リスクを取らずに特徴のない普通のサービスを作るかのどちらかを選ぶ必要がある。

本記事の文脈で、投資を受けて一気にサービスを拡張する選択をすることは、リスクだろうか?私からしたら、これはエンジニアにとってはリスクを取らない安全策だと考えている。その得られた資金でエンジニアを大量に採用し、一人が辞めても問題なく動き続けるシステム運営をする決断をしている。リスクを取らない選択をした結果、どんどん新しく入ってきた人を教育するのに時間をかける。誰かが書いたコードをメンテナンスすることでサービスが大きくなってどんどん開発スピードが落ちていく。そんな環境に身を置くエンジニアは、かつて自分の思い通りにプログラムを書いていた時期を懐かしく感じる。そして時には辞め、時には給与を優先して仕事のモチベーションを下げる。

とはいえ、エンジニアの理想を実現できる、作った本人が運営をし続けているサービスは少ない。これは 0->1 が好きなエンジニアと 1->10 が好きなエンジニアの性格の違いだろう。0->1 エンジニアがそれなりにユーザーを抱えて、メンテナンスの仕事も入ってきたり、新しいことにチャレンジできなくなってきた途端、やる気をなくして去っていく。そうしてまた新しいサービスを他で作って、また辞めていく。そうした0->1 エンジニアは、実は最新技術を追ってカッコよく見える裏で、開発チームにはとんでもないデメリットを残していっているわけだ。でも、これもリスクに対する一つの考え方なのである。

終わりに

私が テクノロジーの最新を追い続け、真似されないスピードで開発を続けられているのは、作った本人が運営をし続けているからである。この体制が終わった瞬間、開発スピードは極端に落ちる。そうして他のよくあるサービスの一つとして埋もれていく。

仮に何かしらの理由で私がいなくなった時のリスクは高い。それでも、そのリスクを受け入れたからこそ実現できた理想の環境が今ここにある。運営を信じてサービスを使い続けてくれている顧客のためにも、私は続けていく。そうしてこれからも尖ったサービスとしてあり続けていこう。