これは、製品を作る人、コードを書く人なら誰もが自分に問いかける問題であり、特に初めて何かを立ち上げる際にはなおさらです。だから心配しないでください。この質問をされたということは、あなたが真剣に考えている証拠であり、良いことです。
視点を変えて、この問題をあまり「技術的」に考えすぎないようにしましょう。
あなたはシステムを開発しているのではなく、レストランを開いているのだと考えてみてください。
時期尚早な最適化とは、どのようなものでしょうか?
それは、あなたが店舗を借りて、まだメニューも決まっておらず、お客様も一人もいないのに、すでに大金をかけて厨房を改装し始めているようなものです。将来たくさんのお客様が来るだろうと考えて、1分間に100食を提供できる調理ラインを設計したり、お客様の味覚の要求が高いだろうと考えて、ミシュラン三つ星レストランの厨房と同じオーブンを購入したりします。さらには、将来的にチェーン店を展開する可能性まで考慮して、今からセントラルキッチンの配送システムを設計し始めるのです。
結果はどうなるでしょうか?あなたは3ヶ月かけて、豪華で驚くほど効率的な厨房を作り上げました。そして、最初の料理としてトマトと卵の炒め物を出しました。しかし、誰も食べに来ないことが判明しました。あるいは、来たお客様が「このトマトと卵の炒め物、しょっぱすぎる。好きじゃない」と言うかもしれません。
この時、1分間に100食を提供できる調理ラインに意味があるでしょうか?ミシュラン三つ星のオーブンは役に立ったでしょうか?全くありません。あなたが「厨房の最適化」に費やした時間、労力、お金はすべて無駄になりました。本来なら、これらのリソースを使って、市場を巡り、様々な料理を試作し、近所の人や友人に試食してもらい、皆が本当に何を好むのかを探るべきだったのです。
あなたのシステムに話を戻しましょう
- パフォーマンス最適化:これはあなたの「高効率な調理ライン」です。誰も使っていない時、あなたのシステムが1人向けであろうと10万人向けであろうと、何の違いもありません。存在しない99,999人のために行った最適化は、無駄な努力に終わります。
- アーキテクチャ最適化:これはあなたの「セントラルキッチンシステム」です。あなたの小さなレストランがまだ軌道に乗っていないうちに、チェーン店のアーキテクチャを計画するのは、少し早すぎませんか?目の前の店をしっかり作り上げ、最初のお客様を満足させることが、何よりも重要です。
では、どのような「最適化」が「時期尚早」ではないのでしょうか?
レストランの例を使い続けましょう。
- 基本的なユーザー体験は最適化ではなく、合格ラインです。 もしあなたの厨房で、トマトと卵の炒め物を作るのに30分もかかるとしたら、お客様は間違いなく帰ってしまうでしょう。これは「遅い」のではなく、「全く使えない」ということです。あなたのシステムに当てはめると、ユーザーがボタンをクリックして長時間待たされ、フリーズしたと思うほど遅い場合、それはパフォーマンスの問題ではなく、バグであり、製品として不合格です。これは修正しなければなりません。最初のユーザーがスムーズに使えることを保証する必要があります。
- 安全性は最適化ではなく、最低限の基準です。 お客様が増えたらレストランに鍵をかけよう、厨房の衛生に気をつけよう、などと言ってはいけません。安全性の問題は初日から考慮しなければならないことです。
では、結論は何でしょうか?
ユーザーがいない時、あなたの唯一の目標は、あなたのアイデアを検証することです。あなたのシステムは、「私が作っているこのものを、本当に誰かが必要としているのか?」を明らかにするための単なるツールに過ぎません。
あなたは、最初のユーザーを見つけ、彼らが快適に使えるようにする機能に99%のエネルギーを注ぐべきです。コードが少し乱雑でも、アーキテクチャが「壮大」でなくても、機能が安定していて体験がスムーズであれば、それらは問題ありません。本当に100人、1000人のユーザーができて、「ここが遅すぎる」「あの機能がいつも固まる」と不満を言い始めた時、その時に最適化を行えば、あなたは強いモチベーションを感じ、目標も明確になるでしょう。なぜなら、あなたが誰のために、どのような問題を解決しているのかを知っているからです。
一つの言葉を覚えておいてください:誰もあなたの作った料理にお金を払う前に、完璧な厨房を作ることに夢中になってはいけません。 まずは、いくつか食べられる料理を作り、それを出して、誰かが一口食べてくれるかどうかを見てみること。それが今、あなたがすべきことです。