무슨 용도인지 적혀 있지 않은 버튼이 수백만 개 붙어 있는 상자는 바르게 사용할 방법이 없다. 제대로 된 사용법을 절대 알아내지 못할 것이다. 설사 1,000페이지 분량의 사용 설명서를 꼼꼼히 읽은 후라고 해도 모든 걸 기억해서 그 상자를 올바르게 쓰는 건 불가능하다. 이처럼 뭐든 복잡하면 바르게 쓰기보다 잘못 쓸 확률이 더 높다. 만약 50, 100, 1,000가지 복잡한 부품을 전부 모아둔다 해도 절대 제대로 작동하지 않을 것이다. 그걸 조립한 엔지니어가 아무리 똑똑하다고 해도 별 도움이 되지 않는다.
자, 이제 버그가 어디서 오는지 보이기 시작하는가? 코드를 조금씩 복잡하게 만들수록 누군가는 그 복잡한 코드를 잘못 사용할 가능성이 높아진다. 그리고 그 ‘누군가’가 심지어 개발자 본인이 될 수도 있다.
무슨 작업을 해야 할지, 그 코드를 어떻게 써야 할지 아주 분명하고 정확하게 알 수 없다면 누군가는 실수할 것이다. 그리고 거기에 다른 코드가 추가되면 실수하거나 잘못 사용할 가능성은 더 커진다. 그런데 심지어 거기에 새로운 코드는 계속해서 덧붙여질 것이다.