保守性が最優先
1. 原則
プログラム設計の至上命題は保守性の(確保|保全|向上)である
- プログラム設計は保守性を高めることを至上命題としなければならない
- 保守性を下げるような設計を導入する場合、他に方法がないことを確認した上で適用されなければならない
2. 根拠
プログラムは保守される期間の方が長い
- プログラムのライフサイクルにおいて、新規開発は全体の一割にも満たない一方、保守開発はプログラムが利用される限り継続的に行われる(したがって、開発時の生産性よりも保守開発時の保守性の方が重要である)
- 保守性の低いプログラムはそうでないプログラムと比べると高い改修コストがかかり、システム全体のコストを押し上げ、システム自体の費用対効果を悪化させる
- 保守性の低いプログラムはエンジニアのモチベーションに直結する為、企業の採用/人事戦略にも影響を与える
- 以上の理由から、保守性の低いプログラム設計は忌避されるべきであり、プログラム設計は保守性を優先して実施されなければならない
3. 指針
迷ったら保守性を優先
- プログラム設計における意志決定は常に保守性を優先する
- 無駄に技巧的な設計や保守性を犠牲にする代わりに生産性が高い手法(クイックハックの類)は原則としてこれを避ける
- 数%効率が良くなる代わりに保守性が下がる選択肢がある場合、これも保守性を優先する(数%程度の効率はマシンスペックへの投資で回収できる)
4. 注意
犠牲的アーキテクチャという対立概念
- 犠牲的アーキテクチャという一定期間後に全廃することを前提とした考え方もあるが、これはマーケティング的な問題も含むので安易に導入することは避けた方がよい
使い捨て/実験的プログラムの場合
- 一度〜数度使われて破棄される事が確定しているプログラムや実験的なプログロムなど、保守性を高めるインセンティブが少ないプログラムの場合は厳密に考える必要は無い
参考資料
Appendix-1 他の原則との関連性