Có vẻ như một trải nghiệm không thường xuyên nhưng phổ biến là đôi khi bạn đang làm việc trong một dự án và đột nhiên một thứ gì đó bất ngờ xuất hiện, ném một cờ lê lớn vào công việc và làm tăng sự phức tạp lên rất nhiều.
Ví dụ, tôi đang làm việc trên một ứng dụng nói chuyện với các dịch vụ SOAP trên nhiều máy khác. Tôi đã tạo ra một nguyên mẫu hoạt động tốt, sau đó tiếp tục phát triển một mặt trước thông thường và nói chung mọi thứ đều hoạt động tốt, khá đơn giản và dễ theo dõi. Nó hoạt động rất tốt cho đến khi chúng tôi bắt đầu thử nghiệm trên một mạng rộng hơn và đột nhiên các trang bắt đầu hết thời gian do độ trễ của các kết nối và thời gian cần thiết để thực hiện tính toán trên các máy từ xa dẫn đến yêu cầu hết thời gian cho các dịch vụ xà phòng. Hóa ra chúng ta cần thay đổi kiến trúc để quay các yêu cầu lên các luồng của riêng họ và lưu trữ dữ liệu được trả về để có thể cập nhật dần dần trong nền thay vì thực hiện các phép tính theo yêu cầu.
Các chi tiết của kịch bản đó không quá quan trọng - thực sự đó không phải là một ví dụ tuyệt vời vì nó khá khó hiểu và những người đã viết rất nhiều ứng dụng loại này cho loại môi trường này có thể đã dự đoán được - ngoại trừ việc nó minh họa một cách mà người ta có thể bắt đầu với một tiền đề và mô hình đơn giản và đột nhiên có sự leo thang phức tạp cũng vào sự phát triển của dự án.
Những chiến lược nào bạn có để đối phó với các loại thay đổi chức năng này có nhu cầu phát sinh - thường là kết quả của các yếu tố môi trường thay vì thay đổi đặc điểm kỹ thuật - sau này trong quá trình phát triển hoặc kết quả của thử nghiệm? Làm thế nào để bạn cân bằng giữa việc tránh tối ưu hóa sớm / YAGNI / khắc phục rủi ro khi thiết kế một giải pháp giảm thiểu các vấn đề có thể nhưng không nhất thiết có thể xảy ra, trái với việc phát triển một giải pháp đơn giản và dễ dàng hơn có hiệu quả nhưng không kết hợp sẵn sàng cho mọi tình huống có thể xảy ra?
Chỉnh sửa: Câu trả lời của Crazy Eddie bao gồm "bạn hút nó và tìm cách ít tốn kém nhất để thực hiện sự phức tạp mới." Điều đó khiến tôi nghĩ về điều gì đó tiềm ẩn trong câu hỏi nhưng tôi không nêu ra cụ thể.
Một khi bạn đạt được vết sưng đó, và bạn kết hợp những thay đổi cần thiết. Bạn có làm điều đó sẽ giữ dự án gần với tiến độ nhất có thể nhưng có thể ảnh hưởng đến khả năng bảo trì hoặc bạn quay lại kiến trúc của mình và làm lại ở mức chi tiết hơn có thể duy trì hơn nhưng sẽ đẩy mọi thứ trở lại trong quá trình phát triển?