จะตอบอย่างไร“ เมื่อไรจะเสร็จ?”


9

เราทุกคนมีปัญหาที่พิสูจน์ได้ยากที่จะแก้ไขและแก้ไขการทำงานผ่านรหัสที่คลุมเครือและฟังก์ชั่นที่แปลกประหลาด ช้า ๆ อย่างมีเหตุผลทำงานในแบบของคุณผ่านการพยายามหารูปแบบข้อผิดพลาดข้อผิดพลาด กระบวนการนี้ใช้เวลาและลูกค้ามักจะไม่เข้าใจปัญหาได้ง่าย

หนึ่งคำตอบเมื่อถามคำถามว่า "จะทำเมื่อไหร่?" โดยเฉพาะอย่างยิ่งเมื่อลูกค้าอาจไม่เข้าใจความซับซ้อนโดยธรรมชาติของการพัฒนาซอฟต์แวร์


3
วิธี Blizzard หรือ Valve: เมื่อเสร็จแล้ว
DeadMG

5
"มันขึ้นอยู่กับว่าฉันจะถูกรบกวนบ่อยแค่ไหนจากคนที่ถามว่าเมื่อไหร่
Ingo

"เมื่อทำเสร็จแล้วคุณจะไม่สามารถเร่งการปรุงอาหารและเขียนโค้ดได้ดี"
Gilbert Le Blanc

คำตอบ:


24

คุณตอบคำถามโดยสุจริต

คุณบอกพวกเขาว่ามันเป็นปัญหาที่ยากการแก้ปัญหาไม่ชัดเจนและคุณไม่แน่ใจว่าจะใช้เวลานานแค่ไหนในการแก้ไข สัญญาว่าจะอัปเดตพวกเขาในความคืบหน้าของคุณทุก [กรอบเวลา] เพื่อให้พวกเขารู้ว่าคุณกำลังทำงานอยู่และแน่นอนส่งการอัปเดตให้พวกเขา


1
+1 และฉันจะเพิ่มสิ่งนี้ซึ่งคุณเพิ่มด้วยตามการคาดคะเนที่ดีที่สุดของคุณกับสิ่งที่คุณรู้คุณคาดหวังว่าจะแล้วเสร็จภายใน [กรอบเวลาเสร็จสิ้น] และเพิ่มคำเตือนที่ว่าเวลาจริงที่จะทำให้เสร็จสมบูรณ์ เหตุผล] ความซื่อสัตย์นั้นดีที่สุดเสมอและลูกค้าของคุณมีแนวโน้มที่จะทำงานร่วมกับคุณมากขึ้นหากคุณจัดการกับพวกเขาโดยไม่ต้องใช้คำพูดพังพอนความจริงครึ่งหรือโกหกทั้งหมด
S.Robins

7
@ S.Robins: อันตรายจากการให้การประมาณการที่ดีที่สุดคือมันมีแนวโน้มที่จะถูกรายงานขึ้นไปโดยไม่มีข้อแม้
Michael Borgwardt

1
ฉันจะให้ค่าประมาณสำหรับส่วนของโดเมนปัญหาที่คุณรู้ "ฉันจะรู้มากขึ้นเมื่อฉันตรวจสอบxและสามารถอัปเดตคุณในตอนนั้น"
James Snell

10

นักพัฒนาเข้าใกล้ปัญหาที่ซับซ้อนโดยแยกย่อยเป็นปัญหาย่อย ๆ และแก้ปัญหาแยกกัน

ในโลกที่เหมาะการแก้ปัญหาจะซับซ้อนปัญหาและคุณจะสามารถในเวลาที่กำหนดในการย่อยสลายลงในรายชื่อของปัญหาเล็ก ๆ1เพื่อn , สำหรับการประเมินในแต่ละครั้งคือตรงไปตรงมาให้ เวลาที่ต้องใช้ในการแก้ปัญหาที่ซับซ้อนเริ่มต้นจะเป็น:

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยDเป็นกระบวนการสลายตัวของมันเอง

ในโลกแห่งความจริงปัญหาเดียวคือt ( D ) จะใหญ่กว่าเวลาที่คุณใช้แก้ไขปัญหาเล็ก ๆ ในคำอื่น ๆ เพื่อที่จะได้รับการสลายตัวของปัญหาในระดับนี้คุณต้องแก้ปัญหาด้วยตนเอง

คุณยังสามารถ:

  • แยกงานที่ได้รับ (การแก้ปัญหา) ออกเป็นชิ้นเล็ก ๆ แต่ละอันยังเป็นปัญหาที่ซับซ้อน

  • ประเมินเวลาที่คาดหวังสำหรับแต่ละก้อนและความเสี่ยงที่เกี่ยวข้อง

    ตัวอย่างเช่นภารกิจที่ 1 ต้องใช้ประมาณ 5 ชั่วโมง แต่มีความเสี่ยงที่จะถูกบล็อกการทำมันสูงดังนั้นให้ 12 ชั่วโมงตามที่คุณคาดหวังให้กับลูกค้า

  • ประเมินการพึ่งพาและวิธีที่มีผลต่อเวลา

    ตัวอย่างเช่นภารกิจที่ 19 ต้องใช้เวลา 2 ชั่วโมงและความเสี่ยงต่ำมากจนคุณสามารถบอกได้ว่าเป็นเวลา 2 ชั่วโมงอย่างแน่นอน ไม่ใช่ 1. ไม่ใช่ 3. แต่ภารกิจ 19 ขึ้นอยู่กับงาน 24: งาน 24 อาจส่งผลกระทบต่องาน 19 ในวิธีที่คุณจะต้องเขียนรหัสของงาน 19 ใหม่โดยใช้วิธีการอื่น

  • ให้รายละเอียดทั้งหมดเหล่านั้นกับลูกค้าของคุณ อย่าให้ผลรวม

จุดสุดท้ายเป็นสิ่งสำคัญ หากคุณให้ผลรวมสมมติว่า 192 ชั่วโมงลูกค้าเชื่อว่าเป็นตัวชี้วัดที่แม่นยำมากและเวลาที่คุณจะใช้คือตั้งแต่ 189 ถึง 195 ชั่วโมง

หากคุณให้รายละเอียดแทน

  • ลูกค้าที่ใส่ใจจะเข้าใจว่าไม่ใช่ 192 ชั่วโมง ใช้เวลา 192 ชั่วโมงหากทุกอย่างผิดพลาดเนื่องจากความเสี่ยงที่กำหนดระหว่างการประเมิน นอกจากนี้ยัง 238 ชั่วโมงถ้าทุกอย่างแย่ลงกว่าเดิม นอกจากนี้ยังใช้เวลา 85 ชั่วโมงหากทุกอย่างโอเค

  • สำหรับลูกค้าที่ไม่สนใจเขาจะไม่อ่านคำตอบของคุณในทุกกรณี สิ่งที่เขาต้องการคือตัวเลขเพื่อที่จะตำหนิคุณในภายหลัง โดยการให้คำตอบอย่างละเอียดเขาจะไม่อ่านคุณรู้ว่าเขาไม่สามารถขอเวลาที่จะใช้อีกครั้ง: คุณตอบแล้ว เขาไม่สามารถตำหนิคุณในภายหลังได้เนื่องจากเขาไม่ได้อ่านคำตอบเพื่อคำนวณผลรวม


"ในโลกแห่งความจริงปัญหาเดียวคือ t (D) จะใหญ่กว่าเวลาที่คุณใช้แก้ไขปัญหาเล็ก ๆ ": การใช้สิ่งนี้กับวิธีการแบบเปรียว (เช่น SCRUM) นี่หมายความว่าคุณต้องการเวลามากขึ้น สำหรับการนำไปใช้งานจริงของเรื่องราวของผู้ใช้
Giorgio

ไม่ใช่ 192 ชั่วโมงหรือ 238 ชั่วโมงหรือ 85 ชั่วโมง มันคือค่าทั้งหมดเหล่านี้แต่ละค่ามาพร้อมกับความน่าจะเป็นที่แน่นอน
JensG

4

สิ่งที่คุณคาดว่าจะไม่ลืมที่จะรวมกฎหมายของ Hofstadter : มันมักจะใช้เวลานานกว่าที่คุณคาดไว้แม้เมื่อคุณคำนึงถึงกฎหมายของ Hofstadter


ใช่และนั่นคือเหตุผลหลักว่าทำไมวิธีการที่ซับซ้อนส่วนใหญ่มักจะเสียเวลา คุณประมาณค่าที่ไม่รู้จักได้อย่างไร โดยการเดา รู้ว่ามันเป็นสิ่งที่น่าอัศจรรย์ยิ่งกว่านั้นคือการใช้การวิเคราะห์ความไม่แน่นอนบางอย่างกับการประมาณค่าของคน ๆ หนึ่งดูเหมือนว่าเป็นทักษะที่ไม่ค่อยมีคนใช้มาก่อน
JensG

1

โดยทั่วไปฉันใช้สูตรที่ปรับเปลี่ยนจาก CPM / PERT มันเป็นแบบนี้:

Mn + Mx + C(T) / 2 + C, where
Mn is the minimum number of hours you think it will take,
Mx is the maximum number of hours you think it will take,
T is the typical number of hours it takes,
and C is a confidence factor from 1 - 3 based on how much you've done similar things.

(ฉันไม่แน่ใจว่าจะทำการจัดรูปแบบคณิตศาสตร์แฟนซีทั้งหมดได้อย่างไรถ้ามีคนต้องการแก้ไขสิ่งนี้เพื่อสิ่งนั้นให้รู้สึกฟรี)

So, if you think:
Mn = 60  hours
Mx = 180 hours
T  = 100 hours
C  = 2
Then: 60 + 180 + 2(100) / 4 = 110 hours.

ฉันเน้นว่ามันอาจแตกต่างกันอย่างมีนัยสำคัญขึ้นอยู่กับว่าโครงการไป หากคุณประเมินโครงการของคุณใหม่ทุกสองสามวันคุณสามารถจัดหาการอัปเดตรายสัปดาห์ได้ มันไปไกลต่อความพึงพอใจลูกค้าหงุดหงิด :)


0

การอธิบายช่วงเวลาที่คลุมเครือให้กับผู้ใช้ที่ไม่ใช่ด้านเทคนิคนั้นยาก สิ่งนี้เป็นจริงทั้งในระยะสร้างสรรค์ของโครงการและเมื่อติดตามข้อผิดพลาดที่น่ารำคาญ ในทั้งสองกรณีแบบดั้งเดิม "ย่อยสลายงานชิ้นเล็ก" ไม่ทำงานเช่นกัน

งานต้นฉบับมุ่งเน้นไปที่กรณีหลังดังนั้นเรามาดูกันดีกว่า หากคุณไม่สามารถบอกเวลาได้ให้บอกผู้ใช้ว่าคุณจะลองทำอะไรและจะกลับไปที่ใด เมื่อคุณไปถึงจุดกึ่งกลางบนไทม์ไลน์ที่กำหนดด้วยตนเองให้อัปเดตอีเมลสั้น ๆ และซื่อสัตย์ อย่างน้อยหนึ่งชั่วโมงก่อนถึงกำหนดส่งคำตอบอย่างเป็นทางการของคุณ ตอนนี้คุณมีความน่าเชื่อถือ หากปัญหายังไม่ได้รับการแก้ไขอย่างน้อยคุณกำลังส่องแสง อาจดูเหมือนเป็นการเสียเวลา แต่ไม่ใช่


0

เนื่องจากคุณไม่สามารถอธิบายถึงสิ่งกีดขวางบนถนนที่ไม่รู้จักและความประหลาดใจที่คาดไม่ถึงจึงเป็นเรื่องยากที่จะประเมินด้วยความมั่นใจ ไอเดีย:

  • ลองใช้ช่วง - "ฉันแน่ใจว่าจะใช้เวลาอย่างน้อย N วัน (เช่น 3) แต่อาจใช้เวลานานถึง 4N"
  • ขอการสนับสนุนจากวิศวกรอาวุโสมากขึ้นในการประมาณและป้องกันการประมาณการ
  • ทำงานในการวนซ้ำสั้นลง (สไตล์ Agile / Scrum) เพื่อสร้างรหัสขั้นต่ำที่เพิ่มมูลค่าทางธุรกิจ (เพิ่มความมั่นใจและความไว้วางใจ) จากนั้นทำซ้ำ
  • เรียนรู้ทักษะการเจรจาต่อรองจากหนังสืออย่างคลาสสิกไปถึงใช่ (http://www.amazon.com/gp/aw/d/0143118757)

0

สำหรับการพัฒนาใหม่โดยเฉพาะการพัฒนาที่คล่องตัว:

"ความสมบูรณ์แบบสำเร็จไม่ใช่เมื่อไม่มีอะไรจะเพิ่มเติมอีกต่อไป แต่เมื่อไม่มีอะไรเหลือให้นำออกไป" - Antoine de Saint-Exuper

หากคุณประเมินความพยายามและเวลาในการแก้ไขข้อผิดพลาดที่เกือบจะเป็นไปไม่ได้ที่จะสร้างข้อผิดพลาดในระบบที่ซับซ้อนมากจนแทบจะไม่มีนักพัฒนาที่มีความรู้เกี่ยวกับระบบอย่างใกล้ชิด


0

โดยปกติฉันจะบอกความจริงกับพวกเขา ฉันจะบอกพวกเขาว่าพวกเขาไม่รู้ตอนนี้และฉันอาจมีความเข้าใจที่ดีขึ้นในหนึ่งสัปดาห์ จากนั้นฉันก็จะส่งลูกบอลที่มี squiggles มาให้พวกเขาในขณะที่คุณสามารถใส่ลงในกระดาษเพื่อแสดงว่ามันเป็นความรู้สึกที่เดาได้ หากพวกเขาเริ่มจับตาดูคุณเพียงแค่เริ่มทุกประโยคด้วย "เป็นไปได้ ... " โดยปกติแล้วทุกคนที่ฉันทำอะไรให้มีความสุขกับ "กลับมาตรวจสอบในอีกหนึ่งสัปดาห์หรือมากกว่านั้น แต่ตอนนี้ฉันสามารถพูดได้ประมาณ 2 เดือน" หรืออะไรทำนองนั้น


0

กระบวนการซอฟต์แวร์ส่วนบุคคล (PSP) มุ่งเน้นไปที่การปรับปรุงการประมาณการ สิ่งนี้สามารถทำได้โดยการบันทึกงานอย่างมีระเบียบวินัย นี่เป็นสาระสำคัญที่ค่อนข้าง "เร่ง" ส่วน "ประสบการณ์" ของการประเมินเนื่องจากคุณจะมีข้อมูลจริงเกี่ยวกับงานทั่วไป แน่นอนอาชีพนี้ยังต้องการวิธีการแก้ไขปัญหาเฉพาะหลายอย่าง แต่จากประสบการณ์ของฉันการประมาณการดีกว่าหลังจากใช้ PSP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.