การตั้งค่า AI Coding ของคุณเป็นเครื่องมือแบบ Complicated แต่ Codebase ของคุณนั้น Complex

เครื่องมือ AI coding ใหม่ๆ สัญญาว่าจะทำให้ agent มีความน่าเชื่อถือมากขึ้น คุณจะได้เห็น framework สำหรับทักษะ (skills), พลังพิเศษ (superpowers) และการพัฒนาที่ขับเคลื่อนด้วยข้อกำหนด (spec-driven development) เครื่องมือเหล่านี้ใช้งานได้จริง พวกมันช่วยให้ agent ทำตามกระบวนการแทนที่จะเป็นการเดาสุ่ม

แต่มีกับดักอยู่ ผู้คนมักคิดว่าการตั้งค่าที่ดีขึ้นสำหรับงานหนึ่งอย่างจะสร้างระบบที่สอดประสานกัน (coherent system) แต่มันไม่ใช่แบบนั้น

เพื่อที่จะเข้าใจว่าทำไม ให้ใช้ Cynefin framework ซึ่งจะแบ่งปัญหาออกเป็นสองประเภทคือ: Complicated และ Complex

ปัญหาแบบ Complicated ปัญหาเหล่านี้มีคำตอบที่สามารถหาได้ คุณใช้การวิเคราะห์และทักษะเพื่อค้นหาคำตอบ ตัวอย่างเช่น การ refactor module หรือการเขียน validation function เมื่อคุณพบคำตอบแล้ว คุณก็สามารถทำซ้ำได้ เครื่องมือ AI coding ส่วนใหญ่จัดอยู่ในกลุ่มนี้ พวกมันมุ่งเน้นไปที่หน่วยของงาน (unit of work) ทำให้งานสามารถทำซ้ำและตรวจสอบได้

ปัญหาแบบ Complex ปัญหาเหล่านี้ไม่มีคำตอบที่คาดเดาได้ ระบบเปรียบเสมือนโครงข่ายของส่วนประกอบต่างๆ ผลลัพธ์จะปรากฏขึ้นหลังจากที่คุณลงมือทำเท่านั้น การรวมโค้ด (merge) 40 ครั้งจะทำให้สถาปัตยกรรมพังในอีก 6 เดือนข้างหน้าหรือไม่? Agent A จะขัดแย้งกับ Agent B หรือไม่? คุณไม่สามารถหาคำตอบเหล่านี้ได้จากการดูไฟล์เพียงไฟล์เดียว แต่มันจะปรากฏออกมาจากวิธีการที่ส่วนประกอบต่างๆ มีปฏิสัมพันธ์กัน

ความไม่สอดคล้องกันเกิดขึ้นเมื่อคุณคาดหวังให้เครื่องมือแบบ Complicated มาแก้ปัญหาแบบ Complex

เครื่องมืออาจทำให้ agent เขียน function ที่สมบูรณ์แบบได้ แต่ถ้างานหนึ่งใช้ userId และอีกงานหนึ่งใช้ user_id ระบบก็จะพัง แม้ว่าทั้งสองงานจะ "ถูกต้อง" เมื่อพิจารณาแยกกันก็ตาม ความล้มเหลวนี้เป็นสิ่งที่เกิดขึ้นจากการรวมตัวกัน (emergent) มันอยู่ในปฏิสัมพันธ์ ไม่ใช่ในหน่วยของงาน

แม้แต่ context window ขนาดใหญ่ก็ไม่สามารถแก้ปัญหานี้ได้ หน้าต่างที่ใหญ่ขึ้นช่วยให้คุณเห็นข้อมูลมากขึ้น แต่การเห็นไม่ได้หมายความว่าคุณจะอนุมาน (deduce) ได้ คุณสามารถอ่าน codebase ทั้งหมดได้ แต่ก็ยังไม่รู้ว่ามันจะเกิด deadlock ภายใต้ภาระงานจริง (production load) หรือไม่ นั่นคือคุณสมบัติในขณะรันไทม์ (runtime property)

วิธีจัดการกับทั้งสองแบบ:

  • สำหรับชั้น Complicated: ใช้ skills, specs และ TDD สิ่งเหล่านี้จะทำให้ผลลัพธ์รายชิ้นของ agent มีความแม่นยำและรัดกุม
  • สำหรับชั้น Complex: ใช้หลักการ probe-sense-respond คุณไม่สามารถคาดเดาได้ว่าจะเกิดอะไรพัง คุณต้องทำการ merge, deploy และสังเกตการณ์ (observe) ใช้ integration tests และ observability เพื่อรับรู้ถึงสิ่งที่เกิดขึ้นเมื่อส่วนประกอบต่างๆ รวมเข้าด้วยกัน

อย่าหลงเชื่อคำสัญญาที่ว่า spec ที่ดีขึ้นจะทำให้ระบบของคุณเสถียร Spec ช่วยให้หน่วยของงานมีความน่าเชื่อถือ แต่ไม่ได้ทำให้ระบบมีความสอดประสานกัน

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

Source: https://dev.to/bala_paranj_059d338e44e7e/your-ai-coding-setup-is-a-complicated-domain-tool-your-codebase-is-complex-3mkc

Optional learning community: https://t.me/GyaanSetuAi