Estimate แล้วทำไมต้องเผื่อ

Blog นีัเขียนดองมานานเกือบปีและ แต่พยายามให้ใจเย็น และมา Re-Write ให้มัน Soft ลงหน่อยมั้งเรามาดูกันครับว่าทำไมก่อนจะทำอะไรไป ต้องมีการ Estimate (ประมาณ) เวลา / resource ที่ใช้ แล้วทำไมต้องเผื่อเวลาขึ้นมา เพื่อให้งานมันไม่บีบรัดจนเกินไป มาดูกันครับว่าทำไมต้องเผื่อ

คนซื้อไม่ได้ใช้ คนใช้ไม่ได้ซื้อ

Ref: The story of the fake bomb detectors - BBC News (ภาพมันชัดเจนดี)
  • ต้องขยายความนิดนึง เพราะส่วนนึงมาจากคนซื้อไม่ได้ใช้ และคนใช้ไม่ได้ซื้อจริงๆแหละ แต่มันอีกเคสนึง

คนให้ Requirement ไม่ได้ใช้จริง ๆ
คนใช้ System ไม่ได้ให้ Requirement จริงๆ

  • จาก Quote ข้างต้น เพราะส่วนใหญ่เลย มันจะเป็นปัญหาว่าผู้ใหญ่คิดว่า Requirement เท่านี้พอแล้ว หรืออาจจะจงใจตัดไป เพื่อลดราคา กับเวลา แล้วปัญหาจริงๆ มันไปแดงตอนที่เข้าไป Life Cycle ของการพัฒนาแล้ว ซึ่งถ้าหากรู้ในช่วง Requirement เราสามารถเจอ End-User จริงๆ ได้จะเจ็บตัวน้อยหน่อย (เวลาที่ Estimate เพิ่มมาระดับนึง) แต่ถ้าไปเอ๊ะตอน UAT หรือ Go-live หละ ?

คนที่ Deal / Estimate ไม่ได้ทำเอง ?

  • คล้ายกันหัวข้อที่แล้ว แต่เปลี่ยนฝั่งจาก User มาเป็นข้างในของเราแหละ มีหลายตัวอย่าง เช่น
    • อันแรก SA > DEV บางที DEV มันไปเจอเคสพิเศษที่ควรตรวจสอบ / ดักเพิ่ม จาก SPEC ของ SA อย่างเช่น ถ้าค่านี้เป็น 0 มาระบบต้องเอาไปคิดยังไง หรือปรับ Helper นี้แล้ว มันไปโดนอีกจุดนึง ต้องทดสอบเพิ่ม
    • Skill ของคนในทีมไม่เท่ากัน บางคนเขียน Code เร็ว ไว แต่บางคนได้ผลลัพธ์เหมือน แต่ใช้เวลามากกว่าคนแรก
    • โดนตัดออก เช่น ทีม Engineer ประเมินมา 240 วัน แต่ตอนจะ bid ตัดออกเหลือ 180 วัน เพื่อให้ขายได้ - Marketing/Sale จะชอบทำกัน

คน Estimate ประเมินแบบ Estimate

Ref: Meme Creator - Funny Dice why dice Meme Generator at MemeCreator.org!
  • เป็นอีกมุมนึงนะ จะแตกมาจากหัวข้อก่อนหน้า ซึ่งในเคสนี้เราได้โอกาสมาประเมินแล้วนะ แต่
  • Data ไม่เพียงพอ
    • ลูกค้าบอกไม่ละเอียด หรือ ข้อมูลตกหล่น จนมาถึงคน Estimate ไม่ครบ
    • อันนี้ปรับโดยตั้ง Skill การถาม อาจจะใช้ 5Why / Fishbone มาช่วยก็ได้ หรือไม่แตกประเด็นที่คาดว่าจะเกี่ยวข้องไป ถามใน role อื่นๆ อย่างผมเป็น Dev ตั้งคำถามโยนไปทาง BA เพื่อช่วยตีว่ามันเกี่ยวข้องจริงๆไหม
    • หรือใส่ Assumption ในการประเมินไป เพราะ ถ้ามีเหตุต้อง Charge เงินเพิ่มระหว่างพัฒนาจริงๆ จะได้ Reference ได้ (แต่หมดสิทธิ์กับงานราชการนะ มาจาก TOR)
  • Time ไม่เพียงพอ
    • อันนี้เป็นเคสที่เจอประจำ แล้วมาคู่กับข้อแรกเลย Data ที่เราได้รับมาไม่พอ แต่โดนเร่ง เพราะลูกค้าต้องเอาตัวเลขไปเสนอผู้ใหญ่ หรือ พี่ต้องการเอาตัวเลขพร้อมคำอธิบายพรุ่งนี้
    • ตรงนี้เจ็บมาเยอะแล้ว
  • Fact ไม่เพียงพอ (ที่จะชนะ Bias)
    • เราอาจจะประเมินแบบเข้าข้างตัวเอง ทำให้ Estimate อาจจะน้อยกว่าความเป็นจริงได้
    • มันมีศัพท์เฉพาะทางมันอยู่นะ The Dunning-Kruger effect เรามักคิดว่าทำได้ไวกว่า เราเก่งกว่า จริงๆการสร้างความท้าท้ายที่ละนิดก็ดีนะครับ แต่ก็ต้องดูหลายๆองค์ประกอบด้วย ว่า Domain ที่เราประเมินเชี่ยวชาญไหม หรือ ในหัวข้อถัดไป Tech ที่ใช้เราเชี่ยวชาญจริงๆไหม

ทีมพัฒนาไม่ได้รู้ในทุกเรื่องของ Technology

  • Technology มันเปลี่ยนไปเรื่อยๆ บางทีตอนที่เราตกลง Stack ที่ใช้งานกัน พัฒนามาหมดและ มาตายตอนลงจริงที่ Site ลูกค้า UAT / Production เลย
  • เจออะไรแปลกตอนเขียน Code ก็ตามรูปและกันครับ
Ref Facebook: I am Programmer,I have no life
  • จริงๆแล้วมันแนวทางช่วยป้องกัน แต่มันก็ไม่ 100% อย่างเช่น
    • Container - ยกไปทั้ง Set แต่ต้องระวังนะ เพราะเคยเจอว่า Base Image Ver นึงตอน UAT พอจะจบ UAT เอามา Deploy ติดปัญหา 555
    • Automate Test - ทำไมต้อง Automate เพราะคนมัน Regression Test ไม่ไหวไง แล้วถ้ามันพังต้อง Revert Code หรือแก้ให้มันเขียวคืน
    • จากเคส Container ที่ยกมาจริงๆ ตัว Library ต่างๆ พวก mvn / nuget ต้อง Freeze Dependency ด้วย ถ้ามีใคร merge มาพร้อมขยับ Lib พวกนี้ต้องไล่กลับไป Test ก่อนครับ ถ้ามั่นใจมากก็ส่งไป Standby หน้างานเลย หึหึ
    • ตระกูล XXX As A Code - ช่วยได้เยอะตอน Deploy นะ

เรา และเธอเข้าใจเหมือนกันไหม ?

  • ปัญหาตัว Requirement แหละครับ ผู้ให้สาร กับผู้รับสาร ตีความได้ตรงกันไหม ปัญหานี้ในด้าน Software Engineering มีคนมาเสนอ Idea แก้ปัญหานะ ทั้ง DSL / Diagram ต่างๆ อย่าง UML แต่

ตอนทำงานจริง เราได้ใช้จริงไหมนะ ?
มีเก็บหลักฐานความเข้าใจไว้ไหม ?

  • ที่ยกมาข้างต้นเป็นส่วนของ Functional Requirement
  • มันยังมีงานส่วนของ Non-Functional Requirement (Quality Attribute) - ที่มันซ่อนต้องดูเรื่อง
    • Performance ไหม ? - ตอนแรกมันก็เร็ว ใช้ไปนานๆ ข้อมูลเยอะขึ้นเป็นล้านๆ Record มันช้า รอไม่ได้
    • Security ไหม ? - ต้อง Hardening ไหม / รองรับ Pen Test ไหม บางที End User หรือ IT ฝั่งลูกค้าไม่ได้บอก จะไปเจออีกทีตอนขอติดตั้ง Production เลยก็ได้
    • และอื่นๆ

ทำเสร็จและ แต่พี่ว่ามันต้องเพิ่มอะไรนิดหน่อยนะ ?

  • อันนี้มาจากทั้งทางข้างใน และข้างนอก (User) ได้เหมือนกันนะ
  • หลายๆอย่าง มันต้องเห็นภาพมากขึ้น ถึงมี Idea เพิ่มเติมขึ้นมา อย่าง เช่น
    • Business Flow มีปรับ เพื่อให้รัดกุมมากขึ้น
    • ตัวรายงานน่าจะเอาข้อมูล B มา Link เสริมนะ จะได้เห็นภาพมากขึ้นตอนใช้งาน
  • หรือ แม้กระทั่งเรื่องของ UX/UI จริงๆ เรื่องนี้ผมว่ามันเอาไปใส่พวก Non-Functional ได้นะ แต่แยกมาดีกว่า
  • ในแง่ของ Software Engineering เองมีแนวทางแก้ปัญหาไว้นะ ทำ Prototype ให้เห็นภาพ แต่ปัญหาที่ทุกคนมักลืมกัน เห็นภาพแล้ว มีการแก้ไม่ได้ใส่เวลาไว้ ถ้าแก้น้อยก็ดีไป ถ้าแก้เยอะก็วันหยุดเราแหละ 555

จริงๆ Estimate มันเป็นงานที่โคตร Art

แบบต้องใช้ประสบการณ์ด้วย อย่างผมจะมีหลายวิธี เช่น

  • แบ่งงานเป็นส่วนย่อยๆ แล้วให้ลองประเมินหลายๆคน A B C D - ถ้าใครเร็วสุด กับช้าสุด ต้องมาถามหาเหตุผล
  • เผื่อไปก่อน อันนี้ต้องใช้ประสบการณ์ล้วนๆเลย อาจจะเผื่อ 0.5 / 2 / 5 หรือ x เท่า
    • ถ้าเผื่อมากไป จะเจอ Resource ว่าง น้อยไปโดยไฟลนสุดๆ หรือต้องเผื่อโดนตัด แบบว่าตัดไปแล้วเวลามันพอดีๆ
    • ผมก็มีเลขในใจนะ และ condition ต่างๆ แต่ขออุ๊บไว้ก่อน เดวมันจะกลายเป็นว่าคนที่อ่าน Blog ผม ด้วยรู้ทริก และเอาตัดเผื่อเลย
  • หรือถ้าถล้ำตัวเข้าไปแล้ว ต้องพยายามไป Educate ลูกค้า ถ้าไปปรับตอนนี้ มันจะมีผลกับอนาคตอย่างไรนะ แต่ต้องดูมุมมองของลูกค้าที่มีต่อเราด้วยนะ
    • มองว่าเป็น Partners เข้ามาจ้างเข้ามาพัฒนาระบบ Module A B C จริงๆ
    • มองว่าเป็น Outsource ที่ทางลูกค้าจะทำอะไรก็ได้ เพราะที่เคยเจอมาบางทีสัญญาที่ Deal ไปเราเป็นแค่ Outsource เข้าไป Dev จริงๆ ทางลูกค้าเป็น SA ด้วย แต่ไปๆมาๆ เรามีตำแหน่งนี้ขึ้นมาด้วยเหมือนกัน แก้ตามพี่แล้วดี แต่พอใช้จริงไป 3 เดือนบน Production พี่อยากได้แบบเดิม
  • มันมีอีกแนวคิดนึงนะ คือ No Estimate แต่มันจะดูขัดแย้งกับ Project ที่มันมีระยะเวลาชัดเจน และอย่าลืม Cost ด้วยนะ เราให้ลูกค้าฟรี แต่ถ้าลูกค้าดึงเชงไปเรื่อยๆ ค่าใช้จ่ายมันต้องจ่ายทุกเดือนนะ เช่น เงินเดือนให้ทีม / ค่าเสียโอกาส เพราะ Resource จม ซึ่งเรื่องพวกนี้คนที่อยู่ต้นน้ำมักจะลืมกัน

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.