설계가 잘못되었을 때 소프트웨어는 다음과 같은 증상을 보인다.
소프트웨어가 이러한 증상을 나타낼 때 '악취가 난다'라고 표현하며, 이러한 악취는 부분적인 코드에서만이 아니라 프로젝트 전체로 퍼져 나간다.
이 절에서는 앞서 말한 악취를 제거하고 현재 기능 집합에 대해 최적의 설계를 구성할 수 있도록 돕는 객체 지향 설계 원칙들을 설명한다.
이는 익히 알고 있던 객체 지향 SOLID 원칙인데, 저자는 객체 지향 뿐만 아니라 소프트웨어 공학 전반에서 오랫동안 믿어져 오고 있는 소중한 원칙들이라고 강조한다. 따라서 이 원칙들은 꼭 객체 지향과 관련지어서 생각하지 않고 넓은 범위에서 도움이 될만한 지식이라고 생각하는게 좋을 듯 하다.
원칙은 소프트웨어에서 악취가 날 때가 아니면 남용하지 않는 것이 좋다. 원칙은 아무때나 사용할 수 있는 '향수'가 아니기 때문에, 원칙에 대한 맹종은 불필요한 복잡성이라는 또다른 악취를 낳을 수도 있다.
소프트웨어가 부패하는 일차적인 요인은 요구사항의 변경이다. 맨 처음의 요구사항을 잘 반영하도록 설계되었다고 하더라도, 단 몇 번의 요구사항 변경으로 인해 소프트웨어는 빠르게 부패할 수 있다. 소프트웨어가 부패하는 이유로 요구사항의 변경을 탓하고만 있는다면 그것은 무책임한 것이다. 개발자로서 우리는 요구사항은 언제나 변경된다는 것을 너무 잘 알고 있으며, 변화하는 세상에서 요구사항이 변경되는 것은 당연한 일이다. 그러므로 변화에 잘 대응할 수 있는 설계를 하는 것이 중요하다.