プログラム以外にもあらゆる観点でメンタルモデルと一致した状態を目指す
システム設計における設計者とプログラマーの関係は、UI デザインにおけるデザイナーとユーザーの関係と同じです。 設計者の使命は、将来のすべてのエンジニアが自分なりの方法でアイデアを実現できる(=開発しやすい)システム(=インターフェース)を設計すること
エンジニアがこの使命を果たすには、プログラマーとしての自分から意識的に抜け出し、エンジニアの置かれる状況(仕様、アーキテクチャ、エンジニア自身)を客観視する「設計者の視点」を持つ必要があります。 また、コードの行数が大きくなってきたことを理由に処理を別の関数に切り出したり、コードの形状が似ていることを理由に共通化したりするような安直な行動は、隠蔽すべきでない要素を隠蔽してメンタルモデルと齟齬を生む可能性があるため不適切です。仕様の複雑性は仕様を変更しない限り取り除けません。どうしても仕様が複雑ならその複雑性は正直に前面に出してメンタルモデルと一致させるべきです。 @KOBA789: 変更が容易だとか拡張性だとかは(コードについては)ナンセンスな視点で、メンタルモデルと正しく一致するモデルにできているかが重要。変更や拡張のアイデアはメンタルモデルから生まれる。一致していれば無理のない変更で実現できる。アイデアをすぐ実現できない設計は、メンタルモデルと齟齬がある