จากที่เคยเขียนเรื่อง ทำไม developer ถึงแย่ในเรื่องการ estimate ไปแล้ว
ใน blog นี้ขอแนะนำวิธีการที่น่าจะช่วยทำให้ developer
ทำการ estimate ในสิ่งต่างๆ ได้ดีขึ้น
ประกอบไปด้วยวิธีการแนะนำดังนี้
โดยนำแนวคิดมาจากบทความ เรื่อง
5 Ways Software Developers Can Become Better at Estimation
1. แบ่งสิ่งต่างๆ ออกเป็นชิ้นเล็กๆ
เช่นต้องทำการ estimate งานที่ยาวเป็นปีๆ
ก็ให้แบ่งทำการ estimate เป็นวัน หรือ สัปดาห์ หรือ สั้นกว่านั้นแทน
ลองคิดดูว่า ถ้าคุณใช้มอบหมายให้ทำการ estimate งาน แล้วคุณใช้เวลาคิดเพียง 5 นาที
มันน่าจะมีความถูกต้อง หรือ ใกล้เคียงกว่า การ estimate ที่ใช้เวลา 5 เดือนหรือเปล่านะ
ดังนั้น การแบ่งงาน หรือ แบ่งเวลา ออกเป็นส่วนเล็กๆ
แต่การแบ่งงานออกเป็นส่วนเล็กๆ ก็ไม่ใช่เรื่องที่ง่ายเลย
แต่ยังไงก็ต้องทำ และ ต้องเรียนรู้วิธีในการแตกงานอย่างต่อเนื่อง
เพื่อให้ได้แนวทางที่ถูกต้อง และ เหมาะสม
ตัวอย่างเช่น การเขียน blog มันใหญ่ไปไหม ?
ลองแบ่งงานออกเป็น
- ทำการ research หาข้อมูล
- ทำการร่างหัวข้อต่างๆ ของ blog
- เขียน draft แรกของ blog ขึ้นมา
- ทำการเพิ่มข้อมูลรูปภาพ link ต่างๆ
- ทำการตรวจทานความถูกต้อง
- ทำการ publish blog ออกไป
เมื่อแตกงานเป็นงานชิ้นเล็กๆ แบบนี้แล้ว
น่าจะทำให้เรา estimate เวลาในการเขียน blog ดีขึ้นหรือเปล่านะ ?
2. ต้องเตรียมตัวให้เยอะขึ้น
สาเหตุหนึ่งที่ทำให้ developer ทำการ estimate ได้แย่
เพราะว่า ไม่มีความรู้เพียงพอ ว่าจะ estimate อย่างไรนั่นเอง
ดังนั้น วิธีการดีที่สุดของการไม่รู้ ก็คือ การเรียนรู้ ศึกษา เพื่อให้รู้ซะ
แต่ก่อนอื่นต้องรู้ก่อนว่า คุณไม่รู้อะไร
ต่อจากนั้น จึงทำการค้นคว้าหาข้อมูล เพื่อทำความรู้ความเข้าใจกับมัน
แล้วคุณจะรู้ว่า สิ่งที่คุณไม่รู้นั้น มีน้อยลงไป
แต่โชคไม่ค่อยดี developer ส่วนใหญ่มักจะไม่ค่อยคิดแบบนี้เท่าไร
มักจะใช้สิ่งที่เรียกว่าประสบการณ์ที่ผ่านมา มาช่วย estimate
ดังนั้น ถ้างานไหน ที่เคยทำมาแล้ว จะมีความเชื่อมั่นในการ estimate สูงมาก
ซึ่งจะมองข้ามสิ่งต่างๆ ไปหมดเลย
แต่ถ้างานไหนไม่เคยทำเลย จะทำการเผื่อเวลาของทุกๆ สิ่งที่ไม่รู้
ทำให้เวลาที่ estimate ออกมามันเยอะมากๆ
ขอแนะนำลองให้ developer ทำการ estimate เกี่ยวกับการ research งานบางอย่าง
ก่อนที่จะทำการ estimate งานจริงๆ
จะพบว่า developer สามารถ estimate เวลาได้ใกล้เคียงกับการทำงานจริงๆมาก
แต่เมื่อไปทำการ estimate งานจริงๆ กลับเป็นเรื่องที่ตรงข้าม
คำถาม
เพราะอะไร จึงเป็นเช่นนั้น ?
คำตอบ
เพราะว่าในการทำ research มีสิ่งที่ไม่รู้น้อย รวมทั้งรู้ในสิ่งที่ไม่รู้
จึงทำให้การ estimate ออกมาดี
ส่วนงานจริงๆ นั้น มีสิ่งที่ไม่รู้เยอะมาก รวมทั้งไม่รู้ในสิ่งที่ไม่รู้ ก็อาจจะมีอีกเยอะ
ทำให้การ estimate ออกมาแย่
ดังนั้นสิ่งที่ต้องทำก่อนการ estimate คือ
ช่วยกันดูก่อนว่า มีงานอะไรบ้างที่เราไม่รู้
และ ต้องทำการแยกงานเหล่านั้นออกมาเพื่อทำ research
แล้วจะทำให้การ estimate มันถูกต้องมากขึ้น
แถมมันจะเป็นผลดีต่ออนาคตอันใกล้อีกด้วยนะ
3. ทำงานแบบมีกรอบเวลา
ในแต่ละงานที่คุณแยก หรือ แตกออกมาให้มันเล็กๆนั้น
เมื่อลงมือทำควรมีกำหนดกรอบเวลาของการทำงาน
เพื่อทำให้มั่นใจว่าสิ่งที่คุณทำ อยู่ในเวลาที่คุณ estimate ไว้นะ
ถ้างานอะไรก็ตามไม่มีกรอบเวลา แสดงว่า คุณเดินผิดทางแล้ว ถอยกลับมาซะ
เช่นในการเขียน unit test ตามแนวคิด TDD (Test-Driven Development)
การเขียน code นั้นคุณอาจจะบอกว่า มันต้องมีค่า test coverage 100% นะ
ซึ่งมันอาจจะใช้เวลาสูงมาก หรือทำไปจนกว่าคุณคิดว่า จำนวน test case มันมากพอล่ะ
แต่ถ้าคุณลองเปลี่ยนมากำหนดกรอบเวลาในการเขียน unit test ใหม่ซะ
คุณจะพบว่า คุณจะถูกบังคับให้ต้องเขียน test case ที่สำคัญๆ ก่อนเสมอ
เพื่อทำให้คุณมั่นใจว่า กรณีที่สำคัญๆ ได้ถูกทดสอบไปแล้ว
มันเหมือนกฏ 80/20 อะไรนั่นแหละ ว่าไหม ?
ดังนั้น กรอบเวลา มันทำให้คุณสนใจไปที่สิ่งที่มีความสำคัญๆ ก่อนเสมอ
หมายความว่า คุณไม่โดนขัดจังหวะในการทำงาน จากเรื่องอื่นๆ
คุณอาจจะอยากได้ตัวช่วยสำหรับการจัดการกรอบเวลา
รวมทั้งตัวช่วย tracking เวลา สามารถนำเทคนิค Pomodoro มาใช้ได้นะครับ
4. กลับมาดูสิ่งที่คุณ estimate ไว้อยู่เสมอ
เชื่อเถอะว่าไม่มีใครที่จะ estimate ถูกต้องและแม่นยำตั้งแต่ครั้งแรกหรอกนะ
แต่ให้คุณกลับมาดูสิ่งที่คุณ estimate ไว้ และ ทำการ estimate ใหม่อยู่อย่างเสมอ
เพราะว่า เมื่อคุณเริ่มคุ้นเคยกับสิ่งที่ทำอยู่ขึ้นมาแล้ว
การ estimate ใหม่ก็จะใกล้ความจริงมากขึ้นเรื่อยๆ
โดยสรุปแล้ว
ลองพิจารณาดูว่า ทั้งสี่ข้อนั้น
มันพอจะช่วยทำให้การ estimate ของ developer ที่จัดว่าแย่ ดีขึ้นมาได้ไหม ?
อยากรู้ก็ลองทำดูสิครับ
เราควรพัฒนาความสามารถของตัวเองอย่างต่อเนื่อง
ไม่จำเป็นต้องมาก แต่ ให้ทำเป็นประจำ
ทำการกลับมาทบทวนสิ่งที่ estimate อยู่ตลอดเวลา
โดยในบทความอธิบายเกี่ยวกับการ estimate ไว้เหมือนการ Download ไฟล์ นะครับ
ได้แนวคิดที่ดีมากๆ
Think about it this way: You know when you download a file and it tells you how long it will take? Would you prefer that it calculated that duration just at the beginning of the download process and never updated? Of course not. Instead, most download managers show a constantly updated estimate of how much time is left.