ข้าม​ไป​ยัง​เนื้อหา

Update the Plan

พลาด​เดดไลน์​แล้ว​อย่า​แค่​เลื่อน — ประเมิน​ใหม่​และ​สื่อสาร​แผน​ใหม่

Update the Plan คือ​วินัย​ของ​ทีม​ที่​ว่า เมื่อ​ความ​จริง​ของ project เบี่ยง​ไป​จาก​แผน​เดิม — ไม่​ว่า​จะ​พลาด​เดดไลน์ พลาด milestone หรือ​แค่​รู้สึก​ว่า​กำลัง​ช้า​กว่า​ที่​คิด — ห้าม​ตอบ​สนอง​ด้วย​การ​เลื่อน​วัน​ส่ง​มอบ​ออก​ไป​แบบ​ไม่​คิด​อะไร (เช่น “เลื่อน​อีก​หนึ่ง​สัปดาห์” โดย​ไม่มี​ข้อมูล​รองรับ) แต่​ต้อง​หยุด​แล้ว​ทำ​สาม​อย่าง​ตาม​ลำดับ: ประเมิน​สถานะ​จริง​ของ​งาน​ที่​เหลือ อัปเดต​แผน​ให้​สะท้อน​ความ​จริง​นั้น แล้ว​สื่อสาร​แผน​ใหม่​ให้​ผู้​มี​ส่วน​ได้​ส่วน​เสีย​ทุก​ฝ่าย​รับรู้​อย่าง​ตรง​ไป​ตรง​มา

หลัก​คิด​เบื้องหลัง​คือ​ประโยค​สอง​ประโยค​ที่​มัก​ถูก​ยก​มา​คู่​กัน — “Hope is not a plan” (ความ​หวัง​ไม่ใช่​แผน) เตือน​ว่าการ​แค่​หวัง​ว่า​จะ​ทัน​ตาม​เดิม​ไม่​ได้​เปลี่ยน​ความ​จริง​ของ​งาน​ที่​เหลือ และ “Failure to plan is planning to fail” (การ​ไม่​วางแผน​ก็​คือ​การ​วางแผนที่​จะ​ล้มเหลว) เตือน​ว่าการ​เพิกเฉย​ไม่​อัปเดต​แผน​เลย​ก็​อันตราย​ไม่​แพ้​กัน DevIQ ไม่​ได้​บอกว่า​ต้อง​ลงทุน​วางแผน​มหาศาล แต่​ชี้​ว่าการ​คิด​ล่วงหน้า​ระดับ​หนึ่ง​ช่วย​ได้​มาก และ​เมื่อ​แผน​เดิม​พัง​ก็​ต้อง​กล้า​ปรับ​ให้​ตรง​กับ​ความ​จริง

สิ่ง​สำคัญ​คือ Update the Plan ไม่ใช่​แค่ “การ​ขยับ​วัน​ที่” แต่​เป็น กระบวนการ​ตัดสิน​ใจ — บาง​ครั้ง​คำ​ตอบ​ที่​ถูกต้อง​อาจ​ไม่ใช่​การ​เลื่อน​วัน​เลย แต่​คือ​การ​ตัด​ขอบเขต​งาน (scope) ลง, จัด​ลำดับ​ความ​สำคัญ​ใหม่, เพิ่ม/สลับ​คน หรือ​แม้แต่​ยกเลิก project นั้น​ไป​เลย​ถ้า​ประเมิน​ใหม่​แล้ว​พบ​ว่า​ไม่​คุ้ม​ค่า​อีก​ต่อ​ไป Martin Fowler อธิบาย​ไว้​ใน Purpose of Estimation ว่า​ประมาณ​การ​มีอายุ​สั้น​มาก — เขา​เปรียบ​กับ​ผัก​กาด​หอม​ว่า “good for a couple of days, rather wilty after a week” (ดี​อยู่​แค่​สอง​สาม​วัน พอ​ผ่าน​ไป​หนึ่ง​สัปดาห์​ก็​เหี่ยว) ดังนั้น​การ​ประมาณ​การ​เดิม​ที่​วาง​ไว้​ตอน​ต้น project ไม่ใช่​สัญญา​ที่​ต้อง​ยึดถือ​ตลอด​ไป แต่​เป็น​ข้อมูล ณ เวลา​หนึ่ง ที่​ต้อง refresh เมื่อ​ความ​จริง​เปลี่ยน

เมื่อ​พบ​ว่า​กำลัง​จะ​พลาด​เดดไลน์​หรือ milestone ให้​ทำ​ตาม​ขั้นตอน​ต่อ​ไป​นี้​แทน​การ​เลื่อน​วัน​แบบ​สุ่ม

  1. หยุด​แล้ว​ประเมิน​สถานะ​จริง (reassess) — อย่า​เดา ให้​ตรวจ​งาน​ที่​เหลือ​จริง ๆ เทียบ​กับ scope เดิม: อะไร​ทำ​เสร็จ​แล้ว อะไร​ยัง​ไม่​เริ่ม อะไร​มี blocker ซ่อน​อยู่ ใช้ velocity หรือ throughput จริง​ของ​ทีม​ใน​รอบ​ที่​ผ่าน​มา​เป็น​ฐาน ไม่ใช่ velocity ที่ “อยาก​ให้​เป็น”
  2. หา​สาเหตุ​ที่​แผน​เดิม​พลาด — เป็น​เพราะ scope โต​ขึ้น​ระหว่าง​ทาง (scope creep) เพราะ​ประเมิน​การณ์​ผิด​ตั้งแต่​แรก (planning fallacy) เพราะ dependency ภายนอก​ล่าช้า หรือ​เพราะ​มี technical debt/blocker ที่​เพิ่ง​ค้น​พบ การ​รู้​สาเหตุ​จะ​บอกว่า​ควร​แก้​ที่ scope, ที่​กำลัง​คน, หรือ​ที่​วัน​ที่
  3. สร้าง​แผน​ใหม่​ที่​เป็น​ไป​ได้​จริง — พิจารณา​ทาง​เลือก​ทั้ง​สาม​แกน​ของ project management triangle คือ scope, resources (คน/เงิน) และ time โดย​ปกติ​ควร​ปรับ scope หรือ resources ก่อน​ขยับ time เพราะ​การ​เลื่อน​วัน​ซ้ำ ๆ โดย​ไม่​แก้​ต้นตอ​จะ​กัดกร่อน​ความ​น่า​เชื่อถือ​ของ​ทั้ง​ทีม
  4. สื่อสาร​แผน​ใหม่​อย่าง​ตรง​ไป​ตรง​มา​และ​เร็ว​ที่สุด — แจ้ง stakeholder ทันที​ที่​รู้ อย่า​รอ​จนถึง​วัน​เดดไลน์​เดิม​แล้ว​ค่อย​บอก ระบุ​สิ่ง​ที่​เกิด​ขึ้น (context) แผน​ใหม่​ที่​เป็น​รูปธรรม และ​ขั้นตอน​ที่​กำลัง​ทำ​เพื่อ​ไม่​ให้​เกิด​ซ้ำ ความ​โปร่งใส​แบบ​นี้​สร้าง​ความ​เชื่อใจ​ได้​มากกว่า​การ​เงียบ​แล้ว​เลื่อน​ซ้ำ​ไป​เรื่อย ๆ
  5. เพิ่ม​ความถี่​ใน​การ​อัปเดต​ชั่วคราว — หลัง​พลาด​ครั้ง​หนึ่ง ให้​รายงาน​ความ​คืบ​หน้า​ถี่​ขึ้น (เช่น ราย​วัน​หรือ​ทุก​สอง​วัน) จนกว่า project จะ​กลับ​เข้า​ร่อง​เข้า​รอย เพื่อ​ให้ stakeholder เห็น​สัญญาณ​เตือน​ล่วงหน้า​ก่อน​จะ​พลาด​ครั้ง​ถัด​ไป
  6. ทำ retrospective สั้น ๆ หลัง​แผน​นิ่ง​แล้ว — วิเคราะห์​ว่า​อะไร​ทำให้​ประเมิน​ผิด แล้ว​นำ​บทเรียน​ไป​ปรับ​กระบวนการ​ประมาณ​การ​ครั้ง​ถัด​ไป แต่​ทำ​ขั้น​นี้ หลัง จาก​ที่​แผน​ใหม่​ถูก​สื่อสาร​และ​อนุมัติ​แล้ว ไม่ใช่​แทนที่​การ​อัปเดต​แผน

แนวทาง​แบบ agile ช่วย​ให้​ปัญหา​นี้​เกิด​ขึ้น​น้อย​ลง​ตั้งแต่​ต้น เพราะ​การ​ทำงาน​เป็น iteration สั้น ๆ ที่ timebox ไว้ (ดู Timeboxing) ทำให้​เห็น​สัญญาณ​ว่า​ช้า​กว่า​ที่​คิด​ได้​เร็ว ตั้งแต่ iteration แรก ๆ แทนที่​จะ​มา​รู้ตัว​ตอน​ใกล้ deadline ใหญ่​ก้อน​เดียว​แบบ waterfall — Fowler เรียก​สิ่ง​นี้​ว่าการ “re-plan” ที่​เกิด​ขึ้น​เป็น​ธรรมชาติ​ทุก iteration ใน Timeboxed Iterations โดย​งาน​ที่​ยัง​ไม่​เสร็จ​ใน​กรอบ​เวลา​จะ​ถูก​นับ​ว่า “not done” แล้ว​ย้าย​ไป​เป็น story ใหม่​ใน​รอบ​ถัด​ไป แทนที่​จะ​ขยาย iteration ออก​ไป

flowchart TD
    Slip[ตรวจพบว่าจะพลาดเดดไลน์]
    Assess[ประเมินสถานะงานที่เหลือจริง]
    Cause[หาสาเหตุของความคลาดเคลื่อน]
    Options[พิจารณา scope เงิน คน และเวลา]
    NewPlan[สร้างแผนใหม่ที่ทำได้จริง]
    Communicate[สื่อสารแผนใหม่ให้ stakeholder]
    Monitor[ติดตามถี่ขึ้นจนกลับเข้าร่องรอย]
    Retro[ทำ retrospective หาบทเรียน]

    Slip --> Assess --> Cause --> Options --> NewPlan --> Communicate --> Monitor --> Retro

สมมติ​ทีม​กำลัง​ทำ feature import ข้อมูล​ลูกค้า​แบบ batch และ​ประเมิน​ไว้​ว่า​จะ​เสร็จ​ใน sprint นี้ (สอง​สัปดาห์) แต่​พบ​ว่า​เหลือ​อีก​สาม​วัน​จะ​จบ sprint แล้ว​งาน​เสร็จ​ไป​เพียง​ครึ่ง​เดียว​เพราะ endpoint ของ​ระบบ​ภายนอก​ที่​ต้อง​เชื่อม​ต่อ​มี rate limit ที่​ไม่​ได้​คาด​ไว้

แทนที่​จะ​แค่​บอก​ใน​ที่​ประชุม​ว่า “ขอ​เลื่อน​ไป​อีก​สัปดาห์” ทีม​ทำ​ตาม​ขั้นตอน Update the Plan โดย​ใช้ backlog item เป็น​หน่วย​ติดตาม​สถานะ แล้ว​สื่อสาร​สรุป​สั้น ๆ ให้ stakeholder เช่น​บันทึก​ต่อ​ไป​นี้​ซึ่ง​จำลอง​จาก field งาน​ใน Azure Boards (ตัวอย่าง​ประกอบ ไม่ใช่ code production):

// ตัวอย่างโครงสร้างข้อมูลสำหรับสรุปสถานะแผนงานที่ถูกอัปเดต
// ใช้ประกอบการรายงานใน stand-up หรือ status email
public sealed class PlanUpdate
{
public string MilestoneName { get; init; } = "Customer Batch Import";
public DateOnly OriginalDueDate { get; init; }
public DateOnly RevisedDueDate { get; init; }
// สาเหตุของความคลาดเคลื่อน ระบุให้ตรงประเด็น ไม่ใช่ข้อแก้ตัวลอย ๆ
public string RootCause { get; init; } =
"Third-party API มี rate limit 100 req/min ที่ไม่ได้ระบุใน documentation " +
"ทำให้ import 10,000 records ใช้เวลานานกว่าประเมินไว้ 3 เท่า";
// ทางเลือกที่พิจารณาแล้วก่อนตัดสินใจเลื่อนวันที่
public IReadOnlyList<string> OptionsConsidered { get; init; } = new[]
{
"ลด scope: import เฉพาะลูกค้าที่ active ก่อน แล้วทำ backlog ที่เหลือใน sprint ถัดไป",
"เพิ่มคน: ดึง engineer อีกคนมาช่วยทำ retry/backoff logic",
"เลื่อนวันที่: ขยับ due date ออกไป 4 วันทำการ",
};
// การตัดสินใจสุดท้าย พร้อมเหตุผล
public string Decision { get; init; } =
"เลือกลด scope เป็นหลัก (import active customers ก่อน) " +
"ร่วมกับเลื่อนวันที่ 4 วันทำการ เพื่อให้มีเวลาใส่ retry with exponential backoff";
}

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

ประโยชน์

  • สร้าง​ความ​น่า​เชื่อถือ — การ​แจ้ง​ล่วงหน้า​พร้อม​แผนที่​เป็น​รูปธรรม สร้าง​ความ​เชื่อใจ​ได้​มากกว่า​การ​เงียบ​จนถึง​วัน​เดดไลน์​แล้ว​ขอ​เลื่อน​แบบ​ไม่มี​เหตุผล
  • จับ​ปัญหา​ได้​เร็ว​ก่อน​จะ​บานปลาย — การ​ประเมิน​ใหม่​บ่อย ๆ ทำให้​เห็น​สัญญาณ​เตือน​ตั้งแต่​ยัง​พอ​มี​เวลา​แก้ ตรง​กัน​ข้าม​กับ​การ​ปล่อย​จน​สาย​เกิน​แก้
  • เปิด​ทาง​เลือก​ที่​กว้าง​กว่า​แค่ “เลื่อน​วัน” — บังคับ​ให้​ทีม​พิจารณา scope และ resource ควบคู่​ไป​ด้วย ซึ่ง​บาง​ครั้ง​เป็น​คำ​ตอบ​ที่​ดี​กว่า​การ​ยืด​เวลา​เพียง​อย่าง​เดียว
  • ทำให้การ​ตัดสิน​ใจ​ระดับ​องค์กร​ดี​ขึ้น — Fowler ยก​ตัวอย่าง​ว่าการ​ยกเลิก project กลาง​ทาง​หลัง​พบ​ว่า​ประมาณ​การ​ใหม่​บาน​เกิน​คุ้ม ถือ​เป็น “ความ​สำเร็จ” เพราะ​ช่วย​ให้​องค์กร​ย้าย​ทรัพยากร​ไป​ทำ​สิ่ง​ที่​คุ้ม​ค่า​กว่า​ได้​ทัน

ข้อ​ควร​ระวัง

  • อย่า​ให้​กลาย​เป็น​ข้อ​อ้าง​สำหรับ Death by Planning — การ​ประเมิน​ใหม่​ต้อง​กระชับ​และ​นำ​ไป​สู่​การ​ตัดสิน​ใจ ไม่ใช่​การ​ประชุม​วางแผน​ไม่รู้​จบ​จน​ไม่มี​เวลา​ลงมือ​ทำ​จริง ดู Death by Planning
  • ระวัง planning fallacy ซ้ำ​สอง — งาน​วิจัย​ของ Kahneman และ Tversky ชี้​ว่า​คน​มัก​ประเมิน​เวลา​ต่ำ​กว่า​จริง​ซ้ำ ๆ แม้​จะ​รู้​ว่า project คล้าย​กัน​ใน​อดีต​ก็​เคย​ช้า​กว่า​ประมาณ​การ วิธี​ลด​ผลกระทบ​คือ​ใช้ “outside view” — อ้างอิง​จาก​ข้อมูล​ของ​งาน​ประเภท​เดียวกัน​ใน​อดีต แทนที่​จะ​ประเมิน​จาก​ความ​รู้สึก​ใน project นี้​อย่าง​เดียว
  • อย่า​เลื่อน​วัน​ซ้ำ ๆ โดย​ไม่​แก้​ต้นตอ — ถ้า​อัปเดต​แผน​แล้ว​ยัง​พลาด​ซ้ำ​อีก​ใน​รอบ​ถัด​ไป​ด้วย​สาเหตุ​เดิม แปล​ว่า​ปัญหา​ไม่​ได้​อยู่​ที่​วัน​ที่ แต่​อยู่​ที่​กระบวนการ​ประมาณ​การ​หรือ​ขอบเขต​งาน​ที่​ยัง​ไม่​ได้​แก้​จริง
  • สื่อสาร​แต่​เนิ่น ๆ ดี​กว่า​สื่อสาร​ตอน​สาย — การ​รอ​จนถึง​วัน​เดดไลน์​เดิม​แล้ว​ค่อย​แจ้ง​ว่า​จะ​พลาด ทำลาย​เวลา​ที่ stakeholder ควร​มี​ไว้​ปรับ​แผน​ของ​ตัวเอง​ด้วย