Một sinh viên khoa học máy tính viết cho tôi: “Trường em đang dạy về vòng đời thác đổ nhưng chú em, làm việc cho một công ti phần mềm lại nói rằng nó không có tác dụng và không ai dùng mô hình này nữa. Chú ấy nói rằng em phải học Agile thay cho nó. Khi em kể với thầy giáo, thầy không đồng ý và nói rằng chú em chả biết gì cả. Bây giờ em bị lẫn lộn. Xin thầy lời khuyên.”

Đáp: Từng vòng đời phần mềm đều được thiết kế cho một kiểu phát triển đặc thù. Không có một vòng đời khớp cho mọi thứ. Vòng đời thác đổ có ưu điểm và nhược điểm và cách tiếp cận Agile cũng vậy. Trong trường hợp này bạn không thể nói ai đúng và ai sai được.

Mặc dầu có những nhược điểm, vòng đời thác đổ vẫn là cách tiếp cận phát triển phổ biến trong công nghiệp và vẫn được dạy trong hầu hết các đại học. Nó là đơn giản, dễ hiểu, và vẫn được dùng trong nhiều kiểu dự án, đặc biệt các dự án lớn. Với sinh viên còn chưa có nhiều kinh nghiệm, mô hình này là rất tốt để học về cách phát triển phần mềm làm việc thế nào. Một khi sinh viên hiểu rõ mô hình thác đổ, họ có thể học về các mô hình khác như Xoáy ốc, Gia tăng, và Agile v.v.

Vòng đời thác đổ tổ chức các hoạt động vào các pha  phân biệt để cho người quản lí có thể đặt lịch cho các nhiệm vụ được hoàn thành trong một thời kì thời gian nhất định. Chỉ sau khi các nhiệm vụ trong một pha đặc thù được làm xong thì pha tiếp mới có thể bắt đầu. Không có chờm lấp các pha trong vòng đời này. Từ cách nhìn của người quản lí dự án, vòng đời này dễ quản lí vì tiến bộ xảy ra theo cách tuần tự tuyến tính. Tại cuối mỗi pha, có một tài liệu đặc biệt và sản phẩm được thực hiện cho nên người quản lí có thể theo dõi tiến bộ của các hoạt động dự án. Vòng đời này dựa trên tình huống hoàn hảo với yêu cầu được xác định rõ ràng và có thay đổi tối thiểu trong phát triển.

Tất nhiên, các yêu cầu không được xác định rõ ràng và thay đổi xảy ra thường xuyên cho nên người phát triển phải quay lại và thay đổi công việc của họ (làm lại). Vấn đề này thường làm cho dự án bị trượt lịch, cần nhiều nỗ lực hơn và làm cho chi phí cao và chất lượng thấp. Nó có thể tạo ra hệ thống có cấu trúc kém khó bảo trì. Thỉnh thoảng do lịch chặt, không phải mọi vấn đề đã được giải quyết cho nên phần mềm được đưa ra vẫn có lỗi. Khi yêu cầu của khách hàng được thêm vào về sau trong khi phát triển, chúng làm ngắt quãng công việc và không phải mọi yêu cầu đều được thực hiện đúng. Những điều này tạo ra sản phẩm chất lượng thấp và làm cho khách hàng không hài lòng.

Agile là cách tiếp cận phát triển tốt cho dự án nhỏ hơn nhưng nó có một số ưu điểm nữa. Agile giả định rằng người dùng sẽ tham gia tích cực và cộng tác với người phát triển. Trong thực tế, người dùng thường bận rộn và có thể không có thời gian hay kĩ năng để tham gia vào dự án. Không có người dùng tham gia, Agile có thể không làm việc được. Điều tốt nhất trong Agile là nó đón chào các thay đổi nhưng nó cũng có thể là điều phủ định nữa. Khi nhiều thay đổi được thêm vào và phạm vi cứ thay đổi, dự án có thể không bao giờ kết thúc tương ứng (phạm vi luồn lọt).  Agile là qui trình đang tiến hoá và thường được điều chỉnh để đáp ứng cho thay đổi của khách hàng, do đó khó lập kế hoạch về ngân sách dự án sẽ tốn bao nhiêu. Agile yêu cầu người phát triển có kĩ năng cao và kinh nghiệm mà có thể giả định giữ được nhiều vai trò, từ tương tác với khách hàng, lập ưu tiên, viết mã và kiểm thử liên tục. Phần lớn các công ti không có đủ những công nhân này và công nhân thiếu kinh nghiệm thường không làm được trong Agile, đặc biệt nếu họ không có đủ đào tạo đúng và huấn luyện Agile tốt để giúp họ.

—-English version—-

Waterfall Lifecycle and Agile approach

A Computer Science student wrote to me: “My school is teaching the Waterfall lifecycle but my uncle, who works for a software company said that it does not work and nobody use this model anymore. He said that I must learn Agile instead. When I told the teacher, he disagreed and said that my uncle does not know anything. Now, I am confused. Please advice”.

Answer: Each software lifecycle is designed for a particular type of development. There is no one lifecycle that fits everything. The Waterfall life cycle has advantages and disadvantages and so does the Agile approach. In this case you cannot say who is right and who is wrong.

Although there are disadvantages, the Waterfall lifecycle is still a popular development approach in the industry and is still being taught in most universities. It is simple, easy to understand, and still being used in many types of project, especially large project. For students who do not have a lot of experience, this model is very good to learn how software development works. Once the students understand the Waterfall model well, they can learn about other models such as Spiral, Incremental, and Agile etc.

The Waterfall lifecycle organized development activities into distinct phases so manager can set schedule for the tasks to be completed within a specified time period. Only after the tasks in a particular phase are done then the next phase can start. There is no overlapping of phases in this lifecycle. From the project managers’ view, this lifecycle is easy to manage since the progress is happening in a sequential linear manner. At the end of each phase, there are specific documents and products to be done so managers can track progress of project activities. This lifecycle is based on a perfect situation where requirements are clearly defined and there is minimum change during development.

Of course in reality, requirements are not clearly defined and changes happen quite often so developers must go back and change their works (re-works). This problem often causes the project to slip schedule, needs more efforts and causes higher costs and lower quality. It may create badly structured system which is difficult to maintain. Sometime due to strict schedule, not all problems are solved so released software still has defects. When customers’ requirements are added later in the development, they disrupt the works and not all requirements are done correctly. These things create low quality products and make customer not very happy.

Agile is a good development approach for smaller project but it has some disadvantages too. Agile assumes that users will actively involve and collaborate with developers. In reality, users are often busy and may not have the time or skills to participate in the project. Without users involve, Agile may not work. The best thing in Agile is it welcomes changes but it can also be a negative thing too. As more changes are being added and the scope keeps changing, the project may never finish accordingly (Scope creep).  Agile is an evolving process and constantly being adjusted to meet customers’ changes, therefore it is difficult to plan how much it will costs for the project budget. Agile requires a highly skilled and experienced developers that can assume many roles, from interact with customers, set priority, write code and continuously testing. Most companies do not have enough of these workers and inexperienced workers often fail in Agile, especially if they do not have enough proper training and good Agile coaches to help them.