ข้ามไปยังเนื้อหา
KoishiAI
EN
← สารบัญ

บทที่ 11 จาก 12 · Agentic Engineering — คู่มือปฏิบัติเขียนซอฟต์แวร์ระดับ Production ด้วย AI Agent

Git สำหรับทีมที่ทุกคนมี AI ช่วยเขียน

เมื่อปริมาณโค้ดต่อคนเพิ่ม 3–10 เท่า แต่ความสามารถในการรีวิวเท่าเดิม คอขวดย้ายจากการเขียนไปที่การรีวิวและการรวมงาน บทนี้มีกติกาแกนกลาง 6 ข้อ commit trailer บอกที่มาของโค้ด PR template ที่บังคับกรอก blast radius และ CI สี่ชั้น

ปัญหาที่เปลี่ยนไปเมื่อทุกคนมี agent คือ ปริมาณโค้ดต่อคนเพิ่ม 3–10 เท่า แต่ความสามารถในการรีวิวของทีมเท่าเดิม คอขวดย้ายจาก “การเขียน” ไปที่ “การรีวิวและการรวมงาน” ทั้งหมด ทุกกติกาในบทนี้มีเป้าหมายเดียวคือทำให้คอขวดนั้นไม่ระเบิด

11.1 กติกาแกนกลาง 6 ข้อ

กติกาเหตุผลและวิธีบังคับ
PR เล็กเสมอเพดาน 400 บรรทัดที่เปลี่ยน บังคับด้วย CI ที่เตือนเมื่อเกิน — agent ทำ PR 2,000 บรรทัดได้ใน 20 นาที แต่ไม่มีใครรีวิวได้จริง
หนึ่ง PR หนึ่งเจตนาห้ามผสม refactor กับฟีเจอร์ — agent ชอบ “ปรับปรุงตรงนี้ด้วยเลย” ต้องห้ามไว้ใน AGENTS.md
มนุษย์เป็นเจ้าของ PRทุก PR มีมนุษย์หนึ่งคนที่รับผิดชอบเต็ม ต่อให้ agent เขียนทุกบรรทัด ไม่มี PR ไร้เจ้าของ
Branch อายุสั้นไม่เกิน 2 วัน agent ทำงานเร็ว branch ที่อยู่นาน 1 สัปดาห์จะ conflict หนักมาก
CI คือ gate เดียวกับ localรัน verify.sh ตัวเดียวกัน ห้ามมีสองมาตรฐาน
Rebase ก่อนเสมอดึง main มาก่อนทุกครั้งที่ agent เริ่มทำงานรอบใหม่ ไม่ใช่ตอนจะเปิด PR

11.2 การบอกที่มาของโค้ด (provenance)

ทีมต้องรู้ว่าโค้ดชิ้นไหนคนเขียน ชิ้นไหน agent เขียน และมนุษย์ตรวจแค่ไหน เพราะระดับการรีวิวควรต่างกัน วิธีที่ใช้ได้และไม่รบกวนคือ commit trailer

feat(checkout): add coupon validation and discount calculation

implement R1-R6 ตาม docs/specs/coupon.md
ส่วนลดคิดก่อนภาษี ตัดที่ยอด 0 ตาม R4

AI-Assisted: heavy          # none | light | heavy | autonomous
AI-Tool: claude-code
Human-Review: full          # full | tests-only | spot
Spec: docs/specs/coupon.md
Gate: verify.sh green (run 2026-08-04T09:12Z, 47 tests, cov 84%)
Co-Authored-By: Claude <noreply@anthropic.com>
ระดับความหมายการรีวิวที่ต้องได้
noneคนเขียนเองทั้งหมดรีวิวปกติ
lightAI ช่วยเติมโค้ด คนคุมโครงสร้างรีวิวปกติ
heavyAI เขียนหลัก คนกำกับและตรวจทุกส่วนต้องอ่าน test ทุกบรรทัด + ตรวจ blast radius
autonomousAI ทำเองใน loop คนดูแค่ผลลัพธ์ต้องมีผู้รีวิวที่สอง + ห้ามแตะ path ที่แตะเงินหรือข้อมูลผู้ใช้

PR template ที่บังคับกรอก:

## สิ่งที่เปลี่ยนและทำไม

## Spec
- ลิงก์: docs/specs/____.md
- กติกาที่ implement: R__ ถึง R__

## Gate

วาง output จริงของ ./scripts/verify.sh ตรงนี้


## AI provenance
- AI-Assisted: [ ] none [ ] light [ ] heavy [ ] autonomous
- เครื่องมือ: ______
- ส่วนที่มนุษย์เขียนหรือแก้เอง: ______

## Blast radius (บังคับกรอก ห้ามข้าม)
- ถ้าผิดพลาดร้ายแรงที่สุด ผู้ใช้ได้รับผลกระทบ: ______ คน / ______ %
- ระดับความเสียหาย: [ ] L1 [ ] L2 [ ] L3 [ ] L4 [ ] L5
- ตรวจเจอได้ภายใน ____ นาที ด้วย: ______
- Rollback: [ ] ปิด feature flag [ ] revert commit [ ] ต้อง migrate ย้อน
  เวลาที่ใช้: ____ นาที

## สิ่งที่ผู้รีวิวควรดูเป็นพิเศษ (เรียงตามความเสี่ยง)
1.
2.
3.

## Checklist
- [ ] test เขียนจาก spec ไม่ใช่จาก implementation
- [ ] มีเคส reject ครบตามสเปก
- [ ] ไม่มีไฟล์นอกขอบเขตถูกแตะ
- [ ] ไม่มี dependency ใหม่ (ถ้ามี อธิบายเหตุผล)
- [ ] migration ย้อนกลับได้และไม่ล็อกตารางเกิน 2 วินาที
- [ ] อัปเดต memory/pitfalls.md ถ้าเจอบทเรียนใหม่

11.3 การแบ่งงานเพื่อลด conflict

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

11.4 การจัดการ conflict

เมื่อ conflict เกิดขึ้น ต้องรัน test ของ ทั้งสองฝั่ง ไม่ใช่แค่ชุดปัจจุบัน

git checkout theirs-branch -- tests/      # ดึง test ฝั่งโน้นมาด้วย
./scripts/verify.sh

และ ห้าม agent ใช้ git checkout --ours หรือ --theirs แบบเหวี่ยงแห นี่คือวิธีที่ทำให้โค้ดหายเงียบ ๆ และไม่มี test ตัวไหนจับได้ ให้ใส่ไว้ในรายการข้อห้ามของ hook

11.5 CI ที่รับมือกับปริมาณ PR ที่เพิ่มขึ้น

ชั้นที่ 1 — เร็ว (<2 นาที) รันทุก push
  format, lint, type, unit test ของไฟล์ที่แตะ
  ผลลัพธ์: บล็อกทันที

ชั้นที่ 2 — เต็ม (<10 นาที) รันเมื่อเปิด PR และทุก push หลังจากนั้น
  verify.sh ทั้งชุด + no-cheating check
  ผลลัพธ์: บล็อก merge

ชั้นที่ 3 — คุณภาพ (ไม่บล็อก) โพสต์เป็นคอมเมนต์
  coverage diff, complexity delta, PR size, dependency ใหม่,
  รายการไฟล์ที่แตะนอกขอบเขตที่ประกาศไว้,
  รายงานจาก LLM ว่า "จุดที่ควรตรวจเพิ่ม" (คำแนะนำเท่านั้น ไม่มีสิทธิ์บล็อก)

ชั้นที่ 4 — กลางคืน
  E2E เต็มชุด, mutation test บน diff ของวันนั้น,
  security scan, สรุปว่า test ตัวไหนเป็น flaky

กฎเหล็ก

ห้ามมี test ที่แดงสุ่ม ๆ อยู่ใน gate ที่บล็อก merge เพราะทีมจะเรียนรู้ที่จะกด re-run จนเขียว แล้ว gate ทั้งระบบจะหมดความหมาย flaky test เจอเมื่อไหร่ให้ย้ายออกจาก gate ทันทีแล้วเปิด issue แก้ ไม่ใช่ปล่อยไว้

11.6 การส่งงานระหว่างคน

เมื่อคนสองคนทำงานต่อกัน สิ่งที่ต้องส่งต่อไม่ใช่แค่โค้ด แต่คือ บริบทที่ agent ของอีกคนต้องใช้ เพราะ agent ของอีกคนไม่มีประวัติ chat ของคุณ

สิ่งที่ต้องอยู่ใน repo ก่อนส่งงาน ไม่ใช่ใน Slack:

ไฟล์เนื้อหา
docs/specs/xxx.mdสเปกที่อัปเดตให้ตรงกับที่ทำจริง
memory/decisions.mdตัดสินใจอะไรระหว่างทาง เพราะอะไร
memory/pitfalls.mdสิ่งที่ลองแล้วไม่ได้ผล กันคนถัดไปเสียเวลาซ้ำ
PR descriptionblast radius, rollback, สิ่งที่ยังค้าง
TODO ในโค้ดระบุชื่อคนหรือ issue เสมอ ห้าม TODO ลอย

ทดสอบว่าส่งงานครบไหมด้วยคำถามเดียว:

“ถ้าเพื่อนร่วมทีมเปิด repo นี้พรุ่งนี้เช้า สั่ง agent ว่า ‘ทำงานนี้ต่อ’ โดยไม่ถามอะไรฉันเลย เขาจะทำถูกไหม”

ถ้าคำตอบคือไม่ แปลว่ายังมีบริบทค้างอยู่ในหัวคุณหรือใน chat ที่ต้องย้ายลงไฟล์

ตัวชี้วัดสุขภาพของทีม

ทีมที่ทำ agentic engineering ได้ดีจะเห็นตัวเลขนี้ คือ เวลาเฉลี่ยจากเปิด PR ถึง merge ลดลง ในขณะที่อัตราการ rollback ไม่เพิ่มขึ้น ถ้าเวลาลดแต่ rollback เพิ่ม แปลว่ากำลังเร่งความเร็วโดยย้ายต้นทุนไปให้ผู้ใช้แบก ไม่ใช่การเพิ่มผลิตภาพ

สรุปบทนี้

คอขวดย้ายไปที่การรีวิว ทุกกติกาจึงมุ่งไปที่การทำให้รีวิวได้จริง คือ PR เล็ก หนึ่ง PR หนึ่งเจตนา branch อายุสั้น และมีมนุษย์เป็นเจ้าของเสมอ บอกที่มาของโค้ดด้วย trailer เพื่อให้ระดับการรีวิวตรงกับความเสี่ยง แบ่ง CI เป็นสี่ชั้นตามความเร็ว และวัดสุขภาพทีมด้วยเวลาถึง merge ควบคู่กับอัตรา rollback

บทถัดไปเป็นภาคผนวก รวม checklist และ anti-pattern 12 ข้อที่พบบ่อย