Waterfall vs Agile vs Scrum - Part 1: Agile là gì?
Trong công ty phần mềm, việc quản lý dự án đóng vai trò then chốt. Và một trong các bước đầu tiên khi bắt đầu dự án là xác định phương thức quản lý dự án. Đến đây, chúng ta sẽ nghe nhiều về các phương thức như: Waterfall, Agile, Scrum, Spiral, Kanban,... Với mỗi loại sẽ có những điểm mạnh, điểm yếu ...
Trong công ty phần mềm, việc quản lý dự án đóng vai trò then chốt. Và một trong các bước đầu tiên khi bắt đầu dự án là xác định phương thức quản lý dự án. Đến đây, chúng ta sẽ nghe nhiều về các phương thức như: Waterfall, Agile, Scrum, Spiral, Kanban,... Với mỗi loại sẽ có những điểm mạnh, điểm yếu riêng
- Phần 1: Agile là gì?
- Phần 2: Waterfall là gì?
- Phần 3: Scrum là gì?
- Phần 4: So sánh Agile, Scrum và Water? Con đường nào phù hợp với bạn
- Phần 5: Agile có thực hiện phù hợp với outsource và các dự án offshore
- Phần 6: Kết hợp mô hình waterfall và scrum để thích nghi với các dự án offshore nói chung, Framgia nói riêng
1.1. Định nghĩa
Agile là mô hình phát triển phần mềm linh hoạt, dựa trên phương thức lặp (iterative) và tăng trưởng (incremental). Nói một cách đơn giản, agile hoạt động theo flow sau:
Phát triển chức năng → Test → Release sản phẩm cho khách hàng → Khách hàng phản hồi lại → Thay đổi và test lại → Release sản phẩm
Một vòng lặp của agile thường ngắn, từ 1,2 tuần đến 1 tháng. Trong agile, các yếu tố teamwork, tính trách nhiệm và communicate face-to-face được khuyến khích. Stakeholder và đội phát triển sẽ làm việc cùng nhau để điều chỉnh sản phẩm dần mapping với mong muốn của khách hàng.
1.2. 12 Principles of Agile Methodology
Vào tháng 2 năm 2001, 17 nhà phát triển phần mềm đã họp tại Utah để đưa ra tuyên ngôn về Agile. Trong đó, họ đề ra 12 nguyên tắc là kim chỉ nam và thước đo để quyết định một quy trình phát triển phần mềm có là Agile hay không?
- Làm thỏa mãn khách hàng nhanh và liên tục bằng cách delivery các phần mềm có giá trị
- Welcome change spec trong cả vòng đời. Agile giúp tăng tính cạnh tranh của sản phẩm khi luôn có các bước cập nhật nhanh chóng
- Deliver sản phẩm thường xuyên, từ khoảng 2 tuần đến vài tháng, với chu kì ngắn.
- Những người hiểu biết về business và đội dự án cần làm việc với nhau hằng ngày
- Xây dựng dự án xoay quanh các cá nhân, tăng motivated cho team bằng cách cung cấp cho họ môi trường làm việc cởi mở, và tin họ sẽ hoàn thành công việc.
- face-to-face luôn là cách truyền đạt thông tin nhanh và hiệu quả nhất
- Thước đo chính của process là một software chạy được
- Quy trình Agile khuyến khích phát triển bền vững và nhịp độ phát triển liên tục
- Liên tục quan tâm đến kĩ thuật và thiết kế để cải tiến sự linh hoạt
- Sự đơn giản là cần thiết – thay vì tuân theo một quy tắc cứng nhắc, đơn giản hóa cách truyền đạt thông, làm task
- Team tự tổ chức cách thức làm việc, đối ứng với các vấn đề gặp phải
- Thích ứng thường xuyên với sự thay đổi
1.3. Advantages of Agile
Agile là một phương pháp tiến cận dự án dành cho những người ghét sự cứng nhắc, đơn cử như phương pháp Waterfall. Nó tập trung vào sự linh hoạt, cải thiện liên tục và nhanh chóng.
Dưới đây là các lợi ích tiêu biểu nhất của Agile:
- Change luôn được chấp nhận: với vòng đời phát triển trong thời gian ngắn, việc đối ứng change request hay các yêu cầu mới trở nên đơn giản.Luôn luôn có cơ hội để tinh chỉnh và sắp xếp lại công việc tồn đọng, cho phép các nhóm giới thiệu các thay đổi cho dự án chỉ trong vài tuần.
- End-goal can be unknown: Agile rất thích hợp với project thì mà mục tiêu cuối cùng chưa được clear. Xét về mặt quy trình phát triển, mục tiêu đặt ra trở nên nhẹ nhàng hơn và đội phát triển có thể dễ dàng đáp ứng được việc spec tăng dần
- Delivery nhanh và có chất lượng cao: Breaking down project vào các vòng lặp thời gian ngắn cho phép team hướng đến việc phát triển, tesing chất lượng cao. Bug được tìm ra và đối ứng một cách nhanh chóng.
- Sự tương tác mạnh mẽ trong team: Agile đề cao sự tương tác thường xuyên trong team, đặc biệt là face-to-face. Việc này đem lại sự gắn kết và mọi người có thể hiểu được tránh nhiệm của bản thân trong dự án.
- Khách hàng luôn được lắng nghe: khách hàng có nhiều cơ hội để trải nghiệm sản phẩm nhanh chóng, xác nhận và đưa ra các feedback nhanh chóng. Ngoài ra, việc đồng hành với dự án, giúp tăng lòng tin của họ về sản phẩm cuối
- Continuous improvement: Agile giúp cho product trưởng thành qua từng vòng lặp nhờ feedback của khách hàng và nỗ lực của team member. Mỗi bài học rút ra sẽ giúp ích cho vòng lặp sau
1.4. Disadvantages of Agile
Khi sự linh hoạt là thế mạnh của Agile, thì đôi khi, nó lại là điểm yếu của chính nó. Agile khó để thiết lập một ngày delivery cố định, document bị xem nhẹ, và có khả năng sản phẩm cuối cùng có thể khác với định hướng ban đầu.
Cụ thể Agile có vài nhược điểm sau:
- Độ chi tiết của Planning sẽ kém: Agile sẽ khó để đặt ra được một mốc delivery cố định. Bởi vì agile dựa trên delivery thời gian ngắn, các task đôi khi lặp lại dẫn đến một vài mục tiêu delivery không được đảm bảo deadline. Thêm nữa, việc add thêm một sprint có thể kéo dài plan của cả dự án.
- Team phải ngon: team agile thường nhỏ, và đòi hỏi team member phải ở mức highly skill, đảm bảo yếu tố chuyên môn để có thể "tin tưởng"
- Time được commit từ đội phát triển: cách tiếp cận Agile đôi khi gây mất thời gian hơn cách thực hiện thông thường, rủi ro của nó đến từ việc bất hơp lý hay xung đột trong quá trình làm việc, khi lượng đầu công việc mà team member phải tự điều chỉnh tăng lên
- Document bị xem nhẹ: thông thường, đội phát triển chỉ quan tâm các tài liệu tổng thể và các requirement để có thể phát triển nhanh phần mềm, các loại tài liệu khác bị xem nhẹ. Việc này giúp cho việc quản lý thông tin trở nên khó khăn, và đôi khi khó có thể chấp nhận với khách hàng khó tính như khách hàng Nhật.
- Final product can be very different: việc thay đổi liên tục trong quá trình có thể khiến cho dự án dần mất đi mục đích ban đầu, dẫn đến mục tiêu khác đem đến tính rủi ro cao hơn.
1.5. The Agile Development Cycle
Trên đây là các phase trong vòng đời phát triển Agile. Nhiều phase có thể thực hiện song song
- Planning: Team ngồi với nhau để xác định các chức năng, chia nhỏ chúng vào các phase trên cơ sở xem xét tính khả thi, độ ưu tiên và feedback từ khách hàng.
- Requirements analysis: phân tích yêu cầu, giai đoạn này đòi hỏi các cuộc meeting liên tục với sự tham gia của managers, stakeholders, and users. Đội dự án cần tập hợp và đề xuất ra cách để quản lý, định lượng
- Design: design để có view về những gì sẽ phát triển, chiến lược test của được phát triển từ phase này
- Implementation, coding or development: implement và test các chức năng.
- Testing: test để đảm bảo sản phẩm thực sự giải quyết được customer needs và matching user stories. Unit testing, integration testing, system testing, and acceptance testing là các hình thức test được khuyến khích áp dụng.
- Deployment: Sau khi test, một sản phẩm chạy được sẽ được đưa đến tay khách hàng. Khách hàng sẽ dùng thử và đưa ra feedback cùng các yêu cầu mới. Đội dự án cần xác định là yêu cầu và thay đổi plan cho phù hợp
1.6. Methodologies That Are Used to Implement Agile
Agile is a framework and there are a number of specific methods within the Agile movement. You can think of these as different flavors of Agile:
Extreme Programming (XP): Also known as XP, Extreme Programming is a type of software development intended to improve quality and responsiveness to evolving customer requirements. The principles of XP include feedback, assuming simplicity, and embracing change.
Feature-driven development (FDD): This iterative and incremental software development process blends industry best practices into one approach. There are five basic activities in FDD: develop overall model, build feature list, plan by feature, design by feature, and build by feature.
Adaptive system development (ASD): Adaptive system development represents the idea that projects should always be in a state of continuous adaptation. ASD has a cycle of three repeating series: speculate, collaborate, and learn.
Dynamic Systems Development Method (DSDM): This Agile project delivery framework is used for developing software and non-IT solutions. It addresses the common failures of IT projects, like going over budget, missing deadlines, and lack of user involvement. The eight principles of DSDM are: focus on the business need, deliver on time, collaborate, never compromise quality, build incrementally from firm foundations, develop iteratively, communicate continuously and clearly, and demonstrate control.
Lean Software Development (LSD): Lean Software Development takes Lean manufacturing and Lean IT principles and applies them to software development. It can be characterized by seven principles: eliminate waste, amplify learning, decide as late as possible, deliver as fast as possible, empower the team, build integrity in, and see the whole.
Kanban: Kanban, meaning “visual sign” or “card” in Japanese, is a visual framework to implement Agile. It promotes small, continuous changes to your current system. Its principles include: visualize the workflow, limit work in progress, manage and enhance the flow, make policies explicit, and continuously improve.
Crystal Clear: Crystal Clear is part of the Crystal family of methodologies. It can be used with teams of six to eight developers and it focuses on the people, not processes or artifacts. Crystal Clear requires the following: frequent delivery of usable code to users, reflective improvement, and osmotic communication preferably by being co-located.
Scrum: Một trong những cách phổ biến nhất để thực hiện Agile. Nó là một mô hình phần mêm vòng lặp để chia phần mềm cần sản xuất ra thành các phần nhỏ có thể chạy độc lập, lấy ý kiến khách hàng và thay đổi cho phù hợp ngay trong quá trình phát triển để đảm bảo sản phẩm release đáp ứng những gì khách hàng mong muốn. Scrum đưa ra một vài quy luật cơ bản nhằm đảm bảo tạo ra cấu trúc của nhóm dự án, giữ cho nó phát triển, sáng tạo và tạo ra sự hấp dẫn đối với những người tham gia. Nó thực hiện dựa trên đặc tính tự nhiên của người phát triển nên rất dễ hiểu, dễ áp dụng, tạo nên tính tương tác cao giữa các lập trình viên trong nhóm. Giúp họ cùng nhau tạo ra những sản phẩm tốt, thay vì chịu sự áp đặt, áp lực từ bên ngoài.
https://www.smartsheet.com/agile-vs-scrum-vs-waterfall-vs-kanban