DESIGN DOC
設計文書は「後で変えにくい判断」をレビューするために書く
Michael Lynchの設計文書ガイドは、テンプレートを埋める話ではない。実装前に高コストな判断を外に出し、チームが早い段階でレビューできる状態を作る話だ。
Takeaway
設計文書に入れるか迷ったら、「間違えたときのペナルティ」を見る。後で変えにくい判断は書く。数時間で直せる細部は、レビュー時間を使ってまで詰めない。
設計文書は実装前の意思決定をレビュー可能にする
よい設計文書は、実装前に重要な問題を考え抜くための圧力になる。さらに、チームメイトや関係チームが設計判断へフィードバックできる共通物になる。
記事の主張は単純だ。設計文書は、作者の考えをきれいに見せる成果物ではなく、間違えると高くつく判断を早い段階で見つけるための作業物である。
そのため、すべての細部を書く必要はない。設計文書に入れるべきなのは、後から変えると痛い判断、複数人の協調に影響する判断、運用やセキュリティに残り続ける判断だ。
複雑さとリスクがあるほど書く価値が上がる
記事では、設計文書を書くべきかを判断する材料として、次のような条件を挙げている。
協調
複数人、複数チーム、関係者が実装や判断に関わる。
寿命
数か月以上の開発や、数年動く本番システムになる。
失敗コスト
要件が曖昧、またはセキュリティ、法務、運用上の大きなリスクがある。
逆に、小さな個人作業や変更しやすい機能では、設計文書への投資がゼロでもよい。大事なのは「必ず書く」ではなく、リスクと協調コストに見合うだけ書くことだ。
書く対象は「間違えると高くつく判断」
記事の中核は、設計判断を文書に入れるかどうかを「間違えたときのペナルティ」で判定する点にある。言語、永続化、インターフェース、信頼境界、データ保持方針のように後戻りが重い判断は書く。
| 書く価値が高い項目 | なぜ必要か |
|---|---|
| 目的、背景、ゴール、非ゴール | 読者が最初のページで「何を解く話か」を理解できる。 |
| シナリオ、図、インターフェース | 完成後のふるまい、境界、依存を同じ絵で議論できる。 |
| SLO、監視、ログ | 作って終わりではなく、運用中にどう正しさを観測するかを決められる。 |
| セキュリティ、プライバシー、法務 | 後から発覚すると高くつく失敗を、設計時点でレビューできる。 |
| 未決事項、決定済み事項、代替案 | 議論の現在地、捨てた案、次に誰が何を決めるかが残る。 |
一方で、数時間で直せる UI の細部や実装中に自然に決まる小さな選択は、設計文書のレビュー時間を使ってまで詰めない。
レビューされる前提で、前提知識を本文に置く
設計文書は、書いた本人ではなくレビュアーのためにある。だから、作者の口頭説明がなくても、最初のページだけで目的、背景、重要な制約が伝わる必要がある。
特に図は重要だ。作者の頭の中にある構成は、レビュアーには見えない。データフロー、コンポーネント、依存先、通信プロトコルを図にすることで、議論の土台が揃う。
レビューでほしいのは、文章の体裁への感想ではなく、設計上の見落とし、前提の誤り、リスクの過小評価への指摘である。
小さく始めるなら8項目で十分
個人開発や小さなチームなら、巨大なテンプレートを最初から埋める必要はない。まずは次の型で、変えにくい判断だけを外に出す。
- 目的: この変更で何を良くするのか。
- 背景: なぜ今やるのか。過去に何が問題だったのか。
- ゴール / 非ゴール: どこまでやり、どこからやらないのか。
- 主要設計: 後から変えにくい判断だけを書く。
- 図: データフロー、依存、境界を1枚で示す。
- リスク: セキュリティ、プライバシー、法務、運用、移行。
- 未決事項: まだ決まっていないこと、選択肢、次の確認者。
- 代替案: 捨てた有力案と、捨てた理由。
足りなければ、SLO、監視、ログ、タイムライン、詳細なインターフェースを追加する。最初から網羅性を狙うより、レビューで価値が出る判断を優先するほうが実用的だ。
Sources
| Source | Use |
|---|---|
| How to Write an Effective Software Design Document | 主な論点、章立て、設計文書の判断基準。 |
| Little Moments Design Doc | 記事からリンクされた実例設計文書。 |
| How to Get Meaningful Feedback on Your Design Document | 記事末尾で紹介されているレビュー編。 |