คอขวดไม่เคยเป็นโค้ดเลย
(thetypicalset.com)- Codex สร้างเวอร์ชันแรกที่ใช้งานได้ของการทดลองอัลกอริทึมการสร้างแบบมีโครงสร้างที่ .txt เลื่อนมานานกว่าหนึ่งปีได้ภายในไม่กี่ชั่วโมง แต่การเปลี่ยนแปลงสำคัญคือการเผยให้เห็น คอขวดของการทำงานร่วมกัน มากกว่าความเร็วการเขียนโค้ดส่วนบุคคล
- เมื่อเอเจนต์รับหน้าที่ลงมือพัฒนา สิ่งที่ทำให้ทีมช้าลงจะไม่ใช่ผู้เขียนโค้ดอีกต่อไป แต่เป็นการสร้าง สเปกที่แม่นยำ ซึ่งเอเจนต์สามารถหยิบไปทำงานต่อได้ทันที เช่น โรดแมป เกณฑ์การยอมรับ และเอกสารออกแบบ
- เมื่อค่าใช้จ่ายในการเขียนโค้ดลดลง ก็จะมีต้นแบบและเครื่องมือภายในที่เมื่อก่อนคงไม่ทำเพิ่มขึ้น ขณะที่ความเร็วที่ผู้ใช้จะรับสิ่งเหล่านี้ได้ยังเท่าเดิม ทำให้วินัยของการ โฟกัส ว่าจะไม่สร้างอะไรมีความสำคัญยิ่งขึ้น
- เอเจนต์สามารถดึงการตัดสินใจโดยนัยและธรรมเนียมปฏิบัติจาก Slack, PR, issue, commit และเอกสารออกแบบมาสร้างเป็น ฐานความรู้ ได้ แต่ก็ยังไม่อาจสร้างบริบทที่มีร่วมกันจากการสั่งสมโดยมนุษย์ขึ้นมาใหม่ได้อย่างสมบูรณ์
- ความได้เปรียบในอีก 10 ปีข้างหน้าอาจอยู่กับบริษัทที่รักษา ความสอดคล้องระดับองค์กร ให้ยังสอดรับกับชุดการตัดสินใจที่แคบลงได้ แม้ขยายสเกลเป็น 50, 200 หรือ 2,000 คน มากกว่าจะอยู่กับบริษัทที่มีโมเดลดีที่สุด
คอขวดที่เอเจนต์เขียนโค้ดเปลี่ยนไป
- การทดลองที่ .txt เลื่อนมานานกว่าหนึ่งปี คือการทดสอบอัลกอริทึมการสร้างแบบมีโครงสร้างและทางเลือกโอเพนซอร์ส โดยตรวจสอบปัญหาที่ใกล้เคียงกับคำถามว่า “มันสร้างการกระจายของโทเค็นที่ถูกต้องหรือไม่” มากกว่าแค่ “มันรับสตริงนี้ได้หรือไม่”
- แม้การทดลองนี้จะค้างอยู่ในโรดแมปมาโดยตลอด แต่หลังจากอธิบายแนวทางให้ Codex ฟังราว 30 นาที ก็ได้เวอร์ชันแรกที่ทำงานได้ภายในไม่กี่ชั่วโมง
- เอเจนต์เขียนโค้ดได้เปลี่ยนวิธีที่แต่ละคนเขียนโค้ดไปมากแล้ว แต่ก็ยังยากจะบอกว่าการเพิ่มขึ้นของผลิตภาพรายบุคคลจะนำไปสู่การเร่งความเร็วของทั้งอุตสาหกรรมซอฟต์แวร์โดยตรง
- ซอฟต์แวร์ที่มีอิทธิพลมักถูกสร้างโดยหลายคนร่วมมือกัน ดังนั้นหน่วยวิเคราะห์ที่น่าสนใจกว่าผลิตภาพรายบุคคลคือ การทำงานร่วมกัน
- ซอฟต์แวร์ใกล้เคียงกับผลลัพธ์ที่เหลืออยู่หลังจากผู้คนเจรจากันว่าระบบควรทำอะไร โดยโค้ดแม้สำคัญ แต่ก็เป็นเพียง เศษตกค้าง ของงานที่ยากกว่า
โรดแมปกลายเป็นข้อจำกัด
- ในทีมที่ให้เอเจนต์ลงมือพัฒนา สิ่งที่ทำให้ช้าลงคือการสร้างสเปกที่แม่นยำพอให้เอเจนต์หยิบไปทำงานต่อได้ทันที
- โรดแมป เกณฑ์การยอมรับ และ “สิ่งที่เราอยากได้จริง ๆ” ต้องถูกเขียนไว้อย่างชัดเจนในรูปแบบอย่าง test suite, ticket และเอกสารออกแบบ
- ฟีเจอร์ต่าง ๆ ถูกพัฒนาได้อย่างรวดเร็วมาก และแทนที่วิศวกรจะต้องรอวิศวกรคนอื่น ก็กลายเป็นการรอสเปกที่เขียนถูกต้องซึ่งจะมาถัดไป
- คอขวดจึงย้ายจากคนที่เขียนโค้ด ไปสู่คนที่ตัดสินใจว่าโค้ดแบบใดควรมีอยู่ ซึ่งท้ายที่สุดคือปัญหาเรื่อง การบริหารจัดการ
โค้ดที่ถูกลงต้องการฉันทามติมากขึ้น
- เมื่อค่าใช้จ่ายในการเขียนโค้ดลดลง ความหมายไม่ได้มีแค่ว่าใช้ความพยายามเพียง 10% เพื่อให้ได้ผลลัพธ์เดิม แต่หมายถึงการทุ่มความพยายามเท่าเดิมให้กับผลลัพธ์ที่ก่อนหน้านี้ไม่คุ้มค่าจะทำ
- ต้นแบบที่เมื่อ 3 เดือนก่อนยังถูกมองว่า “เสียเวลา” อาจถูกสร้างขึ้นได้ภายในบ่ายเดียว และเครื่องมือภายในที่ยังไม่มีความต้องการชัดเจนก็อาจถูกสร้างขึ้นแล้วถูกลืมไป
- ความเร็วที่ผู้ใช้จะรับฟีเจอร์ได้ยังคงใกล้เคียงเดิม ไม่ว่าทีมจะปล่อยออกมา 10 ฟีเจอร์หรือ 50 ฟีเจอร์ก็ตาม
- อย่างที่ Steve Jobs เคยพูดไว้ในปี 1997 ว่า “การโฟกัสคือการปฏิเสธ” และ Apple ก็ได้ตัดทอนสายผลิตภัณฑ์ไปราว 70% ในปีนั้น
- เมื่อมีเอเจนต์ ความรู้สึกของการปล่อยฟีเจอร์ใหม่จะง่ายขึ้น จึงยิ่งทำให้วินัยในการตัดสินใจไม่ใช่แค่ว่าจะสร้างอะไร แต่รวมถึงจะไม่สร้างอะไรด้วย เป็นเรื่องที่ยากขึ้น
บริบทกลายเป็นทรัพยากรหลัก
- การเจรจาและการตกลงกันดำเนินไปบนพื้นฐานของ บริบทร่วมกัน ภายในองค์กร
- บริบทนี้รวมถึงสิ่งที่กำลังสร้างอยู่ เหตุใดมันจึงสำคัญ อะไรที่เคยลองไปแล้ว ใครตัดสินใจอะไร อะไรคือแก่นสำคัญ และอะไรเป็นเพียงร่องรอยที่หลงเหลืออยู่
- มนุษย์ในทีมสะสมบริบทนี้อย่างเป็นธรรมชาติจากการอยู่ห้องเดียวกัน อ่านช่อง Slack เดียวกัน และดีบักเหตุขัดข้องเดียวกันตอนตี 2
- บริบทส่วนใหญ่ไม่ได้ถูกบันทึกเป็นเอกสาร และแม้แต่เวลาที่วิศวกรอาวุโสพูดใน PR review ว่า “อันนี้จะทำให้ migration พัง” ก็อาจกำลังใช้บริบทที่ไม่เคยถูกเขียนไว้
- เอเจนต์ไม่สามารถดูดซึมบริบทแบบนั้นได้ ไม่ได้อยู่ในห้อง ไม่ได้ฟังบทสนทนาเรื่องแผนงานแบบผ่าน ๆ และไม่ได้มีความทรงจำร่วมจากเหตุขัดข้องครั้งก่อน
- บริบทที่ไม่ได้ถูกใส่ไว้ในพรอมป์ต์ โครงสร้างไฟล์ เครื่องมือ หรือคำสั่งที่ชัดเจน คือบริบทที่เอเจนต์จะไม่มีไว้ใช้อย่างมั่นคง
- เมื่อไม่มีบริบท เอเจนต์ก็อาจสร้างคำตอบที่ฟังดูน่าเชื่อสำหรับคำถามที่ผิดไปเพียงเล็กน้อย
- แม้เวลาที่เอเจนต์ทำงานที่มีประโยชน์ที่ .txt เบื้องหลังจริง ๆ ก็คือมีมนุษย์ทำงานด้านบริบทไว้แล้ว และไม่ได้แปลว่าวิศวกรอีก 10 คนถัดไปจะมีภาพนั้นอยู่โดยอัตโนมัติ
- บริบทที่องค์กรพึ่งพาแบบโดยนัยมาโดยตลอด บัดนี้ได้กลายเป็นอินพุตที่จำกัดความเร็ว และมนุษย์ก็มักทิ้งมันไว้ในรูปโดยนัยเพราะไม่มีผู้รับที่จะอ่านเวอร์ชันที่ชัดแจ้งนั้น
วงจรที่เอเจนต์สร้างบริบท
- การสร้างบริบทที่มนุษย์บริโภคได้ง่ายเป็นงานที่ผู้คนไม่ชอบทำ
- เอเจนต์มีจุดแข็งในการอ่าน PR comment, issue ที่ปิดแล้ว, commit message, เอกสารออกแบบเก่า และคลังเก็บ Slack อย่างไม่ตกหล่น แล้วดึงรูปแบบที่ไม่เคยมีใครบันทึกไว้เป็นเอกสารออกมา
- ที่ .txt ได้เริ่มสร้างเอเจนต์ที่ crawl codebase, issue, PR และ thread เพื่อเปลี่ยนการตัดสินใจโดยนัย ธรรมเนียมปฏิบัติ และ “ทำไมถึงทำแบบนี้” ให้กลายเป็นฐานความรู้
- ฐานความรู้นี้ไม่ได้มีแค่ “โมดูลนี้มีอยู่” แต่ยังมีบริบทอย่าง “โมดูลนี้ดูแปลกเพราะ migration ต้องรักษาพฤติกรรมเดิมไว้” หรือ “benchmark นี้สำคัญเพราะการปรับแต่งครั้งก่อนเคยเปลี่ยน distribution อย่างเงียบ ๆ”
- เมื่อเอเจนต์ตัวอื่นต้องลงมือทำงานกับ codebase ก็จะใช้ฐานความรู้นี้
- การดูดซึมแบบไม่เป็นทางการที่มนุษย์เคยทำกัน จึงถูกทำให้เป็นสิ่งภายนอกในรูปแบบที่ทั้งเอเจนต์และมนุษย์อ่านได้
- เอเจนต์ที่ใช้บริบทจำเป็นต้องมีเอเจนต์ที่สร้างบริบท และเมื่อวงจรนี้หมุนได้ องค์กรก็จะมีฐานเอกสารที่ตัวเองคงไม่เคยสร้างขึ้นมาเอง
- อย่างไรก็ดี สิ่งที่วงจรนี้สร้างขึ้นย่อมเป็นภาพที่ไม่สมบูรณ์เสมอ
- อย่างที่ Michael Polanyi กล่าวว่า “เรารู้มากกว่าสิ่งที่เราพูดออกมาได้” และบริบทสำคัญบางอย่างมีอยู่ได้ก็เพราะมันไม่เคยถูกเขียนเป็นคำพูด และอาจเปลี่ยนไปทันทีเมื่อถูกเขียนลงไป
- ชั้นของการดูดซึมที่มนุษย์สร้างร่วมกันแบบพบหน้ากัน ไม่สามารถสร้างกลับมาได้อย่างสมบูรณ์จากเพียงผลพลอยได้ที่เป็นเอกสาร
- ผลลัพธ์จึงใกล้เคียงกับจุดตั้งต้นที่มีประโยชน์ มากกว่าจะเป็นการสร้างกลับอย่างสมบูรณ์ และคำถามว่านั่นเพียงพอจะก่อให้เกิดผลสะสมหรือไม่ ก็ยังคงเป็นคำถามเชิงทดลอง
คูเมืองใหม่อยู่ที่องค์กร มากกว่าเทคโนโลยี
- ผู้ชนะในอีก 10 ปีข้างหน้าอาจไม่ใช่บริษัทที่มีโมเดลดีที่สุดหรือมีโครงสร้างพื้นฐานเอเจนต์ดีที่สุด แต่เป็นบริษัทที่ยังสร้างผลงานต่อคนได้มากขึ้น พร้อมรักษาการจัดแนวกับชุดการตัดสินใจที่แคบลงไว้ได้ แม้จะเติบโตเป็น 50, 200 หรือ 2,000 คน
- บริษัทแบบนี้คือองค์กรที่รู้มาตั้งแต่ก่อนเอเจนต์จะมาถึงแล้วว่าโจทย์ที่ยากที่สุดคือ ความสอดคล้อง
- นี่เป็นปัญหาเรื่องวัฒนธรรมและการจัดการ และก็เป็นเช่นนั้นมาโดยตลอด
- เครื่องมือในยุคก่อนอย่าง IDE, version control, CI, microservices และ DevOps เคยสัญญาว่าจะใช้เครื่องมือที่ดีกว่าเพื่อแก้ปัญหาการประสานงาน แต่ในความเป็นจริง พวกมันทำหน้าที่ขยายความสอดคล้องระดับองค์กรที่มีอยู่แล้ว
- ทีมขนาดเล็กได้ความสอดคล้องแทบจะฟรีอยู่แล้ว ดังนั้นผลของการขยายจึงมักออกมาในทางบวก และนี่ก็เป็นเหตุผลว่าทำไมเสียงสนับสนุนเอเจนต์อย่างมากจึงมักมาจากทีมเล็ก เพราะในบริบทของพวกเขา มันถูกต้องเป็นส่วนใหญ่
- เมื่อเกินขนาดหนึ่งไปแล้ว ความสอดคล้องต้องถูกสร้างและบำรุงรักษา และผลของการขยายก็จะคมในทั้งสองทิศทาง
- องค์กรที่ดีจะยิ่งดีขึ้น ขณะที่องค์กรที่แย่จะพังเร็วขึ้น
- เอเจนต์เป็นตัวขยายที่ทรงพลังกว่าเครื่องมือยุคก่อนมาก และถูกประเมินค่าสูงเกินไปในฐานะเครื่องมือให้แต่ละคนเขียนโค้ดได้เร็วขึ้น แต่กลับถูกประเมินค่าต่ำเกินไปในฐานะเครื่องมือที่ทำให้องค์กรทำให้สิ่งที่ตนรู้ออกมาอยู่ภายนอกได้
เอเจนต์ในฐานะส่วนขยายของวัฒนธรรมบริษัท
- เอเจนต์อาจให้ความรู้สึกเหมือนเป็นส่วนขยายของความคิดตนเอง และความรู้สึกนั้นก็ทรงพลัง
- โจทย์ที่ยากกว่าคือการทำให้เอเจนต์กลายเป็นส่วนขยายของวัฒนธรรมบริษัท
- สิ่งนี้ต้องอาศัยวัฒนธรรมการเขียน การจัดการที่รอบคอบพอจะระบุได้ว่าจุดใดยังเป็นคอขวดด้านบริบทอยู่ และผู้คนที่มองความสอดคล้องเป็นผลลัพธ์จริงที่ต้องรักษาไว้
- สิ่งที่เปลี่ยนไปคือ ตอนนี้อย่างน้อยบางส่วนของเรื่องเหล่านี้สามารถถูกสร้างขึ้นได้แล้ว
- วงจรการอ่านและการสกัดเป็นหนึ่งในรูปแบบนั้น และอาจมีรูปแบบอื่นตามมาอีก
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ตลกดีที่ตลอดทั้งอาชีพที่ผ่านมา วิศวกรที่ชอบบ่นเรื่องทุกอย่างที่มาขัดขวางช่วงเวลาเขียนโค้ดหลายชั่วโมงซึ่งพวกเขาถือว่าเป็น ภาวะลื่นไหล อันสำคัญและศักดิ์สิทธิ์ที่สุด ไม่ว่าจะเป็นประชุมทีม พิธีกรรมแบบ agile ตัวติดตาม issue backlog Slack อีเมล หรือ design review พอเครื่องจักรเขียนโค้ดได้เร็วกว่าเขา ก็หันมาเทศนาอย่างไม่อายถึงความสำคัญของงานร่วมมือกัน และความกระจ้อยร่อยของโค้ดกับการเขียนโค้ด
จะว่าไปก็ไม่ผิดนัก แต่ความหน้าซื่อใจคดแบบโจ่งแจ้งของคนที่เมื่อปีที่แล้วยังเป็นพวกต่อต้านสังคมและไม่ค่อยร่วมมือกับใครที่สุดในทุกทีม ก็ยังน่าทึ่งอยู่ดี
ไม่ว่าอย่างไร ทั้งสองอย่างก็อาจจริงพร้อมกันได้: การเขียนโค้ดไม่ใช่คอขวดจนสามารถพัฒนาฟีเจอร์ได้เร็วกว่าอัตราที่ปล่อยใช้งานได้ และการถูกรบกวนเวลาทำงานที่ต้องใช้สมาธิลึก ๆ ก็ยังน่าหงุดหงิดและทำให้เสียจังหวะ
https://en.wikipedia.org/wiki/Group_attribution_error
การประชุมที่ช่วยให้ลูกค้ากับคนเขียนโค้ดซิงก์กันมากขึ้นนั้นหาได้ยากและมีค่า ในองค์กรใหญ่ การประชุมเชิงพิธีการมักเพิ่มขึ้นด้วยเหตุผลที่ผิด คนพยายามสอดตัวเองเข้าไประหว่างลูกค้ากับคนเขียนโค้ดเพื่อแสดงว่าตัวเองมีความสำคัญ
ส่วนตัวผมชอบประชุมกับลูกค้า ผู้ใช้ปลายทาง นักออกแบบ UX และผู้มีส่วนได้ส่วนเสียตัวจริง แต่เกลียดการประชุมกับพวกคนยุ่งเชิงการเมืองในบริษัทที่กินแบนด์วิดท์ไปเพื่อแย่งอิทธิพลในองค์กร ผมไม่ต้องการผู้จัดการชั้นกลางอีกคนมาคั่นระหว่างผมกับผู้ใช้ของผม
กลับกัน ในโลกใหม่ที่การเขียนโค้ดเร็วขึ้นมาก และส่วนที่ยากกลายเป็นการทำความเข้าใจ ข้อกำหนดทางธุรกิจและทางเทคนิค ที่ต้องบรรลุ คนคนเดิมก็อาจให้ความสำคัญกับพิธีกรรมเหล่านั้นมากขึ้น และยอมรับการถูกรบกวนได้ในขณะที่ AI agent กำลังเขียนโค้ด
การเปลี่ยนความคิดเมื่อข้อเท็จจริงของสถานการณ์เปลี่ยนไป ไม่ใช่ความหน้าซื่อใจคด
ถ้าคุณจะทำโปรเจกต์สร้างสรรค์กับใครสักคนนอกบริษัท มีหลายเหตุผลที่ Scrum ritual หรือ Jira จะไม่ใช่สิ่งแรกที่คุณนึกถึง การให้คุณค่ากับการร่วมมือกันแต่ยังวิจารณ์สิ่งเหล่านี้ ก็สอดคล้องกันดีอยู่แล้ว
ทีมจะบ่นว่างานล้นจนทำอะไรไม่ทัน แล้วผู้จัดการก็ส่งผมเข้าไป แต่พอผมมาถึง จู่ ๆ ก็ไม่มีใครอยากส่งงานต่อให้เลย ตอนนี้ผมก็อยู่กลางสถานการณ์แบบนั้นพอดี
ทีมบอกว่า “ยุ่งจนจม” แต่ก็ยังมีแรงพอจะยืนกรานว่างานแทบทุกอย่างที่ผมช่วยได้ พวกเขาทำเองดีที่สุดและไม่ต้องการความช่วยเหลือ ผมก็ไม่เป็นไร นั่งรับเงินไปได้ แต่กลิ่นมันเหมือนเดิม
A: พวกเขาไม่อยากยอมรับว่าตัวเองแทนที่ได้ และงานไม่ได้พิเศษขนาดนั้น B: พวกเขาไม่อยากยอมรับว่าคอขวดไม่ใช่กระบวนการหรือปริมาณงาน แต่คือตัวพวกเขาเอง
ดูเหมือนว่าวิศวกรรุ่นเก๋าจะรู้กันมานานแล้วว่าต้นเหตุแท้จริงของปัญหาเรื่องความเร็วอยู่ที่ องค์กร มากกว่าเทคโนโลยีเสมอ
การที่ธุรกิจไม่สามารถกำหนด roadmap ที่มีประสิทธิผลและมีจุดโฟกัสได้ เป็นปัญหาเรื้อรังของ software engineering มานาน ธุรกิจกระโดดไปหาเรื่องใหม่ที่ดูวิบวับถัดไปตลอดทั้งที่ ROI แทบไม่มี และยังไม่ยอมจัดการ technical debt เชิงระบบ ซึ่งทำลายหลายบริษัทที่ผมเคยทำงานด้วยในระยะยาว
ผมรู้จักวิศวกรจูเนียร์ที่ใช้ C++ มาทั้งปีแล้วยังไม่เข้าใจ std::unique_ptr และคนแบบนี้ก็มักจะช้าที่สุดในทีมเสมอ
เมื่อก่อนตอนต้องเขียนประเมินผลงานให้วิศวกรจูเนียร์ ผลงานถูกขับเคลื่อนด้วยความเร็วอย่างชัดเจน และวัดแบบคร่าว ๆ จากจำนวนบรรทัดโค้ดที่ไม่มีบั๊กซึ่งเขียนได้ในช่วงเวลาหนึ่ง จูเนียร์ที่ดีจะรับฟีเจอร์ที่นิยามชัดเจนมาแล้วเขียนโค้ดดี ๆ ได้เร็ว ส่วนคนที่ไม่ดีก็จะทำงานเดียวกันช้ากว่า หรือเขียนเร็วแต่มีบั๊กเยอะ จนสร้างงาน debug และเขียนใหม่เพิ่มขึ้นมาก
ถ้าเข้าใจ เหตุผลทางธุรกิจ ขอบเขต input และผลลัพธ์ที่ต้องการอย่างชัดเจน data model, system design และโค้ดก็มักจะตามมาแทบจะเอง หรืออย่างน้อยก็ชัดเจนขึ้นมาก
— Melvin E. Conway, 1967
ก่อนอื่นคงต้องถามตัวเองก่อนว่าเข้าใจ scaling law แบบ Chinchilla และเข้าใจพื้นฐานของ reinforcement learning ที่มีการตรวจสอบอย่างไรบ้าง
ผมเห็นด้วยเต็มที่ว่าข้อจำกัดเชิงรากฐานอยู่ที่ว่าธุรกิจสามารถอธิบายตัวเองและกลยุทธ์ของตัวเองได้อย่างสม่ำเสมอหรือไม่
แต่ข้อได้เปรียบตอนนี้คือเราสร้าง prototype ได้แทบฟรี สมัยก่อนต้องระวังอย่างยิ่งกับการลงทุนแรงงานวิศวกร แต่ตอนนี้เราลองอะไรได้มากขึ้นมากภายใต้ข้อจำกัดด้านเวลาเท่าเดิม
ความท้าทายที่แท้จริงมาตลอดคือจะปล่อยฟีเจอร์กับ bug fix อะไร เมื่อไร และจะพัฒนาและบริหารผลิตภัณฑ์โดยรวมอย่างไร ซึ่งกลยุทธ์ส่วนใหญ่นี้พึ่งพา feedback loop ที่ AI ยังทำให้เร็วขึ้นไม่ได้
ขณะเดียวกันก็รู้สึกว่าผู้นำฝั่งธุรกิจจำนวนมากใช้ความเร็วของวิศวกรเป็นแพะรับบาป แทนที่จะรับผิดชอบต่อการตัดสินใจแย่ ๆ ของฝั่งตัวเอง
ปกติคอขวดก็คือโค้ดจริง แต่ไม่ใช่ การเขียนโค้ด เป็นตัวโค้ดต่างหาก ตลอดอาชีพผมมีความล่าช้าจากแอปช้า ๆ นับไม่ถ้วน
ต้องใช้ editor ที่อิง Eclipse ซึ่งช้าและค้างหรือ crash เป็นระยะ งาน build ใช้เวลา 15–20 นาที และยังเจอเว็บแอปที่ใช้เวลานานชั่วกัปชั่วกัลป์กับงานที่ควรจบในไม่เกิน 50ms อยู่บ่อย ๆ
รายการพวกนี้ยาวไม่รู้จบ ทุกความล่าช้าคือสิ่งรบกวนที่ทำลายสมาธิผมเป็นชิ้น ๆ ทุกวันนี้ผมอยู่สายบริหาร ดูแลคนหลายสิบคนและสิ่งรบกวนเชิงธุรการ แต่ก็ยังเขียนโค้ดในบริษัทอยู่
ถ้าซอฟต์แวร์ช้า มันจะกลายเป็นสิ่งสำคัญลำดับต่ำสุดของผม ผมไม่สนว่ามันจะกระทบใคร ถ้ามันสำคัญจริง เราคงไม่ถูกจับเป็นตัวประกันโดยกากน้ำเชื่อมซอฟต์แวร์เชื่องช้านี่ที่ฉุดทุกคนลง
โค้ดคือหนี้
มองโค้ดเป็นสินทรัพย์ได้ง่าย แต่โดยพื้นฐานแล้วมันคือหนี้ คอขวดบางส่วนในการเพิ่มโค้ดใหม่มีไว้เพื่อให้มั่นใจว่าผลลัพธ์ที่ได้มากกว่าหนี้ที่เพิ่มขึ้น การมี agent ที่สร้างโค้ดได้มากขึ้นเร็วขึ้น ก็คือการสร้างหนี้ได้มากขึ้นเร็วขึ้น
ความตื่นเต้นและความกังขาส่วนใหญ่ต่อ coding agent คือคำถามว่าผลผลิตระยะสั้นที่เพิ่มขึ้นทันที เช่น ฟีเจอร์ใหม่ ผลิตภัณฑ์ใหม่ รายได้ใหม่ จะชดเชยหนี้ระยะยาวที่เพิ่มขึ้นได้หรือไม่ คำตอบคงต้องรออีก 1–3 ปี และคงแตกต่างกันไปตามสาขา
ถ้ามองจากมุมนี้ ความพยายามจะใส่คอขวดแบบนี้เข้าไปใน workflow แบบ agent โดยตรงก็พอฟังขึ้น การให้ coding agent มีบริบทเพิ่มขึ้นที่เน้นวิสัยทัศน์ของโปรเจกต์อย่างสม่ำเสมอ และช่วยคัดค้านฟีเจอร์ใหม่หรือกระบวนการที่ไร้ข้อจำกัด มีคุณค่าอยู่
นี่คือสิ่งที่บทความพยายามจะสื่อหรือเปล่า? คือความพยายามให้ agent บางตัวรับบท product management แล้วสังเคราะห์ทุกอย่างที่ทำได้ให้เป็นวิสัยทัศน์ผลิตภัณฑ์ที่เกาะกันเป็นเนื้อเดียว และย้ำวิสัยทัศน์นั้นกับ coding agent อย่างเข้มงวดที่สุด?
agent แบบนี้ควรตรวจข้อเสนอใหม่และ pull request ใหม่ในมุมของ “ความสอดคล้องกับภาพรวม” หรือไม่? จะเรียกสิ่งนี้ว่าบริบท วิสัยทัศน์ หรือชื่ออื่นก็ได้
agent แบบนี้อาจเก่งมากในการสังเคราะห์บริบทและเสนอ roadmap ที่ดูสอดคล้องกับคุณค่าและวิสัยทัศน์ของทีมในเชิงภาษา แต่ผมยังสงสัยว่ามันจะมีวิจารณญาณแบบผู้จัดการหรือทีมที่ดีได้ไหม การอนุมัติ roadmap บางอย่างได้อย่างรวดเร็วและน่าเชื่อ อาจให้โทษมากกว่าประโยชน์
โค้ดขั้นต่ำที่จำเป็นสำหรับแก้ปัญหาความต้องการทางธุรกิจโดยไม่เพิ่มความซับซ้อน คือ สินทรัพย์ ที่มาพร้อมภาระการบำรุงรักษา เช่นเดียวกับรถแทรกเตอร์ของชาวนาที่เป็นสินทรัพย์ซึ่งต้องดูแลรักษา และจะเสื่อมมูลค่าจาก bit rot ถ้าปล่อยทิ้งไว้
โค้ดที่สร้างความซับซ้อนโดยไม่จำเป็นต่างหากที่เป็นหนี้ล้วน ๆ
ใช่ แต่ การเขียนโค้ดสอนอะไรบางอย่างเสมอ
ผมเคยทำงานทั้งในสตาร์ตอัปขนาดผู้ก่อตั้งไม่กี่คนและบริษัทมหาชนมูลค่าหลายหมื่นล้านดอลลาร์ แต่ไม่เคยเห็น product spec, pitch deck หรือ PRD ฉบับไหนที่อธิบายโซลูชันซึ่งจะแก้ปัญหาได้จริงเพียงแค่นำไปทำตามสเปก
พอลงมือสร้างจริง คุณจะได้เรียนรู้ว่ามันควรทำงานอย่างไร ซอฟต์แวร์เป็นสื่อที่ซับซ้อนและมีปฏิสัมพันธ์ การวนซ้ำอยู่ในโค้ดร่วมกับคนที่อยากเข้าใจและแก้ปัญหาเท่านั้นที่เคยเป็นวิธีเดียวในการสร้างผลิตภัณฑ์ที่มีคุณค่า การประชุมและไดอะแกรมช่วยได้ แต่จนกว่าจะเขียนซอฟต์แวร์ที่ทำงานได้จริง คุณไม่มีทางรู้ว่าคุณมีของหรือไม่
“เป้าหมายคือการทดสอบอัลกอริทึมการสร้างแบบมีโครงสร้างของเราและตัวเทียบเคียงโอเพนซอร์สของมัน โดยแทนที่คำถามแบบไร้เดียงสาว่า ‘มันยอมรับสตริงนี้หรือไม่?’ ด้วยคำถามที่ใกล้โลกจริงกว่าว่า ‘มันสร้าง การกระจายของโทเคน ที่ถูกต้องหรือไม่?’ … เมื่อเดือนที่แล้วผมอธิบายวิธีการให้ Codex ฟัง 30 นาที ไม่กี่ชั่วโมงต่อมาก็ได้เวอร์ชันแรกที่ใช้งานได้ แค่นั้นเอง”
นี่พิสูจน์ว่าคอขวดจริง ๆ คือโค้ด เพียงแต่ตอนนี้ AI เป็นคนเขียนแทน
คนที่คิดว่า “คอขวดไม่ใช่โค้ด” นั้น ได้ถกเรื่องเป้าหมายและจัดระเบียบมันในหัวไว้อย่างสอดคล้องแล้ว
การบอกว่าโค้ดคือคอขวด ไม่จำเป็นต้องหมายถึง “ผมอยากได้ฟีเจอร์นี้ แต่ใช้เวลาหลายเดือนกว่าจะโค้ดเสร็จ” อาจหมายถึง “ผมอยากได้ฟีเจอร์นี้มาสองปีแล้ว แต่ผัดไว้เพราะแรงเสียดทานจากการต้องนั่งแปลงมันเป็นโค้ดและใช้เวลา 5–10 วัน” ก็ได้
ถ้าโค้ดไม่ใช่คอขวด ก็น่าจะนั่งเขียนเองไปแล้ว แต่เจ้าตัวไม่อยากลงแรงและเวลาเขียนเอง และก็รู้ว่ามันไม่ได้ใช้เวลาน้อยเท่า LLM
แม้ในกรณีที่สเปกสุดท้ายยังไม่ชัด การลองเขียนโค้ด ตรวจสอบ ทิ้ง แล้วลองแบบใหม่ ก็เร็วขึ้นเมื่อใช้ LLM เพราะส่วนที่เป็น “โค้ด” เร็วขึ้นนั่นเอง
พูดอีกอย่างคือ คอขวดก็คือโค้ด
ตัวบทความนี้เองก็ดูเหมือน ข้อความที่ AI สร้าง พร้อมคำสั่งให้หลีกเลี่ยงสำนวนซ้ำซาก จึงยังอ่านได้น่าเบื่ออยู่ดี
ในบทความบอกว่า “Jevons Paradox: เมื่อบางสิ่งถูกลง เราไม่ได้ใช้น้อยลง แต่กลับใช้มากขึ้น” ซึ่งเป็นการอธิบายที่ทำให้ Jevons paradox เพี้ยนไป
ประโยคนั้นไม่ใช่ความย้อนแย้งอะไรเลย แต่เป็นผลที่ธรรมดามาก เมื่อของถูกลง การใช้งานเพิ่มขึ้นก็เป็นเรื่องปกติ
สิ่งที่ Jevons paradox อธิบายจริง ๆ คือสถานการณ์ที่การใช้ทรัพยากรบางอย่างมีประสิทธิภาพมากขึ้นจนปริมาณที่ต้องใช้ต่อหนึ่งงานลดลง แต่การใช้ทรัพยากรนั้นโดยรวมกลับเพิ่มขึ้น
แต่เมื่อการใช้ทรัพยากรมีประสิทธิภาพมากขึ้น ราคาของ “การใช้งาน” นั้นก็ย่อมถูกลงด้วยไม่ใช่หรือ?
เพราะฉะนั้นเมื่อประสิทธิภาพเพิ่ม การใช้งานก็เพิ่มขึ้นเป็นเรื่องธรรมดา ที่เรียกว่าย้อนแย้งก็เพราะบางคนคิดอย่างไร้เดียงสาว่าการเพิ่มประสิทธิภาพเป็นวิธีที่ดีในการลดการบริโภค
เกือบทุกอย่างที่ถูกเรียกว่า “paradox” ก็ชัดเจนแบบนี้แหละ
หรืออาจเป็นว่าเมื่อกระบวนการใดมีประสิทธิภาพขึ้น คือใช้เวลาน้อยลง เรากลับใช้เวลากับกระบวนการนั้นมากขึ้น
คอขวดสำหรับอะไร? สำหรับฟีเจอร์ที่มากขึ้นหรือ?
ผมไม่คิดว่าปริมาณซอฟต์แวร์เป็นตัวตัดสินความสำเร็จของบริษัท และก็ไม่คิดว่าการจับ ปริมาณของบริบท ได้มากขึ้นจะสำคัญขนาดนั้น
สิ่งสำคัญคือคุณภาพของบริบท มนุษย์ให้เหตุผลได้ดีแค่ไหน?
ต่อมาคือทัศนคติ มนุษย์รับมือกับสถานการณ์แย่ ๆ ได้ดีแค่ไหน?
ต่อมาคือการบริหารทรัพยากร บริษัทจัดการคนและเงินได้ดีแค่ไหน?
สุดท้ายคือโชค มีปัจจัยที่ควบคุมไม่ได้อยู่ข้างเรามากน้อยแค่ไหน?
สิ่งเหล่านี้ต่างหากที่เป็นคอขวดสำคัญของบริษัท และผมไม่คิดว่า agent จะแก้ได้ในเร็ว ๆ นี้
คอขวดในการทำให้แอปซอฟต์แวร์ที่ธุรกิจนอกสายซอฟต์แวร์ใช้ดีขึ้น คือการทำให้มั่นใจว่าซอฟต์แวร์ได้ทำงานด้านซอฟต์แวร์ทั้งหมดที่เป็นประโยชน์ต่อธุรกิจจริง ๆ
ไม่ว่าจะเป็นการประหยัดเวลา ทำให้คนมีประสิทธิผลขึ้น ลดความผิดพลาดของมนุษย์ ทำให้ธุรกิจมีประสิทธิภาพขึ้น และเพิ่มกำไร
ทั้งหมดนี้คาดการณ์และวัดเชิงปริมาณได้ค่อนข้างยาก คุณอาจเริ่มจากไอเดียที่น่าจะเป็นประโยชน์ต่อธุรกิจ แล้วออกแบบ สร้าง prototype และทดสอบ สุดท้ายสร้างหรือปรับปรุงแอปซอฟต์แวร์ แล้วพยายามวัดว่ามันทำให้ธุรกิจดีขึ้นแค่ไหน
ตลอดกระบวนการนี้ การทำให้แน่ใจว่าซอฟต์แวร์กำลังจัดการปัญหาที่ถูกต้องด้วยวิธีที่ถูกต้อง และท้ายที่สุดทำให้ธุรกิจดีขึ้น เป็นปัญหาที่ยาก ไม่ว่าการสร้างซอฟต์แวร์จะเร็วและง่ายขึ้นแค่ไหนก็ตาม
ถึงอย่างนั้น ความเร็วก็ช่วยได้มากจริง ๆ คุณสามารถสร้าง prototype ทดสอบ และทำให้ feedback loop ดีขึ้นได้
เมื่อใช้ผู้ช่วยเขียนโค้ด AI สิ่งที่เมื่อก่อนถือเป็นงานของนักพัฒนาจูเนียร์ ตอนนี้ทำได้ด้วย prompt สั้น ๆ และ agent ที่รันอยู่เบื้องหลัง
งานของนักพัฒนาจูเนียร์แบบนี้ ตอนนี้ผู้ช่วยเขียนโค้ดส่งมอบได้แทบไม่ต้องมีคนเข้าไปยุ่ง backlog ถูกเคลียร์เร็วกว่าอัตราที่มีรายการใหม่ถูกเพิ่มเข้ามา และเมื่อ throughput ไม่ใช่ปัญหาอีกต่อไป รายการใหม่ก็ยิ่งถูกเพิ่มเข้ามามากขึ้น
ตอนนี้โจทย์คือการตามให้ทันปริมาณการเปลี่ยนแปลง เราเห็นสิ่งนี้โดยตรงในองค์กรของเรา
การที่คุณนึกถึงคอขวดอื่นได้ ไม่ได้แปลว่าการสร้างโค้ดไม่เคยเป็นคอขวด หรือไม่ใช่คอขวดในตอนนี้ แนวคิดเรื่อง backlog เองก็ชี้ชัดว่ามันคือคอขวด
“ซอฟต์แวร์คือสิ่งที่เหลืออยู่หลังจากมนุษย์กลุ่มหนึ่งเจรจากันว่า ระบบควรทำอะไร”
ผมชอบสำนวนนี้ โดยเฉพาะประเด็นเรื่อง บริบท ผมเห็นด้วยมาก ตรงนั้นเองคือจุดที่ทีมประสบการณ์สูงซึ่งอยู่กันยาวได้รับผลตอบแทน
ผมเคยบริหารทีมแบบนั้นอยู่หลายสิบปี ตอนท้ายก่อนที่แผนกเราจะถูกรวม วิศวกรที่อายุน้อยที่สุดในทีมก็ยังมีประสบการณ์ 10 ปีแล้ว
เมื่อทีมอยู่ด้วยกันนานขนาดนั้น overhead ด้านการสื่อสารจะลดลงจนแทบมองข้ามได้
เพราะอย่างนั้นผมจึงเศร้ามากกับวัฒนธรรมอายุงานสั้นแบบแมลงวันทุกวันนี้
ตอนนี้ผมทำงานคนเดียวเป็นหลัก ผลิตภาพสูงมาก แต่ขอบเขตจำกัดจริง ๆ
ผมคิดถึงช่วงเวลาที่เคยอยู่ในทีมดี ๆ
ตกลงคุณทำโปรเจกต์แบบไหนกันแน่ ที่ส่วนยากมีแค่การทำความเข้าใจฟีเจอร์ที่ผู้บริหารต้องการ แล้วที่เหลือก็แค่ “พิมพ์ออกมา” หรือเดี๋ยวนี้ก็โยนให้ LLM ทำ?
ถ้านั่นคืองานที่ทำ ก็ไม่แปลกเลยที่คนจำนวนมากใน HN จะคิดว่า LLM มาแทนตัวเองได้
แล้วเราก็วนกลับมาคุยเรื่องเดิม ๆ แสดงความกังวล คุยกันคนละเรื่อง และรออีก 30 นาทีเพื่อหาโอกาสคอมเมนต์รอบถัดไป
ส่วนใหญ่คุณภาพโค้ดแย่มากเหมือนกองขยะร้อน ๆ เพราะวงจร offshore กับ layoff