トレードオフの決め方 — 正解を探すのをやめて、払うものを選ぶ
3 年前に選んだ DB の理由を、誰も覚えていなかった。得るものは覚えていても、払うものは書いていなかった。設計判断に正解は無く、あるのは「この制約なら、これを払う」という選択だけ。
先に読んでおくとよい記事
この記事の進み方
What — トレードオフは、得るものと払うものの組
設計の選択肢には、どれも得るものと払うものがあります。払うもののない選択肢はありません。払うものが見えていないときは、まだその選択肢を理解できていないときです。
「大規模なサービスはこうしている」で選ぶ。
候補: NoSQL 理由: 大手が使っている。スケールする → 自分たちの制約(1 日数千件)と 照らしていない
- 決める速さ
- 速い
- 制約に合っているか
- 分からない
- あとから説明できるか
- できない
- –定番は、誰かの制約のもとでの答え。その制約が自分たちと同じとは限らない。
- –冒頭の事故はこれ。1 日数千件のサービスに、1 日数億件向けの答えを持ち込んだ。
同じ「NoSQL にする」でも、決め方によって、あとから説明できるかどうかが変わる。
決めるための 4 つの道具
1. 払うものを書く。 候補ごとに「これを選ぶと、何ができなくなるか・何が難しくなるか」を書きます。書けない候補は、まだ調べ足りません。
2. 制約の数字から決める。 アクセス数、データ量、チームの人数、期限、予算。数字が無いと、どの案も「良い案」に見えます。数字を置くと、要らない利点と、効いてくる払うものが分かれます。
3. 戻せるかどうかで、かける時間を変える。 判断には、あとから戻しやすいものと、戻しにくいものがあります。
| 戻しやすい | 戻しにくい |
|---|---|
| ライブラリの選定(中に閉じている) | DB の種類・データの形 |
| 画面の配置 | 公開した API・URL の形 |
| 社内のツール | 外部に約束した仕様・契約 |
戻しやすい判断に 2 週間かけるのは、それ自体が払うものです。試して、合わなければ戻せば済みます。時間をかけるのは戻しにくい判断のほうです。
4. 見直す条件と、却下した案を残す。 「1 日 100 万件を超えたら見直す」のように、いつ判断をやり直すかを数字で書きます。そして、選ばなかった案と、選ばなかった理由も書きます。これがあれば、3 年後の新しい人が同じ議論を最初からやり直さずに済みます。
候補 A について、利点は 5 つ挙げられたが、欠点は 1 つも思いつきません。この状態をどう考えますか?
Why — なぜ払うものは書かれないのか
得るものは今、払うものは後で来る
新しい技術を入れると、得るものはすぐに見えます。速い、書きやすい、流行っている。払うものは、使い始めて数か月後に、別の人の前に現れます。集計が苦手、運用が重い、採用できる人が少ない。
決める場にいるのは、得るものを見ている人です。払うものを受け取る人は、まだその場にいません。だから、決める場で意識して書く必要があります。
「正解」を探すと、議論が終わらない
冒頭の 2 週間の議論が終わらなかったのは、それぞれが違う軸で比べていたからです。ある人は開発の速さ、ある人は運用の手間、ある人は集計の柔軟さ。軸が揃っていないと、どの案にも「でも」が付きます。
正解を探すのをやめて、**「この制約のもとで、どれを払うか」**という問いに変えると、話が進みます。まず軸と制約を揃え、そのあとで案を比べます。
記録が無いと、判断は「なぜか、そうなっている」になる
判断した人がいなくなると、残るのは結果だけです。理由が分からない結果は、変えてよいのか、変えてはいけないのかが分かりません。変えられないまま放置されるか、理由を知らないまま変えられて、昔の事故が繰り返されます。
次のうち、時間をかけて決めるべき判断はどれですか?
演習 — まず自分で判断する
解説を読む前に、まず自分で判断してみてください。ここで一度詰まっておくと、 次の節の判断軸が「なるほど」ではなく「そう来たか」に変わります。
遅い商品一覧を、どの方法で速くしますか?
- EC サイトの商品一覧。表示の 95% が 1.2 秒以内(p95 が 1.2 秒)。目標は 500 ミリ秒
- 1 日 1 万ページビュー。商品は 3,000 件
- 一覧には在庫数を出していて、在庫が 0 の商品を「購入できる」と見せてはいけない
- 開発と運用は 2 人。来月にセールがある
- · 各案が払うものは何か。それは要件に当たるか
- · その判断は、あとから戻しやすいか
- · 制約の数字(件数・人数・期限)に照らして、過不足はないか
「迷ったらベストプラクティスに従えばいい。考えるだけ時間の無駄だ」と言う先輩に、それだけでは足りない理由を説明してください
- 相手は経験が長く、判断の速さを大事にしている
- チームは 3 人で、扱うデータは 1 日数万件
- 相手の考えにも正しい部分があると認めたうえで話したい
読み終わりましたか?
読了にすると、これを前提とする記事がロードマップで開放されます。