🎬 シナリオ
MOps チームの「クーポン基盤」担当は、ブラックフライデー(11/27〜12/1)前の最後の開発期間に何を積むかを決めている。今日は 10/15(木)。開発期間は 10/19〜11/19、11/20〜1/6 は年末商戦のリリース凍結。
体制: PdM 小野さん、リード 村上さん(30%)、バックエンド あなた・青木さん、SRE 西田さん(相談のみ)。関係者: マーケ 高田さん、CS 吉川さん、情報セキュリティ 石井さん、アプリチーム 大野さん。
💬
小野さんが 10件を Value vs Effort に並べた。Value = 6か月で増える粗利。エンジニアの出した保守系6件はすべて 0 円で左下に落ち、案は「A・C・I・J の 21人日、+456万円」になった。
青木さん「G のバッチは BF の朝に止まったら売上に直撃します。B を先にやれば A も C も安くなる。保守が全部 0 円なのはおかしい」
小野さん「おかしいなら同じ軸に載せてください。気持ちではなく、比べられる形で」
青木さん「G のバッチは BF の朝に止まったら売上に直撃します。B を先にやれば A も C も安くなる。保守が全部 0 円なのはおかしい」
小野さん「おかしいなら同じ軸に載せてください。気持ちではなく、比べられる形で」
候補10件(出所の記載が無い数値はすべて「仮定(演習の設定)」)
| ID | 案 | 出した人 | Effort | 小野さんの Value | 事実・メモ |
|---|---|---|---|---|---|
| A | 会員ランク別クーポン | マーケ | 8 | 180 | 最初の利用は 2/10 の会員感謝祭 |
| B | クーポン併用ルールの作り直し(if の塊 → ルール表) | エンジニア | 6 | 0 | 施策ごとにエンジニアがコード修正(月5回 × 0.6人日)。過剰割引が過去12か月に2件(平均45万) |
| C | BF 用「2点目半額」クーポン型 | マーケ | 6 | 150 | B の後なら 3人日。11/19 までに出ないと価値 0 |
| D | 決済ページのマーケタグ棚卸しと改ざん検知 | 情報セキュリティ | 5 | 0 | PCI DSS v4.0.1 要件 6.4.3/11.6.1。12/15 の年次準拠報告までに必要 |
| E | クーポン API の Node.js 20 → 24 更新 | エンジニア | 7 | 0 | Node.js 20 は 2026-04-30 でサポート終了済み。F の後なら 4人日 |
| F | 旧クーポン API v1 の廃止 | エンジニア | 3 | 0 | 呼ぶのはアプリ旧版だけ(3%)。保守 0.5人日/月 |
| G | クーポン発行バッチの高速化 | エンジニア | 5 | 0 | 通常 40万枚で 3時間10分、枠 01:00〜05:00。BF 初日は 90万枚。遅れると 06:00 の BF 告知メールが止まる |
| H | flaky test の修正 | エンジニア | 3 | 0 | CI が 18% で偶発失敗、再実行に 1.2人日/月 |
| I | 販促効果ダッシュボード | マーケ | 6 | 120(幅 0〜240) | 根拠は「判断が速くなる」 |
| J | ポイント二重付与の修正 | CS | 1 | 0 | 月3件、CS 対応と補填 |
| 共通の設定 | 値 |
|---|---|
| キャパ(10/19〜11/19) | 実キャパ 33人日、予備 20% を引いた計画上限 26人日 |
| 凍結明け(1/12〜2/5) | 約 12人日 |
| 人件費の換算 | 1人日 = 6万円 |
| BF 初日の粗利 | 2,000万円。朝のメールが止まると 20% = 400万円を失う |
| アプリのリリース | 11/5(申請締切 10/28)、次は 12/10 |
📝 課題
あなたのタスク: リード村上さんの代わりに、明日の計画会に出す3点を作ってください。数字を作りすぎないこと。
- Value の内訳表: 10件の Value を「稼ぐ/守る/浮かす/義務」に分けて書き直す。出所ラベル(実測/導出/仮定)と幅を付ける
- 依存と期日を入れた配置図と実施順: 他の案を安くする関係(解放)と、価値が消える期日を書き込み、象限だけでは決まらない順序を出す
- 26人日の投入案と小野さんへの説明メモ: 小野さんの案と比較し、見送る案には拾い直す条件を付ける
🔍 ヒント(段階的開示)
ヒント1
保守作業の Value は「売上が増える」では書けない。「やらないと何が起きるか(確率 × 損失)」か「毎月の手間がいくら減るか」で書く
ヒント2
B が A・C を安くする分を B の Value に足し、さらに A・C の Effort も下げると二重に数える
ヒント3
C と G は 11/19 を過ぎると価値 0。E は「いつかは必ずやる」作業で、問題はいつやるか
ヒント4
D を「確率 × 損失」で金額にすると根拠の無い数字になる。マトリクスに置く前に取り分けるべき物はないか
ヒント5
F は単独では小さいが、E の前提。F の中に他チームの締切に縛られる部分は無いか
📚 背景知識・用語解説
📖
なぜ保守は左下に落ちるか: Value を「増える粗利」だけで測ると、事故が起きない・手間が減る・次の開発が速くなる、という効果は 0 円になる。案が悪いのではなく、ものさしが片側しか無い。Day050 の「ものさしの違い」が、営業側と技術側の間で起きている。
Value を4つに分ける
| 種類 | 何を数えるか | 計算の形 | 今回の例 |
|---|---|---|---|
| 稼ぐ | 増える粗利 | 件数 × 粗利 | A・C・I |
| 守る | 避けられる損失の期待値 | 確率 × 起きたときの損失 | G・J・E |
| 浮かす | 減る手作業 | 人日 × 換算単価 | B・H・F |
| 義務 | 法令・契約・規格で決まっている | 金額にしない(期日だけ) | D |
| 解放 | 他の案の Effort を下げる | 依存先の Effort を下げて一度だけ数える | B→A・C、F→E |
📘
トイル(浮かすの根拠): Google SRE Book は、トイルを「手作業・繰り返し・自動化可能・その場しのぎ・長く残る価値が無い・サービスの成長に比例して増える」作業と定義し、SRE の時間の 50% 未満に抑える目標を掲げる(Eliminating Toil、WebFetch で確認、参照日 2026-10-15)。浮いた人日は別の仕事に使って初めて価値になる。1人日=6万円は機会費用としての仮定。
負債の利息と元本: Martin Fowler は、汚れた設計のせいで新機能に余計にかかる手間を利息、設計を直す作業を元本の返済にたとえ、似た機能が続くなら先に直したほうが早くなると書く(TechnicalDebt、WebFetch で確認、参照日 2026-10-15)。B と A・C の関係がこれ。
遅延コスト: SAFe の WSJF は遅延コスト ÷ 仕事の長さで順番を決め、入力に「利用者・事業の価値」「時間の制約」「リスク低減・機会の解放」を挙げる(WSJF、公開部分のみ確認、参照日 2026-10-15)。今回は考え方だけ借り、金額のまま使う(相対点数の WSJF はテーマ#5 以降)。
負債の利息と元本: Martin Fowler は、汚れた設計のせいで新機能に余計にかかる手間を利息、設計を直す作業を元本の返済にたとえ、似た機能が続くなら先に直したほうが早くなると書く(TechnicalDebt、WebFetch で確認、参照日 2026-10-15)。B と A・C の関係がこれ。
遅延コスト: SAFe の WSJF は遅延コスト ÷ 仕事の長さで順番を決め、入力に「利用者・事業の価値」「時間の制約」「リスク低減・機会の解放」を挙げる(WSJF、公開部分のみ確認、参照日 2026-10-15)。今回は考え方だけ借り、金額のまま使う(相対点数の WSJF はテーマ#5 以降)。
📅
外部の事実(参照日 2026-10-15)
・Node.js(nodejs/Release): 20.x は 2026-04-30 で EOL。22.x はメンテナンス LTS で 2027-04-30 まで。24.x はアクティブ LTS、2026-10-20 にメンテナンスへ、2028-04-30 まで。22 に上げると半年後にまた上げるので更新先は 24。
・PCI DSS v4.x 要件 6.4.3/11.6.1(PCI SSC ブログ): 決済ページのスクリプトの承認・完全性の確認・改ざん監視を求める e スキミング対策。必須化の日付(2025-03-31 と記憶)はこのページに無く未照合。マーケのタグは決済ページにも載りやすく、MOps が持ち主になりやすい。
・Node.js(nodejs/Release): 20.x は 2026-04-30 で EOL。22.x はメンテナンス LTS で 2027-04-30 まで。24.x はアクティブ LTS、2026-10-20 にメンテナンスへ、2028-04-30 まで。22 に上げると半年後にまた上げるので更新先は 24。
・PCI DSS v4.x 要件 6.4.3/11.6.1(PCI SSC ブログ): 決済ページのスクリプトの承認・完全性の確認・改ざん監視を求める e スキミング対策。必須化の日付(2025-03-31 と記憶)はこのページに無く未照合。マーケのタグは決済ページにも載りやすく、MOps が持ち主になりやすい。
✅ 模範解答
答えを見る前に、自分の内訳表と実施順を作ってから読み比べてください。
0. Value の種類クイズ(主な種類を1つ選ぶ)
| 案 | 手がかり | あなたの判定 |
|---|---|---|
| A ランク別クーポン | ゴールド会員の購入が増える | |
| B 併用ルール | 施策ごとのコード修正が消える | |
| C 2点目半額 | BF の売上 | |
| D 決済ページのタグ | 年次準拠報告に必要 | |
| E Node.js 更新 | いつかは必ずやる | |
| F v1 廃止 | E の前提 | |
| G バッチ高速化 | BF の朝のメール | |
| H flaky test | 再実行の手間 | |
| I ダッシュボード | 判断が速くなる | |
| J ポイント二重付与 | CS の対応と補填 |
1. Value の内訳表(6か月・万円)
| ID | 稼ぐ | 守る | 浮かす | 義務 | 合計 | 幅 | 計算と出所 |
|---|---|---|---|---|---|---|---|
| A | 180 | — | — | — | 180 | 90〜270 | +30万/月 × 6(マーケ試算=仮定) |
| B | — | 45 | 108 | — | 153 | 110〜200 | 18人日 × 6万(実績から導出)+ 過剰割引 期待1件 × 45万(導出)。解放は足さない |
| C | 150 | — | — | — | 150 | 80〜200 | BF 5日間(仮定)。11/19 以降 0 |
| D | — | — | — | 12/15 | 義務 | — | 金額にしない。固定レーン |
| E | — | 50 | — | — | 50 | 20〜150 | 確率 0.5 × 割増 100万(+5人日 30万 + BF 中の障害期待 70万。仮定) |
| F | — | — | 18 | — | 18 | — | 0.5人日/月 × 6 × 6万(導出)。E を −3人日 |
| G | — | 280 | — | — | 280 | 100〜540 | 確率 0.7 × 400万(仮定)。11/19 以降 0 |
| H | — | — | 43 | — | 43 | — | 7.2人日 × 6万(実績から導出) |
| I | 120 | — | — | — | 120 | 0〜240 | 道筋の無い見込み(根拠の弱い仮定) |
| J | — | 6 | — | — | 6 | — | 月3件 × 約3,300円 × 6(導出) |
🧮
0 円だった6件のうち、G(280)と B(153)は A(180)・C(150)と同じ大きさになった。E・F・H・J は小さいまま。保守がすべて重要なわけではないことも、同じ表で見える。
2. 依存と期日を入れた配置図
閾値は Value 100万円(6か月)、Effort 5人日。左が小野さん(稼ぐだけ)、右が書き直し後(依存先は前提作業の後の Effort、点線矢印=解放)。
小野さんの配置(Value=稼ぐのみ)
書き直し後(稼ぐ+守る+浮かす)
緑=クイックウィン、橙=大きな賭け、青=埋め草、赤=金食い虫。◆=期日 11/19。D は右図では象限の外(固定レーン)。
前提を動かす(右図と内訳が変わる)
F を割る: 依存の連鎖の先頭にある外部の締切
F1 告知依頼 0.5人日
締切 10/28→ アプリ 11/5 リリース→ 旧版の呼び出し 0.3% 未満(12月)→ F2 v1 削除 2.5人日(1/12〜)→ E Node 24 更新 4人日
締切 10/28→ アプリ 11/5 リリース→ 旧版の呼び出し 0.3% 未満(12月)→ F2 v1 削除 2.5人日(1/12〜)→ E Node 24 更新 4人日
F1 が 10/28 に間に合わないと、次のアプリは 12/10 → F2 は 2月 → E は 2月末以降。0.5人日・Value ほぼ 0 の F1 が、この期間でいちばん先に手を付ける作業になる。象限ではなく、連鎖の中で最も動かせない日付が順序を決める。
実施順
1
F1 告知・強制アップデート依頼(0.5)— 10/28 の外部締切
2
G0 90万枚の本番相当テスト(0.5)— 確率 0.7 は仮定。先に測ると G の幅が消える。余裕で終わるなら G を止める
3
D 決済ページのタグ(5)— 固定レーン。棚卸しに高田さんの協力が要るので早めに
4
G バッチ高速化(4.5)— 期日 11/19、Value 最大
5
B 併用ルール(6)→ 6 C 2点目半額(3)— B の後で C を 3人日に
7
H flaky test(3)・J 二重付与(1)、予備 2.5(G が悲観値 7人日になった場合)
3. 投入案の試算(今期 10/19〜11/19、計画上限 26人日)
Value は上の前提スライダーの値を使う。G は G0 なしでも同じ期待値で数えるが、警告を出す。
比較
| 小野さんの案 | 書き直した案 | |
|---|---|---|
| 今期 | A 8・C 6・I 6・J 1 = 21人日 | F1 0.5・G0 0.5・D 5・G 4.5・B 6・C 3・H 3・J 1 = 23.5(+予備 2.5) |
| 凍結明け | 未定 | A 5・F2 2.5・E 4 = 11.5 |
| 6か月の Value | 稼ぐ 456万 | 今期 632万(G 280・B 153・C 150・H 43・J 6)+ D。凍結明けで A 180・E 50・F 18 |
| 残るリスク | G の期待損失 280万、D が 12/15 に間に合わない | E は 1月まで露出(撤退ラインあり) |
小野さんへの説明メモ(計画会で読み上げる1枚)
- 保守6件を「守る(確率 × 損失)」「浮かす(人日 × 6万)」で金額にした。G と B は A・C と同じ大きさ、E・F・H・J は小さいまま
- D は金額にせず固定レーン。12/15 の準拠報告に必要で、やらない選択肢が無い
- C と G は 11/19 を過ぎると 0。A は最初の利用が 2/10 なので凍結明けで間に合い、B の後なら 5人日
- G の 280万は確率 0.7 の仮定。最初の 0.5人日で 90万枚を流し、余裕で終わるなら G を止めて A を前倒しする
- 見送り: I。拾い直す条件は「マーケの集計作業時間を2週間測り、月 10人日以上なら」
- 撤退ライン(E): 凍結中に Node.js 20 の深刻度 High 以上の脆弱性が公表されたら、凍結例外で E を前倒し(割増 100万は見込み済み)
💡 なぜこう作るのか
- 合計を出しつつ内訳と幅を残した: 合計1本だと「G の 280 は確率 0.7 の仮定」という弱さが消える。計画会で突かれるのはそこ
- 解放を Value に足さなかった: B に「A・C −6人日=36万」を足し、A・C の Effort も下げると二重計上。依存先の Effort で一度だけ数えた
- D を金額にしなかった: 「e スキミングの確率 × 被害額」は根拠が無く、結論(やる)も変わらない
- G0 を先頭近くに置いた: Value 最大の G は大半が仮定の確率に乗っている。0.5人日で確率がほぼ 0 か 1 に決まるなら、情報の価値が計測の費用を上回る
- F を割った: 「他チームの締切に縛られる 0.5人日」と「いつでもよい 2.5人日」が混ざると、F 全体が埋め草として後回しになり、先頭の 0.5人日も遅れる
- Node.js 24 にした: 22 は 2027-04-30 で終わる。22 に上げると 15か月後に同じ規模の作業がまた来る
⚖️ 迷った他案と採らなかった理由
| 案 | 採らなかった理由 | 判断が変わる条件 |
|---|---|---|
| 毎スプリント 20% を負債返済に固定 | どの負債をやるかが決まらず、G・D の期日を 20% の中で逃しうる | 負債の多くが期日の無い小粒(H・J 型)のとき |
| 保守を別ボードで管理 | A と G を比べられず、「保守は 0 円」の見え方が変わらない | 保守と機能の予算が別部署から出ているとき |
| WSJF を相対点数で付ける | テーマ#5 以降の範囲。粗利の試算が既にあり、金額のほうが小野さんの表とつながる | 金額の試算が全く無いとき |
| 解放を Value に足す | A・C の Effort も下げているので二重計上 | 依存先の Effort を下げない扱いに統一するとき |
| D を確率 × 損失で金額化 | 根拠が無く、結論も変わらない | 準拠範囲外と分かり、任意の対策として比べるとき |
| E を今期にやる(7人日) | F2 前で高く、BF 直前に実行環境を変えることになる | 凍結前に重大な脆弱性が公表されたとき |
⚠️ よくある失敗パターン
| 失敗パターン | なぜ問題か | 改善策 |
|---|---|---|
| Value を売上だけで付ける | 保守が全部 0 円になり、重要な物も沈む | 守る・浮かす・義務の列を足す |
| 保守を全部重要だと主張する | 小さい物も混ざっていて説得力を失う | 同じ表に載せ、小さい物は小さいと認める |
| 解放を Value と Effort の両方に入れる | 依存元の価値が過大になる | 依存先の Effort で一度だけ数える |
| 期日のある案を象限だけで並べる | 11/19 で価値 0 になる案が後回しになる | 期日の列を書き、先に置く |
| 連鎖の先頭の小さな作業を埋め草扱い | F1 が遅れて E まで1か月ずれる | 案を割り、外部の締切に縛られる部分を先に出す |
| 仮定の確率で大きな Value を出し、測らずに積む | G が不要だった場合 5人日が無駄 | 安い計測(G0)を先に置く |
🏢 実務での使いどころ
- 局面: PdM の優先順位に「保守が入っていない」と言いたいとき。言い争いでなく、同じ表に載せて比べる。四半期計画、年末商戦前の最終スプリント、EOL が近い部品が見つかったとき
- 隣接する役割: PdM は稼ぐの列、エンジニアは守る・浮かすの列、情報セキュリティ・法務は義務の列と期日、SRE は確率の根拠(障害履歴・実行時間の推移)を持つ。経営層には「保守を入れて、稼ぐはいくら減り、守るはいくら増えたか」を1行で
- 個人開発への転用: 依存ライブラリの EOL・CI の不安定さ・手作業の運用を「月に何時間失っているか」「止まったら何が起きるか」で書き、新機能と同じ一覧に並べる。列は「ID/稼ぐ/守る/浮かす/義務/合計/幅/計算と出所/依存/期日」
➡️ 次のステップ
- テーマ5-3「ロードマップ」で Now(F1・G0・D・G・B・C・H・J)/Next(A・F2・E、条件: F1 が 11/5 に載ったこと)/Later(I、条件: 集計時間の実測)に並べる
- 問い: G0 の結果、90万枚で 3時間50分だった。G を止めるか。BF 当日の件数が見込みより 10% 多い場合も考える
- 問い: 高田さんが「A を 12月のクリスマスに使いたい」と言い出した。A の期日が 12/1 になると、順序と 26人日はどう組み直すか
🚧 扱わなかった範囲・検証していない点
- 数値はほぼすべて演習の仮定(G の確率 0.7・損失 400万、E の確率 0.5・割増 100万、A・C・I の粗利)。幅は「中央 ± 置いた幅」で統計的な区間ではない
- 1人日=6万円は機会費用の仮定。浮いた時間が使われなければ 0
- PCI DSS 6.4.3/11.6.1 は PCI SSC ブログで目的のみ確認。規格本文・必須化日・SAQ の種類による適用差・日本のクレジットカード・セキュリティガイドラインとの関係は未照合
- SAFe WSJF は公開部分のみ。Reinertsen『The Principles of Product Development Flow』は未照合
- 依存は B→A・C、F1→F2→E の3本のみ。H が他作業を少しずつ速くする効果は数えていない
- 始めた後に止める基準(Kill Criteria)はテーマ5-11 の範囲