วันนี้ผมจะเล่าเรื่องการทวนสอบกระบวนการ (Verify processes) และยืนยันผลลัพธ์ (Validate results) ของระบบใหม่ที่ติดตั้งเสร็จเรียบร้อยแล้วให้ฟังนะครับ
เมื่อฮาร์ดแวร์ของระบบ IT ติดตั้งทั้งหมดแล้ว ทีมซอฟต์แวร์ก็ทำการติดตั้งซอฟต์แวร์ต่าง ๆ ลงไปในระบบใหม่ แล้วก็ให้ระบบเก่าและใหม่ทำงานขนานกันไปสักพักหนึ่ง เพื่อดูว่า การประมวลผลของระบบใหม่นั้นเป็นเหมือนกับระบบเก่าหรือไม่
การมองแบบนี้ ก็จะเอาระบบเก่าเป็นตัวตั้ง แล้วเอาระบบใหม่เข้าเทียบ โดยตั้งสมมติฐานว่าระบบเก่านั้นถูกต้องอยู่แล้ว เพราะอยู่กับเรามานาน เราใช้มันมาก็ไม่ได้มีปัญหาอะไร (จริง ๆ แล้ว ระบบเก่ามันอาจจะผิดมาตั้งนานแล้วก็ได้ แต่เราค่อยมาว่ากันทีหลัง ตอนที่เราเห็นความแตกต่าง)
เราก็จะนำข้อมูลจากอดีตมากลุ่มซึ่งเรารู้ความเป็นมาเป็นไปจากในระบบเก่า (คือรู้ว่าถ้าเราป้อนอินพุตแบบนี้ ให้กับกระบวนการที่ทำงานแบบนี้ในระบบเก่า มันจะให้เอาต์พุตออมาเป็นแบบนี้) มาป้อนให้กระบวนการที่ทำงานแบบเดียวกันแต่อยู่ในระบบใหม่ที่เราต้องการทวนสอบ แล้วก็นำเอาต์พุตที่ได้ออกมาจากกระบวนการนั้น มาเทียบกับเอาต์พุตที่เรารู้อยู่แล้ว ถ้าผลที่ได้ออกมาตรงกัน ก็ถือว่า การประมวลผลของกระบวนการนั้นเป็นไปอย่างถูกต้อง (เหมือนระบบเก่า) … ถ้ามันผิดพลาดไป เราก็จะหาสาเหตุว่า มันเกิดอะไรขึ้น แล้วก็ทำการปรับแก้ให้เป็นไปตามระบบเก่า (ตรงนี่เราจะรู้แล้วว่า ความแตกต่างมันคืออะไร อะไรถูก อะไรผิด เราก็บันทึกไว้ แล้วแก้ไขให้เหมือนกับระบบเก่าเสียก่อน)
เราก็ทำการทวนสอบไปทีละกระบวนการเพื่อความมั่นใจ … ระบบ ๆ หนึ่ง มักจะประกอบไปด้วยหลายกระบวนการ … ดังนั้นเมื่อเราทำการทวนสอบกระบวนการต่าง ๆ จนมั่นใจว่าเหมือนแล้ว เราก็ทำการทดสอบระบบทั้งระบบแบบเดียวกัน คือ เอาอินพุตป้อน (ที่เรารู้แล้วว่า ถ้าสิ่งข้อมูลชุดนี้เข้าไปในระบบ เอาต์พุตของระบบจะให้ผลออกมาเป็นอย่างไร) เข้าไปในกระบวนการแรกของระบบ แล้วให้ระบบมันรันไปตามลำดับ จนไปถึงกระบวนการสุดท้ายของระบบ …
จากนั้นก็เอาเอาต์พุตที่ได้มาเทียบดูกับสิ่งที่เรามีอยู่ในมือ ถ้าตรงกัน (คือมันอาจจะไม่ตรงกันเป๊ะ ๆ แบบทศนิยมสี่ตำแหน่งอะไรแบบนั้น มันอาจจะต่างกันออกไปบ้างเล็กน้อย แต่เรารู้ว่ามันน่าจะถูกต้องและยอมรับได้) ก็จบ … ถ้าไม่ตรงกัน อันนี้ก็ต้องไล่หาอีกครั้งแหละครับ ว่ามันเกิดอะไรขึ้น เกิดที่ตรงไหน
ดูให้ดีนะครับ … อันนี้เราตั้งสมมติฐานเอาไว้ก่อนว่า เราจะเอาระบบใหม่เข้ามาใช้แทนระบบเก่าที่มีอยู่เดิม ดังนั้น ถ้าเราจะใช้ระบบใหม่ เราก็ต้องมั่นใจว่า ระบบใหม่มันทำได้เหมือนระบบเก่าก่อน เพราะถ้าระบบใหม่ให้ผลลัพธ์ออกมาไม่เหมือนระบบเก่า เราก็จะไม่กล้าใช้ระบบใหม่ใช่ไหมครับ
พอมันเหมือนกันแล้ว เราก็มาดูจุดที่เราแก้ไขที่เราบันทึกเอาไว้ … ซึ่งเป็นไปได้สองกรณีคือ ระบบใหม่ทำงานผิดพลาดจริง ๆ หรือ ระบบใหม่ที่ออกแบบไว้นั้นไม่ผิดพลาดหรอก แต่ระบบเก่าที่ใช้มานานนั้นผิดพลาดมาตั้งแต่ต้น (โดยที่เราไม่รู้ เพราะมันไม่ก่อให้เกิดความเสียหายจนเรารับรู้ได้)
ผมใช้คำว่า “ระบบทำงานผิดพลาด” ก็เพื่อสื่อความหมายให้เข้าใจกันเท่านั้น ผมไม่ได้ไปโยนความผิดให้ตัว “ระบบ” นะครับ เพราะเราคือผู้ที่ออกแบบมันขึ้นมา ระบบมันก็ทำงานตามที่เราออกแบบนี่แหละ … ถ้าเราออกแบบผิด มันก็ทำงานไปตามที่เราออกแบบผิด ๆ นี่แหละ … มันซื่อสัตย์จะตายไป … ถ้าเราออกแบบเอาไว้อย่างหนึ่ง แล้วระบบมันดันผ่าไปทำงานอีกแบบหนึ่ง โดยไม่ทำตามคำสั่งเรา … อย่างนี้ค่อยไปโทษระบบมัน … แล้วยุค AI ในอนาคต ถ้าระบบมันตัดสินใจได้เอง มันจะตัดสินใจฝ่าฝืนคำสั่งเราไหมหนอ …
เอาเป็นว่า จุดที่มันแตกต่าง (จุดที่เราเข้าไปแก้ระบบใหม่ เพื่อให้ได้ผลออกมาเหมือนระบบเก่า) ระหว่างระบบเก่าและระบบใหม่ จะถูกนำมาวิเคราะห์ว่า มันเกิดอะไรขึ้น … ตรงนี้ก็มีหลายฝ่ายมาช่วยกันดู สิ่งที่พบก็มักจะเป็นไปในเชิง ตัวแบบ (Model) ที่นำมางานแตกต่างกัน กระบวนการ (ขั้นตอนในการทำงาน) มีความแตกต่างกัน
เราต้องยอมรับอย่างหนึ่งว่า ระบบเก่านั้นมันใช้มานานแล้ว ตอนออกแบบในช่วงเวลานั้น ตัวแบบต่าง ๆ ที่นำมาใช้งานก็ต้องถือว่า ทันสมัยในตอนนั้น แต่ปัจจุบันนี้ เขาอาจจะไม่ใช้แล้ว หรือ มีการปรับปรุงให้ดีขึ้น หรือ มีตัวแบบใหม่ที่ดีกว่า … ระบบใหม่เข้าก็พัฒนาโดยอิงอยู่กับตัวแบบที่นิยมใช้ในปัจจุบัน … ดังนั้น ผลที่ได้ก็ย่อมแตกต่างกันออกไปบ้าง … เมื่อเราทราบแล้ว คราวนี้แหละ เราต้องเป็นผู้เลือกว่า เราจะใช้ตัวแบบแบบเก่า (ในระบบเก่า) หรือ ตัวแบบใหม่ (ที่ใช้ในระบบใหม่) … หรือ บางขั้นตอนในระบบเก่าต้องวิ่งไปโน่นไปนี่ อ้อมไปอ้อมมา ต้องประมวลผลสองสามครั้ง ปัดเศษบ้าง อะไรบ้าง แต่ระบบใหม่ซัดโป้งเดียวจบ ทีนี้มามาคูณด้วยจำนวนมาก ๆ มันก็จะมีความแตกต่างกันมากขึ้น …
เมื่อทวนสอบกระบวนการและยืนยันผลแล้ว เขาก็จะดูเสถียรภาพการทำงานของระบบใหม่ โดยให้มันรันคู่กับระบบเก่าไปสักช่วงเวลาหนึ่ง และในช่วงนี้ก็จะมีการปรับแก้ระบบบ้างเพื่อให้มีความเหมาะสมต่อการใช้งาน (Optimization)
ช่วงเวลานี้ก็จะมีการฝึกอบรมการใช้งานให้กับผู้ใช้ เพื่อให้คุ้นเคยกับระบบใหม่ (เช่น หน้าจอที่เปลี่ยนไป ขั้นตอนการทำงานที่เปลี่ยนไป) โดยแบ่งเป็นสามช่วง ช่วงแรก เขาจะทำการจำลองหน้าจอของส่วนต่าง ๆ ขึ้นมาแล้วอธิบายให้ผู้ใช้ทราบว่า หน้าจอนี้คืออะไร ต้องป้อนข้อมูลอะไรเข้าไป เข้ามูลเหล่านี้นำไปประมวลผลอย่างไร ข้อมูลจะไหลไปไหน เขาจะตามดูได้อย่างไร เป็นต้น พอผู้ใช้ทำเป็นแล้ว ก็จะเข้าสู่ช่วงที่สอง เขาจะให้ผู้ใช้ทดลองใช้งานระบบใหม่ซึ่งมีหน้าจอและขั้นตอนเหมือนกับการจำลองมาทุกประการ โดยเขาจะนั่งอยู่ด้วยเพื่อให้คำแนะนำต่าง ๆ จากนั้นก็จะเข้าสู่ช่วงที่สาม คือให้ผู้ใช้ใช้ระบบจริง ๆ เหมือนทำงานตามปกติ คราวนี้เขาจะนั่งคอย monitor ดูว่า ใครทำผิดหรือข้ามขั้นตอนตรงไหน เข้าก็จะเดินมาบอก มาอธิบายว่า ผิดตรงไหน ควรแก้ไขอย่างไร
หลังจากผู้ใช้สามารถใช้ระบบใหม่ได้แล้ว เขาก็กำหนดวันขึ้นมาเพื่อทำการตัดระบบเก่าออกแล้วเริ่มใช้ระบบใหม่แทน ถึงช่วงนั้นเข้าก็จะ freeze ระบบ (หมายถึง ในช่วงเวลานี้ ห้ามสร้าง transaction ใหม่ขึ้นมา) แล้ว เคลียร์ข้อมูลระบบใหม่ที่ผู้ใช้ทดลองทำโน่นทำนี่ตอนอบรมบ้าง ตอนทดสอบระบบบ้าง ทิ้งไปให้หมด แล้วดึงข้อมูลต่าง ๆ จากระบบเก่าเข้าสู่ระบบใหม่ทั้งหมด เมื่อเสร็จสิ้นแล้วก็ประกาศว่า ระบบใหม่ Go Live แล้วนะครับ เพื่อให้ทุกคนรับรู้ว่า ระบบเก่าไม่ได้ใช้งานแล้ว ให้ใช้ระบบใหม่ทั้งหมด
เบื้องหน้า เราก็ประกาศแบบนั้น มันเหมือนกับว่า เราถอดปลั๊กไฟระบบเก่าแล้ว มีเพียงระบบใหม่เท่านั้นที่รันอยู่ตอนนี้ ดังนั้น จะป้อนข้อมูล จะออกรายงาน อะไร ก็ให้ระวังหน่อยนะ เพราะไม่มีระบบเก่าให้ใช้แล้ว …
เบื้องหลังเราคงยังปล่อยให้ระบบเก่ารันขนานอยู่ช่วงหนึ่ง แต่ปิดส่วนการรับข้อมูลผ่านพนักงานและการออกรายงานทิ้งไป แล้วใช้โปรแกรมดึงข้อมูลจากระบบใหม่เข้ามาประมวลในระบบเก่าขนานกันอยู่ตลอด … อันนี้ผมถามเขาว่า ทำไปทำไม ในเมื่อเราก็รันคู่กันมาตลอดพักหนึ่งแล้ว ระบบใหม่ก็พิสูจน์แล้วว่าถูกต้อง มีเสถียรภาพดี ผู้ใช้ก็เทรนจนทำงานได้แล้ว ทำไมเราต้องรันระบบเก่าแบบหลบ ๆ ซ่อน ๆ ต่อไปอีก …
เขาตอบว่า อะไรก็เกิดขึ้นได้ทั้งนั้น อย่าไปวางใจ … ถ้าเราบอกผู้ใช้ว่ายังมีระบบเก่ารันอยู่ ผู้ใช้บางคนก็อาจจะแอบไปใช้ระบบเก่าอยู่ ทำให้ไม่โฟกัสไปที่ระบบใหม่หรือใช้ระบบใหม่ไม่เต็ม 100 … ข้อนี้ผมก็พยักหน้าเข้าใจ …
แต่อีกคำตอบหนึ่งที่ทำให้ผมอึ้งไปเหมือนกันก็คือ เขาบอกว่าบางทีผู้ใช้มีกระบวนการบางอย่างที่เขาไม่บอกเรา (เขาเรียกว่ามี Hidden process) เช่น เอาข้อมูลไปทำบางอย่างนอกระบบ (เช่น เอาไปข้อมูลไปปรับแก้ แล้วใส่กลับเข้ามาใหม่) ถึงตอนนี้เขาจะทำไม่ได้ เขาจะเริ่มโวยวายออกมาว่า ระบบมันผิดบ้าง อะไรบ้าง เพราะมันจะมีบางอย่างต่างไปจากเดิม … เราจะสามารถสอบทาน แกะรอย จากระบบเก่าได้ …
ผมถามเขาว่า มีแบบนี้ด้วยหรือ ยูเคยเจอมาก่อนหรือ … เขาตอบว่า มี … เขาเคยพบในองค์กรที่ตั้งมานาน ระบบ IT ค่อนข้างล้าสมัย ทำให้พนักงานทำการแทรกแซงการทำงานระบบได้ อันเป็นการแสดงว่า หลังจากระบบถูกนำมาใช้งานแล้ว องค์กรไม่มีการตรวจสอบระบบเลย …
ผมว่าอันนี้น่าสนใจ สมมติว่ามีองค์กรหนึ่งตั้งมาสิบปีแล้วและผมเพิ่งเข้ามาทำงาน ผมย่อมเชื่อว่าระบบที่ใช้งานอยู่นั้น มัน OK อยู่แล้ว เพราะองค์กรใช้อยู่ทุก ๆ วันมาเป็นสิบปี … เป็นธรรมดาอยู่เองที่ผมย่อมไม่สนใจที่จะไปทวนสอบมัน เพราะผมคิดว่ามัน OK อยู่แล้ว (จริง ๆ แล้ว จะ OK หรือ No… K ผมก็ไม่รู้) คงไม่มีใครไปเจาะมัน (มันอาจจะมีใครเจาะอยู่ก็ได้ แต่ไม่ใช่เรื่องของผมที่ผมต้องไปหา) และผมไม่รู้ว่า ระบบนั้น ๆ ทำงานอย่างไร (อันนี้ไม่รู้จริง ๆ แล้วทำไมผู้ต้องรู้ละครับ) … ผมจึงกล่าว ประเด็นนี้น่าสนใจครับ
ผมถามเขาต่อว่า เขาจะรันระบบเก่าอยู่นานเท่าใด เขาก็บอกว่า โดยทั่วไปก็หนึ่งรอบกิจกรรมที่สำคัญ เช่น บางแห่งก็หนึ่งเดือน บางแห่งก็ไตรมาสหนึ่ง เพราะต้องมีการสรุป รายรับ รายจ่าย ต้นทุน กำไร อะไรแบบนี้ … ถ้ามีปัญหาอะไรเกิดขึ้น ก็จะเริ่มมองเห็นแล้ว … อืม … ได้ความรู้เพิ่มขึ้นอีกหน่อยแล้วครับ …