Agile là gì ? Tại sao giờ đi đâu ai cũng hỏi về Agile ? Liệu nó có phải là “thuốc tiên” cho team phát triển dự án đang đau đầu với những vấn đề thường xuyên gặp phải. Seri này được bắt đầu bằng việc mình mới mua cuốn sách “Cẩm nang Scrum – cho người. mới bắt đầu”. Thật ra mình đã mua quyển sách từ khá lâu nhưng chưa bao giờ thực sự nghiêm túc với việc đọc nó. Nhưng do hiện tại trong team mình “có vẻ” như đang handle luôn một số đầu việc của một Scrum master, nên mình thật sự muốn tìm hiểu để hiểu rõ hơn về Agile và mọi thứ xung quanh nó. Vì vậy chuỗi seri này là những điều mình đúc rút ra được từ quá trình làm việc, từ sách vở, internet… Hi vọng nó có ích cho mình và cho mọi người.
Agile là gì ? Scrum có phải Agile hay không ?
Agile ( “agile” tính từ nghĩa là linh hoạt ) hay Agile Development là thuật ngữ có nguồn gốc từ Tuyên bố phát triển phần mềm linh hoạt ( The manifesto for Agile Software Development ) tuyên ngôn này được soạn thảo vào năm 2001 bởi một nhóm tác giả, chuyên gia của các phương pháp phát triển phần mềm Scrum, Extreme Programing, Crytal, FDD, DSDM và một vài nhà lãnh đạo khác.
Tuyên ngôn Agile là một bản đúc kết ra một bảng giá trị và nguyên tắc chung phổ quát cho tất cả các phương pháp phát triển phần mềm linh hoạt.
Agile ngày nay vẫn đang tạo ra những làn sóng thay đổi trên thế giới. Việc hiểu các nguyên lí Agile, hiểu về những phương pháp thực hành Agile sẽ giúp ích cho chúng ta những kỹ sư đang làm việc trong ngành công nghệ thông tin.
Scrum có phải Agile không ? câu trả lời là không. Agile định nghĩa các giá tri cốt lõi và nguyên tắc định hướng. Scurm là một phương pháp cụ thể chia sẻ các nguyên tắc đó.
Tại sao lại là Agile mà không phải Waterfall ?
Từ hồi còn đi học đại học chúng ta ai cũng từng nghe thấy phương pháp phát triển phần mềm Waterfall ( hay còn gọi là mô hình “Thác nước” ), đây là một mô hình phát triển truyền thống hiểu đơn giản là để ra được một phần mềm đến tay khách hàng chúng ta cần phải đi qua các giải đoạn như phân tích nghiệp vụ -> thiết kế -> code -> fix bug -> bàn giao cho khách hàng nghiệm thu. Vì vậy, nó phải được thực hiện rất tỉ mỉ và thận trọng trước khi chuyển giao sang giai đoạn tiếp theo, bởi vì một khi đã sang phase tiếp theo thì việc quay lại rất tốn kém và mất thời gian. Khi đó bộ phận khác đã tiếp nhận yêu cầu và bắt đầu thiết kế hệ thống, giao diện ứng dụng/phần mềm… Vậy điều gì xảy ra nếu như ngay từ bước đầu tiên đã xuất hiện vấn đề bất thường?
Theo mình nghĩ đây cũng chính là vấn đề dẫn đến tại sao người ta luôn nghĩ đến việc cải tiến quy trình này sao cho hạn chế những bất cập, một trong những đặc điểm quan trọng của Agile đó là không ngại với những thay đổi. Trong bối cảnh ngành công nghệ thông tin phát triển như vũ bão, sự “linh hoạt” thích ứng với những thay đổi là điểm mấu chốt cho sự thành công của mỗi cá nhân cũng như các doanh nghiệp. “Chuyển đổi số” là một keyword rất hot ở Việt Nam hiện nay, người người nhà nhà nhắc về chuyển đổi số.
Triết lí Agile cùng với các framework, phương pháp cũng như công cụ đặc thù có thể giúp các nhân, đội nhóm và doanh nghiệp trở nên hiệu quả hơn, năng suất hơn và đổi mới sáng tạo hơn.
Tuyên ngôn của Agile
http://agilemanifesto.org/
- “Cá nhân và sự tương tác quan trọng hơn quy trình và công cụ”
- “Phần mềm chạy tốt quan trọng hơn tài liệu đầy đủ”
- “Cộng tác với khách hàng quan trọng hơn đàm phán hợp đồng”
- “Phản hồi với sự thay đổi quan trọng hơn bám theo kế hoạch”
Agile không phủ nhận các giá trị bên phải, nhưng nó đề cao hơn các giá trị bên trái.
Nguyên tắc của Agile
Dựa trên 4 tuyên ngôn ở người ta đặt ra 12 nguyên tắc để áp dụng triết lí Agile
- Ưu tiên cao nhất là làm hài lòng khách hàng thông qua việc bàn giao sớm và liên tục các sản phẩm có giá trị.
- Agile luôn chào đón việc thay đổi yêu cầu, thậm chí rất muộn trong quá trình phát triển, các quy trình linh hoạt tận dụng sự thay đổi cho các lợi thế cạnh tranh.
- Thường xuyên delivery sản phẩm chạy tốt đến tay khách hàng trong khoảng thời gian ngắn ( vài tuần đến vài tháng ).
- Businesss và team develop phối hợp chặt chẽ với nhau hàng ngày.
- Xây dựng dự án xung quanh những cá nhân có động lực. Cung cấp môi trường và sự hỗ trợ cần thiết, tin tưởng họ để hoàn thành công việc.
- Phương pháp hiệu quả nhất để truyền đạt thông tin tới nhóm phát triển và nội bộ team đó là hội thoại trực tiếp.
- Phần mềm chạy tốt là thước đo chính của tiến bộ.
- Các quy trình linh hoạt thúc đẩy sự phát triển bền vững. Các stakeholder, nhà phát triển và user có thể duy trì một nhịp độ liên tục không giới hạn.
- Liên tục quan tâm đến kĩ thuật và thiết kế tốt để gia tăng sự linh hoạt.
- Đề cao sự đơn giản – coi trọng căn bản.
- Nhóm tự tổ chức, nguyên lí này được hiểu đơn giản rằng nhóm và các thành viên sẽ tự quyết định việc mình làm, tự cam kết và tự chịu trách nhiệm cho chất lượng công việc mình làm.
- Thường xuyên review đánh giá suy nghĩ về việc làm sao để trở nên hiệu quả hơn sau đó sẽ điều chỉnh thay đổi hành vi của mình phù hợp.
Các phương pháp Agile và mức độ phổ biến

Theo thống kê, Agile sẽ bao gồm 13 phương pháp, trong đó phần lớn đều sử dụng Scrum như một phương pháp tiếp cận cơ bản. Không những thế, nhiều người đã sử dụng kết hợp các loại phương pháp với nhau tạo nên các phương thức Agile mới. Trong seri này mình cũng sẽ trình bày về Scrum vì đó là phương pháp quen thuộc và mình làm việc nhiều nhất.
Đặc trưng của phương pháp Agile
Tính lặp
Một dự án sẽ được tiến hành trong các phân đoạn lặp đi lặp lại từ 1-4 tuần. Trong mỗi phân đoạn, nhóm dự án phải tiến hành thực hiện lập kế hoạch, phân tích các yêu cầu, triển khai và thử nghiệm để cho ra đời các phần nhỏ của sản phẩm
Tính tăng trưởng và tiến hoá
Các phần nhỏ của sản phẩm được cho ra cuối công đoạn thường đầy đủ, có khả năng chạy tốt và đã được kiểm tra, thử nghiệm cẩn thận. Theo thời gian, phân đoạn này tiếp nối phân đoạn kia, các phần nhỏ của sản phẩm sẽ được tích lũy, lớn dần lên cho tới khi toàn bộ yêu cầu của khách hàng được thỏa mãn.
Tính thích nghi
Kế hoạch sẽ liên tục được điều chỉnh kịp thời sao cho phù hợp với các phân đoạn ngắn của dự án. Nhờ đó, bạn sẽ có thể xử lý kịp thời những yêu cầu thay đổi của khách hàng hay những tác động của các vấn đề khách quan trong quá trình phát triển.
Nhóm tự tổ chức và liên chức năng
Một trong những đặc trưng của Agile là nhóm tự tổ chức và liên chức năng. Mỗi nhóm tự tổ chức sẽ chịu trách nhiệm từng mảng công việc riêng biệt theo mỗi phân đoạn của dự án. Bên cạnh đó, các nhóm này phải có khả năng phù hợp với công việc được giao để có thể hoàn thành nhiệm vụ thật tốt.
Quản lí tiến trình thực nghiệm
Thay vì lý thuyết qua tiền giả định, các nhóm trong mô hình Agile sẽ dựa vào dữ liệu thực tế để đưa ra các quyết định cho công việc. Ngoài ra, Agile còn hỗ trợ nhóm rút ngắn thời gian phải hồi và tăng tính linh hoạt. Nhờ đó, bạn sẽ có thể dễ dàng kiểm soát tiến trình và nâng cao hiệu suất làm việc.
Giao tiếp trực diện
Agile đánh giá cao việc trao đổi trực tiếp hơn là giao tiếp thông qua giấy tờ. Phương pháp Agile còn khuyến khích nhóm dự án trực tiếp nói chuyện với khách hàng để hiểu rõ điều họ đang cần. Bên cạnh đó, việc giao tiếp trực diện trong nội bộ nhóm cũng được Agile khuyến khích.
Phát triển dựa trên giá trị
Đặc trưng cuối cùng của phương pháp Agile là phát triển dựa trên giá trị. Điều này có nghĩa nhóm phát triển phải thường xuyên trao đổi với khách hàng để nắm được những yêu cầu có mức độ ưu tiên cao. Nhờ đó, dự án sẽ có được giá trị sớm nhất có thể.
Triển khai Agile từ đâu ?
Team Agile đòi hỏi ý thức trách nhiệm tự mỗi thành viên, sự trung thực và cam kết với các mục tiêu chung của đội nhóm. Chúng ta hãy bắt đầu bằng việc áp dụng những kĩ năng cơ bản của Personal Kanban cùng với tư duy Agile để nâng cao năng suất cá nhân, làm việc hiệu quả, kiểm soát căng thẳng.
Development cần trau dồi kiến thức, các kĩ thuật lập trình như TDD, Pair-Programing để nâng cao chất lượng phần mềm.
Triển khai Agile có tốn kém không ? Thật ra với vai trò là một member trong team, mình không biết câu trả lời sẽ là có hay không nhưng dưới góc độ cá nhân thì việc thực hành Agile có thể đơn giản là sắp xếp lại list công việc, xem thứ tự ưu tiên của các công việc đó. Còn với các tổ chức hoặc công ty thì mức độ đầu tư chắc sẽ phải to lớn hơn.
Tooltoy công cụ
Công cụ cũng chỉ trợ giúp một phần nào đó. Vấn đề quan trọng nhất vẫn là tư duy và việc apply các triết lí Agile như thế nào. Không nên quá phụ thuộc vào tool rồi cho rằng tôi đã áp dụng Agile. Nếu bạn ( hoặc team ) đang chưa có một tool để quản lí dự án thì đơn giản nhất chỉ là: bảng trắng, giấy note, bút viết. Xong!
Đương nhiên có điều kiện thì tooltoy sẽ tiện hơn rất nhiều. Hiện tại JIRA chắc là system management phổ biến nhất, bên cạnh đó còn có Trello, Asana,…
Khi nào Agile, khi nào không ?
Để xác định được khi nào thì ra quyết định kiểu gì, làm như thế nào chúng ta cần phân loại tình huống và dự án rồi mới đưa ra quyết định quan trọng.
Với các dự án rõ ràng về mặt mục tiêu tài liệu định hướng thì việc áp dụng Agile có thể chưa phù hợp. Nhưng với những dự án sản phẩm mới có những đặc điểm như:
- Thay đổi liên tục và không thể tiên lượng
- Không có câu trả lời đúng đắn, các khuôn mẫu phải làm, phải thử mới biết được
- Rất nhiều ý tưởng trái nghịch nhau
- Mọi người không biết những điều chưa biết
- Cần những tiếp cận sáng tạo
- Lãnh đạo dựa trên khuôn mẫu
Với những dự án có đặc điểm trên, Agile là một sự lựa chọn phù hợp.
Tổng kết
Bài viết cũng tương đối dài và tương đối nhiều lí thuyết. Hi vọng mọi người đã có thêm một chút hiểu về Agile. Trong các bài viết tiếp theo mình sẽ tập trung trình bày về Scrum, một phương thức triển khai Agile phổ biến nhất.