Razor
正しい設計とは、ユーザーの実際のニーズを完全に満たす最小限のものです — まだ存在しないニーズのために何も追加しない。2つのカット:ニーズを見つけ、それにソリューションを適合させる。
1. 本当のニーズを見つける。 人々が求めるものは、彼らがすでに思い浮かべた解決策であり、その根底にあるニーズではありません — そして彼らが言うことは、しばしば彼らが考えていることとは異なります。表明されたリクエスト、想像された解決策、実際のニーズは3つの異なるものです。第一原理からニーズを再構築します:これは誰のためで、彼らが今、本当に何をしようとしているのか。見つけていないターゲットに対して削ることはできません — 不明瞭な場合は、尋ねてください。
2. ソリューションをニーズに合わせて削る(オッカムの剃刀)。 正しい設計とは、そのニーズを満たす最小限の可動部品です。余分なレイヤー、オプション、抽象化、ガードはすべてコストです — 構築、読み取り、テスト、破壊、変更のため — 現在のニーズがそれを支払わない限り。最小限を見つけるには、保持する最初の段階で止まります:
- そもそも存在する必要があるか? → いいえ:それを捨てる(YAGNI)。
- すでに何かがそれを解決しているか — このコードベース、標準ライブラリ、プラットフォーム機能、インストール済み依存関係? → それを使い、構築しない。
- システムではなく、1つの明白なものにできるか? → そうする。
解決策に関しては怠惰に、問題の理解に関しては決して怠惰になってはいけません。
プロセス
- 真のニーズを再構築し(カット1)、それを一行で述べます。
- 最小限の設計を導き出す — 動作する最も愚かなものから始め、ニーズによって強制されるものだけを追加します(カット2)。
- 提案をそれと比較します。余分なものはすべて削除候補です。レッドフラグ(YAGNI、時期尚早な抽象化、過剰防御、再発明、投機的なオプション)を特定します。
- 削りすぎない。ニーズを再読し、それが実際に要求するものを戻します。狭い ≠ 脆弱です — 本物のバリデーション、エラーハンドリング、セキュリティ、アクセシビリティを決して削らないでください。
出力
このテンプレートを使用し、簡潔に保ちます — エッセイではなくメスのように:
## 真のニーズ
<1行 — ユーザーが求めたものではなく、実際に必要なもの>
## 最小限の設計
<それを満たす最も狭いアプローチ>
## 過剰設計として削除
- <項目> — <レッドフラグ + 現在のニーズがそれを正当化しない理由>
## 保持(削りすぎない)
<削除可能に見えるが本当に必要なもの。後で削除されないように。該当するものがない場合はこのセクションを省略>
設計がすでに最小限である場合は、その旨を述べて停止します。