## デザインドキュメントとは?
- ソフトウェアを開発する前に書くドキュメント
- 何を・なぜ・どのように作るかを記したドキュメント
- 解決策の提案となぜその方法が良いのかを示したドキュメント
## なぜ書く必要があるの?
- 早い段階で設計の問題を見つけることで変更が容易になる
- 設計に関するコンセンサスを取る
- 横断的関心事に関して検討する
- ナレッジの共有
## 何を書けばいいの?
<aside> 💡 前提として正解はないのでその時に適切な項目を書く
</aside>
- 目的、背景
- ゴール(とゴールとしないもの)
- = requirements
- デザイン
- overviewを示した後に詳細に入る
- トレードオフも記述する
- 構成図
- System-context-diagram
- APIs
- どのようなAPIを持つのか
- Data storage
- どのようなデータを持つのか
- どのようなデータ操作があるのか
- Code and pseudo-code
- 基本的にはコードは書かない
- 新しいアルゴリズムを利用する場合には説明のため擬似コードがあるとわかりやすい
- 代替案に関する検討
- トレードオフなどについて示しなぜ選択した設計が良いのかを示す
- 既知の問題点
- 懸念点や今後検討が必要な項目について
## 参考リンク
- [Design Docs at Google](https://www.industrialempathy.com/posts/design-docs-at-google/)
- [Google の Design Doc について](https://please-sleep.cou929.nu/20091116.html)
- [Googleのdesign docを眺めてみる](https://kenmaz.hatenadiary.jp/entry/20090712/1247401684)