Tôi đã sử dụng một phương pháp nhanh (SCRUM) khoảng ba năm nay và tôi thấy một số lợi thế nhất định của nó, đặc biệt là trong phản hồi ngắn hạn ở nhiều cấp độ (từ khách hàng có quyền truy cập sớm vào các tính năng được triển khai, từ người kiểm tra có thể kiểm tra các tính năng như ngay sau khi chúng được triển khai, từ các nhà phát triển khác có thể cung cấp phản hồi rất sớm về mã mới thông qua đánh giá, v.v.).
Mặt khác, tôi có hai vấn đề mở, vấn đề đầu tiên tôi sẽ cố gắng giải thích trong câu hỏi này.
Vấn đề: Khó có được một thiết kế tốt
Tôi cố gắng thực hiện tái cấu trúc ngay khi mã bị rối, tôi viết các bài kiểm tra đơn vị nhiều nhất có thể (điều này giúp ngăn ngừa các lỗi nói chung và khi tái cấu trúc nói riêng). Mặt khác, việc phát triển một số tính năng phức tạp theo từng bước nhỏ, với các cam kết hàng ngày và liên tục suy nghĩ lại về mã khi nó không có cấu trúc không cho phép tôi tạo ra thiết kế thực sự tốt.
Mô-đun duy nhất được thiết kế tốt mà tôi có thể sản xuất gần đây tôi có được bằng cách sử dụng một cách tiếp cận khác: Tôi đã phân tích vấn đề trong vài ngày (tôi thực sự đã gặp phải vấn đề trong vài tháng trước khi tôi bắt đầu làm việc nghiêm túc ), phác thảo một thiết kế khá chi tiết của tất cả các lớp liên quan và mối quan hệ của họ trong vài ngày nữa, sau đó tự nhốt mình trong văn phòng của tôi và viết ra toàn bộ mã bằng cách làm việc mà không bị gián đoạn trong khoảng ba tuần. Kết quả là điều tốt nhất tôi đã tạo ra trong một thời gian, với rất ít lỗi khá dễ tìm và sửa chữa, và với một thiết kế rất rõ ràng, không yêu cầu bất kỳ thay đổi liên quan nào kể từ đó.
Vì vậy, cho đến nay tôi thấy hiệu quả hơn nhiều để có được một bức tranh tổng thể về những gì tôi muốn làm trước đó hơn là bắt đầu viết mã theo từng bước nhỏ với hy vọng rằng bức tranh lớn xuất hiện một cách kỳ diệu trong quá trình này. Với nỗ lực tốt nhất của tôi, phương pháp phát triển gia tăng nhỏ luôn dẫn tôi đến thiết kế tồi tệ hơn.
Câu hỏi : Có ai có kinh nghiệm tương tự không? Tôi đang áp dụng SCRUM sai cách hay tôi nên chú ý điều gì nếu tôi muốn phát triển theo từng bước nhỏ và vẫn kết thúc với một phần mềm được thiết kế tốt? Hoặc tôi nên lên lịch một câu chuyện người dùng thiết kế trước khi bắt đầu mã hóa thực tế? Đây có được coi là một thực tiễn tốt, ít nhất là đối với các tính năng phức tạp hơn mức trung bình?
EDIT - LƯU Ý
Tôi nhận thức được thực tế rằng thiết kế tốt không phải là thứ gì đó tuyệt đối và không có giá trị riêng mà nó phụ thuộc vào bối cảnh, và người ta nên nhắm đến một thiết kế đủ tốt cho vấn đề trong tay.
Ví dụ, tôi không quan tâm (quá nhiều) về thiết kế tốt nếu tôi phải triển khai một thành phần đơn giản mà (1) phải sẵn sàng càng sớm càng tốt, (2) sẽ chỉ được sử dụng một lần, (3) không được sử dụng bởi các bộ phận khác của hệ thống (YAGNI).
Tôi quan tâm đến thiết kế tốt khi một thành phần (1) sẽ được sử dụng nhiều lần và trong một số phiên bản khác nhau của sản phẩm, (2) cần được duy trì và kéo dài theo thời gian, (3) có rất nhiều thành phần khác tùy thuộc vào nó .
The only well-designed module I could produce recently I obtained by taking a different approach
-- Bạn đã trả lời câu hỏi của riêng bạn. Bạn vẫn cần một số thiết kế phía trước; bạn không thể mong đợi một thiết kế tốt chỉ đơn giản là phát triển hữu cơ từ tái cấu trúc. Nó không hoạt động theo cách đó.