Phần cơ bản của vấn đề này là trách nhiệm của người viết mã là tạo ra mã hoạt động và đáp ứng yêu cầu. Điều này đòi hỏi một tư duy đặc biệt - "Mã mà tôi đang viết thực hiện những gì nó phải làm."
Để trộn lẫn các trách nhiệm của người viết mã có nghĩa là bây giờ người lập trình bắt buộc phải nhập các tư duy khác cho các hoạt động khác, tuy nhiên, với tư cách là một lập trình viên, thật khó để người ta có thể tự ly dị hoàn toàn với suy nghĩ đó.
Trách nhiệm của người kiểm tra là tìm ra các lỗi và những nơi mà chức năng chuyển hướng khỏi chức năng được yêu cầu. Điều này đòi hỏi tư duy "Mã bị hỏng và tôi sẽ tìm ra cách."
Tương tự như vậy, một nhà phân tích kinh doanh đang cố gắng xác định các yêu cầu mà khách hàng thực sự yêu cầu. Điều này đòi hỏi một tư duy khác về "ứng dụng không hoạt động theo cách này, nhưng nó nên."
Để một lập trình viên làm việc trong bất kỳ khả năng nào khác, có khả năng hợp lý rằng các tư duy sẽ xung đột và lập trình viên sẽ thực hiện mệnh giá phụ:
- Coder / QA - "Mã hoạt động hoàn hảo và tôi đã được mã hóa để xử lý mọi cách có thể mà tôi có thể nghĩ về điều đó có thể phá vỡ nó."
- Coder / BA - "Mã phải hoạt động theo cách mà tôi muốn và đây sẽ là những thứ gọn gàng để thêm vào nó mà khách hàng không nghĩ tới.
Điều này không có nghĩa là mọi coder đều dễ gặp phải những vấn đề này (tôi đã gặp một số loại coder / QA rất có năng khiếu ... mặc dù không phải vì mã mà họ đã viết).
Điều này mở rộng cho nhóm phát triển là tốt. Trộn lẫn các trách nhiệm và tư duy liên quan của các trách nhiệm đó đối với nhóm phát triển làm ảnh hưởng đến sản phẩm cuối cùng (mã).