Phát triển phần mềm với Agile - Phần 1

Mình đang làm dự án gia công phần mềm với khách hàng Nhật Bản. Mô hình phát triển là sử dụng Agile, từng áp dụng cả Pair Programming hay eXtreme Progamming v.vv.. nhưng hiệu quả ko thực sự rõ rệt lắm. Tình cờ, khách hàng khi nói chuyện với mình về Product Management, đã khuyên mình tham khảo công ty Pivotal xem sao..

Pivotal là một công ty phát triển phần mềm và dịch vụ ở Mỹ, có vài sản phẩm khá nổi tiếng như Spring Framework, Cloud Foundry, Pivotal Tracker v.vv.. Các dự án trong Pivotal đều chạy theo mô hình Agile chuẩn, đạt hiệu suất cao như lý thuyết (nghe đồn vậy). Mong là sau khi đọc xong hết các bài viết của họ, mình có thể cải thiện đc chút gì đó về kiến thức bản thân để áp dụng vào thực tế.


Agile Software Development là gì?

Agile Software Development là một tập hợp các phương pháp hướng đến việc chuyển giao nhanh và liên tục sản phẩm có giá trị cho khách hàng. Mô hình này khuyến khích việc lập kế hoạch tốt, triển khai các chu trình nhỏ thông qua cộng tác chéo giữa các teams trong dự án.

Agile có thể áp dụng cho mọi doanh nghiệp (từ startup đến enterprise), mọi team (từ nhỏ đến lớn), và mọi loại dự án. Các tổ chức sử dụng Agile cần luôn sẵn sàng thích ứng với thay đổi và huấn luyện thường xuyên để phát triển.

Agile Software Development

Ưu điểm của Agile là gì?

  • Greater transparency

    Tính minh bạch cao được thể hiện ở việc tất cả các bên liên quan (testers, developers, designers, PM v.vv..) đều tham gia các buổi họp định kỳ và nắm được thông tin chức năng nào đang làm, chức năng nào cần hoàn thành.

  • Greater predictability

    Công việc được sắp xếp theo mức độ ưu tiên và thực thi trong từng chu trình ngắn (lý tưởng là 1-2 tuần), do đó các chức năng mới có thể chuyển giao liên tục và xác định được từ trước.

  • Greater flexibility

    Khi độ ưu tiên cần thay đổi, có thể ngay lập tức thêm mới và sắp xếp lại các stories trong backlog.

  • Focus on business values

    Các bên liên quan quyết định thứ tự các chức năng cần phát triển, từ đó mọi người đều hiểu rõ sản phẩm quan trọng nhất ở đâu.

  • Focus on users

    User stories được tạo phù hợp với mong muốn thực tế từ người sử dụng, các tính năng phát triển đều góp phần tăng giá trị cho sản phẩm.

  • Focus on quality

    Khi tất cả công việc đều được chia nhỏ để có thể quản lý và build liên tục, chất lượng sản phẩm sẽ được cải thiện nhờ việc kiểm thử và sửa lỗi nhanh chóng.

"Agile [is] now the default approach for new software development."

  • Al Hilwa - Program Director, Application Development Software, IDC

Để sử dụng Agile cần lưu ý những gì?

Để có thể chuyển từ mô hình truyền thống Waterfall sang Agile một cách thành công, đòi hỏi phải có sự thay đổi trong quan điểm về tiến trình công việc cũng như các kiến thức cơ bản về thuận lợi hay khó khăn khi ứng dụng vào thực tế. Nên có câu trả lời cho các câu hỏi sau trước khi quyết định lựa chọn Agile:

Team bạn đã thực sự sẵn sàng?

Agile cần sự hợp tác tích cực từ tất cả các bên liên quan trong dự án. Hãy giúp mọi người hào hứng với Agile, hãy giải thích về lợi ích mà mô hình này mang lại cho tổ chức, cho từng cá nhân. Hãy đập tan những suy nghĩ coi Agile chỉ là xu thế nhất thời.

Bạn đang dự định triển khai một mình?

Nếu là như vậy thì nên ngừng lại. Hãy tìm những người trong team bạn đã có kinh nghiệm và thích thú với Agile. Bắt đầu sử dụng Agile ở mức cơ bản và xem xét những trở ngại có thể sẽ ảnh hưởng đến khách hàng hay các teams khác ra sao. Lý tưởng nhất là bạn hãy thuê một chuyên viên về Agile để tư vấn xem nên bắt đầu thế nào và hướng đi đúng ra sao. Điều này sẽ giúp giảm thiểu rủi ro và triển khai lâu dài hơn.

Làm thế nào để mọi người rèn luyện được?

Bạn cần lên kế hoạch để rèn luyện cho team. Việc giảm thiểu quy trình có thể dẫn đến việc thực thi tồi tệ, vì vậy phương pháp luận của Agile cần phải được học và truyền đạt cho tất cả mọi người. Điều quan trọng hơn là hãy để mọi người luyện tập bằng cách tham gia dự án thực tế và tự rút ra được lợi ích của Agile bằng trải nghiệm.

Bạn đã chuẩn bị quy trình và công cụ chưa?

Bạn thông thạo công cụ quản lý dự án nào, liệu nó có phù hợp với Agile ko? Bạn đã sẵn sàng áp dụng Test Driven Development (TDD), Continuous Integration (CI), Continuous Deployment (CD) chưa? Bạn sẽ áp dụng cho cả design và UX teams chứ? Hãy chuẩn bị công sức và tâm lý sẵn sàng để triển khai cho toàn bộ tổ chức.

"Do or do not, there is no try."

  • Yoda

Mọi người đã sẵn sàng đối mặt với thay đổi?

Khi bạn bắt đầu triển khai Agile, không nghi ngờ gì về việc rất có thể mọi thứ sẽ trở nên chệch choạc. Mọi người sẽ tìm cách giải quyết vấn đề ở standup meeting, các yêu cầu về kỹ thuật cần điều tra bị chất đống, hay task được chỉ định luôn cho từng cá nhân v.vv.. Mỗi ngày trôi qua, bạn phải đối mặt với những thử thách và đi tìm phương hướng để vượt qua.