เช้าเดียวบนขบวนปล่อยงานที่ AI เดินเอง
เช้าวันที่ 10 ตุลาคม ห้อง AI ที่ดูแลการปล่อยงานของเรารวมงานเข้าสายหลักหลายสิบชิ้นและขึ้นระบบจริงหกครั้งก่อนบ่ายสอง บทความนี้ไม่ได้เล่าว่ามันเร็วแค่ไหน แต่เล่าห้าเรื่องที่สะดุดระหว่างทาง และกติกาที่เกิดขึ้นจากเรื่องเหล่านั้นในวันเดียวกัน
เวลาคนถามว่าให้ AI ปล่อยงานขึ้นระบบจริงเองได้หรือ คำตอบของเราคือได้ แต่สิ่งที่ทำให้ได้ไม่ใช่ความเก่งของ AI มันคือด่านที่ล้อมอยู่ และนิสัยที่ว่าทุกครั้งที่สะดุดต้องได้กติกาหรือเครื่องมือกลับมาหนึ่งอย่าง เช้าวันที่ 10 ตุลาคมเป็นตัวอย่างที่ดี เพราะสะดุดห้าครั้ง
ขบวนหน้าตาเป็นอย่างไร
เรามี "ห้อง" หนึ่งห้อง คือ AI หนึ่งตัว ที่ทำหน้าที่เดียว คือพางานที่ห้องอื่นเขียนเสร็จและผ่านการอนุมัติแล้วขึ้นระบบจริง งานเข้าคิวเป็นแถว มีตัววิ่งสามตัวหยิบงานจากคิวไปตรวจและรวมเข้าสายหลัก และมีตัวตรวจสุขภาพของสายหลักอีกสองตัววิ่งคู่ขนาน
เช้านั้นตอน 09:09 คิวยาว 53 รายการ ชั่วโมงถัดมา (10:09 ถึง 11:09) รวมงานได้ 14 ชิ้น ชั่วโมงต่อมารวมได้ 16 ชิ้นจากตัววิ่ง บวกอีก 2 ชิ้นที่รวมด้วยมือ และมี 11 ชิ้นที่ตัววิ่งตัวเดียวตีกลับไปจอดไว้ คิวเหลือ 19 พอ 13:09 คิวกลับขึ้นไปที่ 27 เพราะงานใหม่เข้ามาเร็วกว่าที่ระบายออก และ 14:09 อยู่ที่ 20
ระหว่างนั้นมีการขึ้นระบบจริงหกครั้ง ที่ 11:05, 12:15, 13:08, 13:31, 13:42 และ 13:45 ครอบคลุมสี่แอป
ตัวเลขที่เราอยากให้ดูไม่ใช่จำนวนงานที่รวม แต่คือ 11 ชิ้นที่ถูกตีกลับในชั่วโมงเดียว ขบวนที่ไม่เคยตีอะไรกลับเลยคือขบวนที่ไม่มีด่าน
เรื่องที่หนึ่ง: แก้ไฟล์คิวชนกับการปล่อยงานที่กำลังวิ่ง
คิวของเราเป็นไฟล์ข้อความธรรมดา ระหว่างที่มีการปล่อยงาน บรรทัดแรกของคิวจะถูกติดป้ายพักไว้ เมื่อปล่อยเสร็จ ตัวปล่อยงานจะแกะป้ายออกเอง
ช่วงเที่ยง ห้องปล่อยงานจัดลำดับคิวใหม่ด้วยวิธีเขียนไฟล์ชั่วคราวแล้วเปลี่ยนชื่อทับ ซึ่งเป็นวิธีที่ปกติถือว่าปลอดภัย แต่จังหวะนั้นการปล่อยงานจบพอดี ป้ายที่ควรถูกแกะจึงค้างอยู่ในไฟล์ฉบับที่เขียนทับลงไป การปล่อยงานจบ 12:48 ห้องมาเจอป้ายค้างและแกะออกเองตอน 12:52
เสียหายสี่นาที แต่บทเรียนถูกเขียนลงบันทึกทันที และรอบปล่อยงานถัดไปตอน 13:26 ก็มีบรรทัดกำกับไว้ชัดว่า ระหว่างที่ปล่อยงานอยู่ ห้ามเขียนไฟล์คิวใหม่ทั้งไฟล์ ให้เพิ่มต่อท้ายได้อย่างเดียว การย้ายลำดับให้ทำหลังปล่อยเสร็จ
เรื่องที่สอง: ด่านหลังปล่อยงานแดง เพราะตัวทดสอบตามโค้ดไม่ทัน
หลังขึ้นระบบจริงทุกครั้ง มีชุดทดสอบที่เปิดเบราว์เซอร์เข้าไปใช้งานหน้าจริง เช้านั้นด่านนี้แดงสองครั้งในสองรอบ ทั้งสองครั้งบันทึกเขียนเหตุไว้เหมือนกัน คือตัวทดสอบยังคาดหวังหน้าจอแบบเก่า ขณะที่งานที่เพิ่งขึ้นไปเปลี่ยนหน้าจอนั้นแล้ว
นี่เป็นความผิดชนิดที่ดีกว่าอีกทางหนึ่งมาก ด่านที่แดงผิดทำให้เสียเวลา ด่านที่เขียวผิดทำให้ของพังถึงมือลูกค้า แต่ก็มีราคา ถ้าแดงผิดบ่อย คนและ AI จะเริ่มอ่านสีแดงว่า "คงเป็นตัวทดสอบอีกแล้ว" สิ่งที่ห้องทำคือไม่ปิดด่าน และขอให้ทีมที่เขียนงานส่งงานแก้ตัวทดสอบเข้าคิวมา ตัวหนึ่งถูกดันไปไว้หน้าคิวและรวมเข้าไปในชั่วโมงเดียวกัน
เรื่องที่สาม: การอนุมัติหนึ่งใบมาถึงหลังปล่อยงานไปแล้ว
รอบใหญ่ของเช้านั้นพางานขึ้นไปเก้าชิ้น ทุกชิ้นมีบันทึกว่าใครอนุมัติเมื่อไร บางชิ้นต้องมีสองห้องอนุมัติ ก่อนปล่อย ชุดทดสอบเต็มชุดวิ่งกับโค้ดตัวที่จะขึ้นจริง ผลคือผ่าน 1,022 ตก 0 ข้าม 27 และมีหนึ่งรายการที่ไม่ได้วิ่ง ซึ่งถูกเขียนชื่อไว้และผู้อนุมัติรับทราบ ชุดทดสอบเริ่ม 12:38 ระบบขึ้นจริง 13:08
แต่มีการตรวจหนึ่งรายการที่เป็นของห้องบัญชี ซึ่งรอบนั้นห้องตรวจงานเป็นผู้รับรองแทน ห้องบัญชีมารับรองย้อนหลังตอน 13:28 หลังระบบขึ้นไปแล้วยี่สิบนาที ผลคือไม่ต้องถอยงานกลับ
ไม่มีอะไรพัง แต่ลำดับผิด ในนาทีเดียวกันนั้นกติกาถูกเปลี่ยน ตั้งแต่รอบถัดไป รายการตรวจนี้ต้องส่งให้ห้องบัญชีก่อนปล่อย ห้องตรวจงานรับรองได้เฉพาะผลชุดทดสอบ
เรื่องที่สี่: ตัวตรวจที่ตรวจตัวเอง
ตัวตรวจสุขภาพตัวที่สองมีหน้าที่หลีกทางเมื่อเครื่องกำลังยุ่งกับงานจริง ตอน 11:35 มันรายงานว่าหลีกทาง ห้องไล่ดูแล้วพบว่า "งานจริง" ที่มันหลีกให้ คือการซ้อมด่านที่ห้องเปิดทิ้งไว้เอง บันทึกเขียนต่อท้ายตรงๆ ว่าถึงตอนนั้นตัวตรวจตัวนี้ยังไม่เคยวิ่งจบจริงสักรอบ
เราชอบประโยคหลังมากกว่าประโยคแรก ตัวตรวจที่ติดตั้งแล้วแต่ยังไม่เคยวิ่งจบ ยังไม่ใช่ตัวตรวจ และห้องไม่ได้นับมันเป็นด่าน
เรื่องที่ห้า: ทางลัดที่ใช้แล้วหมด
มีงานกลุ่มหนึ่งติดด่านตรวจขนาดของงาน ห้าชิ้นถูกจอดเพราะเหตุนี้ ห้องตรวจงานอนุมัติทางยกเว้นตอน 11:24 โดยเขียนเงื่อนไขไว้ครบ: ด่านอื่นต้องผ่านทั้งหมด ข้ามได้เฉพาะด่านขนาด ระบุรหัสของโค้ดตัวที่อนุมัติ และต้องตรวจซ้ำว่าโค้ดยังเป็นตัวเดิมก่อนรวม
สิ่งที่น่าสนใจคือตอนจบ ตอน 13:55 ห้องรวมงานชิ้นสุดท้ายในรายการยกเว้น แล้วเขียนลงบันทึกเองว่า รายการยกเว้นใช้ครบแล้ว จะไม่รวมด้วยมืออีกจนกว่าจะได้บรรทัดอนุมัติใหม่ ห้านาทีต่อมามีคำขอยกเว้นแบบกว้างเข้ามา (ยกเว้นไฟล์ทุกไฟล์ที่ตรงรูปแบบหนึ่ง) ห้องตรวจงานปฏิเสธ และอนุญาตเพียงตำแหน่งเดียวที่ระบุชื่อ โดยต้องมีหลักฐานว่าด่านยังแดงได้จริงเมื่อควรแดง
ทางยกเว้นที่ไม่มีวันหมดคือด่านที่ถูกถอดออกแล้ว
สิ่งที่เรายังไม่รู้
- จำนวนงานที่รวมทั้งเช้าเป็นตัวเลขเดียว บันทึกจดเป็นรายชั่วโมง และรายการของสองชั่วโมงสุดท้ายมีงานซ้ำกันสี่ชิ้น เราจึงไม่บวกเอง ต่อมาเราให้ผู้ช่วยไล่รายการทีละชั่วโมง ได้ว่าตั้งแต่ราวเจ็ดโมงถึงบ่ายสองมีงานที่มีหมายเลขและไม่ซ้ำกัน 53 ชิ้น กับอีก 35 ชิ้นที่บันทึกจดไว้แค่จำนวน ไม่มีหมายเลขให้ตรวจซ้ำ ยอดรวมจึงเป็น "ไม่เกิน 88" ไม่ใช่ตัวเลขแน่นอน
- ด่านเบราว์เซอร์ที่แดงตัวแรกกลับมาเขียวหรือยัง บันทึกถึง 14:09 มีแค่ว่าขอให้แก้ตัวทดสอบแล้ว
- รอบปล่อยงานล่าสุดในบันทึก (เริ่ม 14:01) ผ่านด่านหลังปล่อยหรือไม่ ตอนที่เราอ่าน ด่านยังวิ่งอยู่
- ตัวตรวจคิวอัตโนมัติที่ถูกเสนอหลังเรื่องที่หนึ่ง ยังรออยู่ในคิวเอง จึงยังพิสูจน์อะไรไม่ได้
ข้อคิดที่เอาไปใช้ได้
- นับของที่ถูกตีกลับด้วย จำนวนงานที่รวมบอกความเร็ว จำนวนที่ตีกลับบอกว่าด่านยังทำงาน
- สะดุดหนึ่งครั้ง ต้องได้กติกาหนึ่งบรรทัดในวันเดียวกัน และกติกานั้นต้องไปโผล่ในงานรอบถัดไปจริง เหมือนบรรทัดห้ามเขียนไฟล์คิวที่ไปอยู่ในรอบ 13:26
- การอนุมัติย้อนหลังที่จบดี ยังเป็นลำดับที่ผิด แก้ลำดับ ไม่ใช่ฉลองผล
- ทางยกเว้นต้องมีจำนวนจำกัดและมีชื่อ เมื่อใช้หมดต้องขอใหม่
- ตัวตรวจที่ยังไม่เคยวิ่งจบ ยังไม่นับเป็นด่าน