Làm thế nào bạn có thể ước tính thời gian cho các nhiệm vụ chủ yếu bao gồm tìm ra một vấn đề?


56

Mặc dù nhà phát triển có kinh nghiệm có thể ước tính thời gian triển khai mã sẽ mất bao lâu khi mô hình và vấn đề mà mã đang giải quyết được hiểu rõ, làm thế nào bạn có thể ước tính tốt khi, trong khi mục tiêu cuối cùng được hiểu rõ, thực hiện là 95% lý thuyết / giải quyết vấn đề và có số lượng thực hiện rất nhỏ?

Công việc của tôi thường bao gồm các nhiệm vụ để hoàn thành các mục tiêu được xác định rõ ràng, tuy nhiên tôi phải tìm cách đạt được mục tiêu đó và cho đến khi tôi hiểu được giải pháp, tôi không rõ những rào cản bổ sung nào có thể có. Cụ thể hơn, tôi thường làm việc trên các công cụ xử lý mã tự động hoặc tạo mã. Khi giải pháp được giải quyết hoàn toàn và công cụ được hoàn thiện, nó sẽ trực tiếp thực hiện 95% các thay đổi thực tế rất nhanh. Tuy nhiên, tôi không có cách nào để ước tính có bao nhiêu vấn đề bổ sung có thể phải được giải quyết để làm cho công cụ tạo hoặc phân tích xử lý các trường hợp cạnh không lường trước được.

Với mục đích lập kế hoạch, công ty của tôi muốn biết rõ hơn về việc sẽ mất bao lâu, nhưng vì tôi không biết có bao nhiêu vấn đề có thể xảy ra trong khi giải quyết từng bước của giải pháp. Tôi không chắc làm thế nào tôi có thể tiếp cận để đưa ra một ước tính tốt hơn.


Những loại ước tính bạn đang đưa ra? Nếu tôi hỏi bạn "Tôi muốn một tính năng XYZ cho máy khách ABC", bạn sẽ đưa ra loại câu trả lời nào? Lưu ý rằng bất kỳ câu trả lời nào tôi đưa ra đều bị ảnh hưởng nặng nề bởi Ước tính phần mềm: Làm sáng tỏ nghệ thuật đen

Tôi đặc biệt đang cố gắng ước tính lượng thời gian cần thiết để hoàn thành nhiệm vụ. Vì vậy, nó sẽ là một cái gì đó như "Loại bỏ tất cả một số loại mã cụ thể" hoặc "Thay đổi tất cả mã làm một cái gì đó như XYZ để thay vào đó hoạt động như ABC."
AJ Henderson

Ok ... vậy nếu tôi yêu cầu bạn "Thay đổi chức năng của XYZ để nó thực hiện ABC" ... bạn sẽ đưa ra loại câu trả lời nào? Bạn có nói "Có thể một tuần" hoặc bạn nói "5 ngày" hay bạn nói "trong khoảng từ 1 ngày đến 10 ngày, tùy thuộc vào những gì tôi tìm thấy khi tôi đào sâu vào nó?"

Tôi thường cố gắng đưa ra ước tính trong khoảng từ 4 ngày đến 8 ngày (loại chính xác mong muốn), mặc dù thường thì sẽ thực tế hơn khi nói điều gì đó như 4 ngày và 3 tuần. Tôi đang cố gắng tìm ra cách thu hẹp phạm vi.
AJ Henderson

1
@gnat Cảm ơn bạn đã giải thích, tuy nhiên tôi tin rằng câu hỏi của tôi đã rõ ràng vì các câu trả lời khác dường như hiểu những gì đang được hỏi và tôi thực sự không thấy bất kỳ cách nào câu hỏi có thể được suy ra là một bản sao của câu hỏi được đánh dấu. Vì vậy, tôi cảm thấy một nhận xét là đủ và thay đổi thêm sẽ không có lợi cho câu hỏi.
AJ Henderson

Câu trả lời:


41

Trước khi tôi đi quá xa, hãy để tôi nói rằng Dự toán phần mềm: Làm sáng tỏ nghệ thuật đen là một tài nguyên tuyệt vời cho những người nhìn và suy nghĩ về các ước tính. Cả hai hình ảnh dưới đây là từ cuốn sách đó là cốt lõi nếu các ý tưởng được trình bày sau đây.

Như bạn đã lưu ý, ước tính là một phần quan trọng để có thể dự đoán và lên kế hoạch chính xác cho công việc. Không có ước tính làm cho doanh nghiệp mù về việc một cái gì đó sẽ mất bao lâu. Không có gì lạ khi doanh nghiệp có một ý tưởng hoàn toàn sai lầm về việc mọi thứ sẽ diễn ra trong bao lâu - điều họ nghĩ là dễ dàng mất sáu đến tám tuần và điều được cho là khó khăn là một buổi chiều thứ sáu.

Điều đầu tiên là đưa ra một ước tính. Bản thân một ước tính không phải là một con số duy nhất - đó là một cam kết. "ABC sẽ mất bao lâu" -> "Khoảng 5 ngày" nghĩa là khoảng 5 ngày. Tuy nhiên, một ước tính tốt là một phạm vi mà bạn tự tin 90% rằng bạn sẽ có nó trong phạm vi đó. Nếu bạn muốn nói "Tôi tin tưởng 90% rằng sẽ mất 1 và 5 ngày" thì hãy nói điều đó. Đừng làm việc từ "Tôi nghĩ rằng sẽ mất từ ​​1 đến 10 ngày, vì vậy 5 ngày có lẽ là trung bình" - đó không phải là ước tính và bạn sẽ sai 50% thời gian.

Chà, 50% trở lên, lập trình viên là những người đánh giá thấp khét tiếng về thời gian thực hiện nhiệm vụ.

Hãy xem xét hình nón của sự không chắc chắn:

Hình ảnh từ http://www.construx.com - bài viết đầy đủ tại http://www.construx.com/Th think_Leadership / Sách / The_Cone_of_Uncertcellence /

Nhận ra rằng ước tính đầu tiên trong phạm vi đó là 16 lần. Điều này giống như nói "Tôi nghĩ rằng sẽ mất từ ​​một buổi chiều đến hai tuần" - nhưng bạn chưa biết. Khi bạn tiến lên với thiết kế một chút, phạm vi thu hẹp xuống còn 4x. Điều này không có nghĩa là sẽ mất một tuần, điều đó có nghĩa là thay vào đó bạn sẽ nói "sau khi xem xét điều này một chút, sẽ mất từ ​​ba tuần" - vâng, ước tính đã tăng lên, nhưng cũng là phạm vi ước tính đã đi xuống.

Với mỗi ước tính bạn đưa ra, bạn cần chắc chắn 90% rằng ước tính đó nằm trong phạm vi đó. Bạn có thể sai - 10% thời gian nó sẽ rơi ra khỏi phạm vi đó.

nhiều cách để ước tính quy mô của các dự án. So sánh nó với các dự án trước đây, sử dụng proxy (tôi nghĩ rằng sẽ mất 1000 dòng mã sẽ mất nhiều thời gian để viết), sử dụng các điểm chức năng (để chuyển đổi thành LỘC ...), lấy ước tính từ một số người và sau đó tinh chỉnh nó lặp đi lặp lại ... một số công việc cho một số dự án, một số công việc cho các dự án khác.

Một chương rất quan trọng trong cuốn sách này mà tôi đã đề cập ở đầu là # 23 liên quan đến chính trị của ước tính và giao dịch với các nhà quản lý và giám đốc điều hành.

Chìa khóa để ước tính là quá trình lặp lại tinh chỉnh nó sau khi làm việc với nó một chút.

Đưa ra một ước tính quá chính xác quá sớm trong quá trình có thể rất dễ bị lỗi. Nếu bạn không chắc chắn về điều đó, hãy đưa ra ước tính rộng và sau đó quay lại với ước tính khác sau một khoảng thời gian để hiểu sâu hơn về vấn đề và có thể phác thảo cách bạn sẽ thực hiện nó, xem xét bạn đã viết bao nhiêu mã vấn đề tương tự cuối cùng và các yếu tố khác sẽ ảnh hưởng đến ước tính.


Ước tính đòi hỏi một số suy nghĩ - không đưa ra các ước tính cuff. Chúng thường có những lỗi rất lớn liên quan đến chúng so với những gì nó cần khi bạn nghĩ về nó một chút.

Từ Làm thế nào để trả lời khi bạn được yêu cầu ước tính?

Nói gì khi được hỏi về Ước tính

Bạn nói "Tôi sẽ lấy lại cho bạn."

Bạn hầu như luôn nhận được kết quả tốt hơn nếu bạn làm chậm quá trình và dành thời gian trải qua các bước chúng tôi mô tả trong phần này. Ước tính được đưa ra tại máy pha cà phê sẽ (như cà phê) trở lại ám ảnh bạn.

Từ Chương 4 của Dự toán phần mềm:

Hình 4-8 Lỗi trung bình từ các ước tính vòng bít

Lưu ý rằng trong điều này, các ước tính sau khi xem xét một chút sẽ ít có hệ thống và dễ bị lỗi hơn so với ước tính ngoài vòng bít. Đừng làm mất các ước tính cuff. Hãy ngồi xuống và suy nghĩ về nhiệm vụ và ước tính nó sau một chút suy nghĩ về nó.


1
Câu trả lời này rất thú vị và có nhiều công đức, nhưng có lẽ là trả lời một câu hỏi về việc ước tính nhiều nhiệm vụ dựa trên thực hiện hơn là câu hỏi làm thế nào để ước tính sẽ mất bao lâu để có một sóng não ....
Michael Shaw

@Ptolemy dù bằng cách nào - có thể là triển khai hoặc khái niệm, là ước tính của nó. Tôi có thể ước tính sẽ mất bao lâu để tôi tự tin 90% rằng phạm vi bao gồm kết quả cuối cùng sẽ là bao nhiêu. Nó có thể là một phạm vi rất rộng, nhưng đó cũng là một ước tính - quá nhiều người đưa ra ước tính "6-8 tuần" và sau đó bỏ lỡ ước tính đó vì nó quá hẹp - họ đã tin tưởng 30% thay vì tin cậy 90%. Điều này liên quan đến kỹ năng ước tính, sàng lọc lặp lại và những cạm bẫy phổ biến với việc ước tính bất kỳ nhiệm vụ nào vì đó là những kỹ năng đầu tiên cần thiết để giải quyết vấn đề.

15

Ông chủ : AJ, Chúng tôi có 3 con chó, 2 con thỏ, máy bắn đá và một nữ tu. Chúng ta cần tìm cách đưa cả 7 (vâng, máy phóng cũng vậy) qua một bức tường cao 20 feet và xuống hồ ở phía bên kia mà không cho chó ăn bất kỳ con thỏ nào, và không bị chết đuối. Sẽ mất bao lâu để bạn đưa ra giải pháp?

Hãy xem, vấn đề ước tính sẽ mất bao lâu để giải quyết vấn đề là nó khiến những người khác nhau mất một khoảng thời gian khác nhau. Nếu bạn có lịch sử giải quyết các vấn đề tương tự, bạn có thể ước tính dựa trên thời gian bạn đã mất bao lâu trước đó. Nếu bạn không, thì bạn không ước tính, bạn chỉ đang đoán.

Hơn nữa, vấn đề thậm chí có thể không có một giải pháp chấp nhận được. Hoặc có lẽ giải pháp sẽ yêu cầu ủy quyền thêm có thể phá hủy toàn bộ dự án. Hoặc có lẽ giải pháp thay đổi toàn bộ bản chất nhận thức của vấn đề để giải pháp trở nên hoàn toàn không cần thiết.

Đạo đức của câu chuyện là, nếu bạn không có đủ thông tin để đưa ra ước tính hợp lý, thì không . Chưa. Có thêm thông tin. Nghiên cứu thêm. Thông thường, hoàn toàn ổn khi nói, "Tôi sẽ liên lạc lại với bạn sau 2 ngày với một số con số vững chắc hơn."

Khi thiết kế giải pháp cho khách hàng của tôi, tôi sẽ không ký hợp đồng cho đến khi tôi có đủ bản thiết kế chung để tôi biết giải pháp sẽ như thế nào và dự án sẽ mất bao lâu. Điều này có nghĩa là tôi có nguy cơ đã thực hiện công việc thiết kế ban đầu mà tôi không được trả tiền (nếu dự án không hoàn thành), nhưng điều đó tốt hơn là có nguy cơ bị thanh toán dưới mức đáng kể cho công việc đang được thực hiện .


9
Trong trường hợp này, thiết kế dường như là 90% công việc. Và nói rằng "Tôi sẽ đưa ra ước tính cho bạn sau khi tôi hoàn thành 90% công việc" hiếm khi khiến ai đó hài lòng.
Móż

1
Làm thế nào về "Thiết kế là 90% công việc và tôi sẽ không biết sẽ mất bao lâu cho đến khi thiết kế hoàn thành. Có thể cung cấp cho bạn một phạm vi gần đúng ngay bây giờ, bắt đầu thiết kế và cập nhật cho bạn các thay đổi đối với ước tính khi tôi tìm hiểu thêm về giải pháp? "
Rob Baillie

Nói rằng 'đó là một vấn đề phức tạp, chúng tôi đang nghiên cứu một vài ý tưởng để giải quyết nó. Với tư cách là một nhóm, chúng tôi sẽ xem xét những ý tưởng này vào tuần tới và một phần của đánh giá đó sẽ là khoảng thời gian cho các giải pháp khác nhau. Bạn có muốn có mặt tại cuộc họp kỹ thuật đó không?
Michael Shaw

4

Tôi sẽ đề nghị bạn thử một cái gì đó giữa các câu trả lời của tylerlMichaelT bằng cách sau:

  • chia công việc sẽ được thực hiện trong 3 hoặc 4 giai đoạn. Các giai đoạn nên:
    1. Phân tích vấn đề
    2. Tạo mẫu giải pháp
    3. Giải pháp thế giới thực
    4. Đánh giá đầu ra (kiểm tra)
  • chỉ cung cấp ước tính cho giai đoạn 1 (phân tích) dựa trên kinh nghiệm của bạn hoặc trên các giai đoạn 1 + 2 (phân tích + nguyên mẫu) cho quản lý của bạn. Sau đó, cung cấp cho họ ước tính cho các giai đoạn 3 + 4 khi hoàn thành giai đoạn 1 và 2 (hoặc ít nhất là đủ nâng cao để bạn có thể tin tưởng vào ước tính của mình).

Lý do đằng sau là bạn biết theo kinh nghiệm rằng bạn cần X ngày để phân tích một cơ sở mã nhất định (có thể tùy thuộc vào kích thước của nó) và có một bộ công cụ cơ bản hoặc tập lệnh đang chạy (và có thể không thành công). Sau đó, số lượng lỗi sẽ cung cấp cho bạn một số thông tin về độ khó thực tế của nhiệm vụ trong tay.

Điều này có thể không chính xác như những gì quản lý muốn, nhưng tôi tin rằng sẽ luôn tốt hơn khi đưa ra các ước tính mà bạn sẽ thực sự đáp ứng.


+1 Bạn có thể không biết điều gì sẽ mất bao lâu, nhưng bạn có thể nói "Hãy dành thời gian X để suy nghĩ về nó và tôi sẽ quay lại với bạn" - một giờ, một ngày, một tuần, bất cứ điều gì.
Rory Hunter

1

Vì câu hỏi này chủ yếu là về các loại công việc nghiên cứu, hỏi các nhà phát triển phần mềm là một cách tiếp cận dũng cảm, một số liệu phổ biến là nhà phát triển phần mềm mất gấp đôi thời gian ước tính của họ có thể là một nhà phát triển tốt. Tuy nhiên, điều đó nói rằng, các nhiệm vụ nghiên cứu (và thiết kế kiến ​​trúc) là một phần của lập trình và thường bị bỏ qua / giảm thiểu. Họ cũng thường khó ước tính.

Câu hỏi đầu tiên tôi sẽ tự hỏi mình, đây có phải là một vấn đề có thể được giải quyết? Đây không phải là một vấn đề trí tuệ hay sức mạnh não bộ, mà là một trong những thực tế thực tế. Trừ khi bạn ở trong thế giới của những bức ảnh mặt trăng của Google, trong đó thất bại là kết quả mong đợi, thực tế khó khăn là tôi sẽ được mong đợi sẽ cung cấp điều này , bất kể điều này xảy ra. Một nguyên tắc cơ bản dường như là chúng ta đã biết 90% giải pháp cần là gì chưa?

Câu hỏi thứ hai tôi sẽ hỏi, những gì khác sẽ hữu ích để biết trong suy nghĩ về giải pháp? Đây thực sự là một cách kiểm tra hai lần để chúng ta thực sự biết đủ để đưa ra một giải pháp sẽ được chấp nhận. Nó có thể tạo ra một loạt các nhiệm vụ tìm kiếm thực tế giúp xác định rõ hơn giải pháp cần là gì, mỗi giải pháp thường khá dễ xác định và ước tính.

Câu hỏi thứ ba là, ai là người phù hợp nhất trong nhóm cho loại vấn đề này? Bất cứ ai nhận được nhiệm vụ này sẽ hương vị kết quả với phong cách riêng của họ. Đưa ra loại vấn đề này cho một lập trình viên có 10 triệu câu hỏi khi bắt đầu một nhiệm vụ, sau đó biến mất và đưa ra một cái gì đó lần đầu tiên (mặc dù chậm) có thể là một lựa chọn tốt hơn là đưa cho lập trình viên nhanh chóng thực hiện , nhưng khi có vấn đề, nó chỉ được phát hiện ở cuối quá trình.

Sau đó, nhiệm vụ thực tế sẽ là suy nghĩ về các giải pháp, triển khai và phương pháp khả thi, và có một thang thời gian cố định mà họ cần báo cáo lại.

Khi họ báo cáo lại, sau đó bạn có một lựa chọn về việc có được một bộ giải pháp khả thi rộng hơn, tiếp tục triển khai giải pháp hoặc phản ánh, vì giải pháp vẫn chưa được xác định rõ ràng


1

Với những câu hỏi nghiên cứu trong đó không rõ ràng có câu trả lời nào không, hãy để một ý tưởng rõ ràng về những gì cần phải làm, tôi thường đề xuất dành x lượng thời gian cho nó như một sự khởi đầu.

"Tôi không biết điều này có khả thi hay không, nhưng tôi có thể dành hai ngày để nghiên cứu nó. Điều đó có lẽ sẽ không cho chúng tôi một giải pháp, nhưng có lẽ tôi sẽ có thể loại trừ một số điều và có lẽ tôi sẽ có một ý tưởng những bước tiếp theo cụ thể có thể là gì và loại đầu tư thời gian nào có nghĩa là gì. Sau đó, chúng tôi có thể quyết định liệu có hợp lý để thực hiện một bước nữa hay không. "

Vì vậy, đặt sự không chắc chắn theo hướng khác - ước tính là chính xác độc đáo (tôi sẽ dành hai ngày), nó chỉ là rất không xác định những gì sẽ đạt được sau đó.

Timeboxing, về cơ bản.

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.