Ước lượng là đánh giá định lượng về công sức cần thiết để hoàn thành một tác vụ, phát triển một tính năng hoặc bàn giao toàn bộ dự án. Trong phát triển di động, ước lượng được sử dụng để lập kế hoạch sprint, xác định chi phí và quản lý kỳ vọng của khách hàng. Theo Project Management Institute, 2024, sai số ước lượng trong giai đoạn đầu dự án có thể lên tới 100%, khiến ước lượng trở thành một trong những kỹ năng khó nhất trong phát triển.
Điểm chính
Ước lượng (từ tiếng Anh estimate — đánh giá) là dự đoán về lượng thời gian hoặc công sức cần thiết để hoàn thành một tác vụ. Trong phát triển di động, ước lượng có thể được biểu thị bằng giờ, ngày, story points hoặc giá trị tiền tệ. Mục đích của ước lượng không phải là dự đoán chính xác, mà là giảm sự không chắc chắn để ra quyết định.
Ước lượng là dự báo có sai số. Cam kết là lời hứa hoàn thành tác vụ vào một ngày cụ thể. Sự khác biệt rất quan trọng: ước lượng nói “có thể 5 ngày”, cam kết nói “chúng tôi sẽ làm trong 5 ngày”. Các nhà quản lý thường nhầm lẫn hai khái niệm này, biến ước lượng thành thời hạn không có sai số.
Quá trình ước lượng cũng quan trọng không kém kết quả của nó. Khi nhóm thảo luận về ước lượng của một tác vụ, các yêu cầu ẩn, sự phụ thuộc và rủi ro được hé lộ. Ngay cả khi con số cuối cùng không chính xác, cuộc thảo luận giúp tất cả người tham gia hiểu được tác vụ. Do đó, các phương pháp ước lượng tập thể (Planning Poker) hiệu quả hơn phương pháp cá nhân.
Có nhiều phương pháp ước lượng, mỗi phương pháp phù hợp với các giai đoạn dự án và mức độ chi tiết khác nhau. Việc chọn phương pháp phụ thuộc vào dữ liệu có sẵn và độ chính xác yêu cầu.
| Phương pháp | Loại | Độ chính xác | Khi nào sử dụng |
|---|---|---|---|
| Planning Poker | Chuyên gia, tập thể | Cao (trong sprint) | Ước lượng tác vụ cho sprint |
| T-Shirt sizing | Chuyên gia, nhanh | Trung bình | Ước lượng sơ bộ epic |
| Ước lượng tương tự | Dựa trên lịch sử | Trung bình | Tác vụ tương tự trong quá khứ |
| Ba điểm (PERT) | Xác suất | Trên trung bình | Tác vụ có độ không chắc chắn cao |
| Tham số | Dựa trên công thức | Phụ thuộc vào dữ liệu | Tác vụ lặp lại có thể đo lường |
Planning Poker là phương pháp ước lượng phổ biến nhất trong Agile. Mỗi lập trình viên nhận một bộ thẻ với các số Fibonacci (1, 2, 3, 5, 8, 13, 21). Sau khi thảo luận về tác vụ, tất cả cùng lúc cho thấy thẻ của mình. Nếu ước lượng khác nhau, lập trình viên có ước lượng thấp nhất và cao nhất giải thích lý do, sau đó bỏ phiếu lại. Phương pháp này loại bỏ thiên lệch quyền lực và cho ước lượng chính xác hơn.
T-Shirt sizing là ước lượng sơ bộ theo kích cỡ áo phông: XS, S, M, L, XL, XXL. Phương pháp này được sử dụng để ước lượng nhanh các tác vụ lớn (epic) trong giai đoạn đầu khi chi tiết chưa rõ. Sau đó, mỗi tác vụ như vậy được phân rã và ước lượng trong Planning Poker. T-Shirt sizing mất 5-10 phút mỗi tác vụ nhưng chỉ cho biết thứ tự độ lớn.
PERT sử dụng ba ước lượng: lạc quan (O), bi quan (P) và có khả năng nhất (M). Ước lượng cuối cùng được tính bằng công thức: (O + 4M + P) / 6. Phương pháp này tính đến sự không chắc chắn và cho kết quả thực tế hơn so với ước lượng đơn lẻ. PERT đặc biệt hữu ích cho các tác vụ có rủi ro cao hoặc công nghệ mới.
Độ chính xác ước lượng phụ thuộc vào giai đoạn dự án và lượng thông tin đã biết. Ước lượng càng sớm thì sai số càng lớn — điều này bình thường và cần được tính đến trong kế hoạch.
Hình nón không chắc chắn (Cone of Uncertainty) là mô hình mô tả cách sai số ước lượng giảm dần khi dự án tiến triển. Ở giai đoạn ý tưởng, sai số là 400% (một tác vụ có thể mất 1 đến 4 tháng). Đến giai đoạn sprint, sai số là 20% (1-1,2 tháng). Hiểu mô hình này giúp không đòi hỏi ước lượng chính xác ở giai đoạn đầu.
Ước lượng tương đối (theo story points) chính xác hơn ước lượng tuyệt đối (theo giờ) vì con người so sánh tác vụ tốt hơn là ước lượng thời gian. “Tác vụ này phức tạp gấp đôi tác vụ kia” là nhận định đáng tin cậy hơn “tác vụ này sẽ mất 8 giờ”. Ước lượng tương đối không phụ thuộc vào một lập trình viên cụ thể và duy trì độ chính xác khi thay đổi người thực hiện.
Độ chính xác ước lượng có thể được cải thiện thông qua cách tiếp cận có hệ thống, thảo luận tập thể và phân tích sai lầm trong quá khứ. Có một số thực hành đã được chứng minh.
Bất kỳ tác vụ nào ước lượng hơn 2 ngày đều phải được phân rã thành các tác vụ con. Nguyên tắc: nếu một tác vụ không thể ước lượng với độ chính xác trên 50%, thì nó quá lớn. Hãy chia nó thành các bước, mỗi bước có thể hiểu và ước lượng được. Sau khi phân rã, tổng ước lượng thường lớn gấp 1,5-2 lần so với ước lượng ban đầu.
Duy trì lịch sử ước lượng và so sánh với công sức thực tế. Ví dụ: “các tác vụ ước lượng 3 story points trung bình mất 4 ngày, không phải 2”. Sử dụng velocity của nhóm để dự báo: nếu nhóm hoàn thành 20 story points mỗi sprint, đừng lập kế hoạch 30. Phân tích độ chính xác ước lượng trong quá khứ là bài tập tốt nhất cho kỹ năng ước lượng.
Neo là hiệu ứng tâm lý khi ước lượng đầu tiên được đưa ra ảnh hưởng đến tất cả người tham gia. Để tránh neo trong Planning Poker, tất cả cùng lúc cho thấy thẻ của mình, không phải lần lượt. Hiệu chỉnh là so sánh thường xuyên ước lượng với kết quả thực tế: sau 10-20 sprint, nhóm học cách ước lượng chính xác hơn nhờ phản hồi.
Mỗi tác vụ chứa rủi ro tiềm ẩn: lập trình viên ốm, vấn đề với API, thay đổi yêu cầu. Thêm hệ số điều chỉnh rủi ro vào ước lượng của bạn: cho tác vụ rủi ro cao, nhân với 1,5-2; cho rủi ro thấp, 1,1-1,2. Minh bạch cho khách hàng thấy những rủi ro nào đã được tính đến và chúng ảnh hưởng thế nào đến tiến độ.
Sai lầm ước lượng lặp lại ở hầu hết các nhóm, bất kể mức độ trưởng thành. Biết những sai lầm này là bước đầu tiên để sửa chữa chúng.
Sai lầm phổ biến nhất là ước lượng theo kịch bản tốt nhất: “nếu mọi thứ hoàn hảo, chúng tôi sẽ làm trong 3 ngày”. Trong thực tế, không có gì hoàn hảo: lỗi, câu hỏi về yêu cầu, tác vụ phụ thuộc. Giải pháp: ước lượng theo kịch bản có khả năng nhất, không phải lạc quan. Sử dụng PERT để tính đến sự biến động.
Khi quản lý nói “chúng ta cần nó vào thứ Sáu”, lập trình viên vô thức điều chỉnh ước lượng theo thời hạn đó. Ước lượng dưới áp lực luôn bị đánh giá thấp và dẫn đến trễ hạn. Giải pháp: ước lượng phải đến trước thời hạn, không phải ngược lại. Đầu tiên nhóm ước lượng, sau đó các bên thống nhất về tiến độ.
Độ phức tạp của tác vụ (cần bao nhiêu suy nghĩ) và thời gian (cần bao nhiêu làm) là các số liệu khác nhau. Một tác vụ có thể đơn giản nhưng tốn thời gian (dựng 10 màn hình) hoặc phức tạp nhưng nhanh (tìm lỗi trong mã cũ). Story points thường ước lượng độ phức tạp, còn thời gian được suy ra từ velocity của nhóm.
Một lập trình viên không làm việc 8 giờ liên tục cho một tác vụ: họp, đánh giá mã, giúp đỡ đồng nghiệp và công việc hành chính tiêu tốn 30-50% thời gian làm việc. Chuyển đổi ngữ cảnh phải được tính đến trong ước lượng: thực tế, một lập trình viên viết mã 3-4 giờ mỗi ngày.
Câu hỏi thường gặp
Phát triển là một quá trình sáng tạo với độ không chắc chắn cao. Không giống như xây dựng hay sản xuất, nơi mỗi bước đều được biết trước, trong CNTT mỗi tác vụ là duy nhất. Những điều chưa biết không thể biết (unknown unknowns) là nguyên nhân chính của sự thiếu chính xác. Ngay cả nhóm giàu kinh nghiệm cũng sai trong 30-50% ước lượng. Điều này bình thường và cần được tính đến trong kế hoạch.
Story points tốt hơn cho lập kế hoạch sprint vì chúng tương đối và không phụ thuộc vào người thực hiện. Giờ cần thiết cho hợp đồng và báo cáo bên ngoài nhưng kém chính xác hơn. Sự kết hợp tối ưu: tác vụ được ước lượng bằng story points, và thời hạn được chuyển đổi qua velocity của nhóm thành ngày dương lịch.
Đối với tác vụ với công nghệ chưa biết, trước tiên hãy sử dụng Spike (nghiên cứu có giới hạn thời gian). Sau khi nghiên cứu, nhóm hiểu được độ phức tạp và có thể đưa ra ước lượng thực tế. Áp dụng hệ số nhân 2-3 cho ước lượng thông thường và thêm 50% dự phòng cho những khó khăn không lường trước.
Đưa ra bảng phân rã — chia tác vụ thành các tác vụ con với ước lượng riêng. Giải thích thời gian bao gồm những gì: phát triển, kiểm thử, đánh giá mã, tài liệu. Đề xuất các phương án thay thế: giảm phạm vi, đơn giản hóa chức năng hoặc chia thành nhiều giai đoạn. Không bao giờ giảm ước lượng mà không thay đổi yêu cầu.
Ước lượng lại cần thiết khi có thông tin mới về tác vụ: phát hiện yêu cầu bổ sung, tìm thấy hạn chế kỹ thuật hoặc thay đổi ưu tiên. Trong sprint, các tác vụ không được ước lượng lại — trọng tâm là hoàn thành. Giữa các sprint, backlog được ước lượng lại trong quá trình grooming.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm