状況
新規プロジェクトのキックオフミーティングで、非エンジニアの事業責任者からこう言われることがあります。
「このサービス、将来100万人使うかもしれないので、最初から完璧にスケールする設計にしておいてください」
悪意はまったくなく、むしろ事業への期待と野心の表れです。将来の成功を見据えているからこその発言であり、担当者としては「将来困らないようにしてほしい」という誠実な願いを言っているだけです。
しかし、エンジニアの立場からすると、これは危険な指示でもあります。「完璧なスケーラビリティ」を初日から設計しようとすると、まだ誰も使っていないサービスのために、存在しない負荷を想定した複雑なアーキテクチャ(マイクロサービス分割、分散キャッシュ、マルチリージョン構成など)を組むことになりがちです。結果として、リリースが半年遅れ、肝心の「ユーザーに使われるかどうか」を確かめる前に予算と時間を使い果たす、というのはよくある失敗パターンです。
ここで「それは無理です」「オーバーエンジニアリングです」とだけ返すと、相手には「このエンジニアは慎重すぎる」「成長を軽視している」というメッセージとして伝わってしまいます。必要なのは、相手の意図(将来への不安)を認めつつ、現実的な進め方に翻訳することです。
たとえ
これは「開店前のラーメン屋」に似ています。
まだ1杯も売れていない新しいラーメン屋を開くときに、「将棋、いつか1日1000人来るかもしれないから、最初から1000人分の厨房設備と、1000人が並べる待合スペースを作っておこう」と考える店主はいません。
もしそうしたら、開店資金のほとんどを「まだ来ていない1000人」のための設備に使ってしまい、肝心の「今日来る10人のお客さんに美味しいラーメンを出す」ための準備ができなくなります。しかも、1000人来る店の厨房レイアウトは、10人向けの厨房とは全く違う形になるため、実際に1000人来るようになった頃には、最初に作った設備は使い物にならず、結局作り直すことになるかもしれません。
実際の優れた店主がやることは逆です。まずは小さい厨房で美味しい一杯を出すことに全力を注ぎ、お客さんが増えてきたら「2台目のコンロを増やす」「隣の店舗を借りて席を増やす」というように、実際の行列の長さに合わせて段階的に拡張していきます。重要なのは、最初の設計が「後から拡張できる構造になっているか」という点であり、「最初から1000人分の設備があるか」ではありません。
スケーラビリティも同じで、「将来大きくなれる余地を残した作り」にすることと、「今から巨大な負荷に対応する作り」にすることは、似ているようで全く別の話です。
提案の型
1. 受け取り(意図を認める)
「将来ユーザーが増えたときに困らないようにしたい、というご心配はまさにその通りだと思います。サービスが伸び悩んで困るより、嬉しい悲鳴で困りたいですよね」
ここで相手の不安や期待を否定しないことが重要です。相手は「スケーラビリティ」という技術用語を使っていますが、本音は「将来の成功を潰したくない」という事業的な懸念です。
2. たとえ(翻訳する)
「これは新しいラーメン屋の開店準備に似ています。まだ1杯も売れていないうちから1000人分の厨房を用意すると、今日の10人のお客さんへの対応が後回しになってしまいます。それに、実際に行列ができる頃には、お客さんの動き方(注文の仕方、滞在時間など)が想定と違っていて、最初に作った1000人用の設備がそのまま使えないことも多いんです」
3. 言い換え(技術的な論点に翻訳する)
「なので目指すべきは『最初から1000人に対応できる設計』ではなく、『今はシンプルに作りつつ、必要になったときにスムーズに拡張できる作り』だと考えています。具体的には、データベースやサーバーを後から分割・増強しやすい構成にしておく、というアプローチです」
4. 段階案(実行可能な代替案を示す)
「進め方としては、こういう段階を考えています。
- 第1段階(リリース時): シンプルな構成で、まずユーザーに使ってもらえる状態を最速で作る
- 第2段階(初期の成長期): 実際のアクセス状況・使われ方のデータを見ながら、ボトルネックになっている部分だけを強化する
- 第3段階(本格的なスケール期): 実際に『1000人規模が見えてきた』段階で、その負荷特性に合わせた本格的な分散構成に作り直す
こうすることで、『今日のお客さん』への対応を後回しにせず、かつ将来の拡張にも備えられます」
ミーティングで使える一文
「最初から1000人分の厨房を作るより、まず美味しい一杯を10人に出せる形にして、行列ができ始めたらコンロを増やす形で進めませんか。どちらも『将来の成功に備える』という目的は同じです」
例外(このたとえを使わない/肯定すべきケース)
このたとえが当てはまらない、むしろ最初から高いスケーラビリティを検討すべきケースもあります。
- バイラル施策や大規模広告出稿など、アクセス急増のタイミングが事前に確定している場合:「開店日にテレビで紹介される」と分かっているなら、最初から相応の厨房を用意すべきです。これは推測ではなく確定した前提なので、段階的拡張の議論自体が不要になります。
- 後からの拡張がほぼ不可能な領域(データの永続化方式、認証の基盤、APIの外部公開仕様など):厨房の広さは後から変えられますが、「お店の立地」や「メニューの根本的な提供方式」は後から変えにくいものです。同様に、データ設計や外部契約など、後戻りのコストが極端に高い部分については、最初にある程度の余裕を持たせておくべきです。
- 既にPMFしており、成長曲線が明確に見えている場合:ゼロから始めるラーメン屋ではなく、すでに繁盛している2号店を出す状況では、1号店のデータに基づいて最初から相応の規模で設計するのは合理的です。
こうした場合は「段階的に進めましょう」ではなく、「その前提なら、最初から備えるべき部分ですね。どの部分を手厚くするか整理しましょう」と肯定的に受け止めるべきです。
まとめ表
| 相手の言葉 | たとえ | 返し |
|---|---|---|
| 「初日から完璧にスケールする設計にして」 | まだ誰も来ない店に1000人用の厨房を用意する | 「まず10人に美味しい一杯を出せる形にして、行列ができたらコンロを増やしませんか」 |
| 「将来1000万人使うかもしれないから」 | 開店前から1000人分の設備投資をする | 「将来への備えには賛成です。まずは拡張しやすい作りにして、実際の伸びに合わせて強化していきましょう」 |
| 「後で直すのは大変だから最初にやって」 | 厨房の広さは後からでも増やせる、立地は変えられない | 「後から変えにくい部分(データ設計など)は今固めます。変えやすい部分(サーバー規模など)は後回しにして最速リリースを優先しましょう」 |
| 「開店日にテレビで紹介されるから」(確定した急増要因がある場合) | 当日1000人来るとわかっている店 | 「それなら話が変わります。最初から相応の規模で備える前提で設計しましょう」 |