Quên Agile một phút, nghĩ "thác nước" nghĩa là gì.
Có một giai đoạn yêu cầu, trong đó mọi người đều cố gắng tìm ra vấn đề gì mà sản phẩm cuối cùng cần giải quyết. Mọi người tranh luận về điều này trong một thời gian, và sau đó tất cả họ đều ký vào một loạt các yêu cầu. Tại thời điểm này, phạm vi của bạn được xác định, các hợp đồng được ký kết và khách hàng có thể đi lang thang và chờ bạn đưa ra một sản phẩm giải quyết các yêu cầu được xác định đó.
Tiếp theo là một (hoặc có thể hai) giai đoạn thiết kế. Các nhà thiết kế (có thể hoặc không thể là nhà phát triển), tranh luận về CÁCH hệ thống phải đi cùng nhau để đáp ứng các yêu cầu đã ký. Các vấn đề có thể xảy ra nếu họ không hiểu rõ yêu cầu, điều đó có nghĩa là họ phải quay lại với khách hàng, có khả năng mở lại giai đoạn yêu cầu (và thực hiện một vòng đăng nhập khác) hoặc ít nhất là thiết lập hành động quản lý thay đổi . Thông thường, các nhà thiết kế chỉ đơn giản là đưa ra dự đoán tốt nhất của họ. Họ có thể đưa ra một mô hình dữ liệu logic và rất nhiều UML mô tả một hệ thống mới và cách nó hoạt động. Sau đó, họ đăng nhập vào nó.
Bây giờ các nhà phát triển bắt đầu thực sự bắt đầu mã hóa, dựa trên thiết kế đã ký tắt. Vấn đề có thể xảy ra nếu họ không hiểu rõ về thiết kế, điều đó có nghĩa là họ phải quay lại với nhà thiết kế, có khả năng mở lại giai đoạn thiết kế (và thực hiện một vòng ký hiệu khác) hoặc ít nhất là thiết lập hành động quản lý thay đổi . Các nhà thiết kế có thể lần lượt nhận ra rằng sự nhầm lẫn thực sự quay trở lại với các yêu cầu, có nghĩa là họ phải mở lại các cuộc thảo luận về yêu cầu, đăng xuất và quản lý thay đổi hơn nữa. Thông thường, các lập trình viên (những người có thời hạn thấp thoáng) chỉ đơn giản là đưa ra dự đoán tốt nhất của họ. Họ làm những gì họ có thể để làm mã chức năng. Sau đó, họ phát hành nó để thử nghiệm.
Bây giờ giai đoạn thử nghiệm hệ thống thiết lập. Người kiểm tra thử nghiệm dựa trên sự hiểu biết về các yêu cầu và thiết kế của họ, và đăng ký những gì họ cho là khiếm khuyết vào hệ thống quản lý theo dõi / thay đổi lỗi, khiến các nhà phát triển bắt đầu phát triển lại, trừ khi họ thấy vấn đề như một lỗi thiết kế, sẽ gửi nó trở lại thiết kế, v.v ... Cuối cùng, hệ thống kiểm tra vượt qua và được ký tắt.
Cuối cùng, khách hàng quay lại và thực hiện các thử nghiệm chấp nhận của người dùng trên hệ thống mới. Đây là nơi họ quyết định xem giải pháp mà những người thử nghiệm đã thử nghiệm, các nhà phát triển đã phát triển và các nhà thiết kế được thiết kế có thực sự là những gì họ muốn hay không. Nếu không, bạn có khả năng phải quay lại giai đoạn thiết kế hoặc thậm chí xem lại các yêu cầu.
Ý tưởng đằng sau thác nước là rất khó (và rất không mong muốn) để quay trở lại sau khi một giai đoạn hoàn thành. Những người khác nhau thường tham gia vào các giai đoạn khác nhau, do đó, có nhiều lần bắt tay - mỗi lần đưa ra rất nhiều rủi ro cho việc giải thích sai và mất thông tin. Cũng có một khoảng cách đáng kể giữa khi khách hàng nói những gì họ muốn và khi họ thấy những gì đã được xây dựng, trong thời gian đó các yêu cầu thực sự rất có thể đã thay đổi.
Các phương pháp nhanh nhẹn tập trung vào sự giao tiếp và hợp tác mạnh mẽ giữa tất cả các bên quan tâm. Nguyên tắc "Hợp tác với khách hàng trong đàm phán hợp đồng" có nghĩa là bạn không cần phải trải qua một loạt các lần ký và tắt, mà thay vào đó chỉ nên làm việc cùng với khách hàng, mỗi lần lặp lại xác định các yêu cầu cho một mảnh ghép và ngay lập tức hình thành các bài kiểm tra, một thiết kế và mã làm việc - với tất cả những người chơi giao tiếp trực tiếp nhất có thể (loại bỏ chi phí và rủi ro khi bắt tay). Mã làm việc nhanh chóng được khách hàng kiểm tra, loại bỏ rủi ro trễ thời gian. Tất cả các hoạt động xảy ra trong một vòng xoáy hợp tác, không phải trong một dòng chảy xuống.
Để có cái nhìn tổng quan tuyệt vời về những phương pháp nhanh nhẹn cố gắng thực hiện, tôi rất khuyến nghị Phát triển phần mềm linh hoạt của Allistair Cockburn : Trò chơi hợp tác .