Khi kỹ sư phần mềm đối mặt một vấn đề thiết kế thách thức, họ thường rất cẩn thận. Họ biết họ có thể phạm lỗi và cẩn thận kiểm tra công việc của mình. Tuy nhiên họ lại phạm quá nhiều lỗi đơn giản và vì các lỗi đơn giản có thể rất khó để tìm thấy, các lỗi đơn giản này là nguyên nhân gây ra hầu hết các rắc rối. Nhiều sai sót như vậy đi qua toàn bộ quá trình phát triển và quy trình kiểm thử làm ảnh hưởng và gây ra nhiều vấn đề cho người dùng hệ thống.
Thành ra những lỗi này có thể tránh được. Kỹ sư biết cái gì đã được định sẵn. Thiết kế được hiểu đúng, nhưng lại được trình bày nghèo nàn nên khi thực hiện cài đặt, người thực thi không thể thấy được cái gì đã được định sẵn. Không thích dừng lại để hỏi nhà thiết kế, người thực thi khi đó tức tốc hoàn thành bản thiết kế. Tuy nhiên, vì họ làm việc ở mức độ thực thi, họ không hiểu hết tất cả các hàm ý trong thiết kế. Vì vậy họ dễ mắc lỗi hơn. Trong khi người thiết kế biết cái gì được định sẵn, người thực thi lại không.
Bạn có thể có những hiểu sai như thế khi bạn thực thi một thiết kế do chính bạn thiết kế. Khi đưa ra thiết kế, bạn thường đạt được đến điểm mà toàn bộ thiết kế dường như rõ ràng. Nếu bạn dựđịnh thực thi cài đặt, dường như có ít lý do để ghi lại tài liệu phần thiết kế này. Không may, sau này trong việc thực thi, bạn có thể không nhớ thiết kếđã-từng-rõ- ràng và phải tạo lại thiết kế trong suốt quá trình thực thi. Vì bạn có khả năng quên ngữ cảnh thiết kế, bạn cũng phải xây dựng lại tất cả các khái niệm và điều kiện có liên quan. Vì
quy trình tái xây dựng này dễ xảy ra sai sót nên bạn có thể tạo ra lỗi thiết kế. Tuy nhiên, nguyên nhân gây ra lỗi không phải là do thực thi tồi mà là thiết kế trình bày tồi.