# 本質的複雑性と偶発的複雑性
## 定義
Fred Brooksの「銀の弾丸などない(No Silver Bullet)」で提示された区別。**本質的複雑性(essential complexity)** は、ある問題に本来的に内在し問題定義から除去できない複雑性であり、**偶発的複雑性(accidental complexity)** はより流動的で、エンジニアリング努力によって解消できる複雑性である。SRE Bookはこの区別を、Webサーバーを書くという課題(ページを高速に配信するという本質的複雑性)と、それをJavaで実装した際にガベージコレクションの性能影響を最小化する作業(偶発的複雑性の一例)という具体例で説明する。SREチームは、システムに偶発的複雑性が持ち込まれることに抵抗し、責任を引き継いだシステムからも継続的にそれを除去すべきだとされる。(Source: [[@2016__OReilly__SRE Book - Chapter 9 Simplicity]])
## 横断的知見
(現時点でこの概念に触れているソースは1件のみ。2ソース目の ingest 時に横断的知見を追記する。)
## 未解決の問い
- SRE Bookは本質的複雑性/偶発的複雑性の区別を単純性(simplicity)追求の理論的裏付けとして引用するのみで、両者をどう切り分けるかの具体的な判定手続きは示していない。実務でこの切り分けをどう運用するかは未解決。
- 「負のコード行数」メトリクスやモジュール性(APIの疎結合)といった同章の実践的手法が、偶発的複雑性の除去にどの程度効くのか、定量的な裏付けは章内では示されていない。
## 関連
- [[SRE Book]] — 出典書籍
- [[@2016__OReilly__SRE Book - Chapter 9 Simplicity]] — 本概念を導入した章
## 出典
- [[@2016__OReilly__SRE Book - Chapter 9 Simplicity]]