概要
根拠は自社実測データを優先し、限界を明記する
「Googleの調査によれば」という外部の一般論だけでは説得力が弱い。自社の類似実績を根拠にしつつ、対象ページが異なる等の限界を明示して保守的に見積もる。
レイテンシはp50/p95/p99で分解する
「平均レスポンスタイム」という粗い指標では体感速度もテールレイテンシも見えない。施策ごとの技術的な効果上限も指標ごとに検証する。
効果が及ぶ範囲を正確に見積もる
キャッシュヒット率60%のような適用範囲を無視して改善率を売上全体に一律適用すると、売上インパクトを実態より大きく見せてしまう。
試算だけで即決せず、A/Bテストで段階的に検証する
桁外れなROIが出た時点でまず前提を疑う。安価な施策から実測し、判定ゲートを通過した場合のみ次の投資に進む。
問題
ECサイト MOps 販促システムチームでは、商品検索APIのレスポンスが遅い(p95で約900ms)という現場の声が以前から上がっており、後輩PdM見習いが「検索APIレスポンス改善 投資対効果(ROI)提案書」のドラフトを作成し、来週の役員会で開発予算の承認を得ようとしている。
あなたはMOpsチームのシニアエンジニアとして、この Bad ROI提案書をレビューし、実際に役員会で承認判断に使えるレベルへ再設計することになった。以下のドラフトには 7つの問題点が潜んでいる。問題点を全て洗い出し、Good ROI提案書へ再設計してください。
制約・前提条件(正)
- 検索APIの現状レイテンシ: p50=350ms、p95=900ms、p99=2,200ms
- 月間検索結果ページ到達数: 800万回
- 検索結果ページ到達後の現状CVR: 2.10%
- 検索経由の月間売上: 4.2億円(全社売上の35%)
- 平均客単価(AOV): 約2,500円
- 参考にできる自社実測データ: 昨年、商品詳細ページでLCPを1.2秒→0.6秒に改善したA/Bテストを実施済み。CVRが2.10%→2.35%(絶対+0.25pt、相対+7%)に有意に改善した実績がある。ただし対象は商品詳細ページであり、検索結果ページとは画面・ユーザー行動が異なる
- 過去の反証事例: トップページの画像最適化(CLS改善)を実施した際は、体感速度は改善したがCVRに有意な変化は見られなかった
- 施策候補: (a) Redisキャッシュ導入(人気検索クエリ上位500件、全体トラフィックの約60%をカバー、p95 900→500ms見込み、実装12人日)、(b) Elasticsearchインデックス再設計+N+1解消((a)実施後のp95 500→250ms見込み、実装25人日、全文検索精度の再検証が必要)、(c) CDNエッジキャッシュ(静的な人気商品結果のみ、効果限定的、実装3人日)
- エンジニア単価: 80万円/月(160時間=20人日換算 → 1人日=4万円)
- 技術的依存関係: (a)と(b)は積み上げ型。(c)は(a)(b)と独立だが同時計測すると効果の要因分解ができなくなる
- 後輩ドラフトは、自社実測データではなく外部の一般論を根拠にしている点、レイテンシ指標の粒度、効果適用範囲、季節性、施策別のコスト内訳、効果測定計画のいずれも検討されていない
悪いROI提案書 (Before)
件名: 検索APIレスポンス改善による売上インパクト提案
現状の検索APIは平均レスポンスタイムが遅く、Googleの調査によれば
「ページ表示が1秒遅れるとコンバージョン率が7%低下する」とされている。
← 問題①: 外部の一般論のみが根拠、自社実測データを検証していない
← 問題②: 「平均レスポンスタイム」のみでp50/p95/p99を区別していない
【施策】
Redisキャッシュを導入し、検索APIを高速化する(実装期間: 2週間)。
900ms → 100ms程度まで高速化できる見込み。
← 問題③: 非現実的な改善幅をキャッシュ導入単独で見込んでいる
【売上インパクト試算】
検索経由の月間売上: 4.2億円
改善率: 7%
→ 月間売上インパクト = 4.2億円 × 7% = 2,940万円
→ 年間売上インパクト = 2,940万円 × 12ヶ月 = 3億5,280万円
← 問題④: 改善率をキャッシュ非ヒット分にも一律適用
← 問題⑤: 単純な掛け算のみで季節性・ベースライン変動を無視
【投資対効果】
開発コスト: 2週間(人件費約80万円)
年間効果: 3億5,280万円
ROI = (3億5,280万円 - 80万円) / 80万円 × 100 ≒ 44,000%
← 問題⑥: 施策別(Redis/ES/CDN)のコスト内訳・実装順序が欠如
→ 圧倒的なROIのため、即座に予算承認・着手すべきである。
← 問題⑦: 効果測定計画・ロールバック基準が不在
ヒント(段階的開示)
ヒント1 — 方向性
ヒント2 — アプローチ
- 問題①: 「Googleの調査」という外部の一般論のみを根拠にしている → 自社の類似実績(商品詳細ページのLCP改善A/Bテスト)を根拠にしつつ、対象ページが異なる点を明記して保守的に見積もる
- 問題②: 「平均レスポンスタイム」としか書かれておらず、p50/p95/p99の区別がない → レイテンシ指標をp50/p95/p99に分解し、体感速度への影響が大きいテール(p95/p99)の改善を重視する
- 問題③: 「900ms→100ms」という改善幅をキャッシュ導入だけで達成できるとしている → 施策(a)(b)(c)それぞれの技術的な効果上限を分けて見積もる
- 問題④: 改善率7%を検索経由の売上全体にそのまま適用している → キャッシュがヒットするトラフィック(全体の60%)のみに効果が及ぶことを反映した加重平均で計算する
- 問題⑤: 「4.2億円×7%」という単純計算で季節性・ベースラインの変動を考慮していない → 保守/中央/楽観の3シナリオでレンジを持たせる
- 問題⑥: 開発コストが「2週間で80万円」とだけ書かれ、施策別の人日内訳がない → (a)(b)(c)それぞれの人日・実装順序・技術的リスクを明記する
- 問題⑦: 効果測定計画・ロールバック基準がなく、44,000%というROIをそのまま鵜呑みにしている → 過去の反証事例を踏まえ、A/Bテストとロールバック基準を設計した上で段階的に投資判断する
ヒント3 — 誘導
【ROI試算の骨格((a)実施後・中央値シナリオ)】
現状コンバージョン数 = 800万回 × 2.10% = 168,000件
(a)実施後コンバージョン数 = 800万回 × 中央値CVR
月間売上インパクト = (施策後コンバージョン数 - 168,000件) × AOV(2,500円)
【施策別コスト】
(a) 12人日 × 4万円 = 48万円
(b) 25人日 × 4万円 = 100万円
(c) 3人日 × 4万円 = 12万円
【段階的ロードマップの骨格】
Phase1: (a)Redisキャッシュ実装 + A/Bテスト実施(2週間)
Phase2: A/Bテスト結果で有意差ありならPhase3へ、なければ再検討
Phase3: (b)Elasticsearchインデックス再設計((a)がGoの場合のみ着手)
(c)は(a)(b)と要因分解できなくなるため、A/Bテスト期間中は実施しない
【ロールバック基準の骨格】
2週間後、CVR差が統計的に有意でない(p>0.05)場合 → (b)への投資は見送り
問題点分析(7点)
| # | 問題点 | 分類 | 改善方法 |
|---|---|---|---|
| 1 | 外部の一般論のみが根拠で自社データ未検証 | 根拠の欠如 | 自社LCP改善実績を根拠に、対象画面の違いを明記 |
| 2 | 平均レスポンスタイムのみでp50/p95/p99未分解 | 根拠の欠如 | レイテンシ指標をp50/p95/p99に分解 |
| 3 | 900ms→100msの非現実的な改善幅 | 見積り精度 | 施策別の技術的な効果上限を分けて見積もる |
| 4 | 改善率をキャッシュ非ヒット分にも一律適用 | 比較不能 | キャッシュヒット率60%を反映した加重平均 |
| 5 | 単純な掛け算で季節性・変動を無視 | 見積り精度 | 保守/中央/楽観の3シナリオでレンジ提示 |
| 6 | 施策別コスト内訳・実装順序の欠如 | 依存関係 | (a)(b)(c)の人日・順序・技術リスクを明記 |
| 7 | 効果測定計画・ロールバック基準が未定義 | 検証設計 | A/Bテスト設計とロールバック基準を追加 |
ROI試算プロセス比較 — Bad vs Good
模範解答
修正①②④⑤: ROI試算表(Before/After、保守/中央/楽観レンジ)
Before(後輩ドラフト、根拠なしの単一楽観値)
| 項目 | 内容 |
|---|---|
| 改善率の根拠 | Googleの一般論のみ(自社実測データ未検証) |
| 想定改善幅 | 900ms → 100ms(施策別の効果上限を検証せず) |
| 効果適用範囲 | 検索経由売上4.2億円の全体に一律7%適用 |
| 月間売上インパクト | 2,940万円 |
| 年間ROI | 約44,000% |
After(Good、自社実測データ×適用範囲限定×シナリオレンジ)
現状: 月間検索結果ページ到達数800万回 × CVR2.10% = 168,000件、AOV 2,500円
| シナリオ | (a)実施後CVR | 月間コンバージョン数 | 現状比差分 | 月間売上インパクト |
|---|---|---|---|---|
| 保守 | 2.13%(キャッシュヒット分のみ+2%相対) | 170,400件 | +2,400件 | +600万円 |
| 中央値 | 2.18%(キャッシュヒット分のみ+4%相対) | 174,400件 | +6,400件 | +1,600万円 |
| 楽観 | 2.25%(キャッシュヒット分のみ+7%相対=LCP実績と同等) | 180,000件 | +12,000件 | +3,000万円 |
修正③⑥: 施策別(a/b/c)の実現可能性・リスク評価表
| 施策 | 内容 | 効果見込み | 人日 | コスト | リスク | 実施順序 |
|---|---|---|---|---|---|---|
| (a) Redisキャッシュ | 人気検索クエリ上位500件をキャッシュ | ヒット時(60%)のみp95 900→500ms | 12人日 | 48万円 | キャッシュ無効化タイミングのデータ鮮度リスク | Phase1(最優先) |
| (b) Elasticsearch再設計+N+1解消 | インデックス構造の再設計 | (a)実施後のp95 500→250ms | 25人日 | 100万円 | 関連度スコアリングへの影響、精度再検証が必要 | Phase3((a)がGoの場合のみ) |
| (c) CDNエッジキャッシュ | 静的な人気商品結果のみ対象 | 効果は限定的 | 3人日 | 12万円 | (a)(b)と同時実施すると要因分解不能 | (a)のA/Bテスト後、単独で検証 |
修正⑦: A/Bテスト設計とロールバック基準
- 対象施策: まず(a)Redisキャッシュ導入のみをA/Bテストする((b)(c)は同時実施しない)
- 割付: 検索トラフィックを50%/50%でキャッシュあり群/なし群に分割
- 実施期間: 2週間(繁忙期直前・年末商戦前などの季節要因が強い期間は避ける)
- 判定基準: 有意水準5%、検出力80%でCVRの絶対差+0.10pt(保守シナリオ相当)を検出できるサンプルサイズを事前に確保する。月間800万回の50%(400万回/月)のトラフィックがあれば2週間で確保可能
- ロールバック基準: 2週間後、キャッシュあり群のCVRがなし群に対して統計的に有意な改善(p<0.05)を示さない場合、または悪化した場合は、(b)への投資(100万円)を見送り、キャッシュ対象クエリの絞り込みや別施策を検討する
修正⑥⑦: 段階的な提案ロードマップ
| フェーズ | 内容 | 判断 |
|---|---|---|
| Phase 1 | (a)Redisキャッシュ実装(12人日)+ A/Bテスト実施(2週間) | — |
| 判定ゲート | A/Bテスト結果でCVRが有意に改善したか判定 | Go/No-Goをチーム内で機動的に判断 |
| Phase 2(Go時) | (b)Elasticsearchインデックス再設計(25人日)に着手 | 判定ゲートを通過した場合のみ投資 |
| Phase 2(No-Go時) | (b)への投資を見送り、キャッシュ対象クエリの絞り込みや別施策を再検討 | — |
| 並行実施 | (c)CDNエッジキャッシュ(3人日)は(a)のA/Bテスト完了後、単独で効果検証してから実施 | 要因分解のためA/Bテスト期間中は同時実施しない |
ポイント解説
実務への応用
MOpsチームでは今後も、パフォーマンス改善施策の投資対効果を役員会や関連部署に説明する局面が繰り返し発生する。本問題の型(自社実測データに基づくレンジ付きROI試算 → 施策別の実現可能性・リスク評価 → A/Bテスト設計とロールバック基準 → 段階的な投資ロードマップ)は、パフォーマンス改善に限らず「速そう」「効きそう」という感覚だけで語られがちな施策提案全般に応用できる。
今日のまとめ
次のステップ
- 発展問題: Phase1のA/Bテスト実施後、実際にはキャッシュあり群のCVRがなし群に対して統計的に有意な改善を示さなかった(p=0.42)ことが判明したとする。このとき、(1) 48万円の投資をどう総括するか、(2) 「体感速度は上がったがCVRは変わらなかった」という結果からどのような仮説(別のボトルネックの存在等)を立てるか、(3) 次に検証すべき施策とその優先順位、の3点を踏まえた振り返りレポートを作成せよ。
- 参考: Webパフォーマンスとコンバージョン率の関係(Core Web Vitals)、A/Bテストのサンプルサイズ設計、投資判断における段階的ゲートレビュー(Stage-Gate)、ROI試算の前提条件の明示