個人開発で最も難しいと感じること
ぼくが個人開発をはじめてから約 5 年弱。
仕事や家庭が忙しくて個人開発に時間をさけない期間もそれなりにあるし、ベテラン個人開発者からするとぼくなんかまだまだひよっこではある。
それでも 3 つの Web サービスを運営し、数年間なんとか継続している身として、個人開発はめちゃくちゃ大変なことや難しいことが多いということは身にしみてわかっているつもりだ。
そしてそのなかでも、個人開発をする中でぼくがもっとも難しいと思っていることは、マネジメントとエンジニアリングの両立だ。
通常の業務では、特殊な環境でない限りプロダクトマネージャなど主にマネジメントのロールを受け持つ人と、実際の開発が主な作業となるエンジニアが、チーム内に別の人物として存在する。(マネージャが直接開発に関わることもあるが、プロダクトやプロジェクトの成否に全責任を負うという点で、メンバーのエンジニアとはロールがはっきり異なるのが通常)
エンジニアはいわずもがな、実際に手を動かしコードを書いてプロダクトを作り上げることが仕事だ。
マネジメントは、目標を達成するようにチームをうまく機能させることが主業務である。
個人開発では、あたりまえではあるが、このふたつのロールをひとりで同時に担わなければいけない。そしてこのことは想像以上に難しい。それはなぜか。
エンジニアリングで必要になる緻密さと、マネジメントで大切になる大胆さは、ひとりの人間がなかなか併せ持つことがない、相反するような性質だからだ。
ソフトウェアの開発は非常に繊細な作業だ。
品質の高いソフトウェアやサービスを作るためには、あらゆることを想定ししながら設計の大枠を検討し、ときには何度も何度もコードを書き直して最適な設計をかためていく。そして細部まで手を抜かずにこだわって作り込み、リファクタリングなどもしながら洗練された読みやすいコードを書いていく必要がある。
緻密に慎重に作っていかなければ、どこかで設計上の破綻が起きて非常に煩雑なことをしなければいけなくなったり、バグが多発してしまったり、後々の機能追加などの作業が大変なものになっていったりする。
しかし一方マネージャ側は、目標を達成することが最優先事項だ。
そのために、様々なトレードオフを吟味しつつも、あらゆる決断を大胆に素早く下していかなければならない。
判断を先延ばしにする癖のあるマネージャを複数みてきたこともあるが、待っているのはたいてい悲惨な結果だ。判断材料が充分になくとも次々と判断を下していかないと、そのうち判断待ちのタスクだらけになり、しまいにはプロジェクトの遅延か炎上という事態につながっていく。
マネージャは、細かいことを気にしすぎずに「どうすれば目標の達成の可能性が上がるか」ということを常に考えなくてはいけず、そのために時には難しい判断を大胆に下していかなければいけない。
エンジニア側は、細部をおそろかにしてはいけない一方、マネージャは細部を気にしすぎて判断に時間をかけるようなことがあってはいけない。
なかでも特に難しいのは、リリースの判断だ。
プロダクトや機能のリリースにこぎつけるためには、「どこまで出来たらリリースすべきか」という判断が必ず必要になる。
エンジニア側は、できうる限り細かいところまで作りこみたいし、可能な限りバグを潰したい。出しうる最高品質のものを顧客に届けたい、世に出したいと思いがちだ。
一方マネージャ側は、リリースが遅延することはできるだけ避けたい。なるべく早くリリースし、お客さんやユーザの声を聞きながらさらに改善していくことこそ重要であると考える場合が多い。
プロダクトが完璧な上になることなどありえないため、どこかで折り合いをつけなければならない。
これは通常、マネジメント側が大体に決断すべきことであるが、個人開発ではなにせ作り込んでいる人間が判断しなければいけない。これをひとりの人間がおこなうことは相当に難しいことなのだ。
プロダクトを初めて開発してリリースする際、新しい機能を追加する際、もしくは開発の方法が複数ある中から選ぶ際など、エンジニア個人として難しい判断をくださなければいけない局面が、個人開発では無数に出てくる。
こういったマネージャとしての役割とエンジニアとしての役割を、自分一人の中に共存させていかなければいけないことこそ、ぼくが個人開発でもっとも難しく大変なことだと思っている。
そしてまた「自分ですべてを決めることができる」という完全な裁量と大いなる自由もまた、個人開発のもっとも大きな醍醐味であり、もっとも大きな楽しみであるとも思っている。