Kurt มาถึงที่ Dockside ที่สว่างไสวแล้ว บนโต๊ะมีเบียร์สองเหยือกและไวน์หนึ่งขวดวางอยู่ตอนที่ Maxine มาถึง เธอดีใจที่เห็นเขาและเหยือกพวกนั้น เพราะมันหมายความว่าสมาชิก Rebellion คนอื่นๆ กำลังตามมา เธอรู้สึกขอบคุณที่มีเพื่อนร่วมกลุ่มเหล่านี้
ปกติ Maxine แทบจะไม่ดื่มเพื่อคลายเครียด แต่ทันทีที่เธอนั่งลง เธอก็ทำแบบนั้นทันที เธอซดไวน์ pinot noir ไปสองแก้วอย่างรวดเร็ว ทั้งที่รู้ดีว่าพรุ่งนี้เช้าเธอจะต้องทรมานแน่ๆ
แต่คืนนี้มันไม่สำคัญแล้ว เพราะไวน์ช่วยให้เธอรู้สึกดีขึ้นจริงๆ การผสมผสานของน้ำตาลและแอลกอฮอล์ช่วยให้เธอต่อสู้กับอารมณ์ที่ปั่นป่วนและสับสนที่รุมเร้าเธอมาตั้งแต่เดินตาม Jared เข้าไปยังโลกประหลาดของฝ่าย Ops (Ops Bizarro World)
เมื่อผู้คนเริ่มทยอยมาถึงและนั่งลง บรรยากาศรอบโต๊ะก็ดูคึกคัก Tom และ Brent กำลังนั่งทำงานอยู่ที่โต๊ะโดยเปิดแล็ปท็อปค้างไว้ พวกเขาก้าวหน้าไปมากในการทำให้ Data Hub รันบนสภาพแวดล้อมแบบย่อส่วน (slimmed-down environment) พวกเขาอยู่ได้ไม่นาน เพราะพรุ่งนี้เช้าต้องไปพบกับทีม QA เพื่อช่วยให้พวกนั้นติดตั้งระบบและเริ่มทดสอบได้เสียที ดูเหมือนว่า Purna และทีมของเธอก็อาจจะแวะมาที่นี่ทีหลังเหมือนกัน
Shannon เขียนบันทึกจากการสัมภาษณ์ทีมต่างๆ ใน Phoenix เธอระบุนักพัฒนาเกือบสิบคนที่ต้องการใช้สิ่งที่กลุ่ม Rebellion สร้างขึ้นเพื่อแก้ปัญหาที่พวกเขาต้องเจอทุกวัน และเมื่อโปรเจกต์ Inversion เริ่มต้นขึ้นอย่างเต็มตัว พวกเขาก็มีเวลาที่จะทำมัน
Maxine ยิ้มอย่างอ่อนแรงขณะฟังทุกคนแชร์เรื่องราวต่างๆ ในที่สุด Kurt ก็รินเครื่องดื่มรอบใหม่ให้ทุกคนแล้วหันมาหา Maxine “เป็นยังไงบ้าง Maxine?”
“Kurt พวกเราแย่แล้วล่ะค่ะ” เธอเอามือกุมขมับด้วยความหงุดหงิด
Maxine พยายามจะอธิบาย ปกติเธอเป็นคนที่พูดจาฉะฉานและแม่นยำมาก แต่ในขณะที่เธอฟังตัวเองพูด เธอก็รู้ตัวดีว่าเธอกำลังพูดจาเหมือนคนบ้า
เธอเริ่มเล่าใหม่ พยายามอย่างหนักที่จะสื่อสารว่าช่วงบ่ายที่ผ่านมามันทำให้เธอว้าวุ่นใจแค่ไหน “ตั้งแต่ฉันถูกเนรเทศมาที่โปรเจกต์ Phoenix ฉันเปิด Ticket ไปเป็นร้อยใบเพื่อพยายามจะทำงานให้เสร็จ ฉันคอยตามดู Ticket พวกนั้นว่ามันไปถึงไหน หลายใบไปจบที่ Ops บางใบไปที่ QA พอฉันย้ายมาอยู่ทีม Data Hub ฉันก็เปิด Ticket เพิ่มขึ้นอีก แต่ที่สำคัญกว่านั้นคือ ฉันได้มาทำงานอยู่อีกฝั่งหนึ่งของ Ticket พวกนั้น ทำงานที่คนอื่นต้องการ แต่การจะทำงานเหล่านั้นให้เสร็จ ฉันกลับต้องเปิด Ticket เพิ่มขึ้นไปอีก มันเหมือนเป็นวงจร Ticket ขนาดใหญ่เลยค่ะ Kurt ที่ถูกสร้างและส่งต่อกันไปมาซ้ำแล้วซ้ำเล่าไม่มีที่สิ้นสุด”
“ใครเป็นคนทำแบบนี้กับเรากันคะ?” ในที่สุดเธอก็ถามออกมา
Adam ยิ้มอย่างเศร้าๆ “พวกเราทำตัวเองนี่แหละครับ เมื่อก่อน QA เคยเป็นส่วนหนึ่งของทีม Dev แต่พอผมเข้ามา QA ก็ถูกแยกออกไปเป็นอิสระ เราสร้างกฎเกณฑ์มากมายว่าทำไมเราต้องแยกออกมาจากงานของ Dev เพื่อปกป้องธุรกิจจากเหล่านักพัฒนาที่บ้าบิ่นและไม่ระมัดระวัง ในแต่ละปี เราเอาสิ่งที่ผิดพลาดมาเป็นข้ออ้างในการสร้างกฎเพิ่มขึ้นเรื่อยๆ เพื่อ ‘ทำให้นักพัฒนามีความรับผิดชอบมากขึ้น’ แต่นั่นกลับยิ่งทำให้เราช้าลงไปอีก สิ่งที่ทำให้ผมตื่นเต้นกับกลุ่ม Rebellion คือพวกเรากำลังพยายามล้มเลิกกฎเกณฑ์เหล่านั้นทั้งหมดครับ”
Dwayne พยักหน้าเห็นด้วย “Adam พูดถูกครับ ในฝั่ง Operations เราก็ทำตัวเองเหมือนกัน มันเริ่มมาจากเหตุผลที่ดี—เรานำกระบวนการ ITIL เข้ามาใช้เพื่อสร้างความเป็นระเบียบ ซึ่งมันดีกว่าความโกลาหลที่เราเคยมีก่อนหน้านั้นมหาศาล แต่ใน Ops มันแย่กว่านั้น เพราะเรามีความเชี่ยวชาญเฉพาะด้าน (specialization) เยอะมาก งานที่ซับซ้อนอย่างการ deployment ต้องผ่านทุกแผนกเหล่านั้น เรามีทั้งเซิร์ฟเวอร์, ฐานข้อมูล, เน็ตเวิร์ก, ไฟร์วอลล์... ให้ตายสิ ในช่วงทศวรรษที่ผ่านมา เรายิ่งสร้างไซโล (silos) เพิ่มขึ้นไปอีก ทั้งทีม storage, VLANs, automation, virtualization, hyperconverged infrastructure และไม่รู้ว่ามีอะไรอีกบ้าง”
“และด้วยเทคโนโลยีสมัยใหม่ (modern technology stacks) เราต้องการคนที่มีความเชี่ยวชาญเฉพาะทางลึกซึ้งในเรื่อง containers, logging, secrets management, data pipelines, NoSQL databases ไม่มีใครหรอกครับที่จะเป็นผู้เชี่ยวชาญในทุกเรื่องที่ว่ามา!” Dwayne กล่าว “เราเลยต้องการระบบ Ticket มาจัดการกระแสงานที่ซับซ้อนพวกนี้ แต่มันง่ายมากที่ผู้คนจะลืมเลือนจุดประสงค์ที่แท้จริงของงานทั้งหมดนี้ นั่นคือเหตุผลว่าทำไมกลุ่ม Rebellion ถึงสำคัญมาก ดูสิว่ามีกี่คนที่ยอมทำงานดึกเพื่อช่วยงาน Data Hub”
ทุกคนรอบตัว Maxine ต่างยกแก้วขึ้น ตะโกนว่า “เห็นด้วย! แด่การโค่นล้มระเบียบอำนาจเก่าอันทรงพลัง!” Maxine ยกแก้วของเธอขึ้นเช่นกัน แต่ไม่ได้พูดอะไร
เธอได้ยินอยู่บ่อยๆ ว่า IT คือศูนย์รวมประสาทของทั้งองค์กร เพราะในช่วงสามสิบปีที่ผ่านมา เกือบทุกกระบวนการทางธุรกิจถูกทำให้เป็นอัตโนมัติผ่านระบบไอที แต่ด้วยเหตุผลบางประการ ธุรกิจกลับปล่อยให้ระบบประสาทของตนเองเสื่อมถอยลง เหมือนโรคปลอกประสาทเสื่อมแข็ง (multiple sclerosis) ที่ขัดขวางการไหลเวียนของข้อมูลภายในสมอง และระหว่างสมองกับร่างกาย
Maxine รินเครื่องดื่มเพิ่มอีกแก้ว แต่เธอก็จิบไปเพียงนิดเดียว ทันใดนั้นเธอก็รู้สึกไม่สบายตัว อย่างเห็นได้ชัด มันไม่ได้เกี่ยวกับสิ่งที่เธอดื่มเลย เธอต้องกำลังจะเป็นอะไรสักอย่างแน่ๆ เธอรีบบอกลาทุกคนและขอบคุณที่มาร่วมดื่มกันในคืนนี้
เมื่อถึงบ้าน เธอกอดสามี บอกลาลูกๆ และรู้สึกโล่งใจเมื่อได้คลานขึ้นเตียงหลังจากอาบน้ำเสร็จ
คืนนั้น Maxine เริ่มมีเหงื่อออกอย่างควบคุมไม่ได้ จากนั้นก็สลับด้วยอาการหนาวสั่นจนฟันกระทบกัน แล้วก็กลับมาเป็นไข้อีกครั้ง เธอพ่ายแพ้ให้กับโรคภัยที่เพิ่งคร่าชีวิตเพื่อนร่วมทีมจำนวนมากไปหลังจากการปล่อยตัว Phoenix
คืนนั้น เธอฝันไม่จบไม่สิ้นว่าตัวเองติดอยู่ในระบบราชการ ถูกส่งต่อจากโต๊ะหนึ่งไปอีกโต๊ะหนึ่ง ถูกพักสาย ถูกขอให้กรอกแบบฟอร์มเพิ่ม ถูกย้ายจากแผนกหนึ่งไปอีกแผนกหนึ่ง และถูกส่งกลับไปต่อแถวใหม่เพื่อกรอกแบบฟอร์มเพิ่มอีก แบบฟอร์มเหล่านั้นถูกส่งเข้าไปในคลังข้อมูล (data warehouses) ขนาดมหึมา ที่ซึ่งพวกมันถูกป่นจนกลายเป็นไฟล์ข้อความ CSV ที่มีน้ำมันเยิ้มและพ่นไอร้อนออกมา แถมยังเต็มไปด้วย byte-order marks ที่สุ่มขึ้นมา
เธอเห็นฟันเฟืองของเครื่องจักรระบบราชการที่ไร้หัวใจกำลังหมุนไป โดยมีผู้คนที่ช่วยเหลือตัวเองไม่ได้ติดอยู่ในฟันเฟืองนับไม่ถ้วน เธอได้ยินเสียงกรีดร้องที่ไร้ความหมายของพวกเขา จนกระทิ่งพวกเขาเงียบเสียงลง พลังงานทั้งหมดถูกสูบออกไป เพียงเพื่อจะถูกปลุกขึ้นมาเป็นพักๆ เพื่อให้กรอก timecards เท่านั้น
เธอเข็นกองภูเขา Ticket กระดาษขึ้นบันได ข้ามส่วนของ cubicles และลงบันไดไปอีกครั้ง ถูกสาปให้ต้องเดินทางผ่าน “จัตุรัสแห่งซิซิฟัส” (Square of Sisyphus) นี้ไปตลอดกาลเพื่อเป็นการลงโทษสำหรับเหตุการณ์ payroll ล่ม
เมื่อเธอตื่นขึ้น พระอาทิตย์กำลังขึ้น หมอนของเธอชุ่มไปด้วยเหงื่อ โพรงจมูกและปอดของเธอคัดแน่น เธอเจ็บหน้าอกจากการไออย่างหนัก เธอแทบจะขยับตัวไม่ได้เลย
เธอฝืนตัวเองให้ลุกจากเตียงและไปอาบน้ำ ไอน้ำร้อนช่วยให้รู้สึกดีขึ้น แต่พอออกมา วงจรของเหงื่อที่ออกอย่างควบคุมไม่ได้และอาการหนาวสั่นก็เริ่มขึ้นอีกครั้ง เธอเดินโซเซลงไปข้างล่างเพื่อกินขนมปังปิ้งหนึ่งแผ่นและดื่มน้ำ เพียงเพื่อจะพบว่าเจ็บคอมากแค่ไหน
สามีของเธอบอกให้เธอนอนพักบนเตียง เขาจะจัดการให้ลูกๆ ไปโรงเรียนตามกำหนดการเอง เธอพึมพำขอบคุณอย่างซาบซึ้ง เธอเดินขึ้นบันไดไปได้แค่ครึ่งทางก็ต้องหยุดพัก ก่อนจะค่อยๆ คลานกลับขึ้นไปบนเตียงในที่สุด
ด้วยความสามารถในการอ่านหน้าจอโทรศัพท์ที่จำกัด เธอส่งข้อความหาทุกคนเพื่อแจ้งว่าเธอไม่สามารถไปทำงานได้ เธอเผลอหลับไปแล้วก็สะดุ้งตื่นขึ้นมาเมื่อนึกได้ว่าเธอออกจากออฟฟิศมาโดยไม่ได้กรอก timecard แต่เธออ่อนแอเกินกว่าจะทำอะไรกับมันได้ ในที่สุดเธอก็หลับไปอีกครั้ง พร้อมกับเสียงครางจากอาการปวดเมื่อยไปทั้งตัว
วันต่อมา Maxine แทบจะลุกจากเตียงไม่ได้เลย เธอกลายเป็นหนึ่งในผู้บาดเจ็บที่ยังเดินได้ (walking wounded) เข้าร่วมกลุ่มกับบรรดาคนที่ไม่สามารถทำงานได้ ไม่ว่าจะเพราะความเจ็บป่วย ระบบราชการ หรือการติดอยู่ใน "สถานที่รอคอย" (Waiting Place)
ด้วยความต้องการยาแก้หวัดอย่างหนัก เธอจึงฝืนออกไปข้างนอกและเดินไปตามชั้นวางของในร้านค้าโดยสวมเสื้อผ้าซ้อนกันห้าชั้นเพื่อหาตัวช่วยบรรเทาอาการ เพื่อป้องกันไม่ให้ครอบครัวติดไข้ เธอจึงซื้อหน้ากากอนามัยมาใส่ ราวกับว่าเป็นพนักงานออฟฟิศญี่ปุ่นบนรถไฟใต้ดิน เมื่อสามีเห็นเธอใส่หน้ากาก เขาก็ได้แต่หัวเราะ
ช่วงเที่ยงวันศุกร์ Maxine เริ่มรู้สึกดีขึ้นเล็กน้อย ในที่สุดเธอก็สามารถตื่นอยู่ได้นานกว่าหนึ่งชั่วโมงในช่วงกลางวัน เธอไม่ได้แตะโทรศัพท์เลยเกือบสองวัน และความจริงคือแทบไม่ได้พูดอะไรเลย ยกเว้นการตอบสามีด้วยคำสั้นๆ แบบฝืนๆ เมื่อเบื่อกับการอ่านนิยายบนเตียง เธอจึงเดินลงมาข้างล่างและส่งข้อความหา Kurt และ Purna:
“พวกนักพัฒนา merge โค้ดกันเสร็จหรือยังคะ?”
ในไม่กี่วินาที Maxine ก็ได้รับข้อความตอบกลับจาก Kurt: "ฮ่าฮ่าฮ่าฮ่าฮ่า! เสียใจด้วยครับ ยังเลย น่าจะวันจันทร์โน่นแหละ แต่ Data Hub และ environment ของมันเกือบจะพร้อมรับการทดสอบแล้วนะ QA น่าจะเริ่มได้เย็นนี้เลย! ถ้าอยากฟังรายละเอียดเพิ่ม โทรหาผมนะ! หวังว่าคุณจะรู้สึกดีขึ้นแล้ว"
Maxine กดเบอร์โทรหาเขา ทันทีที่รับสายเขาก็พูดรัวโดยไม่ทักทายสักคำ “Brent กับ Tom ทำงานกันไม่หยุดเลยครับ พวกเขาใกล้จะทำให้ Data Hub รันใน environment ใหม่ที่เล็กลงได้แล้ว นักพัฒนา Data Hub ทุกคนกำลังร่วมมือกับทีม QA เพื่อเขียน automated tests ด้วยกัน Adam กับเหล่านักพัฒนาอีกหลายคนกำลังนำคลาสสอนเขียนโค้ด และพวก QA บางคนก็เริ่มเขียนเทสเองได้โดยไม่ต้องให้ใครช่วยแล้ว คุณน่าจะเห็นเทสพวกนั้นถูกเช็กอินเข้าไปใน repo แล้วนะครับ”
“และ Shannon ก็กำลังกรุยทางให้ฝั่ง Security อยู่ครับ” Kurt กล่าว “Environment images จะถูกลงแพตช์ (patch) โดยอัตโนมัติทุกวัน และในเร็วๆ นี้ dependencies ของแอปพลิเคชันก็น่าจะทำได้เหมือนกัน!”
Maxine พยายามยิ้ม เธอทึ่งกับสิ่งที่พวกเขาทำสำเร็จในช่วงที่เธอป่วย เธอเข้าไปดูในแชนเนลแชทและเห็นข้อความที่น่าตื่นเต้นเกี่ยวกับความคืบหน้าของงาน เธอชอบที่ได้เห็น code commits จำนวนมากจากทั้งทีม Dev และ QA
โดยไม่มีข้อสงสัย Maxine รู้ดีว่าในที่สุดเหล่านักพัฒนาจะเป็นผู้รับผิดชอบการทดสอบโค้ดของตัวเอง โดยมี QA รับบทบาทเชิงกลยุทธ์มากขึ้น คอยทำหน้าที่โค้ชและที่ปรึกษา นั่นหมายความว่า automated tests ทั้งหมดที่พวกเขากำลังเขียนกันอยู่จะถูกรันทุกครั้งที่มีการเช็กอินโค้ด ทันทีที่พวกเขาติดตั้งระบบ build ส่วนกลางและเซิร์ฟเวอร์ Continuous Integration (CI) เสร็จ พวกเขาใกล้จะทำสำเร็จแล้ว!
“เยี่ยมมากค่ะ” เธอตอบด้วยเสียงแหบพร่า ซึ่งทำเอาเธอเจ็บฟันจนต้องบอก Kurt ว่าเดี๋ยวเจอกันสัปดาห์หน้าแล้วกดวางสายไป
Maxine คลานกลับขึ้นเตียงและหลับตาลง พลางคิดถึงก้าวต่อไป ถ้าพวกเขาสามารถทำให้ฝ่าย Ops ตกลงด้วยได้ พวกเขาอาจจะสามารถทำระบบ deployment อัตโนมัติไปยังบริการ Data Hub ใน production ได้เลย และแม้ว่ามันจะดูเหมือนเป็นเรื่องที่ยากมาก แต่บางทีพวกเขาอาจจะถึงขั้นรันบริการ Data Hub ใน production จากคลัสเตอร์ของพวกเขาเองได้ด้วย
มันจะช่วยให้ทุกอย่างง่ายขึ้นมากสำหรับทุกคน แม้กระทั่งฝ่าย Operations เอง อย่างน้อยที่สุด พวกเขาก็จะสามารถทดสอบและ deploy การเปลี่ยนแปลงได้ทันทีหลังจากที่ทำงานเสร็จ โดยไม่ต้องรอรอบการทดสอบถัดไปอีกสองสัปดาห์
คำถามที่แท้จริง Maxine ตระหนักได้ คือพวกเขาควรจะทำฟีเจอร์ไหนดี เธอสงสัยว่าฟีเจอร์ไหนใน Data Hub ที่จะมีความสำคัญที่สุดสำหรับธุรกิจ และควรจะโฟกัสไปที่หน่วยธุรกิจไหนดี เพราะ Data Hub มีความพิเศษตรงที่มันเชื่อมต่อกับหลายส่วนงานของ Parts Unlimited ซึ่งแต่ละส่วนก็มีความต้องการและลำดับความสำคัญที่แตกต่างกันไป
เธอพยายามจะกลับไปนอนต่อ แต่สมองเธอยังคงคิดวนเวียนอยู่ว่ากิจกรรมไหนที่จะสร้างมูลค่าทางธุรกิจสูงสุดให้กับ Data Hub ด้วยความอยากรู้ เธอจึงลุกขึ้นนั่งและเปิดแล็ปท็อป เข้าสู่ระบบจัดการ Ticket แต่แทนที่จะเปิด Ticket ใหม่หรือทำงานตาม Ticket ของคนอื่น เธอแค่ลองสำรวจไปรอบๆ นี่เป็นครั้งแรกที่เธอทำแบบนี้ตั้งแต่ถูกเนรเทศมา
เพียงไม่กี่คลิก เธอก็รู้วิธีดู Ticket ทั้งหมดที่ยังค้างอยู่ใน Data Hub มี Ticket อยู่เป็นร้อยใบ ถูกแยกประเภทด้วยสีตามระบบธุรกิจที่เกี่ยวข้อง เธอถึงกับสะดุ้งเมื่อเห็นว่ามี Ticket หลายใบที่มีอายุเกินหนึ่งปีแล้ว มิน่าล่ะทุกคนถึงได้ดูหงุดหงิดกันขนาดนี้
เธอสงสัยว่าฟีเจอร์ไหนในรายการที่ค้างอยู่ (backlog) นี้มีความสำคัญที่สุดสำหรับบริษัท ส่วนสุดท้ายนั้นง่ายมาก Steve บอกทุกคนว่าลำดับความสำคัญสูงสุดของบริษัทคืออะไรในงาน Town Hall Steve และ Sarah พูดซ้ำๆ ถึงความสำคัญของการช่วยลูกค้าดูแลรักษารถให้ใช้งานได้ และการทำให้ลูกค้าซื้อสิ่งที่ต้องการได้ง่ายๆ การทำสิ่งนี้ได้ดีจะช่วยเพิ่มรายได้ต่อลูกค้าหนึ่งคน, เพิ่มขนาดคำสั่งซื้อเฉลี่ย และเพิ่มรายได้และผลกำไรโดยรวม
ด้วยความคิดนี้ เธอจึงไล่ดูหน้าฟีเจอร์ทีละหน้า มันยากที่จะรู้ว่าจริงๆ แล้วแต่ละฟีเจอร์คืออะไรจากแค่ชื่อ Ticket หรือการอ่านเนื้อหาข้างใน เพราะส่วนใหญ่มันเต็มไปด้วยคำอธิบายว่าจะทำ ‘อะไร’ และทำ ‘อย่างไร’ แต่ไม่ได้บอกว่าทำไป ‘ทำไม’
ในที่สุด Maxine ก็สังเกตเห็นคำหนึ่งที่ปรากฏขึ้นมาซ้ำๆ: “Item Promotion” (โปรโมชั่นสินค้า)
เธอเห็น Ticket จำนวนมากที่เกี่ยวข้องกับโปรโมชั่นช่วงฤดูร้อน ที่เสนอส่วนลดแบบแพ็กเกจสำหรับการเปลี่ยนแบตเตอรี่, การซ่อมแอร์ และรายการบำรุงรักษาระบบทำความเย็น งานพวกนี้ยังไม่ได้เริ่มทำเลย Maxine ถอนหายใจ ในเมื่อตอนนี้เข้าสู่ฤดูใบไม้ร่วงแล้ว โอกาสที่เกี่ยวข้องกับแคมเปญเหล่านั้นก็หลุดลอยไปแล้ว
เธอสงสัยว่ากระบวนการลบฟีเจอร์ที่ไม่เกี่ยวข้องแล้วทิ้งไปคืออะไรกันแน่ การแบกรับสัญญาที่ยังไม่ได้ทำไว้ตลอดไปจนถึงอนาคตนั้นเป็นภาระทางความคิดและจิตวิญญาณที่หนักหน่วงมาก เพราะใครบางคนอาจจะถามขึ้นมาเมื่อไหร่ก็ได้ว่า “ฟีเจอร์ของฉันอยู่ไหน?”
ด้วยความอยากรู้ เธอจึงค้นหาคำว่า “Winter Promotion” และเห็นรายการ Ticket ยาวเหยียด เธอเริ่มคลิกเข้าไปดูทีละใบ Ticket ใบหนึ่งที่ระบุว่าเสร็จสมบูรณ์แล้วคือการสร้างรหัสสินค้า (SKU) สำหรับแพ็กเกจใบปัดน้ำฝนและที่ขูดน้ำแข็ง ส่วน Ticket ที่ยังทำค้างอยู่คือการสร้างราคาพิเศษสำหรับแพ็กเกจนั้น
เธอเห็นรูปแบบเดิมๆ แบบนี้อีก แต่เป็นเรื่องของยางรถยนต์ฤดูหนาวและโซ่พันล้อ, โซ่และน้ำยาฉีดกระจกกันน้ำแข็ง และอื่นๆ อีกมากมาย มี Ticket อีกชุดสำหรับ “Thanksgiving Promotion” แต่ละแคมเปญเหล่านี้ต้องการการ deploy ผ่าน Data Hub ถึงสองครั้ง—ครั้งหนึ่งเพื่อสร้างสินค้าใหม่ในฐานข้อมูลสินค้า และอีกครั้งเพื่อสร้างราคาโปรโมชั่นพิเศษในฐานข้อมูลราคา
นั่นหมายความว่าแพ็กเกจส่วนลดแต่ละชุดต้องใช้เวลาถึงสองเดือนกว่าจะสร้างเสร็จ เธอรู้สึกเหมือนกำลังจะเจออะไรบางอย่างเข้าแล้ว จึงลองสแกนฟีเจอร์อื่นในหมวดโปรโมชั่นดู มี Ticket ใบหนึ่งสะดุดตาเธอทันที มันถูกสร้างขึ้นเมื่อเจ็ดเดือนก่อน หัวข้อระบุว่า: “สร้างในขั้นตอนเดียว: รหัสสินค้า (SKU) แพ็กเกจใหม่พร้อมส่วนลดที่เกี่ยวข้อง”
เมื่อเปิดดู Ticket Maxine อ่านเจอว่าฝ่ายการตลาดต้องการความสามารถในการสร้างและกำหนดราคาสินค้า SKU ใหม่ได้เองทั้งหมด (self-service) โดยไม่ต้องผ่านทีม Data Hub
ใช่เลย! เหมือนที่ฉันคิดไว้เป๊ะ คำอธิบายฟีเจอร์ระบุว่ากระบวนการปัจจุบันต้องใช้เวลาเกือบเก้าสิบวันกว่าที่ส่วนลดที่สร้างขึ้นใหม่จะพร้อมแสดงผลให้ลูกค้าเห็น
ผู้สร้าง Ticket ใบนั้นคือ Maggie Lee ผู้อำนวยการอาวุโสฝ่ายผลิตภัณฑ์ ทันใดนั้น Maxine ก็สงสัยว่า Data Hub อาจจะกำลังนั่งทับข้อจำกัดขององค์กรอยู่! เธอส่งอีเมลหา Kurt และ Maggie ทันที อีกประมาณห้านาทีต่อมาเธอก็ได้รับโทรศัพท์จาก Kurt
เธอตอบด้วยเสียงแหบพร่า “คุณเห็นอีเมลฉันแล้วใช่ไหมคะ?”
“เห็นแล้วครับ” Kurt กล่าว “ผมเข้าไปดูลิงก์ที่คุณส่งมาแล้ว น่าสนใจจริงๆ ครับ ช่วงที่คุณไม่อยู่ผมพยายามหาคำตอบว่าใครคือลูกค้าที่สำคัญที่สุดของเรา และผมก็กำลังมองหา ‘ผู้มีอิทธิพล’ ที่จะช่วยคุ้มกันเราในตอนที่เราจะย้าย Data Hub ออกจาก Phoenix ชื่อของ Maggie ปรากฏขึ้นมาซ้ำแล้วซ้ำเล่าเลยครับ”
“เธอทำงานให้ Sarah และเจ้าของผลิตภัณฑ์ (product owners) ทั้งหมดของร้านค้าจริงและอีคอมเมิร์ซรายงานตรงต่อเธอหมดเลย” Kurt กล่าวต่อ “เดี๋ยวผมส่งผังองค์กรที่ผมไปขุดมาให้ครับ ผมได้เจอเลขานุการของเธอแล้ว และเรามีการนัดหมายที่จะคุยกับเธอเร็วๆ นี้ครับ”
“เยี่ยมมากเลยค่ะ Kurt!” Maxine กล่าว แต่เมื่อเธอยิ้ม เธอก็เผลอครางออกมาด้วยความเจ็บ เธออยากกลับไปทำงานใจจะขาด... เมื่อไหร่ที่เธอหายดีนะ
เธอครางเบาๆ แล้วกดวางสาย คลานกลับขึ้นเตียงและหลับไป
วันจันทร์ Maxine กลับมาทำงานแล้ว เธอกำลังคุยเรื่อง Data Hub กับ Dwayne, Tom และ Kurt ในห้องประชุม Tom กำลังโชว์หน้าจอแล็ปท็อปของเขาขึ้นบนทีวีหน้าห้อง “พวกเราทำงานเรื่องนี้กันทั้งสุดสัปดาห์ เพื่อให้แน่ใจว่ามันเสถียรพอที่จะโชว์ได้ โอ้โห ผมตื่นเต้นมากเลยครับ ตอนนี้เรามี environment ของ Data Hub ที่รันอยู่ใน Docker image ทั้งหมดแล้ว ดังนั้นทุกคนจะสามารถใช้งานมันได้ทันที Brent กับผมสร้างมันขึ้นมาจากงานที่ Maxine ทำไว้ก่อนจะป่วย ขอบคุณมากนะครับ Maxine!”
“คราวนี้ แทนที่จะต้องรอเป็นสัปดาห์เพื่อเข้าใช้สภาพแวดล้อม QA ที่แสนจะหายาก คุณก็แค่รัน Docker image นี้บนแล็ปท็อปของคุณ มันใช้เวลาดาวน์โหลดแค่ไม่กี่นาที แต่ใช้เวลาเริ่มระบบแค่ไม่กี่วินาทีเท่านั้น มันสุดยอดมากครับ...” Tom กล่าวพลางพิมพ์คำสั่งในเทอร์มินัล “ด้วยความช่วยเหลือจาก Brent ผมจัดการเชื่อมต่อ environment พวกนี้เข้ากับ CI server ของเราเพื่อให้รันการทดสอบ Data Hub ได้ ในที่สุดเราก็ได้เข้าสู่ธุรกิจการ build และ test อย่างจริงจังเสียที! เรากำลังใช้มันร่วมกับทีม QA เพื่อทดสอบสี่ฟีเจอร์ที่เราทำเสร็จตั้งแต่รอบ release ล่าสุดครับ”
เขาหันมามอง Maxine และพูดว่า “เรามีกำลังประมวลผลบน CI server เพียงพอสำหรับทุกคนที่อยากใช้งาน เราทำไม่ได้แน่ถ้าไม่มีงานเจ๋งๆ ของคุณนะ Maxine”
Tom ยิ้มพลางส่ายหัว “พวกเราอยากทำอะไรแบบนี้มานานหลายปีแล้ว แต่ไม่เคยมีเวลาเลย ผมตื่นเต้นมากเพราะมันจะเปลี่ยนวิธีที่นักพัฒนา Data Hub ใช้เวลาไปโดยสิ้นเชิง ทุกคนจะมีประสิทธิภาพมากขึ้น—พวกเขาจะสามารถพัฒนาและทดสอบได้เร็วขึ้นมาก และถ้ามีปาฏิหาริย์เกิดขึ้นจริง เราอาจจะส่งฟีเจอร์พวกนี้ขึ้น production ได้เร็วขึ้นด้วยครับ”
Kurt ส่งเสียงเชียร์พลางชูหมัดขึ้น “นี่แหละคือเรื่องราวความสำเร็จที่น่าทึ่ง! ในที่สุดเราก็สามารถเริ่มแสดงให้ผู้คนเห็นคุณค่าที่เราส่งมอบได้แล้ว”
Maxine รู้สึกทึ่ง นี่คือความสำเร็จที่ยอดเยี่ยม และเธอภูมิใจในตัว Brent และ Tom ที่เธอเพิ่งรู้จักได้ไม่กี่สัปดาห์ แต่พวกเขากลับทำอะไรได้มากมายขนาดนี้โดยไม่มีเธอ
Kurt ขมวดคิ้ว “จริงๆ แล้ว ผมขอถอนคำพูดครับ นี่คือความสำเร็จของทีม Dev และ QA แต่เรายังมีผู้มีส่วนได้ส่วนเสียทางธุรกิจที่กำลังหัวเสียเพราะยังไม่มีฟีเจอร์ให้ใช้ เราจะเอาฟีเจอร์พวกนี้ขึ้น production ได้ยังไงครับ?”
“นั่นแหละคือโจทย์ที่ยากกว่าเดิมคนละเรื่องเลยครับ (totally different enchilada)” Dwayne กล่าวพลางส่ายหัวและใช้นิ้วเคาะโต๊ะ “Maxine พูดถูก มีประวัติศาสตร์อันยาวนานที่ไม่ยอมให้นักพัฒนา push สิ่งต่างๆ ขึ้น production โดยตรง มีสถาบันต่างๆ ทั้งองค์กรที่ตั้งขึ้นมาเพื่อป้องกันไม่ให้เรื่องนั้นเกิดขึ้นโดยเฉพาะ”
“ใครคือฝ่ายค้านที่ทรงพลังที่สุดครับ?” Kurt ถาม
“ทีม Security แน่นอนครับ” Dwayne ตอบ “พวกเขาจะต้องการทำ security review โค้ดก่อนที่มันจะขึ้น production—นั่นคือนโยบายขององค์กร และฝ่าย Operations ก็คงไม่ค่อยชอบใจนักหรอก และนอกจากนั้น ยังมีคนในฝั่งธุรกิจอีกเพียบที่เคยเข็ดหลาบกับการเปลี่ยนแปลงที่ผิดพลาดจนไม่มีใครกล้ากระโดดดีใจแน่ถ้าคุณเสนอเรื่องนี้... สรุปสั้นๆ คือ ทุกคนคัดค้านการให้นักพัฒนา deploy ขึ้น production โดยตรงครับ” เขากล่าวพร้อมรอยยิ้มที่ดูไม่ค่อยขำเท่าไหร่
Maxine พยักหน้า “Security คุ้นเคยกับ Data Hub ดีอยู่แล้วค่ะ ไม่ใช่ว่าเรากำลังเอาแอปพลิเคชันใหม่ถอดด้ามไปให้พวกเขาดูเสียหน่อย เราแค่ต้องการให้เขาจัดตารางรีวิว Data Hub แยกต่างหากจาก Phoenix เท่านั้นเอง”
“งั้นเราไปพบพวกเขาเถอะ อย่างแย่ที่สุดเขาก็แค่ตอบว่า ‘ไม่’ ซึ่งมันไม่ใช่ว่าเราไม่เคยได้ยินมาก่อนใช่ไหมครับ?” Kurt กล่าว “นอกจาก Security แล้ว กระบวนการอย่างเป็นทางการในการขออนุมัติจาก Operations คืออะไรครับ?”
Dwayne ถอนหายใจและเงียบไปครู่ใหญ่ ในที่สุดเขาก็พูดว่า “เราคงต้องผ่าน TEP-LARB ครับ”
“โอ้” Maxine อุทาน Kurt ถึงกับสะดุ้งราวกับถูกผึ้งต่อย Tom มองไปรอบโต๊ะด้วยความงุนงง “มันแย่ขนาดนั้นเลยเหรอครับ?”
“แหม... มันมีสิ่งที่ผ่านได้ง่ายกว่า TEP-LARB อีกเยอะเลยครับ...” Kurt กล่าวพลางจ้องมองที่ว่างบนโต๊ะข้างหน้าเขา
Dwayne พูดว่า “จริงๆ แล้ว คุณพูดน้อยไปหน่อยนะ Kurt ความจริงคือไม่มีอะไรยากไปกว่าการผ่าน TEP-LARB อีกแล้ว ไม่มีอะไรผ่าน TEP และ LARB ไปได้เลย และผมรู้ดีเพราะผมก็เป็นหนึ่งในคณะกรรมการ LARB”
“เขาพูดถูกค่ะ Kurt” Maxine เสริม “ตลอดหลายปีที่ฉันอยู่ที่นี่ ฉันไม่เคยเห็นอะไรผ่านไปได้เลย แค่กรอกแบบฟอร์มก็งานช้างแล้ว และฉันไม่เคยเห็นพวกเขาอนุมัติอะไรจริงๆ สักอย่าง พวกเขาคือ ‘สภามหาอำนาจผู้มีไว้เพื่อปฏิเสธ’ (Grand Pointless Council of No) เลยล่ะค่ะ”
เธอหันไปมอง Dwayne แล้วพูดว่า “ไม่ได้จะว่าคุณนะคะ”
เขารีบตอบกลับพร้อมรอยยิ้ม “ไม่ถือสาครับ”
“TEP-LARB คืออะไรครับ? แล้วทำไมพวกเขาถึงเอาแต่ปฏิเสธล่ะ?” Tom ถาม
“‘LARB’ ย่อมาจาก Lead Architecture Review Board ครับ” Dwayne อธิบาย “มันคือคณะกรรมการที่ถูกตั้งขึ้นเมื่อหลายสิบปีก่อน หลังจากที่เกิดเรื่องแย่ๆ ขึ้นมากมายในวงการเทคโนโลยี นานก่อนที่ผมจะเข้าทำงานที่นี่อีก มีใครบางคนตัดสินใจสร้างกฎเกณฑ์มากมายเพื่อให้แน่ใจว่าสิ่งใหม่ๆ ทุกอย่างจะถูก ‘ตรวจสอบอย่างเหมาะสม’” Dwayne พูดพลางทำมือเป็นเครื่องหมายคำพูดในอากาศ
“มันคือคณะกรรมการของคณะกรรมการครับ มีสถาปนิกจาก Ops เจ็ดคน, จาก Dev เจ็ดคน, จาก Security สองคน และสถาปนิกองค์กร (Enterprise architects) อีกสองคน พวกเขาเหมือนถูกแช่แข็งไว้ในกาลเวลา ยังคงทำตัวเหมือนอยู่ในยุค 90 อยู่เลย” เขากล่าว “ความคิดริเริ่มทางเทคโนโลยีที่สำคัญใดๆ ต้องได้รับการเซ็นอนุมัติจากพวกเขา”
“และการจะเสนออะไรให้พวกเขาพิจารณา ขั้นแรกคุณต้องกรอกแบบฟอร์ม Technology Evaluation Process หรือ TEP ก่อน” เขาอธิบาย “Maxine พูดถูกครับ มันต้องใช้ความพยายามมหาศาล ทุกวันนี้มันหนาประมาณห้าสิบหน้าได้มั้ง”
Maxine เบิกตากว้าง การรวบรวมข้อมูลทั้งหมดเพื่อกรอก TEP เป็นเรื่องที่แสนสาหัสมากในครั้งล่าสุดที่เธอพยายามทำ และตอนนั้นมันหนาแค่ครึ่งเดียวของตอนนี้เอง เธอถามว่า “ถ้าคุณอยู่ใน LARB ทำไมคุณไม่ทำให้กระบวนการมันง่ายขึ้นล่ะคะ?”
Dwayne กล่าวว่า “มันเป็นคณะกรรมการครับ ทุกคนคิดว่าหน้าที่ของพวกเขาคือการเซ็นไม่อนุมัติ ผมเป็นเสียงหัวรุนแรงเพียงเสียงเดียวในกลุ่ม และถ้าไม่มีแนวร่วมที่มีอุดมการณ์เดียวกัน มันก็เป็นไปไม่ได้เลยที่ผมจะผลักดันให้เกิดการโหวตว่า ‘ตกลง’ หรือดึงวิศวกรรุ่นใหม่ๆ เข้ามาร่วมคณะกรรมการ เชื่อผมเถอะ ผมพยายามแล้ว”
Kurt เคาะนิ้วบนโต๊ะครู่หนึ่ง “Dwayne พูดถูกครับ ความคิดริเริ่มทางเทคโนโลยีที่สำคัญใดๆ ต้องผ่าน TEP-LARB ถ้าเราไม่ทำ พวกเขาจะฆ่าโครงการของเราตั้งแต่ยังไม่เริ่มเลยด้วยซ้ำ”
เขาสูดลมหายใจเข้าลึกๆ “ผมเจ็บปวดที่ต้องพูดแบบนี้ แต่ผมว่าเราต้องเตรียม TEP และเข้าไปเสนอต่อ LARB ครับ เหมือนที่เราต้องไปขอทีม Security นั่นแหละ ทั้งที่เราก็รู้อยู่แล้วว่าพวกเขาจะตอบว่าไม่เหมือนกัน”
Maxine ตอบว่า “รู้ไหมคะ เราน่าจะรัน Data Hub เองไปเลย แบบรันเองทั้งหมดโดยไม่ต้องพึ่งพิงฝ่าย Operations เหมือนตอนที่ทีมเก่าของฉันรันระบบ MRP เองไงคะ อีกอย่าง เวลาที่มีอะไรผิดพลาดกับ Data Hub เรื่องมันก็ต้องถูกส่งมาถึงพวกเราอยู่ดีในที่สุด”
ทุกคนมอง Maxine ด้วยความตกใจ โดยเฉพาะ Dwayne และ Shannon ที่ดูเหมือนจะช็อกมาก ราวกับว่า Maxine เพิ่งเสนอให้ทำอะไรที่ผิดกฎหมายหรือผิดศีลธรรมร้ายแรง Brent ถามว่า “แต่จะทำได้ยังไงครับ? แล้วเรื่อง Information Security ล่ะ? แล้วเรื่อง compliance? แล้ว TEP-LARB ล่ะครับ?”
Maxine พ่นลมหายใจออกมา พลางนึกถึงเหตุผลเดียวกันเป๊ะๆ ที่เธอเคยได้ยินว่าทำไมต้องให้ Jared เป็นคนเดียวที่ deploy โค้ดได้
เธอเฝ้ามอง Dwayne ที่สลับไปมาระหว่างการพยักหน้ากับการส่ายหัว ราวกับว่ามีความคิดสองฝ่ายที่ขัดแย้งกันอย่างรุนแรงกำลังสู้กันอยู่ในหัวของเขา “โอ้ ว้าว มันคงจะยอดเยี่ยมมาก แต่พวกเขาไม่มีวันยอมให้พวกเรารันบริการระดับองค์กรแบบนี้ด้วยตัวเองแน่ๆ มันไม่ใช่ว่าเราไม่มีทักษะในทีมนะครับ... เราแค่ต้องรับผิดชอบข้อมูลทั้งหมดเอง ต้องมั่นใจว่ามีการสำรองข้อมูลและทุกอย่างเรียบร้อย มันคงจะวิเศษมาก เพราะเราจะรันมันในแบบที่เราต้องการได้...”
เสียงของเขาค่อยๆ แผ่วลง Maxine รับรู้ถึงความกังวลของเขา “ถูกต้องค่ะ พวกเรารันระบบ MRP เอง ซึ่งโรงงานผลิตทั้งหมดของเราต้องพึ่งพามัน นั่นคือระบบที่สำคัญระดับภารกิจที่สุดเท่าที่จะเป็นไปได้แล้ว เราจัดการเรื่องสำรองข้อมูลเอง การบำรุงรักษาเชิงป้องกัน การลงแพตช์... มันไม่ง่ายหรือเรียบง่ายก็จริง แต่มันก็ไม่ใช่เรื่องที่ยากเกินจะทำได้ (rocket science) นะคะ และเราก็มีคนจากฝั่ง Ops ที่เก่งที่สุดในบริษัทอยู่ในห้องนี้แล้วด้วย พวกเราทำได้แน่ค่ะ”
Brent กล่าวว่า “เอาสิครับ ผมไม่กลัวอะไรใน production อยู่แล้ว”
Dwayne ค่อยๆ พยักหน้า “โอ้เค ผมเอาด้วย เราต้องการสิ่งนี้อย่างมาก และแน่นอน ผมรู้ว่าพวกเราสามารถรันทุกอย่างได้ดีด้วยตัวเองครับ”
Kurt ยิ้มกว้าง “โอเค เรามีแผน B แล้ว ถ้าอย่างอื่นล้มเหลว เราจะรัน Data Hub กันเอง ซึ่งเรื่องนี้แน่นอนว่าต้องทำให้ Chris เห็นด้วยให้ได้ครับ”
Maxine สำลักกาแฟ แต่ก็พยักหน้าเห็นพ้องกับทุกคน
Tom ดูตื่นเต้นอย่างเห็นได้ชัดกับความคิดที่ว่าทุกสิ่งที่เขาช่วยสร้างจะได้รันใน production เร็วๆ นี้ แต่จู่ๆ เขาก็ขมวดคิ้ว “เดี๋ยวนะครับๆ นั่นหมายความว่าพวกเราทุกคนต้องพก pager (เครื่องเรียกตัว) ด้วยหรือเปล่า?”
“ใช่ครับ” Brent ตอบอย่างหนักแน่น “คนสร้างต้องเป็นคนรันเอง (You build it, you run it)”
ความตื่นเต้นของ Tom หายวับไปกับตา
Maxine หัวเราะออกมา
แม้แต่ Maxine เองยังต้องตกตะลึงที่เห็นว่าทีมพัฒนา Data Hub ทั้งหมดเริ่มใช้ environment ใหม่เร็วขนาดนี้ ทุกคนต่างเลือกใช้ในรูปแบบใดรูปแบบหนึ่ง มันแพร่กระจายไปเร็วเหมือนไฟลามทุ่ง บางคนก็ใช้ Docker images บนแล็ปท็อป บางคนก็ใช้ environment ใน vagrant, Git หรือ terraform configuration โดยจำลองทั้งสภาพแวดล้อมสำหรับการพัฒนา (Dev) และการทดสอบ (Test)
ที่สำคัญกว่านั้นคือ Purna และทีม QA ก็ใช้ Data Hub environment เหล่านั้นด้วย ทันทีที่ฟีเจอร์ถูกทำเครื่องหมายว่า “พร้อมทดสอบ” (Ready to Test) มันก็จะถูกทดสอบภายในเวลาไม่กี่ชั่วโมง และเพราะบททดสอบถูกเช็กอินเข้าไปพร้อมกับโค้ด มันจึงง่ายมากสำหรับนักพัฒนาที่จะจำลองปัญหาและแก้ไขมันได้อย่างรวดเร็ว
วิธีการทำงานแบบใหม่นี้หมายความว่า defect หลายอย่างและแม้แต่ฟีเจอร์บางตัวก็ถูกสร้างและทดสอบเสร็จสมบูรณ์ภายในวันเดียว และเนื่องจากความต้องการด้านการรายงานผลบางอย่างที่ Maxine ยังไม่ค่อยเข้าใจนัก พวกเขายังคงต้องใช้เครื่องมือจัดการ Ticket สองตัวแยกกันอยู่ แต่ทีม Dev และ QA ประสานงานกันอย่างใกล้ชิดกว่าที่เคยเป็นมา ในความจริงแล้ว ทีม QA หลายทีมมานั่งทำงานข้างๆ กับเหล่านักพัฒนาเลยในแต่ละวัน ทั้งในอาคาร 5 และอาคาร 7
การเฝ้าดูวิธีการทำงานของทีมทำให้ Maxine นึกถึงสมัยที่เธออยู่บริษัทสตาร์ทอัพ ที่ทุกคนทำงานร่วมกันเพื่อเป้าหมายเดียวกัน เธอทึ่งมากที่ทัศนคติในทีม Data Hub เปลี่ยนไปได้อย่างรวดเร็วขนาดนี้
ในช่วงสามวันต่อมา พวกเขาปิดงานแก้ไข (fixes) ที่ระบุว่า “พร้อมส่งมอบ” (shippable) ได้มากกว่าที่เคยทำได้ในเวลาหนึ่งเดือนเสียอีก และพลังงานของทุกคนก็พุ่งสูงและเต็มไปด้วยความกระตือรือร้น ที่สำคัญกว่านั้นคือ Maxine รู้ว่าทุกคนกำลังสนุกกับงาน
Maxine และ Tom ทำงานเสร็จอีกหนึ่งรายการ และทำเครื่องหมายว่าเสร็จสิ้นในระบบ Ticket ภายในเวลาไม่ถึงนาที วิศวกรสองคนในห้องแชทก็บอกว่าจะรีวิวและทดสอบให้ภายในชั่วโมงนี้เลย
Maxine ลุกขึ้นยืน “ถ้าคุณไม่ต้องการฉันแล้ว ฉันจะแวะไปหา Dave ขี้บ่นกับ Purna หน่อยนะคะว่าพวกเขาเป็นยังไงบ้าง”
“เฮ้ ผมไปด้วยครับ” Tom พูดพลางคว้าแล็ปท็อป “ผมจะไปช่วยเขาทดสอบงานที่เราเพิ่งแก้เสร็จเมื่อกี้ด้วย”
พวกเขาพบ Purna อยู่กับ Dave ขี้บ่นและนักพัฒนา Data Hub อีกคน ทั้งหมดกำลังจ้องมองบางอย่างบนหน้าจอของเธออย่างตั้งอกตั้งใจ “ทำอะไรกันอยู่คะ?” Maxine ถาม
“พวกเรากำลังทดสอบฟังก์ชันจัดการสินค้าคงคลังส่วนเกิน (surplus inventory) กันอยู่ค่ะ” Purna กล่าว
Dave ขี้บ่นเสริมว่า “มันคือส่วนสำคัญที่จะสนับสนุนโครงการใหญ่ของ Phoenix เลยครับ มันคือ ‘กาว’ ตัวสำคัญที่ช่วยให้ฝ่ายโปรโมชั่นสามารถสแกนระบบสินค้าคงคลังในร้านค้าเพื่อหาสินค้าที่วางอยู่บนชั้นจนฝุ่นเกาะ แล้วส่งพวกมันไปยังโกดังเก็บสินค้าส่วนกลาง เพื่อให้นำมาทำโปรโมชั่นบนเว็บไซต์อีคอมเมิร์ซได้ครับ”
“นี่เป็นครั้งแรกที่เราทำให้มันรันได้จริงๆ ค่ะ” Purna กล่าว “ฟีเจอร์นี้ทำเสร็จมาตั้งหกเดือนแล้ว แต่ใน release สองรอบที่ผ่านมา เราไม่เคยทำให้มันทำงานได้เลย ครั้งแรกมันเชื่อมต่อกับระบบสินค้าคงคลังและข้อมูลลูกค้าไม่ได้ ครั้งที่สองมันเชื่อมต่อกับระบบประวัติการซื้อไม่ได้ ทั้งสองครั้งมันเป็นปัญหาเรื่อง environment หรือคอนฟิก (configuration) แต่ตอนนั้นเราไม่มีเวลามากพอที่จะหาสาเหตุ”
“เราต้องถอดฟีเจอร์นี้ออกจาก release ไม่อย่างนั้นมันจะทำให้ฟีเจอร์อื่นๆ ล่าช้าไปด้วยค่ะ” Purna กล่าว
นี่แหละคือข้อดีอย่างหนึ่งของการใช้ Docker containers Maxine คิดในใจ คอนเทนเนอร์นั้นไม่มีการเปลี่ยนแปลง (immutable) คือมันไม่สามารถถูกแก้ไขได้หลังจากสร้างขึ้นมาแล้ว ดังนั้นถ้ามันรันได้ใน Dev มันก็จะรันได้ใน Test แน่นอน 100%
แนวคิดเรื่อง Immutability (ความไม่เปลี่ยนแปลง) เป็นอีกหนึ่งคอนเซปต์จาก functional programming ที่กำลังทำให้โลกคาดเดาผลลัพธ์ได้ง่ายขึ้นและปลอดภัยมากขึ้น Maxine คิดพลางยิ้มออกมา
“เราอยู่ที่ขั้นตอนที่ยี่สิบจากทั้งหมดแปดสิบขั้นตอนของการทดสอบครับ” Dave ขี้บ่นกล่าว โดยที่ Maxine สังเกตว่าไม่มีร่องรอยของความขี้บ่นหลงเหลืออยู่เลย “ผมมีลางสังเหรณ์ที่ดีมากกับเรื่องนี้ เราเจอหนึ่งปัญหาเมื่อเช้านี้ แต่ผมแก้เสร็จในเวลาไม่ถึงห้านาที แล้วเราก็เดินหน้าทำตามรายการต่อไปได้เลย เยี่ยมสุดๆ ไปเลยครับ!”
แม้แต่ Dave ขี้บ่นก็บ่นไม่ออกเมื่อฟีเจอร์ของเขาทำงานได้ดี Maxine คิดในใจ
เขากล่าวต่อว่า “นักพัฒนาทุกคนรู้ดีว่าในรอบการทำงานถัดไป พวกเขาต้องเขียน automated tests ไปพร้อมๆ กับการเขียนฟีเจอร์ ไม่ใช่มาเขียนทีหลัง ซึ่งมันทำให้ผมคิดได้ว่า เราควรจะมีทีม QA มานั่งทำงานอยู่ที่นี่กับเราแบบถาวรเลยนะ มันดูงี่เง่ามากที่เราต้องเดินไปอีกตึกเพื่อแค่มาช่วยกันแก้ปัญหาเล็กๆ น้อยๆ น่ะครับ”
“ไอเดียเจ๋งค่ะ” Maxine กล่าว “เอาเรื่องนี้ไปบอก Kurt กันเถอะ การรับมือกับเรื่องการเมืองเรื่องพื้นที่ออฟฟิศและสิ่งอำนวยความสะดวกเป็นงานถนัดของเขาเลยล่ะ แต่ฉันว่ามันคงจะยอดเยี่ยมมากเลยถ้าทำได้”
“ว่าแต่ คุณควรไปดูสิ่งที่ Adam กับ Shannon กำลังทำอยู่ในห้องประชุมนะ ผมว่ามันจะทำให้คุณยิ้มออกแน่ๆ” Dave ขี้บ่นพูดพลางทำท่าเหมือนพยายามจะเก็บความลับสุดยอดไว้
Maxine เห็น Adam และ Shannon อยู่ที่โต๊ะตัวใหญ่กับวิศวกร Dev และ QA อีกหกคน รอบๆ ตัวเต็มไปด้วยแล็ปท็อปที่เปิดค้างไว้ Adam กำลังโชว์หน้าจอแล็ปท็อปของเขาขึ้นทีวี
“พระเจ้าช่วย นั่นคือสิ่งที่ฉันคิดหรือเปล่าคะ?” Maxine ถามพลางหยุดเดินและจ้องมองไปที่หน้าจอ
“ถ้าคุณหมายถึง นี่คือเซิร์ฟเวอร์ Continuous Integration (CI) ที่กำลังทำ code build และรัน automated tests บน Data Hub ทุกครั้งที่มีการเช็กอิน โดยรันอยู่ใน environment ที่คุณช่วยสร้างขึ้นมาล่ะก็ ใช่เลยครับ คุณคิดถูกเป๊ะเลย” Adam กล่าวพร้อมรอยยิ้มกว้าง
Maxine จำเครื่องมือ CI นั้นได้ทันที ทุกคนต่างคิดว่า Data Hub นั้นล้าหลังและเต่าล้านปี แต่ทว่าตอนนี้มันกลับรันอยู่ภายใต้ระบบ continuous integration ตอนนี้พวกเขามีแนวทางปฏิบัติทางเทคนิค (technical practices) ที่ดีกว่าส่วนใหญ่ใน Phoenix เสียอีก
“มันช่างงดงามเหลือเกินค่ะ” Maxine กล่าวพลางรู้สึกน้ำตาซึม “ทุกคนใน Data Hub เข้าถึงมันได้แล้วเหรอคะ? แล้วทีมอื่นจะเริ่มใช้ได้เมื่อไหร่?”
Shannon เงยหน้าจากแล็ปท็อปแล้วพูดว่า “ทุกคนใน Data Hub เข้ามาใช้ได้หมดแล้วค่ะ และอย่างที่คุณรู้ การเอาโค้ดเข้าสู่ CI เป็นหนึ่งในคำขออันดับต้นๆ จากทีม Phoenix เลย Adam กับฉันกำลังช่วยสอนทีมแรกๆ และฝึกอบรมพวกเขาอยู่ เราจะทำทุกวิถีทางเพื่อให้แน่ใจว่าพวกเขาจะประสบความสำเร็จ พอทีมพวกนี้รันได้เมื่อไหร่ เราก็มีคิวรอต่อแถวกันยาวเหยียดเลยล่ะค่ะ” เธอกล่าว
Maxine ดื่มด่ำกับช่วงเวลานั้น นี่คือสิ่งที่เธอหวังไว้ตั้งแต่วันแรกที่มาอยู่โปรเจกต์ Phoenix นักพัฒนาทุกคนควรมีโครงสร้างพื้นฐานนี้เพื่อช่วยให้พวกเขามีประสิทธิภาพ และมีทีมผู้เชี่ยวชาญคอยช่วยเหลือพวกเขาให้เริ่มต้นได้
เธอมองที่หน้าจอและเห็นว่าในช่วงสี่ชั่วโมงที่ผ่านมา มีนักพัฒนา Data Hub ห้าคนเช็กอินโค้ด และมีสองกรณีที่การทดสอบล้มเหลวแต่ก็ได้รับการแก้ไขภายในสิบนาที
Erik คงจะภูมิใจแน่ๆ เธอคิด ผลตอบรับที่รวดเร็วและบ่อยครั้งแบบนี้คือส่วนสำคัญอย่างยิ่งในการบรรลุอุดมคติข้อที่สองเรื่อง Focus, Flow, and Joy และทั้งหมดนี้เกิดขึ้นได้จากการยกย่องการปรับปรุงงานประจำวันให้เหนือกว่าตัวงานประจำวันเอง ตามที่อุดมคติข้อที่สามกำหนดไว้จริงๆ
“ผมชอบไอเดียเรื่องการเอา QA มานั่งกับ Dev นะครับ” Kurt กล่าวกับทุกคนที่รวตัวกันอยู่ที่ Dockside “ถึงแม้ว่าตอนที่ผมเสนอเรื่องนี้กับผู้จัดการฝ่ายพัฒนาคนอื่นๆ พวกเขาจะมองว่าเป็นเรื่องที่ค่อนข้างน่าตกใจก็เถอะครับ” เขากล่าวยิ้มๆ
“ก่อนที่ผมจะมาที่นี่ ผมเพิ่งเอาผังที่นั่งที่เสนอไปให้ผู้อำนวยการฝ่ายอาคารและสถานที่ (Facilities) ดูมาครับ” เขากล่าวต่อ “พอเขาเห็นผังนั้นนะ เขาแทบจะกระโดดตัวลอยเลยล่ะ ผมว่าเขาคงอยากจะยึดผังนั้นทิ้งด้วยซ้ำ” Kurt หัวเราะ “เขาเริ่มร่ายยาวเรื่องกฎเกณฑ์ที่ต้องปฏิบัติตามแนวทางการใช้พื้นที่ที่ฝ่าย HR กำหนดไว้ ดูเหมือนว่าจะมีกฎว่าพื้นที่ต้องใหญ่แค่ไหนตามตำแหน่งงานด้วยนะครับ...”
“ฟังดูเหมือนกฎของกระทรวงเกษตรฯ เรื่องขนาดของคอกวัวเลยนะ” Dave ขี้บ่นพูดขึ้น ทุกคนหันมามองเขา “อะไรกัน? ผมมาจากครอบครัวเกษตรกรนะ ผมต้องรับมือกับการตรวจสอบของกระทรวงเกษตรฯ อยู่บ่อยๆ”
“เยี่ยมเลย” Shannon ประชด “คราวนี้เขาเรียกวิศวกรว่าเป็นปศุสัตว์ไปซะแล้ว”
“แล้วตารางเวลาล่ะครับ Kurt?” Adam ถาม
“เก้าเดือนครับ” Kurt ตอบ
Maxine ได้ยินหลายคนอุทานซ้ำว่า “เก้าเดือน?!” บางคนถึงกับหัวเราะก๊ากออกมา
“ก็นั่นแหละครับ...” Kurt กล่าวพลางมองโน้ตของเขา “อะไรก็ตามที่ฝ่าย Facilities ทำ มันจะใช้เวลานานชั่วกัลปาวสาน เราต้องสั่งซื้อเก้าอี้และโต๊ะที่ได้รับการรับรองอย่างเป็นทางการผ่านฝ่ายจัดซื้อ และต้องรอคิวติดตั้งเฟอร์นิเจอร์กับเจ้าหน้าที่ Facilities...”
“พวกเราทำกันเองช่วงวันหยุดสุดสัปดาห์นี้เลยได้ไหมคะ?” Dwayne เสนอ “มันไม่กระทบใครนอกทีมอยู่แล้ว เราก็แค่ไปร้านเครื่องเขียนหรือร้านเฟอร์นิเจอร์ ซื้อของที่จำเป็นที่สุดมา แล้วก็ขนเข้าตึกเองเลย ใช้รถกระบะของผมก็ได้ค่ะ”
“แต่จะเกิดอะไรขึ้นถ้าพวก Facilities โผล่มาพร้อมกับบัตรพนักงานแล้วบอกว่าเราไม่มีใบอนุญาตที่ถูกต้อง หรือเราทำผิดกฎระเบียบอาคารล่ะครับ?” Dave ขี้บ่นถาม
Kurt ระเบิดหัวเราะออกมา “Facilities ไม่ยอมมาขนของพวกนั้นออกไปเองหรอกครับ เพราะไม่มีใครให้งบประมาณพวกเขาทำแบบนั้นแน่ๆ” เขาหยุดคิดครู่หนึ่ง “ลุยเลยครับ! แต่เราต้องมั่นใจนะว่าเราจะเอาเฟอร์นิเจอร์ที่ยกออกไปได้ยากๆ เข้ามาด้วย... อย่างเช่นชั้นวางหนังสือสักสองสามอัน แล้วเราก็เติมหนังสือให้เต็ม หรืออาจจะเป็นตู้ปลาทองดีไหมครับ? พวกคุณว่าไง?”
Dave ขี้บ่นและ Shannon หัวเราะร่วน Adam พยักหน้าอย่างครุ่นคิด “ใครครอบครองก่อนย่อมได้เปรียบ (Possession is nine-tenths of the law) แต่คุณไม่ควรไปขออนุมัติจาก Chris ก่อนเหรอครับ?”
Kurt พ่นลมหายใจ “ไม่มีทางครับ เขาไม่มีวันยอมแน่ เราลุยกันเลยดีกว่า”
“ในเมื่อเรามีพื้นที่จำกัด งั้นเราย้ายคน QA บางส่วนมานั่งที่ฝั่ง Dev และย้ายนักพัฒนาบางส่วนไปนั่งที่ฝั่ง QA แทนดีไหมคะ?” Shannon เสนอ
“ไอเดียเจ๋งมากค่ะ Shannon” Maxine กล่าว เธอดีใจที่ทีมเริ่มจัดการตัวเอง (self-organizing) เหมือนที่ Erik เคยทำนายไว้เป๊ะเลย