Làm thế nào để học cách ước tính tốt hơn? [đóng cửa]


42

Tôi hút theo ước tính. Khi ai đó hỏi tôi sẽ mất bao lâu, tôi thậm chí không dám đoán vì tôi sẽ hoàn toàn không biết gì. Thông thường tôi quá lạc quan, và có lẽ nên nhân dự đoán của tôi với một số yếu tố X lớn ...

Làm thế nào tôi có thể học để ước tính tốt hơn? Nó không được dạy tại trường đại học của tôi, và mặc dù chúng tôi có thời hạn cho tất cả các cuộc chuyển dạ, tôi không bao giờ nghĩ về việc một cái gì đó sẽ thực sự kéo dài bao lâu. Mà tôi nên. Vì lợi ích của mọi người (đặc biệt là của tôi).



Câu trả lời:


28

Tôi vẫn không giỏi về điều đó, nhưng tôi đã thấy rằng việc theo dõi thời gian bạn ước tính cho các nhiệm vụ và thời gian bạn thực sự mất bao lâu có thể là một trợ giúp lớn. Bằng cách đó bạn có thể có được một ý tưởng vững chắc về việc bạn thường đi bao xa. Phát hành phần mềm quản lý với theo dõi thời gian (Jira trong trường hợp của tôi) hoặc bảng tính có thể giúp ích rất nhiều cho việc này.

Tôi nghĩ nhiều hơn bất cứ điều gì đó là một điều kinh nghiệm.


1
Điều này. Đó là cách ước tính hữu ích nhất. Để trở nên tốt hơn, người ta có thể theo dõi thời gian cho các nhiệm vụ khi thực sự thực hiện chúng, vì vậy lần tới có thể đưa ra ước tính tốt hơn. Cấu trúc phân chia công việc là một khái niệm hữu ích cho việc này.
Tamás Szelei

3
Đây là một câu trả lời tuyệt vời. Tôi muốn nói thêm rằng, ngoài việc ghi chú các ước tính của bạn, có thể hữu ích khi viết một số loại "nhật ký", trong đó bạn lưu ý các quyết định quan trọng, các vấn đề bạn gặp phải và giải quyết, v.v. giảm 50% hoặc hơn, sau đó có thể hữu ích để điều tra lý do tại sao, và sau đó những "nhật ký" này sẽ giúp ích rất nhiều (xem trang 64-69 trong "Lập trình viên thực dụng" để biết thêm chi tiết về điều này). Ngoài ra, hãy cẩn thận với những người bạn hiển thị số của bạn; những người không hiểu những gì bạn đang làm có thể cố gắng sử dụng chúng để chống lại bạn.
Leif

Tôi làm những gì bạn làm - bằng tay. Về cơ bản, đó là Lập kế hoạch dựa trên bằng chứng ( en.wikipedia.org/wiki/Evidence-basing_Scheduling ), do Joel tiên phong & thực hiện trong Fogcux.com/fogormsz
Mawg 20/03/2015

18

Luật quản lý thời gian của Murphy: Để tìm hiểu xem một cái gì đó sẽ mất bao lâu, hãy tìm hiểu xem nó sẽ mất bao lâu và nhân đôi nó.

Sau đó, di chuyển lên đơn vị thời gian cao hơn tiếp theo. Vì vậy, chúng tôi phân bổ hai tuần cho một dự án một ngày.


2
Tôi ghét phải nói nó, nhưng đây có lẽ là số liệu đơn giản và hiệu quả nhất tôi từng thấy ở đây.
glenatron

3
Tôi đã được dạy thêm một và bình phương quy tắc. Nếu tôi nghĩ rằng nó sẽ mất một ngày, thêm một làm cho nó hai ngày, vuông làm cho nó 4 ngày. Tôi biết những người khác sử dụng di chuyển cường độ lên nhưng không tăng gấp đôi. vì vậy một ngày trở thành một tuần Hai tuần rưỡi trở thành hai tháng rưỡi, v.v ... Bất kể bạn giỏi đến đâu, bạn phải thêm phần đệm cho những điều chưa biết sẽ xảy ra.
old_timer

9

Bạn có thể học bằng cách làm chúng chung .

Tôi sử dụng Kế hoạch Poker . Đó là một kỹ thuật dựa trên sự đồng thuận để ước tính.

Ước tính của bạn phải được theo dõi và so sánh với những gì bạn đã làm một cách hiệu quả. Bạn sẽ nhận được Vận tốc .

Mỗi lần bạn ước tính một cái gì đó, nhân với vận tốc gần đây của bạn để có được ước tính chính xác .


Điều poker nghe có vẻ rất thú vị, bạn có thực sự làm IRL này như được mô tả trong liên kết của bạn không? Nó có giúp bạn tạo ra các ước tính chính xác hơn không?
dr Hannibal Lecter

Đúng. Điều này làm cho ước tính vui vẻ! Và nghiêm túc chính xác. Tất nhiên, bạn phải thực hành một chút, nhưng một khi bạn "hiểu được", bạn không thể ước tính bằng các phương pháp khác nữa.

Nó thực sự có âm thanh vui vẻ! :) Thật tệ là tôi sẽ không bao giờ có thể bán cái này trong công ty của mình: - /
dr Hannibal Lecter

@dr Hannibal Lecter: sử dụng thủ thuật cửa hàng thú cưng. Nói với họ rằng nó không dứt khoát, rằng bạn sẽ sử dụng nó chỉ để kiểm tra. Tin tôi đi, nó sẽ dứt khoát;)

9

Dự toán phần mềm của Steve McConnell (MS Press) là một bài đọc tốt.

Điều chính với ước tính phần mềm được tóm tắt bằng cách sau đây

Không có thông tin lịch sử, ước tính của bạn là vô ích.

Đây là một lý do tôi nghĩ tại sao các dự án lặp lại có nhiều thành công hơn các dự án thác nước theo giai đoạn lớn. Họ không cố gắng xây dựng kế hoạch trong một năm tại một thời điểm với rất ít thông tin khác ngoài một số voodoo hộp đen về những gì họ nghĩ nó nên được. Mỗi lần lặp lại, họ đang đánh giá lại / bổ sung và có một số lần lặp cuối cùng để dựa trên ước tính của họ.

Một vài điểm khác cần ghi nhớ:

  1. Nó sẽ chỉ nhận được chậm hơn . Áp dụng quy tắc 80/20 có nghĩa là công việc khó khăn hơn sẽ đến sau trừ khi quản lý dự án của bạn rất kỷ luật.
  2. Ước tính! = Lập kế hoạch. Ước tính là quá trình tìm ra những nỗ lực cần thiết để hoàn thành công việc. Lập kế hoạch là quá trình phù hợp với nó vào một lịch trình.
  3. 60% hiệu quả là về tất cả những gì bạn có thể hy vọng. 70% là không tưởng. Nếu bạn đang ước tính theo ngày, hãy xây dựng điều này. Nếu bạn ước tính theo giờ, đừng quên áp dụng nó sau.
  4. Nhớ đuôi dài . Ước tính là một phỏng đoán sơ bộ về việc "có thể" sẽ mất bao lâu để điều chỉnh cho một số mức độ rủi ro và ẩn số. Cái đuôi dài xuất hiện bởi vì số lượng công việc thực tế cần thiết sẽ không bao giờ nhỏ hơn 0. OTOH, thời gian tối đa sẽ chỉ bị giới hạn bởi thời gian bạn sẵn sàng dành cho nó trước khi từ bỏ. Như một ông chủ cũ của tôi đã nói "tất cả các ước tính là +/- x% và nó không bao giờ trừ".

Bạn có thể giải thích chỉ số 60% này đến từ đâu (và 70% -utopia) không? Có bài viết nào về chủ đề này có sẵn ở đâu đó không?
krokodilko

7

Tôi ngạc nhiên khi không ai đề cập đến kỹ thuật ước lượng theo kiểu PERT được mô tả trong The Clean Coder của Robert Martin . Trong phương pháp đó, bạn ước tính sẽ mất bao lâu cho 3 kịch bản: lạc quan ( O), danh nghĩa ( N) và bi quan ( P). Sau đó, thời lượng dự kiến ​​= (O+4N+P)/6và bạn có độ lệch chuẩn là (P-O)/6.

Điều này dường như hoạt động khá tốt và tôi đã sử dụng nó một vài lần khi quản lý thực sự quan tâm đến việc một cái gì đó có thể sẽ mất bao lâu.

Như những người khác đã nhận xét, tôi cũng đã ước tính bằng cách kiểm tra dữ liệu lịch sử ("Mất bao lâu để làm điều tương tự này?").

Nhưng phương pháp yêu thích của tôi là không thực hiện ước tính thời gian, và chỉ thực hiện ước tính điểm và có được vận tốc qua các lần lặp. Nếu một nhóm khá nhất quán trong việc định cỡ và hoàn thành công việc (câu chuyện của người dùng), thì bạn sẽ tiết kiệm được rất nhiều thời gian bằng cách thậm chí không hỏi mỗi việc sẽ mất bao lâu.

Ước tính giờ rất khó để có được đúng, và họ đòi hỏi rất nhiều công việc để chia mọi thứ thành các phần nhỏ đủ để đo lường hiệu quả. Và thậm chí sau đó họ hiếm khi sửa vì có quá nhiều biến số và chúng ta quên tính đến những thứ như bệnh tật, kỳ nghỉ hoặc thậm chí là phiền nhiễu.

Nếu tôi phải thực hiện ước tính giờ, tôi cố gắng chỉ thực hiện chúng cho các nhiệm vụ nhỏ trong một lần lặp. Tôi đo lường mọi thứ trong ước tính nửa ngày (4, 8, 12 giờ) trừ khi tôi biết nó có thể ít hơn. Nhưng tôi hiếm khi ước tính bất cứ điều gì ít hơn 1 giờ.


Kể từ khi trả lời câu hỏi này, tôi cũng đã chuyển nhiều hơn vào trại "không ước tính". Một số ý tưởng tuyệt vời đang ra khỏi đó.
Allan

5

Đầu tiên và quan trọng nhất, bạn phải xác định một quy trình và tuân theo nó. Bao gồm sửa đổi kế hoạch vào cuối mỗi giai đoạn của quy trình. Bạn cũng có thể sửa đổi quy trình, nhưng theo một cách có trật tự.

Thứ hai, làm một số loại thiết kế. Thiết kế là bước đầu tiên để lập kế hoạch, bạn không xây dựng một ngôi nhà mà không có bản vẽ.

Thứ ba, theo dõi thời gian (nỗ lực). Bạn ít nhất nên phân biệt:

  • Phân tích
  • Thiết kế
  • Kiểm tra đơn vị (bao gồm sửa lỗi)
  • Kiểm thử tích hợp (bao gồm sửa lỗi)
  • Kiểm tra chấp nhận, với người dùng (bao gồm sửa lỗi)

    Sẽ thật tuyệt nếu bạn đo lường nỗ lực sửa lỗi cho từng loại thử nghiệm, nhưng nó làm tăng thêm độ phức tạp, vì vậy bạn có thể thực hiện sau này.

Thứ tư, xác định các mục cơ sở chính để ước tính. Ví dụ:

  • Số lượng quy trình được tự động hóa (Phân tích)
  • Số lượng thực thể mô hình miền (Thiết kế)
  • Số lượng biểu mẫu và báo cáo (Mã)

Thứ năm, tương quan các mục cơ bản và nỗ lực. Ví dụ:

  • Nỗ lực phân tích = X man-hours / process để được tự động hóa
  • Nỗ lực thiết kế = Y man-hours / thực thể mô hình miền
  • Mã nỗ lực = Z man-hours / form (hoặc báo cáo); số lượng biểu mẫu = A * thực thể mô hình miền
  • Nỗ lực kiểm tra đơn vị = M% * Nỗ lực mã
  • Nỗ lực kiểm thử tích hợp = N% * Nỗ lực mã
  • Nỗ lực kiểm tra chấp nhận = P% * Nỗ lực mã

Thứ sáu, theo dõi hiệu suất và độ lệch so với ước tính cho từng dự án. Vì vậy, bạn có thể tinh chỉnh các yếu tố tương quan của bạn.

Thứ bảy, lặp lại và cải thiện. Bạn sẽ đạt được nhiều cái nhìn sâu sắc chỉ khi kết thúc dự án đầu tiên, đến lần thứ ba bạn sẽ cảm thấy thoải mái khi lập kế hoạch và ước tính.

Hãy xem http://en.wikipedia.org/wiki/Personal_Software_Process , nó thực sự hoạt động.


3

Bất cứ khi nào bạn gặp phải một vấn đề ước tính, hãy cố gắng chia chúng thành các phần nhỏ hơn. Sau đó xem nếu bạn đã thực hiện công cụ tương tự như các mảnh. Nếu bạn có, bạn đã có một ý tưởng công bằng về việc mỗi mảnh mất bao lâu. Nếu bạn không, bạn nên bắt đầu chủ động theo dõi thời gian thực hiện cho các loại nhiệm vụ khác nhau. Điều này sẽ giúp bạn trong các ước tính trong tương lai.

Tổng thời gian cần thiết sẽ nhiều hơn tổng của từng mảnh riêng lẻ, vì bạn cần một chút thời gian để tích hợp và thử nghiệm.

Nếu bạn chưa làm điều gì tương tự, có lẽ bạn có thể dựa vào kinh nghiệm của những người khác và ước tính từ họ. Đừng lấy cái này theo mệnh giá. Không có gì dạy bạn như kinh nghiệm.

Nó giống như bắn một mục tiêu. Các bức ảnh trước khi ước tính sẽ cho bạn biết bạn đánh dấu như thế nào, để bạn có thể sửa nó.


3

Tôi thấy dễ dàng nhất để thực hiện quá trình phân chia cho các nhiệm vụ tối thiểu như đã đề cập ở trên, thực hiện từng bước và sau đó tăng gấp đôi ước tính đó. Sau đó, tôi thêm chúng lại với nhau và thêm năm mươi phần trăm. Điều đó cho tôi một thời gian dự án gần đúng trong điều kiện lý tưởng. Nếu công việc thực tế sẽ diễn ra song song với những người khác thì nó sẽ cần lâu hơn. Nếu bạn sẽ phải chờ đợi người khác, hãy hy vọng họ sẽ mất gấp đôi thời gian bạn nghĩ. Chờ đợi nội dung hoặc phản hồi hoặc thông tin khác thường mất nhiều thời gian hơn dường như có thể.

Nơi tôi làm việc, chúng tôi sẽ đưa ra một trường hợp tốt nhất / trường hợp dự kiến ​​/ ước tính trường hợp xấu nhất cho từng bước của quy trình, điều này hữu ích như một hướng dẫn và cũng để đánh giá cách ước tính của bạn đã diễn ra.

Kỹ thuật này không bao giờ quá quan trọng ngoại trừ việc bạn cần có khả năng chống lại sự cám dỗ của lập trình viên để đánh giá thấp các nhiệm vụ, nhưng điều quan trọng là phải thận trọng khi bạn có thể giao một thứ gì đó. Nếu bạn mất bảy tuần để xây dựng một cái gì đó và bạn đã hứa tám tuần, bạn có thể đến sớm một chút và có vẻ tốt cho nó hoặc làm một số thử nghiệm bổ sung và yên tâm về độ tin cậy. Nếu bạn đã hứa sáu tuần, bạn có thể trông tệ ngay cả khi đó hoàn toàn không phải là lỗi của bạn. Nếu nghi ngờ, hãy đoán một cách bảo thủ.


1

Bạn có thể cố gắng xây dựng một hồ sơ theo dõi về ước tính là gì và thực tế cho các nhiệm vụ khác nhau để xây dựng đủ bản ghi để biết số nhân nào sẽ có cho những thứ cụ thể được lặp lại trong danh sách của bạn. Cấp này là một bài tập thử nghiệm và lỗi nhưng nó dường như hoạt động tốt đối với tôi. Cũng có điều gì đó được nói cho nhiều thử nghiệm trước khi mô hình nổi lên có lẽ. Điều này có khả năng tương tự như rất nhiều câu trả lời khác có thể nói rằng người ta có thể hiểu rõ, "Cứ làm đi!" vì đó thực sự là cách mà hầu hết chúng ta phát triển kỹ năng. Có phải là một nỗi đau lớn để xem làm thế nào một người có thể sai khi lập dự toán? Có, nhưng nếu ước tính tốt hơn thì cuối cùng mọi người cũng có thể hạnh phúc.


1

Nếu bạn có thể phân tách dự án thành các nhiệm vụ nhỏ hơn và thực hiện ước tính cho những dự án đó, bạn sẽ chính xác hơn tất cả. Bất kỳ nhiệm vụ lớn hơn một vài ngày nên được chia nhỏ hơn nữa. Nếu bạn không thể phá vỡ nó hơn nữa bạn có thể có một khoảng cách yêu cầu. Nếu bạn phải thực hiện ước tính dự phòng cho yêu cầu một dòng tốt ... không có gì thực sự có thể giúp bạn nhiều. Đáng buồn là rất nhiều cửa hàng làm việc theo cách này nhiều thời gian.


1

Thay vì viết một cuốn sách về nó, tôi sẽ chỉ đưa ra một lời khuyên nhỏ về cách sử dụng phương pháp ước tính "phá vỡ":

  • Chia bài tập của bạn thành các nhiệm vụ thành phần nhỏ hơn. Ước tính từng nhiệm vụ tốt nhất có thể.

  • Thêm một nhiệm vụ để lập kế hoạch và thiết kế (bao gồm những gì bạn đang làm bây giờ.) Ước tính nó.

  • Nếu bạn chưa có, hãy thêm một nhiệm vụ để "kết hợp các nhiệm vụ lại với nhau." Nhiệm vụ này có thể không hữu ích lúc đầu. Tuy nhiên, khi bạn sử dụng phương pháp ước tính "phá vỡ" này, luôn có những việc tốn thời gian để làm điều đó "nằm giữa các nhiệm vụ" và "kéo các nhiệm vụ lại với nhau". Điều này có thể là khó khăn để ước tính. Cố gắng hết sức.

  • Thêm một nhiệm vụ để thử nghiệm và tài liệu. Nhiệm vụ của bạn có thể không yêu cầu nhiều thử nghiệm và tài liệu, nhưng ít nhất bạn nên dành một chút thời gian để suy nghĩ về nó.

  • Thêm các ước tính nhiệm vụ để có được một ước tính tổng thể.

  • Đi trước và nhân tổng ước tính đó với hai. Điều này sẽ cho bạn thời gian đệm để:

    1. Hoàn thành những thứ mà bạn bỏ qua trong danh sách nhiệm vụ ban đầu của bạn
    2. Hoàn thành những điều mà bạn không thể biết cho đến khi tiến hành
    3. Kết hợp phản hồi từ người khác và thực hiện thay đổi
    4. Bị gián đoạn bởi những thứ khác đang diễn ra xung quanh bạn, như các cuộc họp
    5. Hoàn thành trước ước tính thường xuyên hơn đằng sau nó

Và cuối cùng, nhưng không kém phần quan trọng, đừng ngại phác thảo ước tính cho bản thân bạn có lẽ hoàn toàn sai. Đôi khi chỉ cần phác thảo mọi thứ ra, cho dù có khả năng chính xác đến mức nào, có thể giúp bạn bắt đầu trên con đường tìm hiểu ý nghĩa tốt hơn cho những gì liên quan.

Khi bạn càng ngày càng có nhiều kinh nghiệm, "yếu tố mờ nhạt" này có thể được điều chỉnh để phù hợp với phong cách cá nhân và môi trường làm việc của bạn.


1

Công thức hoạt động khi làm việc cho bản thân:

  1. phân tích các việc cần làm thành mức độ chi tiết 1 - 4 giờ. Tôi thấy rằng tôi thường chính xác với những

  2. "hệ số ẩn số": Nhân với hệ số 2 được nâng lên số lượng ẩn số. Tức là nếu bạn muốn phát triển một ứng dụng couchdb, nhưng bây giờ không biết gì về javascript và http .. thêm 2 ^ 2 dưới dạng nhiều yếu tố.

  3. yếu tố chuyển đổi ngữ cảnh: nhân với 1,5 nếu bạn sẽ làm việc trong môi trường hoàn hảo (ở nhà trong góc học tập, v.v.) hoặc 2,5 nếu bạn sẽ làm việc trong môi trường không hoàn hảo (văn phòng / nơi đông người, v.v.)

Tôi thấy điều này nằm trong khoảng +/- 20% thời gian thực tế !!


0

Tìm hiểu sự thiên vị của riêng bạn. Nếu ước tính cuối cùng của bạn quá thấp theo yếu tố hai, lần tới, hãy nhân đôi ước tính ban đầu của bạn. (Tất nhiên, luật của Hofstadter khiến bạn khó có thể làm điều đó đúng ...)

Cũng luôn luôn là một ý tưởng tốt để nhớ bao nhiêu công việc cần thiết sau khi phát hành lần đầu của công việc trước đó và thêm nó vào ước tính tiếp theo. Ví dụ: nhiệm vụ cuối cùng của bạn mất 2 tháng để hoàn thành, nhưng sau khi đi vào hoạt động, bộ phận hỗ trợ, hotfix và các thay đổi bổ sung đã khiến bạn mất thêm một tháng nữa, vì vậy, lần sau ước tính 3 tháng cho một nhiệm vụ tương tự.


0

Đối với người mở, hãy đọc "Kinh tế kỹ thuật phần mềm", của Barry Boehm và "Kiểm soát các dự án phần mềm" của Tom DeMarco. Sau khi bạn đã đọc và tiêu hóa cả hai, hãy đọc "Dự toán chi phí phần mềm với COCOMO 2" của Barry Boehm.

Đối với những gì tôi phải nói tiếp theo, nó sẽ giúp bạn RẤT NHIỀU một lớp xác suất và thống kê, thậm chí là một sách dạy nấu ăn cơ bản.

Không có ước tính là hoàn hảo. Có một số xác suất đến sớm, và một số xác suất đến muộn. Mô hình COCOMO chi tiết ban đầu của Boehm đã đưa ra dự đoán hóa ra trong vòng 30% kết quả thực tế, tốt hơn 60% thời gian. Điều đó tốt hơn rất nhiều so với những gì phổ biến khi ông viết và xuất bản cuốn sách.

Khi bạn đưa ra dự đoán tốt nhất của mình (và đó là tất cả ước tính), bạn sẽ bao gồm các xác suất đó. Nếu bạn kéo ước tính vào, bạn sẽ tăng xác suất bạn sẽ đến muộn. Nếu bạn tăng ước tính, bạn đang tăng xác suất rằng bạn sẽ đến sớm hoặc hoàn thành đúng hạn. Bao nhiêu bạn kéo nó vào hoặc để nó kiểm soát xác suất thay đổi như thế nào, và nhất thiết phải phụ thuộc vào các hình phạt là sớm hay muộn. (Chèn những câu chuyện kinh dị ở đây - và đã có RẤT NHIỀU trong số đó trong những năm qua!)

DeMarco giải quyết điều này ở một mức độ nào đó. Ông cũng chỉ ra rằng có một "khu vực bất khả thi": một số lịch trình quá chặt chẽ để được thực hiện, bất kể loại anh hùng nào được cố gắng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.