O: 개방-폐쇄 원칙(open-closed principle)에 따르면 클래스는 확장을 위해서는 열려 있고 수정을 위해서는 닫혀 있어야 한다. 외부에서 이 클래스의 동작 방식을 수정할 수 있도록 클래스를 설계해야 한다는 뜻이다. 다시 말하지만, 이것은 매우 모호하고 심지어 시간을 낭비하게 할 수도 있다. 이러한 확장성은 설계 시 정해지는 내용이며, 때로는 바람직하지도 않고, 실용적이지도 않고, 심지어 안전하지도 않을 수 있다. 이는 마치 프로그래밍에 있어서 “레이싱 타이어를 사용하라”는 조언처럼 느껴진다. 대신 나라면 “확장성을 일종의 기능으로 취급하라”라고 말할 것이다.
L: 바바라 리스코프가 만든 리스코프 치환 원칙(Liskov substitution principle)은 사용된 클래스 중 하나를 파생 클래스로 대체할 경우 프로그램의 동작이 변경되어서는 안 된다고 명시한다. 이 조언은 타당하지만, 일상적인 프로그래밍 작업에서는 그렇게 중요하지 않을 수 있다. 마치 나에게는 “버그를 만들지 마라”처럼 들린다. 만약 인터페이스의 계약을 어기면 그 프로그램에는 버그가 발생할 것이다. 또 인터페이스를 잘못 설계했다면 버그가 있을 수 있다. 너무나 당연한 얘기다. 아마도 “계약을 고수하라”와 같이 더 간단하고 실행 가능한 조언으로 바꿀 수 있을 것이다.