หลังจบงาน Town Hall Maxine กลับมาที่โต๊ะทำงานของเธอ เธอจ้องมองปฏิทิน วันนี้เป็นวันที่สี่ของการถูกจองจำและการทำภารกิจเพื่อทำ Phoenix build ให้สำเร็จ แต่มันรู้สึกเหมือนผ่านไปเกือบปีแล้ว เวลาแต่ละชั่วโมงช่างผ่านไปอย่างเชื่องช้าเหลือเกิน

มีเสียงแจ้งเตือนบนโทรศัพท์ของเธอดังขึ้น ปลุกเธอกลับสู่โลกความเป็นจริง: Phoenix Project: stakeholder status update (จะเริ่มในอีก 15 นาที)

นี่คือการประชุมใหม่สำหรับเธอ เพื่อให้ภารกิจของเธอคืบหน้า เธอจึงบอกทุกคนว่าเชิญเธอเข้าประชุมไหนก็ได้ตามสบาย มันดีกว่าการนั่งเฉยๆ ที่โต๊ะ และเธอยังคงพยายามทำความเข้าใจภาพรวมของงานที่นี่ เธอหวังว่าจะได้เจอใครสักคนที่สามารถหาของที่เธอต้องการให้ได้ เธอระมัดระวังเป็นพิเศษที่จะไม่รับมอบหมายงาน (action items) ใดๆ หรืออาสาทำฟีเจอร์ที่ฟังดูน่าสนุก—เธอจะวอกแวกไปจากเรื่อง Phoenix build ไม่ได้เด็ดขาด

ทุกคนแถวนี้คิดว่าฟีเจอร์คือสิ่งที่สำคัญ เพราะพวกเขามองเห็นมันได้ในแอป บนหน้าเว็บ หรือใน API แต่ดูเหมือนจะไม่มีใครตระหนักเลยว่ากระบวนการ build นั้นสำคัญเพียงใด นักพัฒนาไม่สามารถทำงานอย่างมีประสิทธิภาพได้เลยหากปราศจากกระบวนการ build, integration และการทดสอบที่ยอดเยี่ยม

เธอมาร่วมประชุมก่อนเวลาและต้องประหลาดใจที่ไม่มีที่ว่างเหลือนอกจากแถวหลังสุด เธอยืนพิงกำแพงร่วมกับคนอื่นๆ อีกห้าคน เมื่อมองไปรอบๆ เธอก็ต้องเบิกตากว้าง—ผู้มีอิทธิพลและผู้ตัดสินใจคนสำคัญของบริษัทอยู่ที่นี่กันหมด Maxine ยิ้มออกมาเมื่อเห็นว่า Kirsten Fingle เป็นผู้นำการประชุม เธอเป็นหัวหน้าสำนักงานบริหารโครงการ (Project Management Office) Maxine ชอบร่วมงานกับเธอมากตอนที่เธอเคยสนับสนุนโครงการใหญ่ที่มี "นินจาผู้จัดการโครงการ" ของ Kirsten มาช่วยงาน—คนพวกนี้มักจะถูกเก็บไว้สำหรับโปรเจกต์ที่สำคัญที่สุดซึ่งต้องการการประสานงานอย่างมากระหว่างกลุ่มต่างๆ ในบริษัท พวกเขาเป็นยอดฝีมือในการทำให้สิ่งต่างๆ เกิดขึ้นจริง สามารถเร่งรัดและแก้ไขปัญหาได้อย่างรวดเร็ว บ่อยครั้งเพียงแค่ส่งข้อความแค่ประโยคเดียว

ที่หน้าห้องคือ Chris เขาพยักหน้าให้เธออย่างเย็นชา—เขาดูแลการทำงานของนักพัฒนาและทีม QA กว่าสองร้อยคน ซึ่งส่วนใหญ่จมอยู่กับโปรเจกต์ Phoenix Chris กำลังจ้องเขม็งไปที่ใครบางคนที่นั่งฝั่งตรงข้ามข้ามโต๊ะซึ่งดูเหมือน Ed Harris จากหนังเรื่อง Apollo 13 เมื่อเธอถามคนข้างๆ เบาๆ ว่าเขาเป็นใคร เขาก็ตอบว่า “Bill Palmer รองประธานฝ่าย IT Operations คนใหม่ เพิ่งได้รับการเลื่อนตำแหน่งเมื่อสัปดาห์ที่แล้วหลังจากการล้างบางผู้บริหารครั้งใหญ่ไง”

“เยี่ยมเลย” Maxine คิด แต่เธอชอบที่ได้เห็นระดับความอาวุโสของผู้คนในห้องนี้ มันเหมือนกับการได้อยู่บนสะพานเดินเรือของยาน Starship Enterprise และเฝ้าดูเหล่าบรรดานายทหารระดับสูงโต้ตอบกัน

เธอสนุกกับสิบห้านาทีแรกของการประชุม มันคือความโกลาหล ทุกคนพยายามตีความว่า Sarah หมายถึงอะไรกันแน่ในงาน Town Hall ตอนที่เธอก็ยบอกว่าการเปิดตัวจะมีขึ้น “ในปลายเดือนนี้” Kirsten พูดอย่างเน้นย้ำว่า “วันที่ยังอยู่ระหว่างการเจรจา และยังไม่มีการแจ้งข้อมูลเฉพาะเจาะจงอะไรมาที่ฉันเลย” มันจะเป็นแค่การส่งสัญญาณหลอกอีกครั้งหรือเปล่านะ? Maxine คิดด้วยความไม่อยากจะเชื่อ

Maxine คาดเดาว่ามีความเร่งด่วนเป็นพิเศษในขณะที่พวกเขาทบทวนลำดับความสำคัญของธุรกิจ ปัญหาสำคัญที่ต้องการการเร่งรัดและดูแล และลำดับความสำคัญที่ต้องขจัดความขัดแย้งออกไป เธอไม่รู้ว่าตัวย่อ (acronym) ทั้งหมดนั้นหมายถึงอะไร แต่เธอก็เพิ่มตัวที่เธอคิดว่าสำคัญจริงๆ ลงในรายการของเธอ และตัดคำพูดไร้สาระ (insipid corporate argle-bargle) ขององค์กรทิ้งไป

ขณะที่การประชุมดำเนินต่อไปอย่างน่าเบื่อหน่ายและขัดกับความคาดหวังของเธอ เธอเริ่มรู้สึกเบื่อเมื่อหัวข้อการประชุมเปลี่ยนไปสู่รายละเอียดเล็กๆ น้อยๆ ที่ไร้ความหมาย ซึ่งถูกผลักดันอย่างจริงจังโดย... ใครบางคนที่เธอก็ไม่รู้จักจริงๆ OEP ย่อมาจาก “Order Entry Protocol” หรือ “Order Entry Program” กันแน่? หรือพวกเขากำลังพูดถึง OPA อีกครั้ง? หรือบางทีมันอาจจะเป็นสิ่งเดียวกัน? ฉันต้องใส่ใจจริงๆ เหรอเนี่ย?

สี่สิบนาทีผ่านไป ตาของเธอเริ่มเหม่อลอย—มันเข้าสู่ช่วง “รายงานสถานะงาน” (task status) ของการประชุม และ Maxine ก็หมดความสนใจโดยสิ้นเชิงแล้ว ถ้าเธอมีงานอื่นต้องทำ เธอคงเดินออกไปนานแล้ว

เธอเริ่มเจ็บเท้าจากการยืนนานเกินไป และกำลังทบทวนการตัดสินใจที่จะอยู่ในห้องประชุมต่อตอนที่เธอได้ยินใครบางคนบ่นว่าพวกเขารอสิ่งที่ต้องการมานานแค่ไหนแล้ว เธอยิ้มเยาะในใจแล้วคิดว่า ยินดีต้อนรับเข้าชมรมค่ะ นั่นแหละคือสิ่งที่ฉันทำมาทั้งวัน

หนึ่งในผู้จัดการฝ่ายพัฒนาตอบจากฝั่ง "พนักงานระดับจูเนียร์" ของโต๊ะประชุมว่า “ใช่ครับ เราตามหลังอยู่แน่นอน แต่เรามีนักพัฒนาใหม่สองสามคนเริ่มงานสัปดาห์นี้เพื่อมาช่วย และพวกเขาน่าจะพร้อมทำงานและเริ่มสร้างผลงานได้ (up to speed and productive) ในอีกหนึ่งหรือสองสัปดาห์”

หึ ฉันน่ะเก่งเรื่องพวกนี้มากนะแต่ยังแทบไม่คืบหน้าเลย เธอคิดพลางมองพื้น แล้วยิ้มเยาะกับตัวเอง โชคดีนะพวกนาย

ความเงียบที่น่าอึดอัดยาวนานปกคลุมไปทั่วห้อง Maxine เงยหน้าขึ้น และต้องตกใจสุดขีดเมื่อพบว่าทุกคนกำลังจ้องมาที่เธอ—เธอเพิ่งนึกได้ว่าเธอเผลอพูดสิ่งที่คิดออกมาดังๆ

เธอมองไปที่ Chris ซึ่งมีสีหน้าตกตะลึงและกำลังทำไม้ทำมือโบกไปมาเหมือนจะบอกว่า “ไม่นะ ไม่นะ ไม่นะ”

จากหน้าห้อง Kirsten รีบพูดขึ้นว่า “ยินดีที่ได้พบคุณนะ Maxine! ฉันไม่รู้เลยว่าคุณมาช่วยโปรเจกต์ Phoenix ด้วย เราดีใจที่มีคนประสบการณ์สูงอย่างคุณมาช่วยงานนี้—คุณมาได้ถูกเวลาจริงๆ!”

Chris เอามือกุมหน้า ถ้า Maxine ไม่ได้ยืนพิงกำแพงอยู่ เธอคงจะก้าวถอยหลังกรูดไปแล้ว เธอทำท่าเลียนแบบ Chris โดยการโบกมือไปมาข้างหน้า “เปล่าค่ะ เปล่า... ขอโทษทีค่ะ ฉันเพิ่งมาที่นี่ได้ไม่กี่วัน พวกคุณทุกคนกำลังทำงานที่ยอดเยี่ยมมาก เชิญต่อเลยค่ะ—ฉันแค่มาช่วยเรื่อง documentation และการทำ build เท่านั้นเอง”

Kirsten ด้วยความจริงจังที่ทำให้เธอทำงานได้อย่างมีประสิทธิภาพ ไม่ยอมปล่อยเรื่องนี้ไป เธอก้มตัวมาข้างหน้า “ไม่จริงๆ นะ ฉันคิดว่าคุณพูดว่า ‘โชคดีนะพวกนาย’ ฉันสนใจมุมมองของคุณเสมอ เมื่อพิจารณาจากความสำเร็จอันมากมายของคุณในการดูแลโรงงาน ฉันอยากเข้าใจว่าอะไรที่ทำให้คุณหัวเราะออกมา”

“ขอโทษที่หัวเราะค่ะ” เธอเริ่ม “มันเป็นแค่เรื่องที่ว่าฉันไม่ได้ทำอะไรเลยนอกจากพยายามทำให้ Phoenix build รันบนแล็ปท็อปของฉันได้ตั้งแต่เมื่อวันพุธที่แล้ว และฉันยังไปไม่ถึงไหนเลย ฉันกำลังรอทั้ง credentials, license keys, environments, configuration files, documentation หรืออะไรก็ตามที่คุณจะนึกออก—ฉันรู้ว่าทุกคนมีงานล้นมือ และฉันรู้ว่า Phoenix เป็นแอปพลิเคชันขนาดใหญ่ที่การรวบรวมชิ้นส่วนทั้งหมดมาเพื่อทำ build ต้องเป็นงานที่หนักหนาสาหัสมาก แต่ถ้าเราอยากให้นักพัฒนาของเราทำงานได้อย่างมีประสิทธิภาพ พวกเขาต้องสามารถรัน build ได้ตั้งแต่วันแรก (Day One) ตามอุดมคติแล้ว พวกเขาควรจะเขียนโค้ดในสภาพแวดล้อมที่เหมือนกับ production (production-like environment) เพื่อที่พวกเขาจะได้ผลตอบรับที่รวดเร็ว (fast feedback) ว่าโค้ดที่พวกเขาเขียนทำงานร่วมกับระบบโดยรวมได้หรือไม่ หลังจากพยายามมาหลายวัน ฉันก็ยังไม่มีอะไรที่ดูเหมือนระบบที่สมบูรณ์เลย—ฉันมีแค่กล่องที่เต็มไปด้วยส่วนประกอบย่อยๆ ที่ขาดชิ้นส่วนไปเยอะมาก และฉันก็เก่งเรื่องพวกนี้มากจริงๆ นะคะ”

เธอมองไปรอบห้องและยักไหล่แบบแกนๆ ให้กับ Chris เธอรู้สึกว่าเธอต้องระบายมันออกมาจริงๆ Chris ดูหน้าถอดสีไปเลย

“ฉันแค่หวังว่าวิศวกรคนใหม่ๆ ที่คุณจ้างมาจะโชคดีกว่าฉัน แค่นั้นแหละค่ะ” เธอสรุปสั้นๆ

เกิดความเงียบที่น่าอึดอัดยาวนาน Randy พยักหน้าอย่างเห็นพ้องและกอดอกพลางทำหน้าสะใจ ใครบางคนจากฝั่งตรงข้ามของโต๊ะหัวเราะเสียงดัง “เธอพูดถูกเป๊ะเลย! พวกเขาต้องการอะไรที่มากกว่าโชคอีกเยอะ! การขอ Dev environment แถวนี้มันเหมือนกับการไปขอทำใบขับขี่ที่ขนส่งเลย—ต้องไปรับบัตรคิว กรอกแบบฟอร์มกองพะเนิน แล้วก็รอ ให้ตายสิ ฉันขอทำใบขับขี่ได้ในวันเดียว... แต่นี่มันเหมือนพยายามจะขอใบอนุญาตก่อสร้างตึกใหม่มากกว่า—ไม่มีใครรู้เลยว่าต้องรอนานแค่ไหน”

คนครึ่งห้องหัวเราะออกมาอย่างไม่ค่อยสุภาพนัก ขณะที่อีกครึ่งห้องดูเหมือนจะขุ่นเคือง Maxine มองไปที่คนที่พูดแทรกขึ้นมา—เขาอายุประมาณสี่สิบห้าปี ดูอวบนิดๆ แบบ “อดีตนักกีฬา” หน้าเป็นเหลี่ยม โกนหนวดเกลี้ยงเกลาอย่างน่าแปลกใจ ใส่แว่นตาสี่เหลี่ยมขนาดใหญ่ ใส่เสื้อยืดลายสเก็ตบอร์ด และมีใบหน้าที่บึ้งตึงอยู่ตลอดเวลา

เมื่อพิจารณาจากความขี้บ่นของเขา Maxine มั่นใจว่าเขาต้องเป็นนักพัฒนาอาวุโส (senior developer) แน่นอน การที่ต้องจมปักอยู่ในสภาพแวดล้อมอย่าง Phoenix นานๆ คงส่งผลเสียต่อคนเราบ้างละนะ

ใครบางคนจากหน้าห้องเริ่มตอบกลับ—เธอจำได้ว่าเป็น William ผู้อำนวยการฝ่าย QA ที่ดูเป็นคนดีมาก ซึ่งเคยพยายามอย่างเต็มที่เพื่อช่วยเธอ “ฟังนะ” เขาพูด “ทีมงานของเรากำลังล้าหลังในเรื่องการทดสอบ ดังนั้นเราจึงตกลงกันว่าเพื่อให้ทันตามกำหนดการ เราจะลดความสำคัญของงานด้านสิ่งแวดล้อม (environment work) ลง—การส่งมอบฟีเจอร์ที่ผ่านการทดสอบครบถ้วนจะมีความสำคัญเป็นอันดับแรก เราทุกคนต่างก็รู้ดีว่าสิ่งนี้จะทำให้ระยะเวลานำ (lead time) ในการจัดเตรียม environment ให้กับทีมเพิ่มขึ้น เชื่อผมเถอะ ทีมงานของผมก็ได้รับผลกระทบหนักไม่แพ้พวกคุณ—ทีม QA ก็ต้องการ environment ในการทดสอบเหมือนกัน”

นักพัฒนาขี้บ่นคนนั้นตอบกลับทันทีว่า “William คุณโดนหลอกแล้ว นั่นเป็นการตัดสินใจที่แย่มาก นี่มันคือความหายนะ Maxine พูดถูก—นักพัฒนาต้องการ environment เพื่อที่จะทำงานให้ได้ คุณควรจะมีทีมงานทั้งทีมที่ได้รับมอบหมายให้แก้ไขกระบวนการสร้าง environment เลยด้วยซ้ำ ฉันอยู่ในสามโปรเจกต์ที่รอ staging environment มาหลายเดือนแล้ว ความจริงแล้วเรื่องนี้สำคัญมากจนฉันขออาสามาช่วยทำเลยด้วย”

“ไม่อนุมัติ” Chris พูดออกมาอย่างเหนื่อยอ่อนจากหน้าห้อง “ทำหน้าที่ของตัวเองไปเถอะ Dave เราต้องการให้คุณจดจ่ออยู่กับฟีเจอร์”

William พูดว่า “เดี๋ยวๆ... ฉันอยากให้คุณรู้ว่าจริงๆ แล้วเราไม่ใช่คอขวด (bottleneck) ของเรื่อง environment นะ—เรามี environment หลายตัวที่พร้อมจะรันแล้ว แต่เรายังต้องการบัญชีล็อกอิน (login account) จากฝ่าย Security และที่เก็บข้อมูล (storage) รวมถึงจุดเชื่อมต่อ (mount points) จากฝ่าย Ops ฉันเร่งเรื่องนี้ไปแล้วแต่ยังไม่มีการแจ้งข้อมูลอะไรกลับมาเลย”

Chris ชี้นิ้วไปที่ Bill ด้วยท่าทางตำหนิและหันไปหา Kirsten “ฉันต้องการความช่วยเหลือในการเร่งรัดความต้องการของเราไปที่ฝ่าย Operations”

Bill รีบตอบกลับทันที “ถ้าเราเป็นคอขวด ผมต้องรู้เรื่องนี้ มาหาวิธีทำให้ William ได้สิ่งที่เขาต้องการกันเถอะ”

Kirsten พยักหน้า ดูเหมือนจะเอือมระอานิดๆ Maxine คาดเดาว่านั่นเป็นเพราะมีสิ่งที่ต้องพึ่งพากัน (dependency) ปรากฏขึ้นมาเรื่อยๆ “ใช่ เป็นความคิดที่ดี Bill เอาล่ะ มาดูหมุดหมายถัดไปในรายการกันเถอะ”

ขณะที่ Kirsten กำลังพูด Chris ก็หันมามอง Maxine สีหน้าของเขาตะโกนออกมาดังๆ ว่า “ส่วนไหนของคำว่า ‘ทำตัวไม่ให้เป็นที่สนใจ’ ที่คุณไม่เข้าใจกันนะ Maxine?” Maxine ทำปากขยับคำว่า “ขอโทษค่ะ”

จากหางตา เธอเห็นชายหนุ่มคนหนึ่งคุกเข่าลงข้างๆ Kirsten แล้วกระซิบที่หูเธอพลางชี้มาที่ Maxine แทนที่จะใส่กางเกงสแล็คสีน้ำตาลอ่อน เขากลับใส่กางเกงยีนส์และถือสมุดจด Moleskine สีดำ

Kirsten พยักหน้าและยิ้มให้เขา ชี้มาที่ Maxine แล้วกระซิบตอบกลับไปสองสามประโยค ชายหนุ่มพยักหน้า จดบันทึกอย่างขะมักเขม้น

Maxine ตัดสินใจที่จะมุ่งหน้าไปที่ประตู ออกไปให้เร็วที่สุดก่อนจะทำอะไรโง่ๆ อีก

เธอเดินออกไปถึงทางเดินที่อากาศเย็นกว่า รู้สึกโล่งใจที่หลุดพ้นจากห้องที่ร้อนและอึดอัดนั้นมาได้ เธอตรงไปที่ห้องครัวที่อากาศเย็นยิ่งกว่า เธอกำลังคิดว่าจะกดกาแฟอีกสักแก้ว บางทีอาจจะเป็นแก้วที่ห้าของวันนี้ ตอนที่เธอได้ยินเสียงใครบางคนพูดมาจากข้างหลังว่า “สวัสดีครับ คุณคงจะเป็น Maxine ใช่ไหม?”

เธอหันกลับไป เป็นชายหนุ่มจากการประชุมที่คุยกับ Kirsten เขายิ้มกว้างและยื่นมือออกมา พูดว่า “สวัสดีครับ ผม Kurt ผมเป็นหนึ่งในผู้จัดการฝ่าย QA ที่ทำงานให้ William ผมได้ยินในการประชุมว่าคุณต้องการ license keys และ environments และอะไรอีกหลายๆ อย่างเพื่อให้ build รันได้ ผมคิดว่าผมช่วยคุณได้นะครับ”

ครู่หนึ่ง Maxine ได้แต่จ้องมองเขากลับไป ไม่แน่ใจว่าเธอได้ยินถูกหรือเปล่า เป็นเวลาหลายวันแล้วที่ชีวิตของเธอคือการค้นหาทุกซอกทุกมุมเพื่อหาชิ้นส่วนที่จำเป็นสำหรับการ build Phoenix เป็นเวลาหลายวันแล้วที่เธอต้องส่ง Ticket ใบแล้วใบเล่าเข้าสู่ระบบราชการที่ไร้ความรู้สึกและไร้ตัวตน เธอรู้สึกอึ้งที่มีคนอยากช่วยเธอจริงๆ

Maxine เพิ่งนึกได้ว่าเธอกำลังจ้องมือที่ยื่นออกมาของ Kurt เธอจึงรีบดึงสติตัวเองกลับมาแล้วเขย่ามือเขา “ยินดีที่ได้รู้จักค่ะ ฉันชื่อ Maxine และใช่ค่ะ ฉันยินดีรับความช่วยเหลือทุกอย่างเพื่อให้ Phoenix build รันได้!”

เธอพูดเสริม “หวังว่าฉันคงไม่ได้ไปเหยียบตาปลาใครเข้าหรอกนะคะในการประชุมนั้น ฉันแน่ใจว่าทุกคนพยายามอย่างเต็มที่แล้ว กับสิ่งที่กำลังเกิดขึ้นอยู่ตอนนี้...”

เขายิ้มกว้างยิ่งกว่าเดิม พลางชี้หัวแม่มือกลับไปที่ห้องประชุมที่พวกเขาเพิ่งออกมา “คนพวกนั้นน่ะเหรอ? อย่าไปกังวลเลยครับ พวกเขากำลังเจอปัญหาหนักจนมัวแต่ปกป้องตัวเองและโยนความผิดให้คนอื่นไปทั่ว ผมสงสัยว่าพวกเขาจะลืมสิ่งที่คุณพูดไปหมดแล้วด้วยซ้ำเมื่อถึงตอนเย็นนี้”

Maxine หัวเราะ แต่ Kurt กลับพูดด้วยท่าทางจริงจัง “เอาล่ะ คุณต้องการทำ Phoenix build ให้รันได้ คุณไปถึงขั้นไหนแล้วและยังมีอะไรที่ขาดอยู่อีกบ้างครับ?”

Maxine ไหล่ตก “ยังไม่ใกล้เคียงกับที่ฉันต้องการเลย และมันไม่ใช่เพราะฉันไม่พยายามนะ” เธออธิบายรายละเอียดสิ่งเธอทำไปแล้วและขั้นตอนที่ยังเหลืออยู่ เธอเปิดรายการสิ่งที่ต้องทำ (checklist) ในแท็บเล็ตของเธอให้เขาดู ชี้ให้เห็นทุกอย่างที่เธอกำลังรออยู่

“ว้าว คนส่วนใหญ่ถอดใจไปนานแล้วก่อนที่จะมาได้ไกลขนาดคุณนะเนี่ย” Kurt พูด “ขอผมดูนั่นหน่อยได้ไหมครับ?”

“ได้เลยค่ะ” เธอพูดพลางยื่นให้เขา Kurt ไล่นิ้วไปตามรายการ พยักหน้าและดูเหมือนจะเปรียบเทียบกับรายการอีกชุดหนึ่งในหัวของเขา

Kurt ถ่ายรูปรายการของเธอด้วยโทรศัพท์ของเขาแล้วส่งแท็บเล็ตคืนให้เธอ “คุณจะได้รับการติดต่อจากผมภายในวันสองวันนี้นะครับ โปรเจกต์ Phoenix นี่เหมือนอยู่ในยุคหินเลย เรามีนักพัฒนาและทีม QA หลายร้อยคนที่ทำงานในโปรเจกต์นี้ และส่วนใหญ่รัน build ได้เฉพาะส่วนของตัวเองใน code base เท่านั้น พวกเขาไม่ได้ build ทั้งระบบ ยิ่งไม่ต้องพูดถึงการทดสอบเป็นประจำเลย ผมพยายามชี้ประเด็นนี้ให้ผู้มีอำนาจเห็น แต่พวกเขาก็บอกผมว่าทุกอย่างอยู่ภายใต้การควบคุม”

เขามองเธออย่างมีความหมาย “คุณคงไม่ยอมให้เรื่องแบบนี้เกิดขึ้นแน่ตอนที่คุณอยู่ในกลุ่ม MRP สนับสนุนโรงงานผลิตใช่ไหมครับ?” เขาถาม

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

Kurt พยักหน้า “ทว่า เราก็ยังคงรันโปรเจกต์ Phoenix ซึ่งเป็นโปรเจกต์ที่สำคัญที่สุดในบริษัท เหมือนกับที่เราเคยรันโปรแกรมในปี 1970 นักพัฒนาเขียนโค้ดกันทั้งวันและเพิ่งจะมาเอาการเปลี่ยนแปลงมารวมกัน (integrate) และทดสอบตอนจบโปรเจกต์ มันจะมีอะไรผิดพลาดได้บ้างล่ะเนี่ย?” เขาพูดเสริมพร้อมรอยยิ้มเยาะ “พวกเขามักจะบอกผมว่าการตัดสินใจเหล่านี้มันเกินระดับเงินเดือนของผม”

ทั้งคู่หัวเราะออกมาพร้อมกัน

Kurt ไม่ได้ดูขมขื่นหรือมองโลกในแง่ร้าย เขาแผ่รังสีของความใจดีและยอมรับความจริงที่เป็นไป เขากล่าวต่อว่า “ผมอิจฉาที่คุณทำอะไรสำเร็จได้ตั้งมากมายในโรงงานของคุณ และรองรับแพลตฟอร์มได้เยอะมาก เรามีคนมากกว่าสิบเท่าใน Phoenix แต่ผมสงสัยว่าทีมเก่าของคุณจะทำอะไรสำเร็จได้มากกว่าที่เราทำเยอะเลย”

Maxine พยักหน้า เธอคิดถึงทีมเก่าของเธอจริงๆ

“อ้อ และอีกอย่าง มีข่าวลือที่คุณอาจสนใจนะครับ” Kurt พูดพลางมองไปรอบๆ เหมือนกลัวใครจะได้ยิน “ได้ยินว่า Sarah ผลักดันให้ Phoenix เปิดตัวในสัปดาห์นี้ และ Steve ก็เพิ่งอนุมัติไป นรกกำลังจะแตกแล้วล่ะครับ บอกผมด้วยนะถ้าคุณอยากตามไปดูตอนพวกเขารวบรวมทีมสำหรับปล่อยตัว (release team) งานนั้นน่าจะสนุกสุดๆ เลย”

หลังจากการโต้ตอบที่แปลกประหลาดนั้น Maxine กลับมานั่งที่โต๊ะทำงานและเพิ่งนึกได้ว่าเธอกลับมารอคอยอีกครั้งแล้ว เธอเหม่อมองไปที่คำคมที่เธอติดไว้บนโต๊ะทำงานจากหนังสือเล่มโปรด Oh, the Places You’ll Go ของ Dr. Seuss

หนังสือเล่มนั้นบรรยายถึง "สถานที่รอยคอย" (Waiting Place) ที่น่าสะพรึงกลัว ที่ที่ผู้คนต่างรอให้ปลากินเบ็ด รอให้ลมพัดมาเพื่อเล่นว่าว รอ Uncle Jake รอให้น้ำเดือด หรือรอโอกาสที่ดีกว่า... ทุกคนต่างก็แค่รอ

ไม่! นั่นไม่ใช่สำหรับคุณ! คุณจะหนีพ้นจากความรู้สึกของการรอคอยและการจมปลัก คุณจะพบสถานที่ที่สดใส ที่ที่มีวงดนตรี (Boom Bands) กำลังบรรเลง

ทุกคนในโปรเจกต์ Phoenix ต่างก็ติดอยู่ในสถานที่รอคอยนี้ และเธอตั้งใจแน่วแน่ว่าจะช่วยเหลือทุกคนออกมาให้ได้

เวลา 11:45 น. Maxine มองดูปฏิทินของเธอ เป็นเพียงวันที่สี่ของการถูกเนรเทศ ในขณะที่เธอยังไม่ได้รับการติดต่อกลับจาก Kurt เธอสามารถเข้าถึงที่เก็บซอร์สโค้ด (source code repository) ได้เพียงสามจากสี่แห่ง วันนี้เธอตัดสินใจว่าจะไม่รอคนอื่นอีกต่อไป

เธอจะลงมือ build อะไรบางอย่าง

ในอีกสี่ชั่วโมงถัดมา เธอพยายามรันทุกอย่างตั้งแต่ Makefile, maven POM, bundler, pip, ant, build.sh, build.psh และอะไรก็ตามที่ดูเหมือนสคริปต์การ build ที่หาได้ ส่วนใหญ่พังทันทีที่รัน บางอันก็พ่นข้อความแสดงข้อผิดพลาด (error messages) ที่ยาวจนน่าตกใจออกมา

เธอเพ่งมองผ่านไฟล์บันทึกข้อผิดพลาด (error logs) ทั้งหมด ค้นหาเบาะแสใดๆ ที่จะทำให้บางอย่างรันได้จริงๆ กรองผ่านเศษขยะทั้งหมดเพื่อหาสิ่งที่มีค่า—มันเป็นงานที่เหนื่อยและไม่น่ารื่นรมย์เลย เธอระบุได้ว่ามี dependencies หรือ executable ที่ขาดหายไปอย่างน้อยยี่สิบรายการที่เธอต้องการ หลายครั้งที่เธอเดินถามไปทั่วเพื่อดูว่ามีใครรู้แหล่งที่มาของสิ่งเหล่านี้ไหม เปิด Ticket และส่งอีเมลออกไป แต่ไม่มีใครรู้เลย เธอใช้เวลาสามชั่วโมงค้นหาเบาะแสจากอินเทอร์เน็ต ทั้ง Google และ Stack Overflow

ในช่วงเวลาที่การตัดสินใจแย่มาก เธอตัดสินใจลอง build ส่วนประกอบที่ขาดหายไปบางส่วนขึ้นมาใหม่เอง จากส่วนประกอบที่มีชื่อคล้ายๆ กันที่เธอพบใน GitHub ห้าชั่วโมงต่อมาเธอก็อยู่ในอารมณ์ที่แย่มาก—เหนื่อยล้า หงุดหงิด รำคาญ และมั่นใจอย่างยิ่งว่าเธอเพิ่งเสียเวลาไปทั้งวันกับการลงไปในรูโพรงกระต่าย (rabbit hole) ที่เธอไม่ควรจะลงไปเลย

โดยพื้นฐานแล้ว เธอพยายามหลอมชิ้นส่วนเครื่องยนต์ที่หายไปจากการละลายกระป๋องอะลูมิเนียม “นั่นมันโง่จริงๆ นะ Maxine” เธอคิดกับตัวเอง

คืนนั้นเมื่อกลับถึงบ้าน เธอตระหนักว่าเธอได้พกพาความหงุดหงิดจากงานกลับมาด้วย เธอเตือนสามีและลูกๆ ว่าตอนนี้เธอไม่พร้อมจะพูดคุยด้วย แล้วเธอก็พบ Veuve Cliquot rosé สองขวดเล็กในตู้เย็น เมื่อลูกๆ วัยรุ่นเห็นเธอ พวกเขารู้ทันทีว่าควรหลีกเลี่ยงเธอ เพราะเธอกำลังทำหน้า “แม่กำลังอารมณ์เสียสุดขีด” อยู่

ในขณะที่พวกเขากำลังเตรียมมื้อเย็น เธอคลานขึ้นเตียงและดูหนัง

“ช่างเป็นวันที่เสียเปล่าจริงๆ” เธอพ่นความโกรธออกมา

เธอสะท้อนถึงความแตกต่างระหว่างวันที่ดีและวันที่แย่ วันที่ดีคือวันที่เธอได้แก้ปัญหาทางธุรกิจที่สำคัญ เวลาผ่านไปอย่างรวดเร็วเพราะเธอจดจ่อและรักในงานนั้น เธออยู่ในสภาวะลื่นไหล (flow state) จนไม่รู้สึกเหมือนว่ากำลังทำงานเลย

ส่วนวันที่แย่คือวันที่เธอต้องเอาหัวโขกมอนิเตอร์ ค้นหาในอินเทอร์เน็ตสำหรับสิ่งที่เธอไม่อยากจะเรียนรู้เลยสักนิด แต่จำเป็นต้องทำเพื่อแก้ปัญหาที่อยู่ตรงหน้า ขณะที่เธอเคลิ้มหลับไป เธอพยายามไม่คิดว่าชีวิตของเธอเสียไปเท่าไหร่กับการค้นหาอินเทอร์เน็ตเพื่อหาวิธีทำให้ข้อความแสดงข้อผิดพลาดหายไป

วันใหม่เริ่มต้นขึ้น หลังจากนอนหลับมาอย่างเต็มอิ่ม เธอนั่งที่โต๊ะทำงาน ตั้งใจว่าจะไม่ทำผิดซ้ำเหมือนเมื่อวาน เพียงเพราะว่าเธอรู้สึกยุ่งไม่ได้หมายความว่าเธอได้ทำอะไรที่มีความหมายจริงๆ ในหน้าต่างเทอร์มินัล (terminal window) เธอเรียกงานจากเมื่อวานขึ้นมาแล้วลบมันทิ้งทั้งหมดโดยไม่แม้แต่จะมอง

จากนั้นเธอดึง Ticket ทั้งหมดที่ยังเปิดค้างอยู่ในระบบออกมา เธอปฏิเสธที่จะรู้สึกไร้อำนาจตามความพอใจของผู้มีอำนาจที่อยู่ห่างไกล หรือจมจ่ออยู่ภายในระบบราชการที่ขวางกั้นเป้าหมาย ความทะเยอทะยาน ความปรารถนา และความต้องการของเธอ

Maxine มีประวัติที่ยาวนานและซับซ้อนกับระบบการจัดการ Ticket ทั้งในด้านดีและร้าย

ปีที่แล้ว เธอสนับสนุนโปรเจกต์ Kickstarter สำหรับแก้วน้ำที่สัญญาว่าจะเก็บรักษากาแฟหรือชาไว้ในอุณหภูมิที่เธอต้องการได้นานหลายชั่วโมง มันยังมีการเชื่อมต่อบลูทูธเพื่อให้เธอดูและตั้งค่าอุณหภูมิของเครื่องดื่มได้จากโทรศัพท์ เธอรักไอเดียนี้และรีบจ่ายเงินห้าร้อยดอลลาร์เพื่อช่วยผู้ประดิษฐ์คนนั้น

เธอรู้สึกตื่นเต้นทุกครั้งที่ได้รับการแจ้งเตือน: เมื่อผู้ประดิษฐ์บรรลุเป้าหมายการระดมทุน เมื่อเลือกผู้ผลิตได้ เมื่อการผลิตครั้งแรกเริ่มต้นขึ้น และที่สำคัญที่สุด เมื่อแก้วน้ำของเธอถูกจัดส่ง มันเป็นเรื่องที่น่าพึงพอใจมากที่ได้เป็นส่วนหนึ่งของการเดินทางและได้ถือหนึ่งในแก้วน้ำห้าร้อยใบแรกที่ผลิตขึ้น

ระบบ Ticket สำหรับการพัฒนานี้ (Dev ticketing system) ให้ความรู้สึกที่แตกต่างไปอย่างสิ้นเชิง มันตรงข้ามกับความสุขและความคาดหวังที่เธอรู้สึกกับแก้วมังกรของเธอเลย แทนที่จะเป็นแบบนั้น มันกลับทำให้เธอนึกถึงประสบการณ์สยองขวัญในการติดตั้งแพ็กเกจบรอดแบนด์ DSL ความเร็วสูงครั้งแรกของเธอย้อนกลับไปในยุค 90 ถึงแม้เธอจะได้รับโมเด็ม DSL ทันที แต่เธอต้องรับมือกับตัวแทนจำหน่ายอินเทอร์เน็ต (ผู้ขายบริการ DSL ให้เธอ) และบริษัทโทรศัพท์ (เจ้าของสายทองแดงที่บ้านเธอ)

ใครก็ตามที่มาทำการติดตั้งที่บ้านเธอคงจะทำพลาดเพราะไม่มีอะไรทำงานเลย—และเมื่อเธอโทรหาทั้งสององค์กร พวกเขาต่างก็บอกว่าเป็นความรับผิดชอบของอีกฝ่ายที่จะต้องแก้ไข บางครั้งพวกเขาก็หา Ticket ที่เกี่ยวข้องกับการสนทนาครั้งก่อนเจอ บางครั้งก็ไม่ เธอติดอยู่ในระบบราชการที่โหดร้าย ไร้ความรู้สึก และน่าขนลุกเหมือนในนิยายของคาฟคา ตลอดสี่สัปดาห์ โมเด็ม DSL อันแสนวิเศษของเธอทำอะไรไม่ได้นอกจากกะพริบไฟสีแดง มันไร้ประโยชน์เหมือนก้อนอิฐ และเธอมี Ticket ที่เปิดค้างไว้กับทั้งสององค์กรนับไม่ถ้วน

วันหนึ่ง Maxine ตัดสินใจลางานทั้งวันเพื่อจัดการกับการเปิดใช้งานสาย DSL ของเธอให้สำเร็จ หลังจากผ่านไปสามชั่วโมง ในที่สุดเธอก็สามารถคุยไต่ระดับไปจนถึงพนักงานสนับสนุนระดับ 3 (Level 3 escalation support) ที่สามารถเข้าถึงระบบ Ticket ของทั้งสองแห่งได้ เขาช่างเก่งกาจและมีความช่ำชองเป็นพิเศษ เขาสามารถเชื่อมโยงคำขอของ Maxine ไปยังแผนกที่ถูกต้อง โดยใช้คำสำคัญ (keywords) ที่เหมาะสมเพื่อให้ผู้ดูแลจากทั้งสองบริษัทมารวมตัวกันในสายโทรศัพท์เพื่อประสานงานที่จำเป็นทั้งหมด

หนึ่งชั่วโมงต่อมา ในที่สุดเธอก็มีการเชื่อมต่อบรอดแบนด์ 64 Kbps ที่ใช้งานได้

แม้จะผ่านไปหลายทศวรรษ เธยังจำได้ว่าเธอรู้สึกขอบคุณพนักงานสนับสนุนคนนั้นมากเพียงใด เธอเคยบอกเขาว่า “ฉันอยากคุยกับคนที่มีอำนาจตัดสินใจว่าคุณทำงานได้ยอดเยี่ยมแค่ไหน และฉันขอบคุณสำหรับความช่วยเหลือของคุณมากเพียงใด” เธอเต็มใจที่จะรอสายต่ออีกสิบนาทีเพื่อคุยกับผู้ดูแล และจากนั้นเธอก็ใช้เวลาสิบนาทีชื่นชมในรายละเอียดเกี่ยวกับความช่วยเหลือทั้งหมดที่เธอได้รับ

มันเป็นเรื่องสำคัญมากสำหรับ Maxine ที่จะบรรยายว่าพนักงานสนับสนุนระดับ 3 คนนั้นทำงานได้อย่างยอดเยี่ยมและกล้าหาญเพียงใด และเธอเห็นคุณค่าในความช่วยเหลือของเขามากแค่ไหน Maxine รู้สึกพึงพอใจที่ได้ยินว่าเขากำลังได้รับการพิจารณาให้เลื่อนตำแหน่ง และการโทรศัพท์ของเธอในตอนนั้นก็น่าจะช่วยให้เขาได้มันมาอย่างแน่นอน

หลังจากนั้น Maxine ใช้เวลาหนึ่งชั่วโมงดูไฟสีเขียวที่กะพริบอยู่ และดื่มด่ำกับความเร็วในการดาวน์โหลดที่รวดเร็วอย่างไม่น่าเชื่อ

การนึกถึงพนักงานคนนั้นช่วยเตือนสติ Maxine ว่าเธอรักการแก้ปัญหา เธอรักความท้าทาย และงานของเธอนั้นสำคัญเพียงใด เพราะมันจะช่วยให้นักพัฒนาทุกคนทำงานได้ดีขึ้น

เธอสูดลมหายใจเข้าลึกๆ เรียกความมองโลกในแง่ดีแบบไม่ย่อท้อที่ใครๆ ต่างว่าเธอมีออกมา แล้วค่อยๆ กวาดสายตาไล่ดูอีเมลเพื่อหาความคืบหน้าของ Ticket เธอข้ามการอัปเดตสถานะของทีมไป ยกเว้นอันที่ผู้คนเริ่มตะโกนใส่กันด้วยตัวพิมพ์ใหญ่ (ALL CAPS) เพราะเธออยากรู้ว่าใครเป็นพวกหัวร้อนเพื่อจะได้หลีกเลี่ยงคนเหล่านั้น

เมื่อเลื่อนหน้าจอลงไปเรื่อยๆ หัวใจของ Maxine ก็พองโตเมื่อเห็นหัวข้ออีเมล: แจ้งเตือน: การเปลี่ยนแปลง Ticket #46132: Phoenix Dev environment

สภาพแวดล้อมสำหรับการพัฒนา (Dev environment) ของเธอพร้อมใช้งานแล้วจริงๆ ใช่ไหม?

เธอพยายามไม่ตื่นเต้นจนเกินไป เพราะเธอเคยถูกหลอกมาแล้วสองครั้งเมื่อวานที่ได้รับการแจ้งเตือน แต่กลับเป็นการเปลี่ยนแปลงสถานะเพียงเล็กน้อยใน Ticket ของเธอ ครั้งแรกคือเมื่อมีคนดู Ticket และครั้งที่สองคือเมื่อมันถูกโอนไปให้คนอื่น

Maxine คลิกที่ลิงก์ในอีเมล ซึ่งเปิดประวัติทั้งหมดของ Ticket บนเบราว์เซอร์ของเธอ เธอหรี่ตาและยื่นหน้าเข้าไปใกล้หน้าจอ เธอเปิด Ticket นี้เมื่อหกวันก่อน (นับรวมวันหยุดสุดสัปดาห์) และมีการเปลี่ยนแปลงสถานะเจ็ดครั้งเมื่อคนต่างๆ เข้ามาจัดการคำขอของเธอ เมื่อเวลา 08:07 น. ของเช้านี้ Ticket ถูกระบุว่าปิด (closed)

เธอส่งเสียงโห่ร้องออกมาด้วยความดีใจ ในที่สุดพวก Ops ก็จัดการให้เสร็จแล้ว! เธอเข้าสู่กระบวนการ build ได้แล้ว!

แต่เธอกลับงุนงง environment ของเธออยู่ที่ไหน? เธอต้องล็อกอินอย่างไร? IP address คืออะไร? รหัสผ่าน (credentials) สำหรับล็อกอินอยู่ที่ไหน?

เธอเลื่อนลงไปด้านล่างสุดเพื่ออ่านโน้ตและข้อคิดเห็นของแต่ละคนที่เข้ามาจัดการ Ticket ของเธอ มันถูกโอนไปมาตั้งแต่ Bob, Sarah, Terry, กลับมาที่ Sarah และสุดท้ายก็คือ Derek ที่ด้านล่างสุดของโน้ต Derek เขียนไว้ว่า:

เพื่อที่จะได้ Dev environment เราต้องการการอนุมัติจากผู้จัดการของคุณ กระบวนการที่ถูกต้องมีรายละเอียดอยู่ในลิงก์ด้านล่าง ปิด Ticket (Closing ticket)

ใบหน้าของ Maxine ร้อนผ่าวและกลายเป็นสีแดงก่ำ

Derek ปิด Ticket ของฉันเหรอ?! หลังจากที่รอนานขนาดนั้นเนี่ยนะ เขาเพิ่งปิด Ticket ของฉันเพราะฉันไม่มีการอนุมัติจากผู้จัดการงั้นเหรอ?

“Derek นี่มันเป็นใครกันวะ?!” Maxine ตะโกนถามตัวเอง

เธอกวาดเคอร์เซอร์ไปรอบๆ หน้าจอ Ticket พยายามหาอะไรสักอย่างเพื่อจะคลิก แต่ลิงก์เดียวที่คลิกได้คือเอกสารนโยบายที่ Derek ให้ไว้ เธอหาทางติดต่อ Derek ไม่ได้เลย และปุ่มสำหรับเปิด Ticket ใหม่ (reopen) ก็เป็นสีเทาที่คลิกไม่ได้ด้วย

“ขอบใจมากนะ Derek ไอ้บ้าเอ๊ย” Maxine คิดด้วยความโกรธแค้น

ความโกรธพุ่งพล่านจนเธอรู้ตัวว่าต้องไปพัก เธอเดินกระแทกเท้าออกจากตึกมานั่งที่ม้านั่งหน้าสำนักงาน เธอสูดลมหายใจเข้าลึกๆ หลับตาลง และนับหนึ่งถึงห้าสิบ จากนั้นเธอก็เดินกลับเข้ามาในออฟฟิศและนั่งลงที่โต๊ะทำงาน

เธอคลิกปุ่มเพื่อเปิด Ticket ใบใหม่ เมื่อหน้า Ticket ว่างๆ ปรากฏขึ้นมาพร้อมกับช่องให้กรอกมากมายเหลือคณานับ เธอเกือบจะถอดใจและกลับบ้านไปเลย เกือบจะแล้วเชียว แต่เธอก็ฝืนยิ้มและเรียกตัวตนที่เป็นมิตรที่สุดของเธอออกมา:

“สวัสดีค่ะ Derek ขอบคุณมากที่สละเวลามาดูแล environment ของฉันที่จำเป็นมากสำหรับโปรเจกต์ Phoenix รบกวนดู Ticket #46132 (ลิงก์ด้านล่าง) นะคะ ฉันคิดว่าฉันสามารถแนบการอนุมัติจากผู้จัดการ (Randy Keyes) ลงใน Ticket นี้ได้เลยใช่ไหมคะ? เดี๋ยว Randy จะส่งอีเมลยืนยันการอนุมัติให้ภายใน 30 นาทีนี้ค่ะ ฉันสามารถโทรหาคุณเพื่อยืนยันว่ากระบวนการนี้จะเสร็จสิ้นภายในวันนี้ได้ไหมคะ?”

เธอกดปุ่ม Submit เขียนอีเมลสั้นๆ หา Randy เพื่อขอให้เขาอนุมัติการสร้าง Dev environment แล้ววิ่งไปหาเขาที่โต๊ะทำงาน เธอโล่งใจที่เห็นว่าเขาอยู่ที่นั่นและไม่ได้ติดประชุม เธอบอกความต้องการของเธอ และยืนเฝ้าจนเขาส่งอีเมลตอบกลับมาสั้นๆ ว่า “อนุมัติ (Approved)”

เมื่อเธอกลับถึงโต๊ะทำงาน เธอรู้สึกถึงความมุ่งมั่นอย่างแรงกล้าและการโฟกัสที่แน่วแน่ เธอจะทำทุกวิถีทางเพื่อให้ได้ Dev environment ของเธอมา เธอเปิดและจดรหัสการอนุมัติของ Randy จากอีเมลใส่ลงใน Ticket และระบุข้อความลงไปว่า:

“Derek ขอบคุณมาก นี่คือข้อมูลการอนุมัติจากผู้จัดการของฉัน ฉันจะได้รับ environment ภายในวันนี้ไหมคะ?”

เธอกด Submit แล้วค้นหาเบอร์โทรศัพท์ในรายชื่อพนักงานเพื่อหา Derek ในฝ่ายไอที มีอยู่สามคน คนที่อยู่แผนก Helpdesk ดูมีความเป็นไปได้มากที่สุด

เธอส่งอีเมลที่สุภาพและเป็นมิตรไปหาเขา สำเนาถึง Randy เพื่อขอบคุณล่วงหน้าและขอร้องเขาไม่ให้เอา Ticket ของเธอไปไว้ท้ายแถว ซึ่งมันจะกินเวลาอีกหลายสัปดาห์กว่าจะได้สิ่งนี้มา

ห้าวินาทีต่อมา มีอีเมลตอบกลับอัตโนมัติ: "นี่คือการตอบกลับอัตโนมัติ—โปรดใส่รายละเอียดงานที่เกี่ยวข้องกับ service desk ลงในระบบ ฉันจะพยายามอ่านอีเมลและตอบกลับภายใน 72 ชั่วโมง หากนี่เป็นเรื่องด่วน โปรดโทรหาที่เบอร์นี้..."

เธอสบถในใจ จินตนาการว่า Derek กำลังนั่งเอาพาดโต๊ะทำงานแล้วหัวเราะเยาะความโชคร้ายของเธอ เธอพิมพ์เอกสารที่เกี่ยวข้องกับ Ticket #46132 ออกมาทั้งหมด รวมถึงชื่อของ Derek ทั้งสามคน และไปหาถึงโต๊ะทำงานของเขาเพื่อดูว่าเขาคือใคร Derek แผนก Helpdesk อยู่ห่างออกไปสองอาคารที่ชั้นใต้ดิน

เธอเดินออกมาจากลิฟต์ในชั้นของ Derek และเห็นแถวของคอกเล็กๆ (cubicles) ที่มีคนใส่ชุดหูฟังนั่งอยู่หน้าจอคอมพิวเตอร์ ไม่มีหน้าต่าง เพดานในห้องนั้นต่ำอย่างไม่น่าเชื่อ เธอได้ยินเสียงหึ่งๆ ของหลอดไฟฟลูออเรสเซนต์ มันเงียบอย่างน่าประหลาด อากาศควรจะมีพัดลมมากกว่านี้เพื่อไม่ให้มันอับจนเกินไป เธอได้ยินเสียงการพิมพ์และคนสองสามคนคุยทางโทรศัพท์อย่างสุภาพ

เมื่อเห็นสิ่งนี้ เธอรู้สึกผิดอย่างแรงกับความโกรธของเธอก่อนหน้านี้ที่มีต่อ Derek เธอเดินไปหาใครบางคนเพื่อถามว่าเขานั่งอยู่ตรงไหน หลังจากเดินผ่านเขาวงกตของคอกเหล่านั้น ในที่สุดเธอก็เห็นป้ายชื่อของ Derek ที่พิมพ์ออกมาจากเครื่องพิมพ์อิงค์เจ็ทที่หมึกเกือบหมด แล้วเธอก็พบเขา

เขาไม่ได้ดูเหมือนข้าราชการที่เยือกเย็นอะไรเลย กลับกันเขาดูเหมือนคนอายุยี่สิบต้นๆ เขาเป็นคนเอเชีย มีสีหน้าที่จริงจังขณะสแกนหน้าจอบนมอนิเตอร์ LCD เล็กๆ แล็ปท็อปของ Maxine ยังมีหน้าจอใหญ่กว่าคอมพิวเตอร์ราคาถูกชุดนี้เสียอีก เธอรู้สึกแย่ยิ่งกว่าเดิมกับสิ่งแย่ๆ ทั้งหมดที่เธอคิดเกี่ยวกับเขา

ไม่มีเก้าอี้เหลือแล้ว Maxine เลยคุกเข่าลงข้างๆ เขา “สวัสดีค่ะ Derek ฉันชื่อ Maxine เป็นคนที่ส่ง Ticket เรื่อง Dev environment เมื่อสัปดาห์ที่แล้วค่ะ คุณเพิ่งปิดมันไปเมื่อเช้านี้เพราะว่าไม่มีลายเซ็นอนุมัติของผู้จัดการ ตอนนี้ฉันจัดการให้เรียบร้อยแล้วค่ะ แต่พอคุณปิด Ticket ใบเดิมไป ฉันก็ต้องไปเปิดใบใหม่ ตอนนี้ฉันเลยอยากให้คุณช่วยดำเนินการในระบบให้หน่อยค่ะ”

“โอ้โห ขอโทษจริงๆ ครับที่ปิด Ticket ไป ผมเพิ่งมาทำงานที่นี่ได้ไม่นานครับ!” Derek ตอบกลับด้วยความจริงใจ เห็นได้ชัดว่าเขาวิตกกังวลว่าเขาอาจจะทำเรื่องวุ่นวายเข้าให้แล้ว “สิ่งที่ผมรู้คือต้องดูว่า Ticket ที่ต้องการลายเซ็นนั้นมีครบหรือเปล่า ผมเปิด Ticket ที่ปิดไปแล้วไม่ได้ครับ มีแต่หัวหน้างานเท่านั้นที่ทำได้ และ Ticket ใหม่ทั้งหมดจะไปอยู่ในคิวเพื่อให้คนอื่นมารับงานต่อครับ บางทีหัวหน้างานของผมอาจจะช่วยได้นะ”

Maxine ไหล่ตก เธอเริ่มกังวลกับสิ่งที่รออยู่ข้างหน้า แต่เมื่อมองไปรอบๆ เธอตระหนักว่าถ้าเธอไม่จัดการเรื่องนี้ให้เรียบร้อยตอนนี้ เธอจะไม่มีวันได้ Dev environment ของเธอมาแน่ๆ

“แน่นอนค่ะ นั่นคงจะดีมากเลยค่ะ Derek” เขายิ้มและเดินนำไปที่ห้องทำงานด้านนอก

ในช่วงสิบห้านาทีถัดมา Maxine เฝ้าดูหัวหน้างานของ Derek ตรวจสอบประวัติ Ticket ของเธออย่างเชี่ยวชาญ ในเวลาที่เธอเดินออกมาจากโต๊ะทำงาน ใครบางคนที่ชื่อ Samantha ได้ปิด Ticket ใบใหม่ของเธอไปแล้ว โดยให้เหตุผลว่าการอนุมัติไม่สามารถส่งมาในช่อง “Notes” ได้

Maxine พยายามระงับอารมณ์ คนพวกนี้กำลังพยายามช่วยเธอ หัวหน้างานขอโทษในความไม่สะดวก เธอรวม Ticket สองใบเข้าด้วยกัน ใส่ชื่อของ Randy ลงในช่องผู้อนุมัติ (Approver field) และส่ง Ticket ใหม่อีกครั้ง “ตอนนี้ Randy แค่ต้องกดปุ่มอนุมัติในโปรแกรม แล้วคุณก็พร้อมทำงานแล้วล่ะค่ะ! ขอโทษด้วยที่เราไม่มีอำนาจอนุมัติคำขอได้เอง—เฉพาะผู้จัดการที่ได้รับมอบหมายเท่านั้นที่ทำได้”

“เขาสามารถกดอนุมัติจากโทรศัพท์ตอนนี้ได้เลยไหมคะ?” เธอถามด้วยความร่าเริงแบบฝืนๆ แต่น่าเสียดาย—เครื่องมือช่วยเหลือ (helpdesk tool) นี้ถูกเขียนขึ้นก่อนที่จะมีสมาร์ทโฟนเสียอีก โทรศัพท์มือถือในสมัยนั้นคงจะมีขนาดเท่ากระเป๋าเดินทางและแสดงผลได้แค่เจ็ดหลักเท่านั้นเอง

Maxine ถอนหายใจ แต่เธอก็ขอบคุณพวกเขาอย่างสุดซึ้งเพราะเธอแน่ใจว่าเธอใกล้จะบรรลุเป้าหมายแล้ว ขณะที่เธอกำลังจะเดินออกมา Derek ถามขึ้นมาเบาๆ ว่า “ผมขอถามอะไรโง่ๆ หน่อยได้ไหมครับ?”

“แน่นอนค่ะ ไม่มีคำถามไหนโง่หรอกค่ะ ถามมาได้เลย” เธอยิ้ม พยายามไม่ให้ดูเหมือนคนบ้า

“Dev environment คืออะไรเหรอครับ? ผมเคยจัดการเรื่องแล็ปท็อป รีเซ็ตรหัสผ่าน และเรื่องพวกนี้มาบ้าง แต่ผมไม่เคยได้ยินคำว่า ‘environment’ มาก่อนเลย”

และนั่นแหละคือบทเรียนสำหรับสัปดาห์นี้ในเรื่องความอดทน ความเมตตา และความเห็นใจผู้อื่น ซึ่งส่งตรงถึง Maxine โดย Derek และแผนก Helpdesk

Maxine ภูมิใจที่เธอมีชื่อเสียงในเรื่องความสุขุม รอบคอบ และมีความเห็นอกเห็นใจผู้อื่น แต่ในตอนนี้ เธอรู้สึกเหมือนว่าเธอไม่ได้แสดงสิ่งเหล่านั้นออกมาเลยแม้แต่นิดเดียว การถูกส่งมาที่โปรเจกต์ Phoenix กำลังทำให้เธอกลายเป็นคนไม่ดีหรือเปล่านะ?

เธอเพิ่งนึกขึ้นได้ว่าความโกรธของเธอที่มีต่อ Derek นั้นผิดที่ผิดทางไปมาก ชายหนุ่มผู้น่าสงสารคนนี้ไม่ได้มีอคติอะไรกับเธอเลยที่เธอเป็นนักพัฒนา เขาไม่แม้แต่จะรู้ด้วยซ้ำว่าเธอกำลังขออะไร และยิ่งไม่ต้องพูดถึงเรื่องที่เขาจะไม่เข้าใจว่ามันสำคัญแค่ไหน ในความไม่ประเดียงสาของเขา เขาเพียงแค่ปิด Ticket โดยทำตามกฎที่ตั้งไว้ให้เขา เขาแค่พยายามทำหน้าที่ของตัวเองให้ดีที่สุดตามที่ได้รับการสอนมาเท่านั้น

Maxine กลับถึงโต๊ะทำงานในอีกสองชั่วโมงถัดมา เธอพา Derek และหัวหน้างานของเขาไปทานมื้อเที่ยง—เพื่อแสดงความขอบคุณสำหรับความช่วยเหลือและเพื่อไถ่โทษที่เคยคิดไม่ดีกับ Derek เธอมีโอกาสได้อธิบายโลกของการพัฒนาให้เขาฟัง และความอยากรู้อยากเห็นอย่างจริงใจของเขาก็ทำให้เธอรู้สึกดีขึ้น เธอเล่าถึงเส้นทางอาชีพที่น่าตื่นเต้นสำหรับคนเก่งทางเทคนิคนอกเหนือจากการเป็น Helpdesk หวังว่ามันจะกระตุ้นให้เขาสำรวจทางเลือกที่มีให้เขาได้

เธอไปหา Randy เพื่อให้แน่ใจว่าเขาจะอนุมัติคำขอของเธอ แต่เขาไม่อยู่ที่โต๊ะ เธอจึงโทรหาเขาทางมือถือทันที

“ผมอนุมัติให้ไม่ได้จนกว่าจะกลับถึงโต๊ะทำงานครับ” Randy บอกเธอ “ผมรับรองเลยว่าจะอนุมัติให้ทันทีที่ออกจากการประชุม เสร็จก่อนห้าโมงแน่นอน”

Maxine กลับไปที่โต๊ะทำงานด้วยความรู้สึกสับสน เธอเข้าใจถึงความจำเป็นของการมีเวิร์กโฟลว์ (workflow) แบบอัตโนมัติ ในโรงงานผลิต ระบบ MRP ที่เธอเขียนขึ้นควบคุมทุกสิ่งที่ผู้คนนับพันทำเกือบทุกนาทีของแต่ละวัน คุณไม่สามารถผลิตสินค้าจำนวนมหาศาลที่มีมูลค่าหลายพันดอลลาร์ได้โดยปราศจากกระบวนการที่เข้มงวด

แม้แต่กระบวนการ Helpdesk ไม่ว่าจะที่นี่หรือที่องค์กรที่เธอต้องรับมือเพื่อติดตั้ง DSL เมื่อหลายสิบปีก่อน ก็ยังเป็นวิธีที่ดีในการให้บริการลูกค้าได้อย่างสม่ำเสมอเป็นส่วนใหญ่ แม้จะส่งผ่านพนักงานศูนย์บริการลูกค้านับพันคนก็ตาม

แล้วทำไมระบบ Ticket ที่นี่ถึงได้รู้สึกแย่ขนาดนี้? เราทุกคนเป็นส่วนหนึ่งของ Parts Unlimited แล้วทำไมทุกอย่างถึงรู้สึกเหมือนกำลังรับมือกับระบบราชการของรัฐบาลหรือผู้ขายที่ไม่แยแสเราเลย? Maxine ครุ่นคิด บางทีอาจเป็นเพราะเมื่อเพื่อนทำให้เพื่อน เราไม่ต้องขอให้เขาเปิด Ticket ก่อนก็ได้

วันรุ่งขึ้น Maxine เห็นว่า Randy ทำตามสัญญาแล้ว—เขาอนุมัติ Ticket ของ Dev environment แต่ก็นั่นแหละ มันสายเกินไปสำหรับใครที่จะเริ่มทำงานให้เธอได้ในวันนั้น

แม้จะมีความคืบหน้าครั้งสำคัญ แต่ Maxine ก็ยังคงรอคอย Dev environment ต่อไป ด้วยความผิดหวัง เธอเดินเตร็ดเตร่ไปมาอย่างไร้จุดหมายจากที่ประชุมหนึ่งไปสู่อีกที่ประชุมหนึ่ง เพราะไม่อยากนั่งว่างๆ อยู่ที่โต๊ะทำงาน

ฆ่าเวลาในห้องครัวขณะรอกาแฟหม้อใหม่หมุนโทรศัพท์ของเธอสั่นสะเทือน มีการแจ้งเตือนอีเมลเกี่ยวกับการเปลี่ยนแปลงใน Ticket #46132 ปรากฏขึ้นเต็มหน้าจอ คำขอให้มอบหมาย virtual machine (VM) ให้กับกลุ่มระบบกระจาย (distributed systems group) คำขอพื้นที่จัดเก็บ (storage) จากอีกกลุ่มหนึ่ง IP address จากอีกกลุ่ม จุดเชื่อมต่อเครือข่าย (network mount point) จากอีกกลุ่มหนึ่ง การติดตั้งแอปพลิเคชันจากอีกสามกลุ่ม...

Maxine ส่งเสียงร้องด้วยความดีใจ—ในที่สุดก็คืบหน้าเสียที! ซานต้าเพิ่งส่งกองทัพเอลฟ์มหัศจรรย์มาช่วยสร้าง Dev environment ที่เธอโหยหา กองทัพม้าขาวมาช่วยแล้ว!

ด้วยความตื่นเต้น เธออ่านผ่าน Ticket ทั้งหมด มีงานจำนวนมากถูกส่งไปที่หน่วยงานปฏิบัติการ (Ops) ทั้งหมด Maxine เริ่มตกใจว่าต้องใช้คนจำนวนมากขนาดนี้เลยเหรอเพื่อสร้างหนึ่ง environment

เธอนั่งทำงานที่โต๊ะ วางแผนสิ่งที่จะทำเป็นอันดับแรกเมื่อได้ Dev environment มา ตอนที่โทรศัพท์ของเธอเริ่มสั่นไม่หยุด เมื่อเปิดอีเมลดู เธอถึงกับอ้าปากค้างกับข้อความสี่สิบฉบับที่ส่งเข้ามา และที่ด้านบนสุดของหน้าจอคือการแจ้งเตือนใหม่ๆ ที่ระบุว่า Ticket ทั้งหมดของเธอถูกปิดลงแล้ว

“ไม่นะ ไม่นะ ไม่” เธอครวญคราง เริ่มไล่ดูประวัติ Ticket ตั้งแต่ต้น เธอเห็นว่าบัญชีผู้ใช้ถูกสร้างแล้ว จุดเชื่อมต่อถูกกำหนดแล้ว แต่จากนั้นเธอเห็นโน้ตจากหนึ่งในผู้ดูแลพื้นที่จัดเก็บข้อมูล (storage administrators):

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

Maxine กะพริบตา ตอนนี้เดือนกันยายน

Phoenix เป็นโปรเจกต์ที่สำคัญที่สุดในบริษัท พวกเขาใช้เงินไป 20 ล้านดอลลาร์ตลอดสามปีที่ผ่านมา แต่ที่นี่ เธอกำลังพยายามช่วย และพวกเขาไม่ยอมจ่ายเงิน 5,000 ดอลลาร์เพื่อซื้อฮาร์ดดิสก์เพิ่ม และตอนนี้เธอจะไม่ได้ Dev environment ไปอีกห้าเดือน! เธอเอามือกุมหน้าแล้วตะโกนใส่คีย์บอร์ดเงียบๆ

ด้วยความพ่ายแพ้อย่างสิ้นเชิง เธอเดินเตร็ดเตร่ออกไปอีกครั้งอย่างไร้จุดหมาย ตอนนั้นเวลาบ่ายสองโมงครึ่ง ไม่มีการประชุมไหนในปฏิทินที่ดูน่าสนใจอีกต่อไปแล้ว มีแต่ผู้คนบ่นเรื่องการรอคอย รออะไรบางอย่าง รอใครสักคน ทุกคนต่างก็แค่รอ และเธอไม่อยากเป็นส่วนหนึ่งของมันในตอนนี้

เธอกลับไปที่โต๊ะทำงาน หยิบเสื้อแจ็คเก็ตและกระเป๋าแล็ปท็อป แล้วตัดสินใจจากไป เธอไม่รู้ว่าจะไปที่ไหน แต่เธออยู่ตรงนี้ต่อไม่ได้แล้วในวันนี้

ตอนที่อยู่หลังพวงมาลัยนั่นเองที่เธอตัดสินใจแวะไปที่โรงเรียนเก่าของลูกๆ ไม่ได้ไปหาลูกของเธอ—ลูกของเธอมันถึงวัยที่ไม่อยากไปไหนมาไหนกับพ่อแม่แล้ว ไม่ใช่ เธอกำลังจะไปโรงเรียนประถมที่มีเด็กชั้นประถมห้าและหกมาทำกิจกรรมหลังเลิกเรียน เธอภูมิใจที่ได้ช่วยครูสร้างชมรมเขียนโค้ด (coding club) ขึ้นมาเมื่อสามปีก่อน และตอนนี้มันได้รับความนิยมอย่างมาก เธอดีใจที่เห็นนักเรียนมากมายสนุกกับวิทยาศาสตร์ เทคโนโลยี วิศวกรรม และคณิตศาสตร์ (STEM) ก่อนที่จะเข้าสู่ระดับมัธยมปลาย

Maxine เชื่อว่าการเรียนรู้ทักษะเหล่านี้สำคัญอย่างยิ่ง เพราะการเขียนโค้ดเป็นความสามารถพื้นฐานที่ทุกสายอาชีพต้องใช้อีกในสิบปีข้างหน้า มันไม่ใช่แค่สำหรับนักพัฒนาซอฟต์แวร์อีกต่อไปแล้ว

เธอก้าวเข้าไปในห้องเรียนและเห็น Maia กับ Paige ทันที ทั้งสองเป็นเด็กที่เธอชอบมากที่สุดในการสอน พวกเขาเป็นเพื่อนสนิทกันแต่ก็เป็นคู่แข่งตัวฉกาจ บางครั้งก็เป็นคู่ปรับกันเลยด้วยซ้ำ ทั้งคู่ฉลาด ทะเยอทะยาน และมีพรสวรรค์ในการแก้ปัญหา

นี่เป็นครั้งแรกในปีการศึกษานี้ที่ Maxine แวะมาเยี่ยม เธอประหลาดใจที่ทุกคนดูโตขึ้นมากและทักษะการเขียนโค้ดของพวกเขาก็ก้าวหน้าขึ้นไปไกล บางคนกำลังเขียนสิ่งที่ดูเหมือนเกมด้วย JavaScript บางคนกำลังทำเว็บเซิร์ฟเวอร์ และนักเรียนสองคนดูเหมือนกำลังเขียนแอปมือถือ

เธอใช้เวลาหนึ่งชั่วโมงเรียนรู้สิ่งที่แต่ละกลุ่มกำลังทำ หัวเราะอย่างดีใจเมื่อพวกเขาโชว์ผลงาน และมีความสุขมากเมื่อพวกเขาถามคำถาม เมื่อ Maia และ Paige ขอให้ช่วยแก้ปัญหา เธอก็รีบดึงเก้าอี้มานั่งทันที

พวกเขากำลังพยายามทำแบบฝึกหัดในชั้นเรียนเพื่อคำนวณค่าเฉลี่ย (mean), ฐานนิยม (mode) และช่วงระหว่างควอไทล์ (interquartile range) ของชุดตัวเลขในภาษา Python เธอเห็นทันทีว่าพวกเขาทำพลาดเรื่องการจัดย่อหน้า (indentation) ซ้ำแล้วซ้ำเล่า

แน่นอนว่าเมื่อพวกเขารองรันโปรแกรม ตัวแปลภาษา Python (Python parser) ก็พ่นข้อผิดพลาดเกี่ยวกับการจัดย่อหน้าออกมาเต็มไปหมด พวกเขาพยายามดิ้นรนเพื่อหาจุดที่ทำผิด พยายามทุกวิถีทางเพื่อให้ข้อผิดพลาดนั้นหายไป

“ขอแนะนำอะไรหน่อยได้ไหมจ๊ะ?” Maxine ถามพลางเริ่มขยับเข้าไปช่วย

Maxine อธิบายให้ฟังว่าการจัดย่อหน้าใน Python ทำงานอย่างไร และมันแตกต่างจากภาษาโปรแกรมอื่นๆ ส่วนใหญ่อย่างไร “แต่ไม่ว่าจะใช้ภาษาไหน สิ่งสำคัญที่สุดคือต้องรันโปรแกรมของคุณบ่อยๆ นะ” เธอกล่าว “ตอนที่ฉันทำอะไรสักอย่างเป็นครั้งแรก ฉันจะรันโปรแกรมทุกครั้งที่มีการเปลี่ยนแปลง เพื่อให้แน่ใจว่ามันยังสามารถคอมไพล์ (compile) และรันได้ ด้วยวิธีนี้ฉันจะไม่ทำผิดซ้ำๆ เป็นชั่วโมงโดยที่ไม่รู้ตัว จับความผิดพลาดให้ได้ทันทีที่มันเกิดขึ้นจะดีกว่าใช่ไหมล่ะ?”

เธอแนะนำวิธีจัดย่อหน้าให้ถูกต้อง “มาลองดูกันว่านั่นจะช่วยแก้ข้อผิดพลาดแรกได้ไหม...”

เธอกวาดสายตาดูปุ่มบน editor ของพวกเขา “ดูเหมือนว่าเราจะรันโปรแกรมได้แค่กด Control-Enter อะ แก้เสร็จแล้ว ลองรันดูนะ ... นั่นไง แก้ข้อผิดพลาดแรกได้แล้วล่ะ ตอนนี้ก็แก้ข้อผิดพลาดถัดไปเรื่อยๆ จนกว่าโปรแกรมจะกลับมาทำงานได้ปกติ ถ้าเช็กทุกครั้งหลังจากที่มีการเปลี่ยนแปลงเล็กน้อย คุณก็จะไม่ต้องแก้ปัญหาใหญ่อีกต่อไปจ้ะ...”

สะท้อนถึงสิ่งที่เธอพูด เธอก็พูดต่อว่า “สิ่งหนึ่งที่วิเศษมากเกี่ยวกับการรันโปรแกรมบ่อยๆ คือเราจะได้เห็นมันทำงานจริงๆ ซึ่งมันสนุกมาก และนั่นคือหัวใจสำคัญของการเขียนโปรแกรมเลยล่ะ”

เด็กผู้หญิงทั้งสองยิ้มเพราะในที่สุดโปรแกรมก็ทำงานได้แล้ว เมื่อมองดูผลลัพธ์ (output) Maia ก็สังเกตเห็นบางอย่างผิดปกติ ค่าเฉลี่ยที่คำนวณได้นั้นผิดไปเยอะมาก

“อืม... ฉันคิดว่านี่คือข้อผิดพลาดแบบ ‘off-by-one’ นะ” Maxine กล่าว “นี่คือหนึ่งในข้อผิดพลาดที่พบบ่อยที่สุดที่นักพัฒนาซอฟต์แวร์มักจะทำกัน มันมักจะเกิดขึ้นเมื่อเราทำการลูป (loop) ผ่านสมาชิกทุกตัวในอาเรย์ (array) และเราคำนวณผิดพลาดว่าตัวไหนคือตัวสุดท้าย และนั่นคือสิ่งที่เกิดขึ้นที่นี่—เราพลาดตัวสุดท้ายไป... และเชื่อหรือไม่ว่า เมื่อคุณประมวลผลสมาชิกเกินมาเพียงตัวเดียว นั่นอาจทำให้โปรแกรมแครช (crash) หรือแม้แต่ถูกแฮ็กเกอร์โจมตีได้เลย”

Maxine ยิ้มไม่หุบ เธอตื่นเต้นมากที่ได้แบ่งปันบทเรียนนี้ เพราะตลอดหลายสิบปีที่ผ่านมา เธอเรียนรู้ว่าการเปลี่ยนค่าสถานะ (state mutation) และการทำลูปนั้นอันตรายมากและจัดการให้ถูกต้องได้ยากสุดๆ ปัญหาฐานข้อมูล ODBC ที่เธอแก้กลางดึกเมื่อสิบปีก่อน จนทำให้เธอมีชื่อเสียงโด่งดัง ก็มีสาเหตุมาจากปัญหาประเภทนี้นี่แหละ

นี่คือเหตุผลที่ Maxine ทุ่มเทให้กับการนำหลักการของ functional programming มาใช้ทุกที่ที่ทำได้ การเรียนรู้ภาษา Clojure ซึ่งเป็นภาษาโปรแกรมที่เธอชอบที่สุดนั้นเป็นสิ่งที่ยากที่สุดที่เธอเคยทำมา เพราะมันตัดความสามารถในการเปลี่ยนค่าตัวแปรออกไปอย่างสิ้นเชิง แต่มันก็เป็นการเรียนรู้ที่คุ้มค่าที่สุดอย่างหนึ่ง เพราะเธอพบว่าข้อผิดพลาดกว่าเก้าสิบห้าเปอร์เซ็นต์ที่เธอเคยทำ (เหมือนที่เด็กๆ เพิ่งทำไป) นั้นหายไปทั้งหมด

Functional programming เป็นเครื่องมือที่ดีกว่าในการใช้ขบคิดจริงๆ

“อยากเห็นอะไรเจ๋งๆ ไหมจ๊ะ?” Maxine ถามเด็กผู้หญิง เมื่อพวกเขาพยักหน้า เธอก็บอกว่า “นี่คือสิ่งที่ฉันจะทำ มันอาจจะดูแปลกๆ หน่อยนะ แต่คุณสามารถกำจัดการใช้ลูปออกไปได้เลยโดยการใช้ตัววนซ้ำ (iterators)—มันเป็นวิธีเขียนลูปที่ง่ายและปลอดภัยกว่ามาก”

เธอค้นหาเอกสาร Python จากอินเทอร์เน็ต และพิมพ์โค้ดหนึ่งบรรทัดลงใน editor ของพวกเขา กด Control-Enter สองสามครั้งจนได้คำตอบที่ถูกต้อง

“ว้าว! ดูนี่สิ มันทำงานได้เหมือนกับที่คุณเขียนเลย แต่ไม่มีลูปหรือเงื่อนไขตรรกะที่ต้องเช็กจุดจบของอาเรย์เลย ในความเป็นจริงมันเป็นโค้ดแค่บรรทัดเดียว และไม่มีความเสี่ยงที่จะเกิดข้อผิดพลาดแบบ off-by-one ด้วย!” เธอพูดออกมาอย่างภูมิใจในสิ่งที่เพิ่งเขียนลงไป

Maxine ได้รับรางวัลเป็นเสียง “โอ้โห” และ “อู้หู” เมื่อเด็กๆ เบิกตากว้างกับสิ่งที่ Maxine แสดงให้ดู Maxine รู้สึกดีมาก เพราะแม้แต่การออกกำลังกายเล็กๆ น้อยๆ นี้ก็ได้ขจัดความซับซ้อนที่ไม่จำเป็นออกไปจากโลกใบนี้ มันอาจช่วยประหยัดเวลาแห่งความหงุดหงิดของเด็กๆ ไปได้หลายทศวรรษ และทำให้โลกนี้น่าอยู่ขึ้น

เธอใช้เวลาชั่วโมงถัดมาเดินดูไปมาระหว่างทีม สนุกสนานกับการดูเด็กๆ แก้ปัญหา และสอนลูกเล่นเล็กๆ น้อยๆ เพื่อให้พวกเขาสามารถทำงานได้เร็วขึ้นและสนุกขึ้น เมื่อเด็กๆ เลิกเรียนและเก็บกระเป๋าเป้ใบใหญ่และหนักของพวกเขา Maxine ก็รู้ตัวว่าเธอกำลังอยู่ในอารมณ์ที่ดีมาก

ความสุขจากการได้สอนผู้คนในสิ่งที่พวกเขาอยากเรียนรู้นั้นช่างวิเศษสุดๆ แถมเด็กพวกนี้ยังเจ๋งมากอีกด้วย เธอคิดว่าทุกอย่างที่นี่ช่างง่ายดายเหลือเกิน คุณแค่กด Control-Enter แล้วโปรแกรมก็สร้างและรันได้ทันที ถ้ามีข้อผิดพลาดคุณก็แค่แก้ กดปุ่ม แล้วลองใหม่อีกครั้ง

แต่ในนรกการทำงานปัจจุบันของเธอ มันตรงกันข้ามโดยสิ้นเชิง เธอยังไม่สามารถรัน build ส่วนใดส่วนหนึ่งของระบบ Phoenix ได้เลย ดูเหมือนว่าการรัน build จะไม่ใช่ส่วนหนึ่งของงานประจำวันของทุกคนไปเสียแล้ว

ทุกคนโบกมือลา Maxine ขอบคุณเธอสำหรับความช่วยเหลือทั้งหมด เธอขึ้นรถแล้วก็นั่งลงที่เบาะอย่างเหนื่อยอ่อน เธอรู้สึกเศร้าและท้อแท้—ที่ทำงานไม่มีความสนุกและการเรียนรู้แบบที่เธอเพิ่งได้รับมาเลย เธอสงสัยว่านี่คือความรู้สึกของทุกคนในโปรเจกต์ Phoenix หรือเปล่า

Maxine กำลังจะสตาร์ทรถตอนที่โทรศัพท์ของเธอสั่น มีข้อความจากเพื่อนร่วมงานคนหนึ่งในโปรเจกต์ open-source ที่เธอเขียนขึ้นเพื่อช่วยจัดการงานส่วนตัว เธอเริ่มโปรเจกต์นี้มาห้าปีแล้วเพื่อช่วยเธอจดบันทึกการทำงานที่ยอดเยี่ยม เธอเป็นคนที่บ้าคลั่งเรื่องการเก็บบันทึกวิธีใช้เวลาของเธอมาโดยตลอด

ตอนเริ่มต้น มันเป็นแค่การช่วยให้เธอทำงานได้อย่างมีประสิทธิภาพมากขึ้น เพื่อจัดลำดับความสำคัญของงานที่เข้ามาจากอีเมล, Trello, Slack, Twitter, รายการสิ่งที่ต้องอ่าน และที่อื่นๆ ที่งานมักจะถูกสร้างขึ้นมา แอปของเธอช่วยให้เธอสามารถผลักดันงานไปยัง GitHub, JIRA, Trello และเครื่องมืออื่นๆ มากมายที่เธอใช้โต้ตอบกับผู้คนและทีมงาน

หลายปีที่ผ่านมา เธอใช้โปรแกรมนี้ทุกวันเพื่อช่วยรันงานเกือบทั้งหมดทั้งเรื่องส่วนตัวและเรื่องงาน มันคือกล่องรับงานหลัก (master inbox) ของเธอ ซึ่งเธอสามารถดูงานทั้งหมดและย้ายงานระหว่างระบบที่เธอใช้ทำงานร่วมกันได้

คนอื่นๆ อีกหลายคนก็ใช้แอปพลิเคชันของเธอเช่นกัน และบางคนก็เขียนตัวปรับต่อ (adapters) เพื่อเชื่อมต่อไปยังเครื่องมืออื่นๆ ที่พวกเขาต้องการ เธอทึ่งเสมอที่ผู้คนหลายพันคนทั่วโลกใช้มันทุกวัน โดยมีผู้ร่วมเขียนโค้ด (contributors) กว่ายี่สิบคนที่เขียนโค้ดให้กับโปรเจกต์นี้

เธอเปิดดู pull request ใหม่จากข้อความนั้น—ใครบางคนได้สร้าง adapter ใหม่เพื่อเชื่อมต่อกับโปรแกรมจัดการงาน การเปลี่ยนแปลงที่เสนอนั้นดูวิเศษมาก เธออยากทำมันมาหลายปีแล้ว การเปลี่ยนแปลงของเขานั้นชาญฉลาดมาก และเธอชื่นชมวิธีการเขียนแบบทดสอบอัตโนมัติ (automated tests) ที่แสดงให้เห็นว่าการเปลี่ยนแปลงของเขานั้นทำงานได้ดีโดยไม่ทำลายส่วนอื่นๆ เขายังจดบันทึกอธิบายสิ่งที่เขาทำและเหตุผลไว้อย่างละเอียด เธอชอบวิธีที่เขาเปลี่ยนมันให้เป็นบทช่วยสอน (tutorial) เพื่อให้คนอื่นทำตามได้

เธอชอบที่ได้เห็นความคิดสร้างสรรค์ของผู้คนและความเต็มใจที่จะทำให้แอปดีขึ้น ในฐานะเจ้าของโปรเจกต์ (project owner) เธอถือเป็นหน้าที่หลักในการทำให้แน่ใจว่าผู้ร่วมเขียนโค้ดทุกคนสามารถทำงานได้อย่างราบรื่น

เมื่อสองสามปีก่อน มี pull requests ที่ยังค้างอยู่มากกว่ายี่สิบรายการที่เธอไม่ได้นำมารวม (merge) เข้าไป ด้วยเหตุผลหลายประการ—บางครั้งการเปลี่ยนแปลงก็ขัดแย้งกัน บางครั้ง API ของเธอก็ไม่สามารถรองรับสิ่งที่พวกเขาต้องการได้ เธอรู้ดีว่ามันน่าท้อแท้แค่ไหนเมื่อคุณส่งการเปลี่ยนแปลงไปที่โปรเจกต์ของใครบางคน แต่ไม่มีใครเคยเหลียวแลหรือบอกคุณว่ามันรวมเข้าไปไม่ได้ หากเป็นแบบนั้นบ่อยๆ ผู้คนก็จะเลิกทำไปเองหรือแยกโปรเจกต์ (fork) ออกไปและทำให้ชุมชนแตกแยก

ดังนั้น เมื่อเรื่องนี้เริ่มเกิดขึ้นกับโปรเจกต์ของเธอ เธอจึงใช้เวลาช่วงเย็นทุกวันเป็นเวลาหลายสัปดาห์ในการปรับสถาปัตยกรรม (rearchitecting) ระบบของเธอใหม่ เพื่อให้ผู้คนสามารถทำการเปลี่ยนแปลงที่ต้องการได้อย่างรวดเร็ว ง่ายดาย และปลอดภัย เธอลงมือแก้ไข pull request ทุกรายการด้วยตัวเอง เพื่อให้ผู้ร่วมเขียนโค้ดไม่ต้องทำงานซ้ำซ้อน ทุกคนต่างตื่นเต้นและซาบซึ้งเมื่อการเปลี่ยนแปลงของพวกเขาถูกรวมเข้าไป—แต่ไม่มีใครตื่นเต้นไปกว่า Maxine

Maxine รู้ดีว่าความคล่องตัว (agility) ไม่เคยได้มาฟรีๆ เมื่อเวลาผ่านไป หากไม่มีการลงทุนในลักษณะนี้ ซอฟต์แวร์มักจะยากขึ้นเรื่อยๆ ในการเปลี่ยนแปลง มีข้อยกเว้นบางอย่าง เช่น ไลบรารีคณิตศาสตร์จุดทศนิยม (floating-point math libraries) ที่ไม่มีการเปลี่ยนแปลงมาสี่สิบปีแล้ว—พวกมันไม่จำเป็นต้องเปลี่ยน เพราะคณิตศาสตร์ไม่เคยเปลี่ยน

แต่ในเกือบทุกโดเมน (domain) อื่นๆ โดยเฉพาะอย่างยิ่งเมื่อคุณมีลูกค้า การเปลี่ยนแปลงคือความจริงของชีวิต ระบบซอฟต์แวร์ที่ดีคือระบบที่คุณสามารถเปลี่ยนแปลงได้ตามความเร็วที่คุณต้องการ ที่ที่ผู้คนสามารถช่วยเหลือได้ง่ายโดยไม่ต้องกระโดดผ่านห่วงพิธีกรรมมากมาย นี่คือวิธีที่คุณสร้างโปรเจกต์ที่สนุกและคุ้มค่าที่จะมีส่วนร่วม และเป็นจุดที่คุณมักจะพบชุมชนที่มีชีวิตชีวาที่สุด

เธอขับรถกลับบ้านและรู้สึกดีใจที่สามีของเธอได้เตรียมมื้อเย็นไว้เรียบร้อยแล้ว เธอเล่าเรื่องการแวะไปที่โรงเรียนมัธยมเก่าและความน่าตื่นเต้นของเหล่าบรรดา "กีก" (geeks) รุ่นใหม่ให้ลูกๆ ฟัง

เมื่อลูกๆ แยกย้ายกันไปทำการบ้าน เธอหยิบแล็ปท็อปขึ้นมาและเปิดดู pull request ที่น่าตื่นเต้นตัวใหม่นั้น เธอดึงโค้ด (pull) เข้ามาและรันเวอร์ชันใหม่บนแล็ปท็อปของเธอ เธอล็อกอินและลองคลิกไปมา ทดสอบกรณีขอบเขต (corner-cases) ต่างๆ เพื่อให้แน่ใจว่าเขารายละเอียดได้ถูกต้อง

เธอยิ้มและเปิด pull request ในเบราว์เซอร์แล้วคลิกปุ่มเพื่อ merge มันเข้ากับ code base ของเธอ เธอเขียนจดหมายขอบคุณผู้ส่ง ชื่นชมในความชาญฉลาดและความคิดริเริ่มของเขา

ก่อนที่จะกดส่ง เธอสังเกตเห็นสิ่งที่เขาเขียนว่า: “Maxine ผมจะจัดงานปาร์ตี้ครั้งใหญ่ให้คุณเลยถ้าคุณสามารถแสดงการแจ้งเตือนบนเดสก์ท็อป (desktop notification) ทุกครั้งที่ใครบางคนแก้ไขคุณสมบัตินี้...”

เป็นไอเดียที่ดี เธอคิด เธอเปิด code editor ขึ้นมา และในสิบห้านาทีถัดมา เธอก็ลองลงมือเขียนฟีเจอร์นี้ดู เมื่อมันทำงานได้ตั้งแต่ครั้งแรก เธอก็ยิ้มและหัวเราะออกมาดังๆ พลางตบมือให้ตัวเองด้วยความดีใจ เธออยู่ในอารมณ์ที่ดีมาก คุณสามารถทำอะไรได้มากมายด้วยความพยายามเพียงเล็กน้อยเพราะปาฏิหาริย์ของเทคโนโลยีเหล่านี้

เธอกลับไปเขียนบันทึกถึงผู้ส่งต่อ: “ขอย้ำอีกครั้งว่างานยอดเยี่ยมมาก ฉันมั่นใจว่าทุกคนจะชอบมันเหมือนที่ฉันชอบ ขอบคุณมากค่ะ! (และฉันเพิ่งเพิ่มฟีเจอร์การแจ้งเตือนที่คุณขอไปแล้วด้วย ข้อเสนอเรื่องการจัดงานปาร์ตี้ครั้งใหญ่ให้ฉันนั้น ฉันขอรับไว้ด้วยความยินดีนะคะ)”

เมื่อกดส่ง เธอสงสัยว่าจักรวาลกำลังส่งข้อความอะไรบางอย่างถึงเธอหรือเปล่า ช่วงบ่ายที่เธออยู่กับเด็กมัธยมและความง่ายดายที่เธอเพิ่มความสามารถเข้าไปในแอปพลิเคชันของเธอ (ซึ่งเก่ากว่าโปรเจกต์ Phoenix หลายปี) แสดงให้เห็นว่าการเขียนโค้ดควรจะให้ความรู้สึกอย่างไร

เธาสามารถสร้างสิ่งต่างๆ ด้วยความจดจ่อ (focus), สภาวะลื่นไหล (flow) และความสุข เธอได้รับผลตอบรับที่รวดเร็วจากการทำงานของเธอ ผู้คนสามารถทำในสิ่งที่พวกเขาต้องการได้โดยไม่ต้องพึ่งพาคนอื่นนับร้อย นี่คือสิ่งที่สถาปัตยกรรม (architecture) ที่ยอดเยี่ยมช่วยส่งเสริม

เธอถูกเนรเทศมายังความคิดริเริ่มเชิงกลยุทธ์ที่สำคัญที่สุดของบริษัท ซึ่งความอยู่รอดของทั้งบริษัทขึ้นอยู่กับมัน และทว่า วิศวกรหลายร้อยคนกลับต้องเป็นอัมพาต ไม่สามารถทำในสิ่งที่ต้องทำได้ ในวินาทีนั้น Maxine ตัดสินใจว่าเธอต้องนำระดับประสิทธิภาพแบบที่เธอช่วยสร้างให้กับเด็กๆ และโปรเจกต์ open-source ของเธอมาสู่โปรเจกต์ Phoenix ให้ได้ แม้ว่ามันจะหมายถึงความทุกข์ทรมานส่วนตัวในระยะสั้นก็ตาม