- วิธีการให้เครื่องมือเขียนโค้ดด้วย AI วางแผนก่อนลงมือเขียนโค้ด เพื่อป้องกันการ implement ผิดพลาดและเพิ่มความเร็วในการพัฒนา
- ใช้ 8 กลยุทธ์การวางแผน ตามระดับความยาก โดยแต่ละกลยุทธ์มีโครงสร้างให้เอเจนต์เฉพาะทางทำการวิจัยแบบขนาน ก่อนที่นักพัฒนาจะใช้วิจารณญาณและตัดสินใจ
- แต่ละกลยุทธ์ครอบคลุมการจำลองบั๊ก การค้นหา best practices การวิเคราะห์ codebase เดิม การสืบค้นประวัติ git ฯลฯ และ ความชอบกับแพตเทิร์นที่เอเจนต์เรียนรู้จะถูกสะสมโดยอัตโนมัติ
- สามารถติดตั้งระบบที่เปิดเป็นโอเพนซอร์สนี้บน Claude Code หรือเริ่มจากฟีเจอร์เดียวก่อน แล้วค่อย ๆ สอนวิธีคิดของนักพัฒนาให้ AI เรียนรู้
แนวทางการพัฒนาแบบให้ AI วางแผนเป็นศูนย์กลาง
- แนะนำแนวทางที่ให้ AI จัดทำแผนก่อนเขียนโค้ด
- วิธีนี้ให้ผลทั้ง เร่งความเร็วในการทำฟีเจอร์และลดข้อผิดพลาด ได้ดีกว่าการให้เขียนโค้ดอย่างเดียว
- ยกตัวอย่างกระบวนการพัฒนาฟีเจอร์ “email bankruptcy” ของแอปจัดการอีเมล Cora
- ตอนทำฟีเจอร์สำหรับจัดระเบียบอีเมล 53,000 ฉบับโดยไม่ทำอีเมลสำคัญสูญหาย AI research agent ได้วิเคราะห์ล่วงหน้า
- พบปัญหา ข้อจำกัด 2,000 รายการของ Gmail, system timeout, และเวลารอของผู้ใช้ ตั้งแต่ต้น จึงหลีกเลี่ยงการ implement ผิดทางได้
8 กลยุทธ์การวางแผน
กลยุทธ์ 1: จำลองบั๊กและจัดทำเอกสาร
- เป้าหมาย: จำลองบั๊กก่อนแก้ และสร้างคู่มือแบบเป็นขั้นตอน
- ช่วงที่ใช้: Fidelity 1~2 โดยเฉพาะตอนแก้บั๊ก
- หลังปล่อยฟีเจอร์ email bankruptcy ไม่นาน พบปัญหาที่ผู้ใช้ 19 คนติดอยู่ในสถานะที่งานล้มเหลว
- จากการไล่ดู log ของ AppSignal เพื่อวินิจฉัย พบว่า production กำลังเพิกเฉยต่อ error เรื่อง rate limit ของ Gmail
- เมื่อ batch ใด batch หนึ่งล้มเหลว งานทั้งหมดจะหยุด แต่ไม่มีการแจ้งผู้ใช้ ทำให้ผู้ใช้เห็นแค่ spinner โหลดไม่สิ้นสุด
- ระหว่างการจำลองปัญหา พบว่าจำเป็นต้องมี การประมวลผลแบบ batch และความสามารถในการ resume งาน ยืนยันว่าการ retry อย่างเดียวไม่พอ
- ผลทบต้น: เพิ่มรายการตรวจในเช็กลิสต์ของเอเจนต์ @kieran-rails-reviewer ว่า “เมื่อมี background job ที่เรียก external API มีการจัดการ rate limit หรือไม่, มี retry หรือไม่, และมี partial state ค้างหรือไม่”
กลยุทธ์ 2: สำรวจ best practices
- เป้าหมาย: ค้นหากรณีแก้ปัญหาคล้ายกันจากบนเว็บ
- ช่วงที่ใช้: ทุกระดับความยาก โดยเฉพาะแพตเทิร์นที่ไม่คุ้นเคย
- ตอนอัปเกรด gem ที่ตามหลังอยู่ 2 เวอร์ชัน เอเจนต์ค้นหา “เส้นทางการอัปเกรดจากเวอร์ชัน X ไป Y”, “breaking changes ระหว่างเวอร์ชัน”, “ปัญหา migration ที่พบบ่อย”
- พบทั้งคู่มืออัปเกรดทางการ และบล็อกโพสต์ 3 ชิ้นจากวิศวกรที่เคยอัปเกรดแบบเดียวกัน
- การค้นคว้า 3 นาทีช่วยเลี่ยงการ debug แบบลองผิดลองถูกที่อาจกินเวลาหลายชั่วโมง
- ใช้ได้แม้กับ การตัดสินใจที่ไม่ใช่เชิงเทคนิค: เช่น “best practices ของ pricing tier สำหรับ SaaS”, “copy สำหรับเพิ่ม conversion ใน email drip campaign”, “กลยุทธ์ retry ของ background job”
- ผลทบต้น: เมื่อพบแพตเทิร์นที่มีประโยชน์ จะบันทึกลงไฟล์ `docs/*.md` โดยอัตโนมัติ เพื่อให้ครั้งถัดไปตรวจดูก่อนค้นเว็บ
กลยุทธ์ 3: สำรวจ codebase
- เป้าหมาย: ค้นหาแพตเทิร์นคล้ายกันจากโค้ดที่มีอยู่
- ช่วงที่ใช้: ทุกงานที่อาจซ้ำกับฟีเจอร์เดิม
- ก่อนเพิ่ม event tracking ให้ฟีเจอร์ใหม่ เอเจนต์ค้นหาใน codebase ว่า “ตอนนี้จัดการ event tracking กันอย่างไร?”, “แพตเทิร์นของการเรียก analytics เป็นแบบไหน?”, “ส่ง event กันที่ตรงไหน?”
- พบ ระบบ tracking เดิมที่มีทั้ง helper method พร้อมใช้ (ซึ่งผู้เขียนเองก็ลืมไปแล้ว)
- ถ้า AI ไม่อ้างอิง codebase ก็มีแนวโน้มจะพยายามสร้างใหม่ตั้งแต่ต้น
- แทนที่จะสร้างระบบ tracking ใหม่ จึงขยายจากแพตเทิร์นเดิม ช่วย เลี่ยงการสร้างระบบที่สองซึ่งไม่เข้ากัน
- ผลทบต้น: สร้างเอเจนต์ “@event-tracking-expert” เพื่อให้รันอัตโนมัติทุกครั้งที่วางแผนฟีเจอร์ที่ต้องมี tracking
กลยุทธ์ 4: สำรวจซอร์สโค้ดของไลบรารี
- เป้าหมาย: อ่านซอร์สโค้ดของ package และ gem ที่ติดตั้งอยู่โดยตรง
- ช่วงที่ใช้: เมื่อต้องใช้ไลบรารีที่เปลี่ยนเร็วหรือมีเอกสารไม่เพียงพอ
- gem อย่าง RubyLLM มีการเพิ่มโมเดล พารามิเตอร์ และฟีเจอร์ใหม่อย่างต่อเนื่อง แต่ เอกสารตามไม่ทัน
- เอเจนต์วิเคราะห์ซอร์สโค้ด RubyLLM: “มีตัวเลือกโมเดลอะไรใช้ได้บ้าง?”, “ส่งพารามิเตอร์อะไรได้บ้าง?”, “ฟีเจอร์ล่าสุดที่ยังไม่ถูกบันทึกในเอกสารมีอะไรบ้าง?”
- ได้คำตอบว่า “เวอร์ชัน 1.9 เพิ่มการรองรับ streaming แต่ยังไม่ถูกบันทึกในเอกสาร” พร้อมชื่อพารามิเตอร์และตัวอย่างการใช้งานจาก test suite
- ผลทบต้น: ทุกครั้งที่อัปเดต dependency ความรู้ก็อัปเดตตามอัตโนมัติ ไม่ต้องทำงานด้วยข้อมูลเก่า
กลยุทธ์ 5: ศึกษา git history
- เป้าหมาย: วิเคราะห์ commit history เพื่อเข้าใจเจตนาของการตัดสินใจในอดีต
- ช่วงที่ใช้: ตอน refactor, รับช่วงงานต่อ, หรือเมื่อจำเป็นต้องเข้าใจว่า “ทำไม”
- เมื่อพบว่ายังใช้ EmailClassifier เวอร์ชันเก่าอยู่ จึงค้น git history ก่อนอัปเกรดว่า “ทำไมยังใช้ v1 อยู่?”, “เคยพยายามอัปเกรดเป็น v2 หรือยัง?”
- พบ PR ของเพื่อนร่วมทีมเมื่อ 3 เดือนก่อน ที่อัปเกรดเป็น v2 แล้วเกิดปัญหาให้อีเมล inbox ไปอยู่ archive และอีเมล archive กลับไปอยู่ inbox
- ในบทสนทนาของ PR มีบันทึกไว้อย่างละเอียดว่าจงใจ rollback เพราะเหตุใด
- ผลทบต้น: institutional memory ถูกเก็บและค้นหาได้ ทำให้สมาชิกใหม่ของทีมรับช่วงตรรกะของการตัดสินใจเดิมได้
กลยุทธ์ 6: ทำ prototype เพื่อทำให้ requirements ชัดเจน
- เป้าหมาย: ทำ prototype อย่างรวดเร็วในสภาพแวดล้อมแยกต่างหาก เพื่อทำให้ requirements ชัดเจน
- ช่วงที่ใช้: Fidelity 3, เมื่อ UX ยังไม่แน่นอน, หรืองานเชิงสำรวจ
- ตอนออกแบบอินเทอร์เฟซ Email Brief ใหม่ ได้สร้าง prototype layout ที่ต่างกัน 5 แบบ ใน Claude โดยใช้เวลาราว 5 นาทีต่อแบบ
- สามารถกดใช้งานเองเพื่อหาจุดที่ไม่สะดวก และนำเวอร์ชันที่ดีที่สุดไปให้ผู้ใช้บางส่วนลอง
- ฟีดแบ็กจากผู้ใช้รายหนึ่ง: “layout ดูเยอะจนล้น และไม่รู้ว่าจะ archive อีเมลอย่างไร”
- insight นี้จึงถูกสะท้อนเข้าไปใน requirements ของแผนจริง: “ต้องวางปุ่ม archive ไว้มุมซ้ายบน—เพราะ muscle memory ของผู้ใช้คาดหวังตำแหน่งนั้นจาก Gmail”
- ผลทบต้น: การทำ prototype เปลี่ยนความไม่แน่นอนให้เป็นสเปกที่เป็นรูปธรรม และบันทึกปฏิกิริยาของผู้ใช้ไว้
กลยุทธ์ 7: สังเคราะห์พร้อมตัวเลือก
- เป้าหมาย: รวมงานวิจัยทั้งหมดเป็นแผนเดียวที่มี trade-off ครบถ้วน
- ช่วงที่ใช้: หลังจบขั้นวิจัย ก่อนเริ่ม implement
- หลังรันกลยุทธ์ 1~6 แล้ว เอเจนต์จะสรุปว่า “จากงานวิจัยนี้ เสนอ 3 วิธีในการแก้ปัญหา พร้อมความซับซ้อนในการ implement, ผลต่อประสิทธิภาพ, ภาระการดูแลรักษา, และแพตเทิร์นเดิมที่สอดคล้องกันของแต่ละวิธี”
- ตัวอย่างการซิงก์ Gmail inbox:
- ตัวเลือก A—ใช้ระบบซิงก์เดิม: implement ได้เร็ว แต่เกิดโค้ดซ้ำและแยก concerns ได้ไม่ดี
- ตัวเลือก B—ซิงก์แบบ real-time: สถาปัตยกรรมสะอาด แต่ช้าและอาจมีปัญหาเรื่องความน่าเชื่อถือ
- ตัวเลือก C—สร้างระบบ mirror caching: เป็นคำตอบระยะยาวที่ดีที่สุด แยกส่วนได้สะอาดที่สุด แต่มีงานเริ่มต้นมากที่สุด
- เมื่อเทียบกันครบแล้ว ก็สามารถเลือกอย่างมีข้อมูลได้ภายใน 30 วินาที
- ผลทบต้น: การเลือกสะท้อนความชอบ เช่น หากระบุว่า “ให้ความสำคัญกับ compatibility ก่อน” ระบบก็จะให้น้ำหนักกับ compatibility มากขึ้นในการตัดสินใจลักษณะคล้ายกันครั้งต่อไป
กลยุทธ์ 8: รีวิวโดย style agent
- เป้าหมาย: ส่งแผนที่เสร็จแล้วให้ reviewer เฉพาะทางที่ใช้ตรวจความชอบของนักพัฒนา
- ช่วงที่ใช้: ขั้นสุดท้ายของแผน ก่อน implement
- มีรีวิวเอเจนต์ 3 ตัวที่รันอัตโนมัติ:
- เอเจนต์เพื่อการทำให้ง่ายลง: ปักธง overengineering เช่น “ฟีเจอร์นี้จำเป็นต้องมี 3 ตารางฐานข้อมูลจริงหรือ? ใช้ 1 ตารางที่มี type field แทนได้ไหม?”
- เอเจนต์ด้านความปลอดภัย: ตรวจช่องโหว่ทั่วไป เช่น “แผนนี้เปิดให้ user input เข้า database query โดยตรง—ต้องเพิ่ม input sanitization”
- Kieran style agent: บังคับใช้ความชอบส่วนบุคคล เช่น “กำลังใช้ join ที่ซับซ้อน แต่ Kieran ชอบ query ที่เรียบง่ายกว่า ลองพิจารณา denormalization”
- ผลทบต้น: เอเจนต์จะสะสมรสนิยมของนักพัฒนาไปเรื่อย ๆ เมื่อเวลาผ่านไป เช่น หากระบุว่า “ไม่ชอบแบบนี้” หรือ “จับประเด็นได้ดี” ระบบก็จะเรียนรู้
เริ่มต้นใช้งาน
วิธีที่ลองได้ตั้งแต่วันนี้
- มีการเปิดซอร์สระบบวางแผนไว้ที่ Every’s Github Marketplace
- เมื่อติดตั้งใน Claude Code จะสามารถใช้ slash command
/plan และ research agent ได้ทันที
- ใช้ปลั๊กอินได้ทั้งใน Claude Code หรือ Droid
วิธีเริ่มแบบง่าย
- เลือกฟีเจอร์ Fidelity 2 ที่กำลังสร้างอยู่สักหนึ่งอย่างในสัปดาห์นี้: งานที่กินหลายไฟล์และมีขอบเขตชัด เช่น เพิ่ม view ใหม่, ทำระบบ feedback, หรือ refactor คอมโพเนนต์
- ก่อนสั่ง Claude Code หรือ Cursor ให้ build ให้ ทำ การค้นคว้า 15~20 นาที:
- best practices: คนอื่นแก้ปัญหานี้อย่างไร? ค้นบล็อกโพสต์, Stack Overflow, เอกสารบนเว็บ
- แพตเทิร์นของตัวเอง: ปกติคุณแก้อย่างไร? ค้นหาฟีเจอร์คล้ายกันจาก codebase เดิม
- ความสามารถของไลบรารี: เครื่องมือที่ใช้อยู่รองรับอะไรจริงบ้าง? ใช้ AI อ่านเอกสารหรือซอร์สโค้ด
- ให้ AI สังเคราะห์งานวิจัยออกมาเป็นแผนที่มีหัวข้อต่อไปนี้:
- ปัญหาที่ต้องแก้ (ประโยคเดียวที่ชัดเจน)
- แนวทางแก้ 2~3 แบบ (พร้อมข้อดีข้อเสียอย่างตรงไปตรงมาของแต่ละแบบ)
- แพตเทิร์นในโค้ดเดิมที่ต้องสอดคล้องกัน
- edge cases หรือประเด็นด้านความปลอดภัย
- ทบทวนแผนและสังเกตปฏิกิริยาของตัวเอง: หากคิดว่า “ซับซ้อนเกินไป” หรือ “มีวิธีที่ดีกว่านี้อยู่แล้ว” อย่าแก้เฉพาะตัวแผน แต่ให้ จับเหตุผลว่าคิดแบบนั้นเพราะอะไร แล้วบันทึกไว้
- ปล่อยฟีเจอร์ตามแผน, เปรียบเทียบ implementation สุดท้ายกับแผนเดิม อะไรที่ต่างออกไป? เพราะอะไร? อะไรจะทำให้แผนดีขึ้นได้?
- ใช้เวลา 10 นาทีทำให้สิ่งที่เรียนรู้กลายเป็นกฎชัดเจนหนึ่งข้อ: เพิ่มลงในไฟล์ CLAUDE.md เช่น “เมื่อทำงานประเภท X ให้จำไว้ว่าต้องตรวจ Y” หรือ “เพราะเหตุผล C จึงชอบแนวทาง A มากกว่า B”
- เมื่อมีการสะสมการเรียนรู้แล้ว ให้ สร้าง research agent หรือคำสั่งเฉพาะทาง เช่น “Event Tracking Expert” (รู้แพตเทิร์นของคุณ), “Security Checker” (ปักธงความผิดพลาดทั่วไป)
- ทำซ้ำอีกครั้งในสัปดาห์หน้า อ้างอิงโน้ตเดิม ตรวจดูว่าแผนครั้งที่สองดีกว่าครั้งแรกหรือไม่ และ ภายในไม่กี่เดือนก็จะได้ระบบที่เข้าใจวิธีคิดของนักพัฒนา
ยังไม่มีความคิดเห็น