Agile Y
Tóm lược Sách Agile Y - Tác giả Nguyễn Văn Hiển
Về Agile Y – GURUnH - Mời mọi người đặt mua sách tại đây. Sách tiếng Việt cung cấp cho bạn những kiến thức cơ bản về Agile. Và là nền tảng tốt để bắt đầu tìm hiểu về Agile và các kỹ thuật liên quan.
Chương 1 - Phát triển phần mềm cần linh hoạt
Phương pháp phát triển phần mềm truyền thống (Waterfall và các biến thể) phân chia quá trình phát triển phần mềm thành những giai đoạn độc lập, do đó phát sinh những vấn đề lãng phí, phản ứng kém với những thay đổi trong yêu cầu bởi khối lượng phản hồi lớn tại thời điểm trễ. Việc bắt đầu lại từ đỉnh thác luôn chứa đựng nhiều bất ổn hiến tỉ lệ dự án thành công không cao.
Về cơ bản, thế giới cần một phương pháp phát triển phần mềm mới, giải quyết bài toán theo cách khác, thay vì chỉ tối ưu cục bộ trong một giai đoạn nhất định.
Chương 2 - Agile là giải pháp
Agile là phương pháp phát triển phần mềm hiện đại, nhằm giải quyết tận gốc những vấn đề tồn tại của phương pháp phát triển phần mềm truyền thống. Agile tập trung vào cá nhân và sự tương tác hơn là quy trình và công cụ. Phần mềm chạy tốt hơn là tài liệu đầy đủ. Cộng tác với khách hàng hơn là đàm phán hợp đồng. Phản hồi với các thay đổi hơn là bám sát kế hoạch. Những vấn đề bên phải vẫn có giá trị nhưng Agile tập trung vào những điều bên trái hơn. Có hàng chục phương pháp nằm trong chiếc ô Agile đều chia sẻ tầm nhìn chung trong Tuyên ngôn Agile với 12 nguyên lý.
Scrum là phương pháp được sử dụng nhiều nhất, và thường là điểm bắt đầu của những nhóm mới thực hành Agile bởi sự đơn giản nhưng hoàn thiện và dễ hiểu.
Kanban là phương pháp có sự tăng trưởng nhanh nhất hiện nay.
eXtream Programming (XP) chứa đựng những practice được sử dụng nhiều nhất trong những nhóm thực hành Agile.
Chương 3 - Scrum
Scrum là phương pháp phát triển phần mềm theo nhóm nhằm cung cấp giá trị cho việc phát triển phần mềm. Các thành viên trong nhóm làm việc cùng nhau để đạt được một mục tiêu chung với quy trình và cách làm cụ thể bởi từng công cụ do chính những thành viên trong nhóm thiết lập với sự đồng thuận tối đa, nhằm tạo ra giá trị cao nhất.
- 3 trụ cột của Scrum: Minh bạch, Thanh tra, Thích nghi
- 5 giá trị của Scrum: Dũng cảm, Cởi mở, Cam kết, Tập trung, Tôn trọng.
- 3 vai trò: Product Owner, Scrum Master, Nhóm phát triển.
- Artifact: Product Backlog, Sprint Backlog, Release Burn-down chart, Sprint Burn-down chart, Definition of Done.
Chương 4 - Kanban & Scrumban
Kanban là phương pháp theo tư tưởng Lean nhằm trực quan hóa workflow, giúp linh hoạt trong việc lên kế hoạch, được điều hướng bởi lead time.
Scrumban là phương pháp kết hợp những điểm mạnh của Scrum và Kanban giúp nhóm phát triển phần mềm được điều hướng bởi giá trị và sự kiện.
Scrum + Kanban = Scrumban
Scrumban là cách mở rộng Scrum cho những nhóm lớn. Vì Scrum tập trung vào nhóm nhỏ, khuyến nghị với 2-9 thành viên.
Chương 5 - Các kỹ thuật và công cụ hữu ích trong Agile
-
Bảng là công cụ tối quan trọng với những nhóm thực hành Agile. Dù là bảng vật lý hay bảng điện tử, mức độ chuyển động và sự tập trung của nhóm vào bảng cho thấy một phần độ trưởng thành của nhóm thực hành Agile.
-
Continuous Integration về mặt source code được hiểu là việc tích hợp liên tục với nhau để tránh việc tích hợp trễ gây ra lỗi tích hợp giữa các thành viên, modules. Continuous Integration về mặt quy trình được hiểu là việc đồng bộ công việc giữa những thành viên trong nhóm nhằm đảm bảo mọi thành viên đều nắm được tình trạng công việc hiện tại.
-
Continuos Delivery được hiểu là khả năng nhanh chóng và đều đặn triển khai những thay đổi từ bug fix tới những chức năng mới tới môi trường được sử dụng bởi người dùng một cách an toàn và hiệu quả.
-
Trong dự án Agile, database không phải là thành phần bất biến, việc thay đổi có thể được liên tục diễn ra. Để đảm bảo việc thay đổi được diễn ra an toàn và hiệu quả, database cũng nên coi là một phần tài nguyên như source code và cũng cần giải pháp versioning.
-
Bất kỳ nhóm thực hành Agile nào cũng cần một Branching Strategy cụ thể và phù hợp. Bởi thông thường, do cách thiết kế phần mềm kiểu Agile, rất nhiều xung đột có thể xảy ra, branching strategy và continuous integration chính là công cụ giải quyết những xung đột này. Branching Strategy hiệu quả còn giúp việc release trở nên an toàn và đảm bảo chất lượng.
-
Code refactoring là hoạt động không thể thiếu, giúp nhóm thực hành Agile liên tục cải tiến chất lượng source code, hay chính là chất lượng phần mềm. Hãy cố gắng thực hiện code refactoring bất cứ khi nào có thể nhưng chỉ khi các test đã sẵn sàng.
-
Chất lượng source code được bảo đảm theo nhiều cách. Ở mức cơ bản là những quy chuẩn về ngôn ngữ, phong cách lập trình (Coding Conventions & Styles). Ở mức cao hơn, là giải pháp cho một vấn đề cụ thể (Design Patterns). Peer Review là một cách làm tốt, ngoài việc nâng cao chất lượng source code, còn giúp những thành viên trong nhóm học hỏi lẫn nhau.
-
TDD (Test Driven Development) là một kỹ thuật tuyệt vời của Agile nhằm thu về một mối vấn đề không đồng nhất giữa tài liệu, source code và testing. Test được coi là tài liệu, là thiết kế bảo đảm sự đúng đắn của source code từ mức function (method - unit) tới một chức năng cụ thể về mặt người dùng.
-
Lập trình cặp (Pair programming) luôn là vấn đề hoài nghi và gây nhiều tranh cãi trong Agile. Nhóm thực hành Agile nên thực hành lập trình cặp bất cứ khi nào có thể (nếu đủ nguồn lực). Nếu không, nên dành không gian cho việc lập trình cặp với những vấn đề phức tạp. Lập trình cặp ít khi cho hiệu quả nhìn thấy trực tiếp nhưng chất lượng phần mềm được cải thiện đáng kể.
-
Retrospective là điều tuyệt vời mà Agile mang lại về mặt quy trình, giúp nhóm thực hành Agile rà soát lại và nhìn ra những vấn đề đã thực hiện tốt và những vấn đề cần giải quyết nhằm tìm ra những hành động đúng đắn, cũng như tìm ra quy trình của riêng nhóm.
Chương 6 - Nhóm tự tổ chức liên chức năng Nhóm tự tổ chức liên chức năng (Cross-Functional and Self-Organized Team) là nhóm tập hợp những cá nhân có đầy đủ kiến thức, kỹ năng cần thiết để cam kết và thực hiện một mục tiêu đề ra. Nhóm liên chức năng hoạt động như một đơn vị, những thành viên thường xuyên trao đổi, cộng tác và hỗ trợ nhau trong những hoạt động, công việc cần thiết nhằm đạt được mục tiêu chung.
Nhóm tự tổ chức là nhóm không tập trung quyền hạn vào một thành viên cụ thể; tự định nghĩa và thực hành cách thức thực hiện, cộng tác để đạt được mục tiêu đề ra, có thể tự đưa ra quyết định mà không phụ thuộc vào hệ thống bên ngoài nhóm.
Nhóm tự tổ chức liên chức năng là nhóm được hình thành bởi những cá nhân có đầy đủ kiến thức, kỹ năng cần thiết để hướng tới mục tiêu được đặt ra, thông qua việc thường xuyên trao đổi, cộng tác, hỗ trợ lẫn nhau, nhóm tự đưa ra quy trình, cách thức cũng như quyết định để đạt được mục tiêu chung và hông chịu tác động của bất kỳ hệ thống nào ngoài nhóm.
Nhóm tự tổ chức liên chức năng luôn yêu cầu sự dũng cảm, cam kết và kỹ năng cộng tác. Nhóm tự tổ chức liên chức năng luôn trải qua những trạng thái Forming, Storming, Norming và Performing với những đặc trưng khác nhau. Vai trò của tổ chức và những người quản lý dành cho nhóm tự tổ chức liên chức năng vẫn rất lớn, giúp nhóm nhanh chóng đạt được và duy trì trạng thái Performing.
Chương 7 - Mở rộng Agile
Scrum of Scrums là một phương pháp mở rộng rất tự nhiên của Scrum. Thay vì mở rộng nhóm Scrum thành một nhóm lớn hơn. Tổ chức duy trì nhóm Scrum vật lý như một thành phần đơn vị và tạo ra sự liên kết giữa những thành phần này thông qua một nhóm Scrum logic.
SAFe hướng trọng tâm vào sự cộng tác, điều chỉnh và chuyển giao với nhiều nhóm thực hành Agile trong một tổ chức lớn, thường phù hợp với 8 nhóm thực hành Agile với khoảng 100 nhân sự. Tư tưởng chính của SAFe là phân chia thành nhiều mức (level) khác nhau, bao gồm: Team, Program, Portfolio, value Stream. Cộng tác với nhau thông qua Agile Release Train.
LeSS hoạt động gần như chính xác theo cách Scrum được định nghĩa, chỉ giải quyết bài toàn hàng chục nhân sự bằng cách cấu trúc thành những nhóm Scrum, phân tách những hoạt động như Sprint Planning, Sprint Retrospective thành hai mức khác nhau, cho nhóm Scrum và nhóm LeSS.
Đối với Nexus, tư tưởng chung là tạo thêm một thành phần nữa để kết nối và tích hợp giữa những nhóm thực hành Scrum, biểu hiện ở Artifact với Nexus Sprint Backlog, Nexus Sprint Goal hay sự kiện với Nexus Daily Scrum, Nexus Sprint Review… được thực hành bởi một nhóm cố định là Nexus Integration Team.
Chương 8 - Tổ chức Agile
Xây dựng tổ chức Agile không thực sự là điều khó khắn, nhưng thực hiện sớm nhất có thể sẽ giúp tổ chức tiết kiệm công sức và chi phí chuyển đổi. Cấu trúc tổ chức xoay quanh khách hàng và sản phẩm hơn là quy tắc quản lý và kiểm soát là điều quan trọng nhất. Khi đã lựa chọn Agile, hãy thực hiện đúng ngay từ ban đầu, đánh giá trước khi đưa ra những thay đổi. Khả năng thực hiện đúng Agile chính là lợi thế lớn nhất của những tổ chức vừa và nhỏ. Hãy cổ vũ cho việc thay đổi hành vi của tổ chức thông qua học tập, thử nghiệm sớm là việc quan trọng để duy trì tính bền vững của tổ chức.
Chuyển đổi tổ chức sang mô hình Agile là thử thách lớn hơn rất nhiều, và không có công thức thành công chung. Thực sự Agile không phải là mục tiêu của tổ chức , đó là công cụ để sản sinh giá trị cho khách hàng, cho tổ chức. Song thực sự Agile thường là công cụ cho ra giá trị bước ngoặt so với thực hành Agile. Các tổ chức thường tiếp cận việc chuyển đổi thông qua chuyển dịch từng bước; song chuyển dịch bước ngoặt cũng là một lựa chọn khả thi.
Chương 9 - Quản lý cá nhân
Thời gian là yếu tố cố định duy nhất trong thế giới ngày nay. Bất kể chúng ta có kỹ năng quản lý thời gian tốt đến đâu, vẫn là chưa đủ. Chúng ta cần nhìn nhận về giá trị công việc nhiều hơn là số lượng công việc được làm trong khoảng thời gian hữu hạn. Quản lý năng lượng là cách tốt nhất để thực hiện những công việc tập trung vào giá trị.
Chương 10 - Trợ giúp của Kanban
Kanban cá nhân cung cấp một cách quản lý (công việc) cá nhân tập trung vào luồng công việc nhằm tối đa hóa giá trị.
Trực quan hóa là nguyên lý nổi bật nhất. Tập trung là nguyên lý quan trọng nhất. Ưu tiên tạo ra hiệu quả. Luồng công việc tạo ra kiểm soát. Trạng thái công việc tạo ra động lực. Hãy luôn đặt ra giới hạn WIP và cam kết thực hiện cho tới khi bạn tìm thấy lý do chính đáng để điều chỉnh.
Một bảng Kanban cá nhân thường bao gồm 2 cột cố định là TO-DO và DONE; Xen giữa là những cột khác thể hiện luồng công việc; song không nên có quá nhiều cột. Việc chụp lại tình trạng mọi công việc trong 15 giây là quan trọng nhất.
Chương 11 - Tối ưu hiệu quả
Hãy luôn có định nghĩa hoàn thành công việc trước khi bắt đầu lên kế hoạch cho bất cứ công việc nào, điều này giúp chúng ta xác định rõ kỳ vọng, tiến độ công việc vào bất cứ thời điểm nào.
Luôn tập trung, hãy làm những công việc giá trị nhất hơn là làm nhiều việc.
Cố gắng ủy quyền với những công việc không mang lại nhiều giá trị cho bản thân, đặc biệt không giúp ích trong việc phát triển cá nhân. Hãy cố gắng ủy quyền dựa trên công nghệ và tiền bạc với những dịch vụ tốt nhất có thể. Sau đó là ủy quyền dựa trên quan hệ và quyền hạn.
Sống theo Sprint. Luôn nhìn lại và đánh giá cách làm của những công việc đã qua theo một chu kỳ đều đặn. Lựa chọn một số ít cải tiến song hãy có cam kết chặt chẽ.