Cơ bản nhất về Agile và Scrum
Bài đăng này đã không được cập nhật trong 6 năm
Chào các bạn, sau 2 buổi được học hỏi về Agile và Scrum thì hôm nay mình quyết định viết bài chia sẻ về những gì mà mình ghi nhớ được. Hi vọng qua bài viết này sẽ giúp các bạn hiểu được phần nào về Agile và Scrum!
I. Agile là gì?
- Hiểu đơn giản nhất thì Agile là một tư tưởng (mindset) linh hoạt bao gồm 4 giá trị cốt lõi (4 Core values) và 12 nguyên tắc (12 Principles). Nhắc đến Agile là nhắc đến một phạm vi rất rộng, bởi vì nó là một tư tưởng. Và để có được tư tưởng đó thì chúng ta phải bắt đầu bằng việc thực hành. Việc này giống như để hình thành được tư tưởng Hồ Chí Minh thì chúng ta phải hành động theo những nguyên tắc mà tư tưởng Hồ Chí Minh đề ra Vậy 4 Core Values và 12 Principles gồm những gì?
1. 4 Core values
1. Individuals and Interactions Over Processes and Tools: Cá nhân và sự tương tác hơn là quy trình và công cụ.
Bởi vì các cá nhân là người đáp ứng nhu cầu kinh doanh và thúc đẩy quá trình phát triển, vì vậy công cụ là yếu tố xếp sau. Nếu quy trình hoặc công cụ thúc đẩy sự phát triển, nhóm sẽ ít phản ứng hơn với những sự thay đổi mà sẽ bị phụ thuộc, vậy điều này đã đi ngược lại định nghĩa của Agile rồi.
2. Working Software Over Comprehensive Documentation: Phần mềm chạy tốt hơn là tài liệu đầy đủ.
Trong quá trình phát triển phần mềm, rất nhiều thời gian được dành cho việc ghi chép cho các yêu cầu, kế hoạch, thông số, ... Và điều này dẫn đến sự chậm trễ cho việc phát triển. Trong Agile không loại bỏ tài liệu nhưng sẽ hợp lý hóa nó dưới dạng cung cấp cho đội ngũ phát triển những gì cần thiết để thực hiện công việc mà không bị sa đà vào những việc vụn vặt. Yêu cầu cho tài liệu cần thực hiện một cách nhanh chóng để người phát triển có thể bắt tay ngay vào việc xây dựng chức năng mới.
3. Customer Collaboration Over Contract Negotiation: Cộng tác với khách hàng hơn là đàm phán hợp đồng.
Đàm phán là giai đoạn khách hàng và người quản lý sản phẩm tìm ra các chi tiết của sản phẩm, cùng nhau thống nhất cũng như thương lượng để đưa ra được những yêu cầu tốt cho sản phẩm. Với Waterfall, khách hàng đưa ra các yêu cầu rất chi tiết cho sản phẩm trước khi bắt đầu bất kỳ công việc nào. Tuy nhiên việc tham gia này chỉ diễn ra tại thời điểm ban đầu và kết thúc mà không có ở trong quá trình phát triển sản phẩm. Ở trong bản tuyên ngôn Agile thì mô tả việc khách hàng tham gia trong suốt quá trình phát triển, điều này làm cho việc đáp ứng nhu cầu khách hàng trở nên dễ dàng hơn đồng nghĩa với việc có được sản phẩm tốt hơn.
4. Responding to Change Over Following a Plan: Phản hồi với các thay đổi hơn là bám sát kế hoạch.
Với việc phát triển phần mềm theo cách truyền thống, sự thay đổi được coi là một chi phí. Còn trong Agile, nhờ độ ngắn của những phép lặp nên các ưu tiên có thể được chuyển từ lần lặp hiện tại sang lần lặp tiếp theo và các tính năng mới được thêm vào một cách linh hoạt trong lần lặp kế tiếp đó. Quan điểm của Agile là những thay đổi luôn cải thiện một dự án, việc thay đổi sẽ cung cấp giá trị bổ sung.
2. 12 Principles
- Customer satisfaction through early and continuous software delivery: Khách hàng sẽ hạnh phúc hơn nếu nhận được sản phẩm đều đặn thay vì phải chờ đợi thời gian kéo dài của vòng đời phát triển phần mềm.
- Accommodate changing requirements throughout the development process: Luôn chào đón sự thay đổi yêu cầu hoặc tính năng.
- Frequent delivery of working software: Ưu tiên việc bàn giao sản phẩm cho các khoảng thời gian ngắn. Bàn giao sản phẩm chạy tốt đều đặn hàng tuần, hàng tháng cho khách hàng.
- Collaboration between the business stakeholders and developers throughout the project: Trong dự án, mọi quyết định được đưa ra sẽ tốt hơn khi đội ngũ phát triển và đội ngũ kinh doanh làm việc cùng nhau hàng ngày.
- Support, trust, and motivate the people involved: Dự án cần được xây dựng xung quanh những cá nhân có động lực. (Cái này giống như đứa gánh team trong Bài tập lớn môn học vậy)
- Enable face-to-face interactions: Cách tốt nhất để truyền tải thông tin là mặt đối mặt.
- Working software is the primary measure of progress: Việc cung cấp phần mềm chạy tốt cho khách hàng là thước đo chính của tiến độ công việc.
- Agile processes to support a consistent development pace: Các quy trình linh hoạt sẽ thúc đẩy sự phát triển bền vững.
- Attention to technical detail and design enhances agility: Các kỹ năng phù hợp và thiết kế tốt đảm bảo nhóm có thể duy trì tốc độ, không ngừng cải tiến sản phẩm và duy trì sự thay đổi.
- Simplicity: Sự đơn giản là chìa khóa căn bản giúp tối đa hóa lượng công việc. Hay nói cách khác chính là phát triển vừa đủ để hoàn thành công việc một cách nhanh nhất.
- Self-organizing teams encourage great architectures, requirements, and designs: Các thành viên trong nhóm có kỹ năng và động lực, có quyền ra quyết định cần trao đổi thường xuyên với các thành viên khác trong nhóm và chia sẻ ý tưởng để cung cấp được sản phẩm chất lượng.
- Regular reflections on how to become more effective: Tự cải thiện bản thân, cải tiến quy trình, kỹ thuật sẽ giúp làm mọi thành viên trong nhóm việc hiệu quả hơn.
Trên đây là những gì cốt lõi nhất của Agile mà mình ghi nhớ được, và như mình đã nói để hình thành được Agile thì chúng ta cần PRACTICES, và một trong các Practices được áp dụng nhiều nhất đó chính là Scrum.
** Có thể bạn chưa biết: Scrum được hình thành vào đầu những năm 1990 còn Agile được hình thành vào năm 2001.
II. Scrum là gì?
Như trên hình chúng ta có thể thấy Scrum chiếm 58% trong Agile Methods&Practices. Vậy Scrum là gì?
Hiện nay chúng ta có rất nhiều ngôn ngữ lập trình: PHP, Python, Java, Javascript, CSS, ... Với mỗi ngôn ngữ chúng ta lại có nhiều Frameworks khác nhau., ví dụ như:
- PHP có Laravel, Zend, Yii, ...
- Python có Django, Pyramid, ...
- Java có Spring, Struts, ...
- Javascript có VueJS, AngularJS, ...
- ....
Và nếu coi Agile là ngôn ngữ nào đó thì Scrum chính là Framework của ngôn ngữ ấy.
=> Srum là một quy trình phát triển phần mềm dựa trên tư tưởng Agile được sáng lập bởi 2 người là Ken Schwaber và Jeff Sutherland.
Scrum thì:
- Lightweigh: Đơn giản.
- Simple to understand: Dễ để hiểu.
- Difficult to master: Khó thể trở nên master nó.
Cũng như Agile có 4 giá trị cốt lõi và 12 nguyên tắc thì Scrum cũng có các thành tố (3-3-4) tạo nên đó chính là: 3 giá trị cốt lõi (3 chân), 3 vai trò, 4 cuộc họp.
1. 3 giá trị cốt lõi
- Transparency (Tính minh bạch): Tất cả mọi thứ liên quan đến quá trình phát triển (VD như: Tầm nhìn sản phẩm, Yêu cầu khách hàng, Tiến độ công việc, Khó khăn, ....) đều phải minh bạch, rõ ràng. Qua đó tất cả mọi người với vai trò khác nhau có thể có đủ thông tin cần thiết để đưa ra các quyết định có giá trị, nâng cao chất lượng công việc.
- Inspection (Thanh tra): Việc thanh tra liên tục ở đây không phải để tìm ra lỗi để bắt phải chịu trách nhiệm mà chính là để phát hiện ra những bất thường không theo ý muốn trong công việc. Điều này giúp cho việc thích nghi và cải tiến liên tục trong công việc. Tuy nhiên tần suất thanh tra không nên dày quá tránh ảnh hưởng đến công việc.
- Adaptation (Sự thích nghi): Do được xây dựng trên Agile nên Scrum rất linh hoạt, cũng nhờ đó mà nó mang tính thích nghi cao.
Tóm lại, dựa trên các thông tin minh bạch hóa từ các quá trình thanh tra và làm việc, Scrum có thể phản hồi lại các thay đổi một cách tích cực, nhờ đó mang lại thành công cho dự án.
2. 3 vai trò
- Product Owner: Là người quản lý Product Backlog, chịu trách nhiệm về sự thành công của dự án, người định nghĩa các yêu cầu và đánh giá cuối cùng đầu ra của các nhà phát triển phần mềm.
- Scrum Master: Là người hiểu biết sâu sắc về Scrum, đảm bảo nhóm làm việc hiệu quả theo Scrum.
- Development Team: Là nhóm tự tổ chức, có nhiệm vụ chuyển đổi các chức năng từ Product Backlog thành sản phẩm.
3. 4 cuộc họp
Trong Scrum để hoàn thành 1 dự án người ta chia ra thành các Sprint, mỗi Sprint kéo dài từ 1-4 tuần tùy vào độ phức tạp của dự án. Một Sprint mới bắt đầu ngay khi Sprint trước khép lại. 4 sự kiện hay chính là 4 cuộc họp sẽ được lặp đi lặp lại với mỗi Sprint.
1. Daily Scrum: Họp scrum hằng ngày
- Scrum Master sẽ tổ chức cho Dev Team cuộc họp hằng ngày trong 15', mỗi thành viên sẽ phải trả lời 3 câu hỏi trong cuộc họp đó là:
- Ngày hôm qua tôi đã làm được gì?
- Hôm nay tôi sẽ làm gì?
- Khó khăn mà tôi gặp phải là gì?
=> Nhờ việc trả lời những câu hỏi như vậy mà nhóm có thể chia sẻ minh bạch với nhau tiến độ công việc, những khó khăn gặp phải qua đó sẽ tìm ra cách giải quyết tốt nhất cho công việc.
2. Sprint Planning:
- Trong cuộc họp này Dev Team sẽ gặp gỡ với Product Owner để lên kế hoạch cho Sprint bao gồm:
- Lựa chọn các yêu cầu cần phải phát triển.
- Phân tích và nhận biết các công việc phải làm kèm theo các ước lượng thời gian cần thiết để hoàn tất các nhiệm vụ.
- Timebox tương ứng cho cuộc họp này là: 1h cho Sprint 1 tuần, 2h cho Sprint 2 tuần, ...
3. Sprint Review:
- Cuối mỗi Sprint, Dev Team tiếp tục cùng Product Owner rà soát lại công việc đã hoàn thành (DONE) trong thời gian đã qua và đề xuất chỉnh sửa các thay đổi cho sản phẩm.
- Timebox tương ứng cho cuộc họp này cũng giống như Sprint Planning.
4. Sprint Retrospective:
- Dưới sự trợ giúp của Scrum Master, Dev Team sẽ rà soát lại toàn diện Sprint vừa kết thúc và tìm cách cải tiến quy trình làm việc cũng như bản thân sản phẩm.
Trên đây là những gì cơ bản nhất mà mình ghi nhớ được về Agile và Scrum. Nói về Agile thì thực sự rất rộng, bản thân mình cũng mới chỉ bắt đầu tìm hiểu về nó, và mình nghĩ rằng sinh viên thì có thể áp dụng nó từ những việc nhỏ như: Lập kế hoạch rõ ràng cho bản thân trong tuần mới mỗi khi kết thúc tuần, chia thật nhỏ các công việc đi kèm timebox giới hạn cho mỗi việc, ưu tiên cho những việc quan trọng, ... Agile là một tư tưởng sẽ giúp bạn rất nhiều trong cả cuộc sống lẫn công việc, và để hình thành được nó bạn phải PRACTICE thật nhiều Hi vọng bài viết sẽ có ích với các bạn!
Nguồn: BKFA Team
All rights reserved