# 50: Học Cách Ước Tính

Là một lập trình viên, bạn phải có khả năng đưa ra các ước tính cho quản lí, đồng nghiệp, và người dùng về các công việc được giao cho bạn, như thế họ sẽ có cách kế hoạch cụ thể, hợp lí về thời gian, giá cả, công nghệ, và các nguồn cung cấp khác cần cho công việc của họ.

Để có năng lực ước tính thì chắc chắn bạn phải học vài kĩ thuật ước lượng. Điều cơ bản đầu tiên là bạn phải học được ước lượng là gì, và chúng được sử dụng với mục đích gì — nó có vẻ khá kì quặc khi nhiều nhà phát triển và người điều hành vẫn không thực sự biết điều này.

Sau đây là một cuộc trao đổi điển hình giữa nhà quản lý dự án và lập trình viên:

  • PM: Anh có thể cho tôi biết thời gian 📅 cụ thể để phát triển tính năng xyz hay không ?
  • Dev: Một tháng.
  • PM: Một tháng là quá lâu! Chúng ta chỉ có một tuần thôi.
  • Dev: Tôi cần ít nhất ba tuần.
  • PM: Tôi có thể cho anh tối đa hai tuần.
  • Dev: Quyết định vậy nhé.

Cuối cùng, lập trình viên đưa ra những “ước tính” phù hợp với nhà quản lí. Nhưng bởi vì đó là “ước tính” của người lập trình, nên họ phải chịu trách nhiệm cho chúng. Để hiểu được cuộc đối thoại trên có vấn đề gì, chúng ta phải tìm hiểu ba định nghĩa — estimate, target, và commitment:

  • Estimate là sự tính toán hoặc đánh giá gần đúng về giá trị, số lượng, định lượng, hoặc mức độ của một thứ gì đó. Việc này có nghĩa là đưa ra những đánh giá thực tế dựa trên thông tin có được và kinh nghiệm trước đây — bạn nên bỏ qua những hy vọng và mong muốn trong khi tính toán. Đồng thời, việc ước tính này không mang tính chính xác, ví dụ, một nhiệm vụ phát triển không thể được ước tính kéo dài trong 234.14 ngày.
  • Target là mục tiêu kinh doanh mong muốn, ví dụ, “Hệ thống phải hỗ trợ đồng thời ít nhất 400 người dùng.
  • Commitment là một lời hứa cung cấp chức năng cụ thể đến một mức độ chất lượng nhất định vào một ngày hoặc sự kiện rõ ràng. Một ví dụ có thể là “Chức năng tìm kiếm sẽ có thể sử dụng sau lần ra mắt sản phẩm tới.”

Estimates, targets, và commitments hoàn toàn độc lập với nhau, nhưng targetscommitments phải được dựa trên estimates. Theo ghi chép của Steve McConnell, “Lí do cơ bản của việc ước tính phần mềm không phải là dự đoán kết quả của dự án; nó được dùng để xác định rằng liệu mục tiêu của dự án có đủ tính thiết thực để điều khiển dự án đạt đến kết quả đó hay không.

Do đó, mục đích của việc ước tính là làm cho sự quản lí dự án đạt tiêu chuẩn và việc lên kế hoạch trở nên khả thi, cho phép các bên liên quan đến dự án (stakeholders) thực hiện việc cam kết dựa trên mục tiêu thực tiễn.

Những gì mà nhà quản lí thực sự yêu cầu lập trình viên trong cuộc đối thoại phía trên là đưa ra lời cam kết dựa trên mục tiêu bất thành văn của nhà quản lí, chứ không phải là để được cung cấp sự ước tính. Sau này khi bạn được yêu cầu để đưa ra ước tính, hãy chắc chắn rằng những người có liên quan họ biết mình đang nói về vấn đề gì, và dự án của bạn sẽ có cơ hội thành công cao hơn. Nào, đã đến lúc để học một vài kĩ thuật…