> “คิดว่าสร้างสิ่งนั้นจะใช้เวลานานแค่ไหน?”
- นี่คือคำถามที่นักพัฒนาซอฟต์แวร์ทั้งกลัวและไม่ชอบ และเครื่องซักผ้าของผมก็ช่วยเตือนให้ผมกลับมาคิดเรื่องนี้อีกครั้ง
- ความยากของการประเมินความพยายามของซอฟต์แวร์ (Software Effort Estimation) ที่เครื่องซักผ้าสอนให้รู้
- ระหว่างย้ายเข้าบ้านใหม่ การติดตั้งเครื่องซักผ้ากลับใช้เวลานานกว่าที่คาดไว้มาก
- ปกติเป็นงานที่น่าจะเสร็จได้ใน 10 นาที แต่ครั้งนี้กลับใช้เวลา 4 ชั่วโมง
- มีอุปสรรค (blocker) ที่คาดไม่ถึงเกิดขึ้นล่วงหน้าไม่ได้ ทำให้การติดตั้งล่าช้า
- ระหว่างกระบวนการนี้จึงได้ตระหนักว่าสิ่งนี้คล้ายกับเหตุผลที่ทำให้การประเมินความพยายามในการพัฒนาซอฟต์แวร์เป็นเรื่องยาก
- อุปสรรคและวิธีแก้
- อุปสรรค 1: ไม่มีรูสำหรับต่อไฟ จึงไม่สามารถเสียบเครื่องซักผ้าเข้ากับแหล่งจ่ายไฟได้
- วิธีแก้ 1: ซื้อโฮลซอขนาด 60 มม. จากร้านฮาร์ดแวร์เพื่อเจาะรู
- อุปสรรค 2: สว่านสำหรับผู้บริโภคทั่วไปไม่สามารถใช้กับโฮลซอได้
- วิธีแก้ 2: ยืมสว่านที่แรงกว่ามาใช้
- อุปสรรค 3: สายระบายน้ำและสายจ่ายน้ำสั้นกว่าที่คาดไว้เมื่อใช้กับบ้านใหม่
- วิธีแก้ 3: ตั้งใจจะซื้อสายต่อเพิ่มแบบขยายได้ แต่กลับพบว่าสายเดิมไม่สามารถต่อขยายได้ จึงต้องกลับไปซื้อสายใหม่อีกครั้ง
- อุปสรรค 4: ฝาโลหะที่ยึดแน่นอยู่กับก๊อกน้ำถอดไม่ออก
- วิธีแก้ 4: ซื้อประแจที่ใหญ่ขึ้นเพื่อถอดฝาออก
- อุปสรรค 5: spigot ของท่อระบายน้ำถูกผนัง PVC ปิดกั้นอยู่
- วิธีแก้ 5: ใช้สว่านเจาะผนัง PVC แล้วต่อสายระบายน้ำเข้าไป
- หลังจากไปร้านฮาร์ดแวร์ทั้งหมด 5 รอบและทำงานอยู่ 4 ชั่วโมง ก็สามารถติดตั้งเครื่องซักผ้าได้ตามปกติ
- อุปสรรค 1: ไม่มีรูสำหรับต่อไฟ จึงไม่สามารถเสียบเครื่องซักผ้าเข้ากับแหล่งจ่ายไฟได้
- ทำไมการประเมินความพยายามในการพัฒนาซอฟต์แวร์จึงยาก
- แม้จะเป็นงานที่คุ้นเคย แต่หากสภาพแวดล้อมต่างออกไป ก็มีโอกาสสูงที่จะเกิดตัวแปรที่ไม่คาดคิด
- เหตุผลที่การประเมินจากประสบการณ์ในอดีตมักผิดพลาด ก็เพราะมี “สิ่งไม่รู้ที่เราไม่รู้ (Unknown Unknowns)” อยู่
- ตัวอย่างบางส่วน:
- ไลบรารีที่ตั้งใจจะใช้ไม่ได้รับการบำรุงรักษาอีกต่อไป จนต้องลงมือแก้เอง
- เครื่องมือพัฒนาอัปเดตแล้ว ทำให้วิธีเดิมใช้ไม่ได้อีกต่อไป
- เมื่อเวอร์ชันของ OS เปลี่ยนไป dependency เดิมอาจทำงานไม่ปกติ
- มีการเพิ่มคอมโพเนนต์ใหม่ในอินฟราสตรักเจอร์ แต่พฤติกรรมจริงกลับไม่เป็นไปตามที่คาด
- บทสรุป
- ประสบการณ์ในบ้านใหม่ครั้งนี้แสดงให้เห็นว่าการประเมินความพยายามในการพัฒนาซอฟต์แวร์นั้นยากเพียงใด
- ก่อนเริ่มพัฒนา เราควรตรวจสอบความต้องการให้ละเอียดที่สุดเท่าที่ทำได้ แต่การเกิด blocker ที่ไม่คาดคิดก็เป็นสิ่งหลีกเลี่ยงไม่ได้
- แม้โปรเจกต์ซอฟต์แวร์จะดูเหมือนงานที่คุ้นเคย แต่ในสภาพแวดล้อมใหม่ก็อาจเกิดความท้าทายที่แตกต่างไปอย่างสิ้นเชิง
- ดังนั้นจึงจำเป็นต้องปรับตารางเวลาและทรัพยากรอย่างยืดหยุ่นโดยคำนึงถึงตัวแปรเหล่านี้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
การประเมินงานซอฟต์แวร์ก็เหมือนเรื่องตลก เพราะไม่มีบทลงโทษสำหรับการประเมินต่ำเกินไป
เป็นบทความที่ดีเยี่ยม แต่ยังขาดความแตกต่างสำคัญจากประสบการณ์ในซอฟต์แวร์
โปรเจกต์ DIY ก็เป็นแบบนี้เสมอ
ได้เรียนรู้วิธีคงแนวตรงไว้เป็นเวลา 25 นาทีหลังการเจาะ และความน่าทึ่งของหูฟังตัดเสียงรบกวน
เรื่องราวดี แต่ประสบการณ์ของฉันแทบจะตรงกันข้ามเลย
ทำให้นึกถึงคำพูดที่ว่า "ความจริงมีรายละเอียดที่น่าทึ่ง"
ตอนที่ผู้เขียนเจาะรูสำหรับสายไฟ เขาใส่ชิ้นส่วนพลาสติกได้เรียบร้อยพอดี
เพื่อนร่วมงานส่วนใหญ่ประหลาดใจเมื่อบอกว่าการค้นคว้าและทำรายการก่อนเริ่มโปรเจกต์กินเวลามาก
เป็นมุมที่น่าสนใจให้คิด เวลาแปลกใจกับราคาของช่างครั้งหน้า
ถ้าไม่รู้ว่าจะต้องถามคำถามอะไรบ้างก่อนเริ่มโปรเจกต์ซอฟต์แวร์ ควรทำอย่างไร?