設計と実装は不可分である
1. 原則
設計と実装は不可分である
- ソフトウェアの設計と実装は分けて考えるようなものではない
- 古い考え方では、設計と実装を完全に分けて考えるアプローチが採られることもあったが、それは間違いである
- ソフトウェアの設計は実装する者が設計するべきであり、設計と実装を分けて考えてはいけない
2. 根拠
ソフトウェアとは大量の暗黙知によって構成される
- ソフトウェアは明示的な仕様の他に設計哲学、システム特性、その他諸々の形式知・暗黙知によって構成されるもので、何らかのルールに沿って作業を行えば完成するというものではない
- それらの雑多な情報を別の人間に伝えられるよう文書化するのは非常にコストが大きく、伝達漏れを容易に発生させる
責任範囲の分断が発生する
- 設計と実装の担当者が分離されている場合、設計担当は己が実装を担当しないがゆえに、実装担当に丸投げする・形式的な設計に終始するなど、設計の品質が劣悪になりがちである
- 設計担当と実装担当を分ける場合、一般的に実装担当の方が低スキルのエンジニアを配置する傾向にあるが、この場合設計担当の意図を理解することができず、結果的に品質の低い実装が生まれることになる
3. 指針
設計と実装は同一人物が担当する
- ソフトウェアの設計と実装は原則として同一人物が担当するべきであり、設計・実装で担当者を変えるべきではない
- プロジェクト管理の観点としては、設計と実装を工程として分割し、それぞれを別の担当者に割り当てることもするべきではない
- 機能の設計と実装は同一人物で一貫して行われるべきである
4. 注意
アーキテクチャ設計は別
- アーキテクチャ設計はエンジニアに対して使ってもらうことを目的としたルールや基盤の整備となるので、ここで述べる設計と実装とは文脈が異なる
- アーキテクチャ設計は豊富な経験と高いスキルを持ったエンジニアによって行われるべきであり、アーキテクチャ設計においては設計担当と実装担当が分かれることはむしろ推奨される
参考資料