Screen Shot 2558-09-09 at 4.04.48 PM
เคยอ่านเจอบทความ และ เข้าไปฟังการพูดคุยเกี่ยวกับคำว่า #NoEstimate
เป็นหัวข้อที่มีความน่าสนใจอย่างมาก
ว่าจริง ๆ แล้วมันคืออะไรกันแน่ ?
ว่าจริง ๆ แล้วมันมีเป้าหมายเพื่ออะไร ?
ว่าจริง ๆ แล้วมันไม่ต้องทำการ estimate ใช่ไหม ?

เรามาค้นหาคำตอบกันดีกว่า

ใน Agile community นั้นมีการพูดถึง #NoEstimate เยอะมาก

สิ่งแรกที่ต้องทำความเข้าใจก่อนคือ

NoEstimate ไม่ใช่ No Estimate หรือ ไม่ต้องทำการ estimate นะ

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

ในการทำงานตามแนวคิด Agile นั้น

ทีมต่าง ๆ มักจะทำการ planning หรือ วางแผน ของงานต่าง ๆ แบบ relative
หรือเชิงการเปรียบเทียบ เช่น
ใช้เลข Fibonacci เช่น 1, 2, 3, 5, 8
ใช้ขนาดของสิ่งของต่าง ๆ เช่น XS, S, M, L
จะเรียกว่า Planning Poker นั่นเอง

ในความเป็นจริง
ชุดของตัวเลข หรือ ขนาดของสิ่งของต่าง ๆ มันไม่ควรเกิน 2 ชุด
เช่น 1 , 2 และ XS, S เท่านั้น !!

เพราะว่า
เมื่อไรที่ทีมเห็นว่าแต่ละ feature มันมีขนาดใหญ่กว่านี้
มันแสดงว่า feature นั้นมันใหญ่เกินไป
หรือแสดงว่า feature นั้นมันสามารถแบ่งออกเป็น feature ย่อย ๆ ได้อีก

หรือบางครั้งลองถามทีมสิว่า
ถ้าทุกคนช่วยกันทำ feature นี้ด้วยกันแล้ว
มันจะเสร็จได้ภายใน 1 วัน หรือ 2 วันหรือไม่ ?
ถ้าตอบว่าไม่
แสดงว่า feature นั้นใหญ่เกินไป ต้องแบ่งแล้วนะ !!

มาฟังเหตุผลดี ๆ ของงานที่เล็ก ๆ กันหน่อยสิ

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

การ Estimate นั้นเป็นสิ่งที่ดี

ช่วยทำให้เราพูดคุย ถกเถียงในแต่ละ feature
เพื่อทำให้เกิดความเข้าใจที่ตรงกัน
แต่เมื่อมีการพูดออกมาว่า feature นี้มันใหญ่มากเลยนะ !!
ดังนั้นสิ่งที่ถูกพูด หรือ ถามออกไปหลังจากนั้น คือ
แล้วเราจะทำการแยก feature นั้นให้มันเล็ก ๆ อย่างไรดี ?
มิใช่ถามหาว่า เราจะใช้เวลาเท่าไรดี ในพัฒนามันให้เสร็จ !!

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

การ Estimate มันก็คือ การเดาล้วน ๆ
อย่าให้ความสำคัญกับมันมากนัก

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

ลองคิดดูอีกสิว่า
ถ้าคุณทำการพัฒนา feature เล็ก ๆ ออกมาอย่างรวดเร็ว เช่น ออกมาในทุกวัน
มันน่าจะเกิดประโยชน์กว่า การมานั่ง Estimate กันทั้งวัน
โดยไม่มีความคืบหน้าของงานอะไรเลย

คุณค่าของการพัฒนา software มันมาจากการ Estimate
หรือว่ามันมาจากงานที่มันเสร็จกันแน่
ลองคิดกันเอาเองนะครับ !!

คุณล่ะ คิดเห็นอย่างไรบ้างกับ #NoEstimate ?

ป.ล.
ที่ผ่านมานั้น เราทำการ Estimate มามากมาย
และพบว่าส่วนใหญ่มันไม่ได้ช่วยเหลืออะไรเราเลย
แต่เราก็พยายามหาวิธีการ Estimate ให้มันแม่นยำ
มันหมายความว่าอะไร  !!

และจาก Hofstadter’s Law บอกไว้ว่า

Humans suck at estimating things.