Agile – Đâu chỉ riêng trong phát triển phần mềm

Agile – Đâu chỉ riêng trong phát triển phần mềm

September 28, 2020 1 By Nam Vu

     Nếu bạn là một lập trình viên chắc hẳn bạn không hề xa lạ gì với thuật ngữ agile hay scrum. Nhìn chung nó là một phương pháp để phát triển phần mềm thôi.

Tuy nhiên, ở bài viết này mình lại muốn giới thiệu cho các bạn cách vận dụng phương pháp này trong quản lý cá nhân. Hi vọng nó sẽ giúp bạn nảy lên một ý tưởng giúp bản thân mình tốt hơn!   

Đầu tiên, dù không phải là một lập trình viên thì bạn cũng nên biết sơ qua Agile là gì đã nhỉ.   

Ban đầu, phát triển phần mềm thường được chạy theo mô hình thác nước (Waterfall) nó 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ễ.   Vấn đề nảy sinh khi phát triển phần mềm cần linh hoạt, khi đó agile ra đời. 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.

Ta có thể hiểu Agile là một tập rule, không định nghĩa một phương pháp cụ thể để đạt được những điều này, nhưng lại có nhiều phương pháp phát triển phần mềm khác nhau thỏa mãn và hướng theo các tiêu chí đó.   

Scrum là Là một thành viên của họ Agile. Scrum được xây dựng dựa trên lý thuyết quản lý tiến trình thực nghiệm (empirical process control), hay còn gọi là thực nghiệm luận (empiricism). Lý thuyết này chỉ ra rằng tri thức đến từ kinh nghiệm và việc ra quyết định được dựa trên những gì đã biết. Điều này sẽ giúp giảm thiểu rủi ro và tăng tính chính xác đặc biệt là trong môi trường phát triển phần mềm nhiều biến động.

Hơi khó hiểu nhỉ, mình sẽ đưa ra ví dụ đơn giản nhé!

Ví dụ đơn giản nhất cho khái niệm Scrum đó là những đàn chim di cư. Chúng không hề có kế hoạch chi tiết cho hành trình của mình. Nhưng vẫn vượt qua được hàng chục nghìn km mỗi năm qua những vùng đất xa lạ nhờ việc quan sát và thích nghi liên tục với điều kiện khí hậu thức ăn. Nơi trú ngụ của từng vùng…

Vì sao mình cảm thấy phương pháp này có thể áp dụng được trong phát triển bản thân?

     Hãy tưởng tượng, bạn có một kế hoạch học tập một môn học nào đó. Bạn có thể cứ cắm mặt vào học nơi này, nơi khác, rồi tra cứu tài liệu này tài liệu kia, phương pháp A rồi phương pháp B. Nhưng liệu đó có phải là cách hay khi đến sát ngày thi bạn mới phát hiện ra mình học sai chủ đề và quá lan man khiến cho bạn chẳng có một sợi dây liên kết nào giữa những kiến thức bạn học. Rồi bạn lại phải học lại từ đầu.   

Trong phần mềm hay thiết kế, mọi thứ thay đổi liên tục theo từng ngày, khách hàng vừa mới chốt lúc sáng thì họ cũng có thể thay đổi ngay buổi chiều. Bạn đã lỡ làm rồi thì biết phải làm sao. Đập đi làm lại ư.

Có lẽ bạn đã hình dung ra một chút mỗi liên hệ rồi đó nhỉ.   

Thực ra phương pháp này không xa lạ gì, nó chỉ là những chỉ mục, dàn ý, lộ trình, những mảng hay thành phần lớn được chia nhỏ ra để thực hiện một công việc nào đó trong quãng thời gian dài thành những nhiệm vụ theo này, theo giờ mà tổng quát vẫn bám vào mục tiêu cuối cùng được đặt ra từ đầu.

Bạn có thể biết móng của bạn (kiến thức cơ bản, kiến thức nền) của bạn đến đâu, cần bao lâu hoàn thành lộ trình học đó, bạn có đi sai hướng ngay từ đầu hay không?

Tiếp đến, khi học đến level cao hơn, bạn muốn rẽ nhánh sang một lĩnh vực con của môn học chuyên ngành đó theo sở thích mà không phải mất thời gian học một mớ hỗn độn không biết làm gì rồi lại chuyển ngành.

Ok, đến đây có lẽ bạn đã mường tượng ra được bạn sẽ phải làm gì rồi, hãy cùng đi vào bước đầu tiên nhé!

FDD (Feature-Driven Development): Về cơ bản thì bạn chia nhỏ mục đích lớn thành những phần nhỏ (features). Chú ý rằng việc chia này cực kỳ quan trọng giúp cho bạn định hướng được toàn bộ quá trình, tuy nhiên đừng lo ngại nếu về sau bạn muốn thay đổi sang ngã rẽ nào đó, bạn chỉ điều chỉnh các nhiệm vụ nhỏ bên trong là được


Sprint: Bạn có thể hiểu đây là một đơn vị quá trình mà bạn tự đặt ra (có thể là một tuần hay hai tuần hoặc một tháng). Bắt đầu Sprint với một ngày lên kế hoạch trong tuần hoặc tháng (cuộc họp) để ước lượng công việc, lập kế hoạch và xác định Sprint Goal. Buổi ngày lên kế hoạch (họp) này được gọi là Sprint Planning.

Daily Scrum: Sau buổi lên kế hoạch rồi thì với bắt đầu một ngày thực hiện nhiệm vụ bạn cần 15 phút để có thể nhìn lại nhiệm vụ ngày hôm trước của ban, ngày hôm nay bạn sẽ làm gì hãy liệt kê hết ra, và bạn có gặp khó khăn gì trong quá trình làm nhiệm vụ từ ngày hôm qua không hay nhiệm vụ sắp tới không? Điều này rất cần thiết nếu bạn cần sự giúp đỡ của thầy cô hay bạn bè cho môn học đó.

Sprint Review: Với việc lên kế hoạch hảng tuần hay hàng tháng ở bước sprint bên trên, thì với bước này bạn hãy dành một buổi để nhìn lại 2 tuần vừa rồi hay tháng vừa rồi mình đã hoàn thành được kế hoạch hay chưa, còn nợ nhiệm vụ nào không? Nhiệm vụ nào mình làm sai cần làm lại hay có thay đổi gì nếu tiếp tục nhiệm vụ đó hay không?

Sprint Retrospective: Đây là bước tương tự với sprint review bên trên tuy nhiên bước này lại chú trọng đến việc cải tiến cách thức thực hiện, công cụ giúp bạn có thể học tốt hơn, phương pháp trong sprint đó đúng hay chưa có cần bổ sung gì không? Đặc biệt, hãy dành ra một buổi retro để thư giãn, tự thưởng cho mình khi trải qua hết một khoảng thời gian tuân thủ đúng quy trình vừa rồi @@   

Cách làm việc theo Sprint sẽ được lặp đi lặp lại cho tới khi các hạng mục trong Mục tiêu chung (tất cả các features trong FDD được hoàn thành) khi bạn quyết định dừng mục tiêu này lại căn cứ theo tình hình thực tế.

Burn-down Chart (Biểu đồ đốt cháy): hướng tới việc theo dõi tiến độ và khả năng đạt được của một sprint. Nhìn vào biểu đồ này bạn có thể biết được từ giờ đến cuối tuần bạn có thể hoàn thành được mục tiêu trong spint hay không? khi đó sprint review bạn sẽ phải ghi chú lại là sprint planing tới phải bỏ bớt nhiệm vụ thời gian tiếp theo ra.

Hãy hình dung bạn đang đốt cháy thời gian hằng ngày, nếu đường biểu đồ vượt lên trên trục thoải thì bạn đang trễ tiến độ (bạn quá lười – cần chấn chỉnh ngay), còn nếu biểu đồ nằm dưới trục thoải thì hoặc là bạn làm việc (học tập) quá năng suất nên tự thưởng cho mình; hoặc bạn ước lượng nhiệm vụ này ở sprint planning khá cao (nó quá dễ so với trình độ hiện tại của bạn, điều này cần chỉnh lại ở sprint kế)

     Hiểu về Agile và các bước áp dụng nó vào quản lý cá nhân rồi. Dưới đây là các cách giúp bạn vận hành quản lý cả nhân còn tốt hơn nữa khi kết hợp chúng lại với nhau:

QUẢN LÝ THỜI GIAN…

Không có gì đáng tranh luận khi quản lý thời gian luôn là kỹ năng hàng đầu được nhắc đến trong những phương pháp quản lý nhằm tăng hiệu suất công việc cá nhân. Bởi thời gian là bất biến; bởi thời gian là vàng bạc. Dù bạn là một người lao động bình thường hay ông chủ của một tập đoàn lớn; dù bạn là một công dân trong thế giới của 1 hay 7 tỷ người; bạn vẫn chỉ có 24 giờ trong một ngày. Chiếm lĩnh thời gian tốt hơn giúp bạn dễ thành công hơn.Nguyên lý đứng sau việc quản lý thời gian là: Với cố định 24 giờ trong một ngày, sắp đặt công việc vào thời điểm hợp lý nhằm tối đa hoá số lượng công việc được thực hiện và giảm thiểu thời gian “chết” trong tổng thời gian hữu hạn là tiền đề của thành công.

… LÀ CHƯA ĐỦ

Nhưng nếu bạn chỉ thường xuyên sử dụng Calendar trên smartphone, bạn vẫn chỉ được coi là công dân kiểu mẫu, không hơn; bởi quản lý thời gian chỉ là một trong những kỹ năng tối thiểu nằm trong tập kỹ năng quản lý công việc hiện nay.

Điểm mấu chốt của vấn đề, dù thời gian của chúng ta là hữu hạn, số lượng và khối lượng công việc chúng ta cần làm không ngừng tăng lên. Và hậu quả tất yếu xảy ra là, bất kể kỹ năng quản lý thời gian của bạn tốt đến đâu, vẫn còn hàng loạt những công việc khác đang sẵn sàng chờ bạn sắp lịch và thực hiện. Cũng giống như trong lĩnh vực phát triển phần mềm, làm tốt việc quản lý thời gian thường là chưa đủ; khi chúng ta đã phát triển kỹ năng quan lý thời gian đến một mức độ nhất định, hiệu quả mang lại thường không cao với những cải tiến cục bộ.

Vậy nên, chúng ta cần tiếp cận vấn đề theo một cách nhìn khác.Có lẽ tôi cần nhấn mạnh rằng, với bất kỳ cách tiếp cận quản lý công việc nào, thì chỉ có thời gian là yếu tố duy nhất cố định. Thông tin chúng ta nhận được ngày càng nhiều lên, lượng việc chúng ta cần thực hiện mỗi ngày nhanh chóng thay đổi, nguồn lực của chúng ta cũng nhanh chóng thay đổi theo; chỉ có thời gian là không đổi. Tối đa hoá thời gian bằng cách sắp xếp và bám theo một lịch làm việc dày đặc bỗng chốc trở nên lỗi thời. Điều gì xảy ra nếu khách hàng của bạn đột ngột viếng thăm vào 2 giờ chiều? Bạn sẽ từ chối họ vì đó là khoảng thời gian bạn đã lập kế hoạch để lập trình hay sẽ chấp nhận phá vỡ kế hoạch? Điều gì xảy ra nếu bạn bỗng cảm thấy chán nản và mệt mỏi vào 2 giờ chiều khi còn một loạt những công việc đã được lên lịch? Quản lý thời gian theo phương pháp truyền thống bỗng chốc trở nên điên rồ. Bởi vậy, chúng ta cần sự linh hoạt hơn trong cách quản lý công việc thay vì bám sát một kế hoạch hay lịch trình sẵn có theo phương pháp quản lý thời gian truyền thống.

QUẢN LÝ NĂNG LƯỢNG

Thời gian không biến đổi, nhưng năng lượng của con người lại không phải như vậy. Đã bao giờ bạn nhận ra mình có một ngày xử lý hàng trăm công việc thành công một cách suôn sẻ, và một ngày khác lại không thực hiện được công việc nào?

Mỗi ngày chúng ta đều có 8 giờ làm việc, một giờ buổi sáng hay một giờ buổi chiều đều là 60 phút và giống nhau; nhưng tại sao lượng công việc được thực hiện tại 2 giờ vào 2 thời điểm khác nhau lại khác nhau đến vậy? Đáng tiếc, số lượng và đặc biệt là chất lượng các công việc lại không phải là một hằng số phụ thuộc tuyến tính vào thời gian; chúng phụ thuộc nhiều hơn vào năng lượng của bản thân. Năng lượng của mỗi người được hiểu là khả năng thực hiện công việc của họ tại một thời điểm bất kỳ, là tổng hợp của các yếu tố: sức khoẻ, cảm xúc, trí tuệ và tinh thần. Những yếu tố này được Tony Schwartz đưa ra trong một bài viết khá nổi tiếng trên Havard Business Review Quản lý năng lượng của bạn, không phải thời gian.Giờ đây, kỹ năng không chỉ dừng lại ở việc sắp đặt những công việc vào từng thời điểm cụ thể thông qua việc quả lý thời gian; chúng ta còn cần quản lý và duy trì nguồn năng lượng bản thân ở mức cao nhất, khiến công việc hiệu quả hơn.

S.M.A.R.T = Specific, Measurable, Achievable, Relevant, Time-Bound.

Specific (Cụ thể). Nếu công việc mông lung, làm sao chúng ta biết phải làm gì?Một trong những sai lầm chúng ta hay gặp phải là xác định công việc một cách mơ hồ; và mơ hồ nhất là việc chúng ta bước ra khỏi nhà vào buổi sáng chỉ với một công việc duy nhất: đi làm. Nhưng cụ thể đến mức lập trình chức năng A, gặp đối tác B… thì không nhiều người xác định được trước khi chúng ta bước chân ra khỏi nhà vào 8 giờ sáng.

Measurable (Đo được). Nếu công việc không đo được, làm sao chúng ta biết khi nào mình đã hoàn thành?Đây chính là yếu tố chúng ta dễ dàng bỏ qua và rồi vắt kiệt sức mình với một công việc mơ hồ; và mơ hồ nhất có lẽ là việc kiếm tiền. Nhưng nếu không định nghĩa rõ ràng việc kiếm 5 triệu hay 10 triệu thì bao giờ chúng ta sẽ dừng lại đây? Trở thành tỉ phú đô la dù sao cũng khoa học hơn kiếm được nhiều tiền.

Achievable (Khả thi). Nếu công việc không khả thi, làm sao chúng ta thực hiện?Chúng ta có thể nghĩ lớn, đặt ra những mục tiêu vĩ đại cho cuộc đời mình. Nhưng hãy lưu ý, đó chỉ là tầm nhìn; khi định nghĩa một công việc cụ thể, chúng ta cần chắc chắn rằng công việc đó khả thi tại thời điểm hiện tại hoặc tương lai gần. Gặp tổng thống Obama vào tuần sau để bàn về giải pháp chống khủng bố là một công việc bất khả thi với 99.999% dân số thế giới; tại sao không bắt đầu bởi việc gửi thư cho tổng thống Obama để nêu quan điểm của mình về giải pháp chống khủng bố vào tuần sau? Thật bất ngờ là công việc đó khả thi với ít nhất 30% dân số, những người sử dụng Internet; và chúng ta có thể thực hiện.

Relevant (Liên quan). Nếu công việc không có sự liên quan (tới cuộc sống, những mục tiêu khác), chúng ta thực hiện công việc có ý nghĩa gì?Đây là điểm đặc biệt quan trọng, bởi trong thế giới cá nhân, chúng ta có thể có hàng trăm việc để làm mỗi ngày, hãy lựa chọn đúng công việc cần thiết.

Time-Bound (Có thời hạn). Nếu công việc không giới hạn thời gian, khi nào nó được bắt đầu và kết thúc?

Quá dài cho một bài viết rồi! Mình cùng nhau tối ưu một cách hiệu quả nhé!

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.
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ẽ.–

P/s: Một phần bài viết được trích trong cuốn Agile Y của tác giả Nguyễn Văn Hiển