Tôi nghĩ rằng câu hỏi này là mấu chốt của câu hỏi vòng đời nhanh nhẹn và thác nước.
Nếu bạn đang làm nhanh, tiền đề cơ bản là mã được kết hợp với tương tác nhà phát triển chặt chẽ sẽ tốt hơn và nhanh hơn so với đặc tả chi tiết. Nhóm nghiên cứu ưu tiên phát hành các tính năng mới và chất lượng cao hơn những thứ khác - như các cơ chế giao tiếp chính thức như thông số kỹ thuật thiết kế chi tiết. Nhưng có một giao dịch ở đây - bạn phải có các kênh liên lạc giữa các thành viên trong nhóm để họ hỏi về sắc thái và ý định thiết kế chi tiết khi họ cần.
Nếu bạn đang thực hiện thác nước, bạn đang làm việc theo giả định rằng công việc điền mã theo thiết kế chi tiết và sau đó thử nghiệm nó là rất quan trọng. Và bạn muốn cung cấp cho các bên liên quan cái nhìn sâu sắc sớm về cách công việc này sẽ tiến hành và nó sẽ như thế nào khi nó được thực hiện. Đó có thể là việc kiểm tra thiết kế với khách hàng để đảm bảo bạn đã tìm ra các tính năng có ý nghĩa. Nó cũng có thể là để kiểm tra nó với các chuyên gia trong các đấu trường khác - chẳng hạn như đánh giá an toàn, đánh giá bảo mật và đánh giá của các thành viên trong nhóm phải tích hợp với mã của bạn. Giả định là những đánh giá này sẽ tiết kiệm thời gian trong thời gian dài bởi vì chúng sẽ giúp bạn tiết kiệm được việc điều tra một lượng lớn thời gian trong việc phát triển điều sai.
Gần đây, tôi đã thấy một số hợp nhất thực sự tuyệt vời giữa các thiết kế chi tiết và các công cụ nhận xét mã - ví dụ JavaDoc. Vì hầu hết các thiết kế chi tiết là các bản in chân của mã và các giải thích ngắn về những gì nó sẽ làm - đây ít nhiều giống với những gì bạn mong đợi như các nhận xét về mã. Vì vậy, có một công cụ sẽ chuyển đổi các nhận xét mã thành một thông số thiết kế chi tiết là điều tuyệt vời - một cách tốt hơn để giữ cho nó cập nhật hơn là làm bằng tay.
Tôi tin rằng đánh giá không chính xác về cách thiết kế chi tiết cho dự án , là một yếu tố chính trong tăng trưởng chi phí. Điều tồi tệ nhất là bạn bị nguyền rủa nếu bạn làm và bị nguyền rủa nếu bạn không:
- Nếu thiết kế của bạn quá chi tiết về quy mô của đội, độ phức tạp của công việc và các yêu cầu của cổng bạn phải vượt qua (đánh giá bảo mật, đánh giá an toàn, v.v.), thì bạn đã lãng phí thời gian và tiền bạc quý giá một vật phẩm bạn sẽ không bao giờ sử dụng.
- Nếu thiết kế của bạn không đủ chi tiết, bạn sẽ lãng phí tiền vì các thành viên trong nhóm đưa ra các giả định không chính xác dẫn đến các vấn đề tích hợp và bạn có nguy cơ phải làm lại rất nhiều khi kiểm toán an ninh hoặc an toàn cuối cùng phát hiện ra các vấn đề có thể được khắc phục sớm và rẻ tiền nếu chúng bị khía cạnh rõ ràng của thiết kế trước khi thực hiện.
Tôi không cảm thấy đó là vỏ màu đen và trắng - có thể có nhiều lúc một số thành phần "đủ tốt" nếu được thiết kế ở mức cao, trong khi những bộ phận khác cần công việc chi tiết nghiêm ngặt. Và việc thay đổi môi trường nhóm hoặc dự án có thể quyết định nhu cầu thiết kế mới khi dự án phát triển.