การประมาณราคาเวลาใน codebase แบบเก่า


86

เมื่อเร็ว ๆ นี้ฉันเริ่มทำงานกับโปรเจ็กต์ที่มีการย้ายแอพพลิเคชั่นแบบเสาหินเก่าไปสู่สถาปัตยกรรมแบบไมโครเซอร์วิส

Legacy codebase นั้นยุ่งเหยิงมาก('รหัสสปาเก็ตตี้')และมักจะเป็นฟังก์ชั่นที่เรียบง่าย (เช่นชื่อ "multiplyValueByTen") ต่อมาเผยให้เห็นตัวเองว่า

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

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

ฉันจะเข้าใกล้สถานการณ์แบบนี้ได้อย่างไร

ในขณะที่ฉันเข้าใจอย่างสมบูรณ์แบบว่าการปรับโครงสร้างรหัสดั้งเดิมทำงานอย่างไรคำถามของฉันไม่ได้เกี่ยวกับ แต่เกี่ยวกับการให้คำตอบที่สมจริงกับ "ใช้เวลานานแค่ไหนในการปรับโครงสร้าง / เขียนใหม่ส่วน X"


37
ประมาณการด้วยระยะขอบกว้างไม่ใช่ด้วยค่าเดียว เช่น 5 ถึง 15 วัน
Richard Tingle

32
@JuniorDev: ทำไมคุณคิดว่ามันเป็น "ที่ยอมรับไม่ได้สำหรับหัวหน้าทีมที่ไม่ใช่ด้านเทคนิค"? เขาอาจจะไม่ชอบคำตอบของคุณ แต่ถ้าคุณไม่สามารถประมาณค่าได้ดีกว่ามันก็มักจะบอกคนตรงแทนที่จะพยายามทำให้เขาพอใจในตอนนี้ด้วยการประเมินที่ต่ำเกินไปและบอกเขาหลังจาก 5 วันขอโทษเราเพิ่งทำ งานถึง 30%
Doc Brown

13
"สิ่งที่สมเหตุสมผลอาจดูเหมือนจะเป็นรหัสจริงๆให้สังเกตทุกสาขาและเรียกใช้ฟังก์ชั่นอื่น ๆ แล้วประเมินราคาเวลา แต่จริงๆแล้วมันมีความแตกต่างเล็กน้อยระหว่างการบันทึกรหัสเดิมและการเขียนลงในเวอร์ชันใหม่" - hahahahahahahahahahahahahahahahahahahahah ฮ่าฮ่า หึ ดังนั้นมันอาจดูเหมือนว่า แต่เมื่อคุณล้างรหัสดั้งเดิมบางอย่างปรากฎว่าปัญหาที่คุณจัดการกับปัญหาที่คุณไม่เคยได้ยินมาก่อนในกรณีที่คุณไม่เคยพิจารณา หรือแก้ไขบั๊กที่อื่น หรือเป็นบั๊ก แต่บั๊กที่ส่วนอื่น ๆ ของรหัสอาศัยนั้นมีอยู่
Yakk

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

27
6 ถึง 8 สัปดาห์ตามที่เราทุกคนรู้
Matthieu M.

คำตอบ:


111

อ่าน "Clean Coder" ของ Bob Martin (และ "Clean Code" ขณะที่คุณอยู่ในนั้น) ต่อไปนี้มาจากหน่วยความจำ แต่ฉันขอแนะนำให้คุณซื้อสำเนาของคุณเอง

สิ่งที่คุณต้องทำคือค่าเฉลี่ยถ่วงน้ำหนักสามจุด คุณทำการประมาณสามครั้งสำหรับงานแต่ละชิ้น:

  • สถานการณ์กรณีที่ดีที่สุด - สมมติว่าทุกอย่างถูกต้อง (a)
  • สถานการณ์กรณีที่เลวร้ายที่สุด - สมมติว่าทุกอย่างผิดพลาด (b)
  • การคาดเดาที่เกิดขึ้นจริง - สิ่งที่คุณคิดว่าอาจจะใช้ (c)

ค่าประมาณของคุณคือ (a + b + 2c) / 4

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

แก้ไข:

สมมติฐานของฉันเมื่อฉันตอบนี้:

  1. OP เป็นนักพัฒนาเยาวชน (ขึ้นอยู่กับชื่อผู้ใช้ที่เลือก) คำแนะนำใด ๆ ที่ได้รับนั้นไม่ได้มาจากมุมมองของผู้จัดการโครงการหรือหัวหน้าทีมที่คาดว่าจะสามารถดำเนินการประมาณการที่ซับซ้อนมากขึ้นทั้งนี้ขึ้นอยู่กับอายุของสภาพแวดล้อมการพัฒนา
  2. ผู้จัดการโครงการได้สร้างแผนโครงการซึ่งประกอบด้วยงานจำนวนมากที่วางแผนไว้ว่าจะใช้เวลาหลายเดือนในการส่งมอบ
  3. OP กำลังถูกขอให้จัดเตรียมจำนวนประมาณการสำหรับงานที่พวกเขาได้รับมอบหมายจากผู้จัดการโครงการของพวกเขาที่ต้องการตัวเลขที่แม่นยำอย่างสมเหตุสมผล (ไม่ใช่เส้นโค้งความน่าจะเป็น :)) เพื่อป้อนเข้าสู่แผนโครงการและใช้เพื่อติดตามความคืบหน้า
  4. OP ไม่ได้มีสัปดาห์ในการผลิตแต่ละประมาณการและได้รับการเผาไหม้มาก่อนด้วยการประเมินในแง่ดีและต้องการวิธีการที่แม่นยำกว่าการเกาะนิ้วในอากาศและพูดว่า "2 สัปดาห์เว้นแต่รหัสจะมีความพิเศษเฉพาะในกรณีที่ 2 เดือน หรือมากกว่า".

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

ลองทำตัวอย่างที่ใช้งานได้:

  • กรณีที่ดีที่สุดจากประสบการณ์ที่เร็วที่สุดที่ฉันเคยทำมาตรงไปตรงมาจริงๆคือสัปดาห์ที่จะเริ่มต้นให้เสร็จ (5 วัน)
  • จากกรณีที่เลวร้ายที่สุดจากประสบการณ์มีช่วงเวลาที่มีการเชื่อมโยงทุกที่และในที่สุดก็พาฉันไป 6 สัปดาห์ (30 วัน)
  • การประมาณจริงอาจใช้เวลา 2 สัปดาห์ (10 วัน)

5 + 30 + 2x10 = 55

55/4 = 13.75 ซึ่งเป็นสิ่งที่คุณบอก PM ของคุณ บางทีคุณอาจใช้เวลาถึง 14 วัน เมื่อเวลาผ่านไป (เช่นสิบงาน) มันควรจะเฉลี่ย

อย่ากลัวที่จะปรับสูตร บางทีครึ่งหนึ่งของงานฝันร้ายและมีเพียงสิบเปอร์เซ็นต์ที่ง่าย ดังนั้นคุณจึงทำให้ estmate a / 10 + b / 2 + 2c / 5 เรียนรู้จากประสบการณ์ของคุณ

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


31
"พวกเขาเป็นคนโง่ - แต่ฉันได้พบกับบางอย่างเช่นนั้น" จริง
Kramii

17
ฉันต้องการถอนรากถอนโคนนี้ แต่ฉันไม่สามารถประเมินจุดเดียวได้
RubberDuck

6
ตกลง. +1 สำหรับสัญลักษณ์แสดงหัวข้อสุดท้ายของคุณ
RubberDuck

5
+1 การประมาณการไม่ใช่เวลาที่แน่นอนดังนั้นจึงไม่สามารถเป็นตัวเลขเดียวได้ มันอาจจะมีมูลค่าเพิ่มที่เป็นค่าประมาณไม่ใช่ข้อผูกพันดังนั้นผู้จัดการไม่ควรคาดหวังให้คุณทำอย่างแน่นอน เป็นความรับผิดชอบของวิศวกรซอฟต์แวร์ในการสร้างความแตกต่างที่ชัดเจนให้กับผู้จัดการของพวกเขา
Kat

10
@mcottle FYI นี่ไม่ใช่การคาดการณ์ของ Monte Carlo คุณได้คำนวณเพียงค่าที่คาดหวัง (ซึ่งจะประสบความสำเร็จประมาณ 50% ของเวลา) ของการแจกแจง PERT Monte Carlo หมายถึงกระบวนการที่ค่าทางสถิติได้มาจากกำลังเดรัจฉานด้วยเครื่องกำเนิดตัวเลขสุ่ม
David Meister

30

นี่อาจเป็นช่วงเวลาที่ดีที่จะแนะนำวิธีการแบบกึ่งคล่องตัว หากแทนที่จะประเมินในแง่ของชั่วโมง / วันคุณจัดสรรมาตราส่วนประเภทฟีโบนักชีและให้แต่ละงานมีค่าตามขนาดของมัน:

  • 0 - ทันที
  • 0.5 - การชนะที่รวดเร็ว
  • 1 - การเปลี่ยนแปลงง่าย ๆ
  • 2 - การเปลี่ยนแปลงง่ายๆสองสามอย่าง
  • 3 - ท้าทายมากขึ้น
  • 5 - จะต้องมีการคิดเกี่ยวกับ
  • 8 - งานจำนวนมาก
  • 13 - ชิ้นใหญ่ที่อาจต้องพัง
  • 20 - ชิ้นงานขนาดใหญ่ที่ต้องถูกทำลายลงอย่างแน่นอน

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

https://pm.stackexchange.com/questions/4251/why-would-teams-use-the-fibonacci-sequence-for-story-points

https://stackoverflow.com/questions/9362286/why-is-the-fibonacci-series-used-in-agile-planning-poker

นี่ไม่ใช่ความคล่องแคล่วอย่างแท้จริงเพราะมันไม่เกี่ยวข้องกับพิธีกร แต่ฉันได้รับแนวคิดจาก OP ว่าเขาเป็นของตัวเอง หวังว่าวิธีการนี้อาจทำให้การประมาณการมีความมั่นใจมากขึ้น


สิ่งนี้ทำงานได้ดีที่สุดในโครงการขนาดใหญ่ (มากกว่าหนึ่งเดือน) ในโครงการขนาดเล็กโครงการนี้สามารถทำงานได้หลังจากโครงการที่คล้ายกันสองสามโครงการเท่านั้น
Emile Bergeron

1
@RobP มันเป็นเรื่องแปลกในความคืบหน้าของจุดเรื่องราวเปรียว: 13, 20, 40, 100 - แม้ว่าคนส่วนใหญ่ไม่ได้รบกวนการตั้งค่ามากกว่า 20 คะแนนเป็นแล้วคุณจะต้องทำลายมันลง
จริงๆ

1
ฉันไม่เห็นด้วยเห็นด้วยที่เรื่องราวจุด + พิธีกรรม = เปรียว
webdevduck

1
@webdevduck "ไม่เห็นด้วยเห็นด้วย"?
krillgar

1
@krillgar D'oh! ไม่เห็นด้วย!
webdevduck

14

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

ถ้าอย่างนั้นคุณจะไปซื้อหนังสือสักเล่ม

  1. การประมาณค่าซอฟต์แวร์: ทำให้เข้าใจถึงศาสตร์มืดโดย Steve McConnell
  2. ทำงานอย่างมีประสิทธิภาพด้วยรหัสมรดกโดย Michael Feathers

หนังสือของ McConnell จะบอกให้คุณเริ่มรวบรวมข้อมูลแล้วอธิบายวิธีใช้เพื่อให้ได้ค่าประมาณที่แม่นยำยิ่งขึ้น ให้คะแนนประมาณ 3 เสมอ! เสมอ. ตรวจสอบให้แน่ใจว่าได้เน้นส่วนต่างๆของหนังสือที่พูดถึงคุณภาพของรหัสที่ไม่ดีที่จะเกิดขึ้นกับการประมาณการของคุณ แสดงให้เจ้านายของคุณ

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

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

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


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

7

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

คุณอาจจะคิดในกล่องของการส่งหนึ่งในการประมาณค่า ฉันต้องทำงานในรหัสดั้งเดิมและเมื่อฉันทำการประมาณเป็นทางการมากขึ้นฉันมักจะทำสองหรือสาม :

  1. ประมาณการเบื้องต้น - สมมติว่าฉันต้องใช้เวลาขุด แต่สถาปัตยกรรมอนุญาตให้เปลี่ยนแปลงตามที่เราต้องการ
  2. Angelic Estimate - สมมติว่าทุกอย่างโปร่งใส / หาง่ายและฉันต้องทำการเปลี่ยนแปลงเล็กน้อย (นี่คือสิ่งที่ฉันออกไปบางครั้ง ... โดยเฉพาะอย่างยิ่งถ้าฉันรู้ว่ามีปีศาจในฐานรหัสเฉพาะเท่านั้น)
  3. Abyssal Estimate - สมมติว่าโครงสร้างพื้นฐานของรหัสดั้งเดิมนั้นไม่สอดคล้องกับคุณสมบัติที่ร้องขอและฉันจะทำการปรับโครงสร้างครั้งใหญ่เพื่อให้สิ่งต่าง ๆ ทำงานได้

ทั้งสามประมาณการคำนึงถึงวิธีการที่ยากคุณลักษณะที่อยู่ในตัวของมันเองประสบการณ์ใด ๆ ที่ฉันเคยมีกับฐานรหัสทั่วไปและลำไส้ของฉันรู้สึกเกี่ยวกับการเปลี่ยนแปลง (ซึ่งผมได้พบสามารถมีความถูกต้องมาก)

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


+1 สำหรับย่อหน้าสุดท้าย - ฉันหวังว่าจะรวมไว้ในคำตอบของฉัน
mcottle

3

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

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

มีกุญแจอยู่สองสามตัวสำหรับสิ่งนี้:

  • โน้มน้าวหัวหน้าว่าค่าประมาณเหล่านี้ถือว่าเป็นบทสนทนาที่ดีกว่าเพราะคุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับงานที่ดูเหมือนในขณะที่คุณทำงาน นี่เป็นโอกาสสำหรับหัวหน้าของคุณที่จะมีข้อมูลที่พวกเขาจะไม่มีหากพวกเขาถามถึงการประมาณค่าเพียงครั้งเดียว
  • เสนอทางเลือกว่าจะก้าวไปข้างหน้าความเร็วการพัฒนารหัสการค้าอย่างไรกับการปรับปรุงการประมาณการ ให้ลูกบิดพิเศษแก่พวกเขาที่สามารถหมุนได้ บางครั้งผู้บังคับบัญชารู้งานที่ต้องทำและพวกเขาเพียงแค่ประมาณ ballpark ในบางครั้งพวกเขากำลังใช้ข้อดีข้อเสียของงานและความสามารถในการปรับแต่งการประมาณการนั้นมีค่า
  • ถ้าเป็นไปได้ฉันจะเสนอโบนัสการทำงานร่วมกันด้วย บ่อยครั้งที่มีการปรับปรุงสถาปัตยกรรมที่จะเป็นประโยชน์ต่องานหลายอย่าง หากฉันมี 10 ภารกิจซึ่งทั้งหมดใช้เวลา "1-2 เดือน แต่จะใช้เวลา 2 สัปดาห์ในการอัพเกรด X" ง่ายกว่าที่จะขายใน 20 สัปดาห์ซึ่งอาจใช้เวลาในการอัพเกรด X

ถ้าฉันมีเจ้านายที่ไม่สะดวกในการรับช่วงที่อัปเดตเมื่อฉันไปฉันจะให้หมายเลขและวิธีการแก่พวกเขา วิธีการของฉันคือการรวมกันของกฎของหัวแม่มือผมได้บอกเป็นนักพัฒนาเยาวชนและกฎหมาย Hofstader ของ

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

และ

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


2

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

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

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


แม้ว่าจะต้องมีความเข้าใจอย่างถ่องแท้ในการทำความเข้าใจรหัสเก่า แต่ก็มีความแตกต่างอย่างมากระหว่างการบันทึกรหัสเก่าและการได้รับรหัสที่เพิ่งเขียนใหม่จนถึงจุดที่ไม่มีข้อบกพร่อง
Thorbjørn Ravn Andersen

1

ในสถานการณ์เช่นนี้ฉันไม่เชื่อว่าเป็นไปได้ที่จะให้การประเมินที่ดี ปัญหาพื้นฐานคือบ่อยครั้งที่ส่วนใหญ่ของการทำคือการหาสิ่งที่ต้องการทำ

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


-1

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

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

เราใช้การวิเคราะห์พฤติกรรมสำหรับการประเมินคุณสมบัติในโครงการดินแดน A: เราประมาณว่านานแค่ไหนก็จะได้รับการดำเนินการในลักษณะโครงการกรีนฟิลด์ว่าไม่มีอะไรที่ดำเนินการแล้ว จากนั้นเราคูณค่าประมาณนั้นด้วย 2 เพื่อจัดการกับการทำความสะอาดเศษซากที่มีอยู่แล้ว

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


-3

ฉันคิดว่าคุณควรนั่งลงกับเจ้านายของคุณดูเขาในสายตาและพูดว่า:

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

ใช้การชี้แนะที่มั่นคงอย่างแน่วแน่เช่นชี้และนั่งลงบนเก้าอี้ของคุณ

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


3
-1 สำหรับการแนะนำสิ่งที่อาจฆ่าตัวตายอาชีพ นอกจากนี้ OP บอกว่าเขากำลังประเมินคุณสมบัติการทำงานไม่ใช่แค่ปรับรหัสที่มีอยู่ใหม่
RubberDuck

การฆ่าตัวตายในอาชีพหรือการก้าวกระโดดสู่เกมใหญ่
Ewan

นั่นเป็นประเด็นที่น่าสนใจ @Ewan ฉันไม่สามารถพูดได้ว่าฉันไม่ได้ทำบางสิ่งที่ดูเหมือนว่าการฆ่าตัวตายในอาชีพในขณะนี้
RubberDuck

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

1
มันเป็นคำตอบที่แก้ม แต่ฉันหมายถึงอย่างจริงจัง ทำไมเจ้านายถึงขอให้ประมาณ คุณช่วยสถานการณ์โดยการประมาณ? มันเป็นอย่างดีทั้งหมดนี้ 'อ่านลุงบ๊อบ' 'ใช้คำตอบสไตล์ Fibonacci' แต่พวกเขาไม่เข้าใจถึงปัญหา หัวหน้าเป็นห่วงว่าการปรับโครงสร้างครั้งนี้เป็นการสิ้นเปลืองเวลาและต้องการให้เสร็จสิ้นในเร็ว ๆ นี้
Ewan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.