AI และเอเจนต์14 นาทีในการอ่าน

40 กฎของแนวทางเชิงวิศวกรรมในการสร้างโปรดักต์ด้วยไวบ์โค้ดดิ้ง

สรุปจากเลกเชอร์ "จากไวบ์โค้ดดิ้งสู่งานวิศวกรรม": กฎสี่สิบข้อที่เปลี่ยน AI เอเจนต์จากปุ่ม "สร้างแอปให้หน่อย" ให้กลายเป็นส่วนหนึ่งของกระบวนการทำงาน

40 กฎของแนวทางเชิงวิศวกรรมในการสร้างโปรดักต์ด้วยไวบ์โค้ดดิ้ง
สารบัญ

บทความนี้สรุปมาจากเลกเชอร์ “จากไวบ์โค้ดดิ้งสู่งานวิศวกรรม”

ไวบ์โค้ดดิ้งเป็นเครื่องมือที่ทรงพลังได้ ถ้าใช้ AI เอเจนต์ไม่ใช่ในฐานะปุ่มวิเศษ “สร้างแอปให้หน่อย” แต่ในฐานะผู้ช่วยที่อยู่ในกระบวนการทางวิศวกรรมที่เป็นระบบ

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

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

ด้านล่างคือรายการกฎที่ช่วยให้สร้างโปรดักต์ด้วย AI ได้อย่างรู้ตัว ปลอดภัย และควบคุมได้มากขึ้น

1. อย่าเริ่มจากโค้ด แต่เริ่มจากโจทย์ของโปรดักต์

ก่อนจะสั่งให้ AI เขียนโค้ด ต้องเข้าใจก่อนว่าเรากำลังสร้างอะไร ให้ใคร และแก้ปัญหาอะไร

แบบที่ไม่ดี:

“ทำ CRM ให้หน่อย”

แบบที่ดี:

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

AI ต้องเข้าใจเป้าหมายของโปรดักต์ ไม่ใช่แค่การกระทำทางเทคนิค

2. รวบรวม requirement ก่อน

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

ตัวอย่าง:

ถ้าเราทำฟอร์มสมัคร ต้องกำหนดไว้ล่วงหน้าว่า:

มีช่องอะไรบ้าง

ช่องไหนบังคับกรอก

ข้อมูลถูกส่งไปที่ไหน

ผู้ใช้เห็นอะไรหลังกดส่ง

เกิดอะไรขึ้นเมื่อมีข้อผิดพลาด

ข้อมูลแบบไหนห้ามรับ

ถ้าไม่มี requirement AI จะเดาเติมเอง

3. บันทึก requirement ไว้ในเอกสาร

อย่าเก็บ requirement ไว้แค่ในหัวหรือในแชท AI อาจลืมบริบท ปะติดปะต่อมันผิด หรือเริ่มขัดแย้งกับการตัดสินใจก่อนหน้า

ตัวอย่าง:

สร้างไฟล์ PRD.md ที่อธิบาย:

เป้าหมายของโปรดักต์

กลุ่มเป้าหมาย

สถานการณ์การใช้งานหลัก

ฟังก์ชันหลัก

ข้อจำกัด

อะไรอยู่ในเวอร์ชันแรก

อะไรไม่อยู่ในเวอร์ชันแรก

เอกสารแบบนี้จะกลายเป็นแหล่งความจริงเดียวสำหรับคุณและ AI เอเจนต์

4. ใช้แนวทาง spec-driven

แนวทาง spec-driven หมายถึง: สเปกมาก่อน โค้ดตามมาทีหลัง

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

แบบที่ไม่ดี:

“ทำระบบล็อกอินให้หน่อย”

แบบที่ดี:

“ทำระบบล็อกอินด้วยอีเมลและรหัสผ่าน ต้องมีสมัครสมาชิก เข้าสู่ระบบ ออกจากระบบ และป้องกันหน้าส่วนตัว ส่วน 2FA กู้รหัสผ่าน และล็อกอินผ่าน Google ยังไม่ทำ”

สเปกยิ่งชัด AI ยิ่งเดาน้อยลง

5. อย่าสั่ง AI ให้ทำทั้งแอปในทีเดียว

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

แบบที่ไม่ดี:

“ทำมาร์เก็ตเพลสให้หน่อย”

แบบที่ดี:

“ทำ vertical slice แรกก่อน: ผู้ใช้เห็นรายการสินค้า เปิดหน้าสินค้า และเพิ่มสินค้าลงตะกร้า”

ชิ้นเล็ก ๆ ที่เสร็จสมบูรณ์หนึ่งชิ้น ดีกว่าฐานรากขนาดมหึมาที่ทำไม่เสร็จ

6. ทำงานเป็น vertical slice

vertical slice คือฟีเจอร์เล็ก ๆ ที่ทำครบตั้งแต่ต้นจนจบผ่านทุกชั้นของโปรดักต์

ตัวอย่าง:

สำหรับ CRM ตัว vertical slice แรกคือการสร้างผู้สมัคร

ในนั้นประกอบด้วย:

ฟอร์มฝั่งฟรอนต์เอนด์

การตรวจสอบความถูกต้องของข้อมูล (validation)

เมธอด API

การบันทึกลงฐานข้อมูล

ข้อความแจ้งว่าสำเร็จ

การจัดการข้อผิดพลาด

การตรวจผลลัพธ์ขั้นพื้นฐาน

ชิ้นงานแบบนี้เอาไปทดสอบ โชว์ให้ผู้ใช้ดู และปรับปรุงต่อได้

7. อย่าสร้างฐานรากใหญ่โตก่อนพิสูจน์สมมติฐาน

ในช่วง MVP ไม่จำเป็นต้องสร้างสถาปัตยกรรมที่สมบูรณ์แบบสำหรับอีกหลายปีข้างหน้าทันที ต้องเช็กก่อนว่าผู้ใช้ต้องการฟีเจอร์นั้นจริงไหม

ตัวอย่าง:

สำหรับ HR-CRM ไม่จำเป็นต้องทำระบบวิเคราะห์ที่ซับซ้อน ระบบสิทธิ์ตามบทบาท หรือการเชื่อมต่อกับอีเมล ปฏิทิน Telegram และ HH.ru ตั้งแต่แรก

แค่เช็กสถานการณ์พื้นฐานก่อนก็พอ: รีครูตเตอร์เพิ่มผู้สมัคร เปลี่ยนสถานะ และเขียนคอมเมนต์ได้

8. แต่ MVP ก็ไม่ควรเป็นกองขยะที่ยุ่งเหยิง

MVP เรียบง่ายได้ แต่ไม่ควรทำแบบไม่คิด

เร็วไม่ได้แปลว่าไม่มีโครงสร้าง

ตัวอย่าง:

จะไม่ทำโมดูลรายงานที่ซับซ้อนก็ได้ แต่ยังไงก็ต้อง:

เข้าใจโครงสร้างข้อมูล

ไม่เก็บความลับ (secret) ไว้ในโค้ด

ตรวจสอบข้อมูลในฟอร์ม

แยก UI ออกจาก business logic

บันทึกการตัดสินใจด้านสถาปัตยกรรม

ไม่อย่างนั้น ไม่นาน MVP ก็จะกลายเป็นโปรดักต์ที่พัฒนาต่อไม่ได้

9. ทำเอกสารสถาปัตยกรรมก่อนเขียนโค้ด

สถาปัตยกรรมอธิบายว่าระบบประกอบด้วยส่วนไหนบ้าง และส่วนไหนรับผิดชอบอะไร

ตัวอย่างไฟล์ ARCHITECTURE.md:

ฟรอนต์เอนด์: Next.js

แบ็กเอนด์: API routes

ฐานข้อมูล: Supabase

คอมโพเนนต์ UI อยู่ใน /components

สคีมาข้อมูลอยู่ใน /schemas

business logic อยู่ใน /services

โค้ดที่ทำงานกับฐานข้อมูลต้องไม่อยู่ในคอมโพเนนต์ UI

เอกสารแบบนี้ช่วยไม่ให้ AI วางโค้ดมั่วซั่ว

10. แบ่งหน้าที่ของคอมโพเนนต์ให้ชัด

แต่ละส่วนของระบบต้องรับผิดชอบงานของตัวเอง

แบบที่ไม่ดี:

คอมโพเนนต์ React ตัวเดียวทั้งแสดงฟอร์ม ตรวจข้อมูล เช็กสิทธิ์ เรียกฐานข้อมูล และตัดสินกฎทางธุรกิจไปพร้อมกัน

แบบที่ดี:

คอมโพเนนต์ UI แสดงหน้าจอ

schema ตรวจข้อมูล

service เก็บ business logic

API รับผิดชอบการรับส่งข้อมูลระหว่าง client กับ server

database layer รับผิดชอบการทำงานกับฐานข้อมูล

แบบนี้โปรเจกต์จะเข้าใจง่ายกว่า ทดสอบง่ายกว่า และพัฒนาต่อง่ายกว่า

11. อธิบายขอบเขตของสถาปัตยกรรมให้ AI รู้

AI ไม่ควรตัดสินใจเองว่าจะวางโค้ดไว้ตรงไหน และจะแก้ส่วนไหนของโปรเจกต์ ต้องกำหนดขอบเขตให้มันอย่างชัดเจน

ตัวอย่างคำขอ:

“อย่าใส่ business logic ในคอมโพเนนต์ UI ย้าย validation ไปไว้ที่ /schemas/candidate.ts ส่วนงานกับฐานข้อมูลไปไว้ที่ /services/candidates.ts ห้ามแก้ระบบล็อกอินและโครงสร้างฐานข้อมูล”

ขอบเขตยิ่งชัด ของที่พังโดยไม่ตั้งใจก็ยิ่งน้อย

12. ใช้ lifecycle กับทุกฟีเจอร์

ฟีเจอร์ไม่ควรเริ่มและจบแค่การสร้างโค้ด มันต้องมีวงจรชีวิตของตัวเอง

lifecycle ที่ดี:

context check: ทำความเข้าใจบริบท

scope: กำหนดขอบเขตของงาน

plan: วางแผน

components: ระบุส่วนที่ได้รับผลกระทบ

implement: ลงมือทำ

verify: ตรวจสอบ

test: ทดสอบ

review: รีวิว

document: อัปเดตเอกสาร

close: ปิดงาน

ตัวอย่าง:

ก่อนงาน “สร้างหน้าข้อมูลผู้สมัคร” ให้สั่ง AI ว่า:

“เช็กบริบทของโปรเจกต์ก่อน กำหนด scope และเสนอแผน ยังไม่ต้องเขียนโค้ด”

13. อย่าให้ AI เขียนโค้ดก่อนมีแผน

ถ้า AI พุ่งไปเขียนโค้ดทันที มันอาจแก้โจทย์ผิด มันต้องแสดงให้เห็นก่อนว่าเข้าใจโจทย์แล้ว

ตัวอย่าง prompt:

“วางแผนการพัฒนาก่อน ระบุว่าจะแก้ไฟล์ไหนและเพราะอะไร จากนั้นหยุดแล้วรอการยืนยัน ยังไม่ต้องเขียนโค้ด”

วิธีนี้ช่วยเลี่ยงสถานการณ์ที่เอเจนต์ไปเขียนใหม่เกินจำเป็น หรือหลงทางไปผิดทิศ

14. ใช้ Definition of Done

Definition of Done คือรายการเงื่อนไขที่ต้องครบ งานถึงจะนับว่าเสร็จ

ถ้าไม่มีมัน AI อาจบอกว่า “เสร็จแล้ว” ทั้งที่จริง ๆ ฟีเจอร์ทำงานได้แค่บางส่วน

ตัวอย่าง Definition of Done ของฟอร์มสมัคร:

ฟอร์มแสดงผลได้ทั้งบน desktop และ mobile

ช่องบังคับกรอกถูกตรวจสอบ

อีเมลถูกเช็กว่ารูปแบบถูกต้อง

ข้อมูลถูกส่งไปที่เซิร์ฟเวอร์

เมื่อส่งสำเร็จ ผู้ใช้เห็นข้อความยืนยัน

เมื่อเกิดข้อผิดพลาด ผู้ใช้เห็นข้อความที่เข้าใจได้

secret ไม่หลุดไปอยู่ในฟรอนต์เอนด์

การเปลี่ยนแปลงไม่ทำให้หน้าที่มีอยู่แล้วพัง

งานจะเสร็จก็ต่อเมื่อทำครบทุกข้อแล้วเท่านั้น

15. อย่าเชื่อคำว่า “เสร็จแล้ว”

AI อาจบอกอย่างมั่นใจว่าทุกอย่างเสร็จแล้ว แต่ไม่ได้แปลว่างานจบจริง

ตัวอย่างคำขอหลังพัฒนาเสร็จ:

“ตรวจผลลัพธ์ตาม Definition of Done แยกให้ชัดว่าข้อไหนคุณยืนยันได้ และข้อไหนเช็กไม่ได้ถ้าไม่รันโปรเจกต์”

แบบนี้ AI จะไม่กลบความไม่แน่นอนเอาไว้

16. ใช้ตรรกะแบบ FSM: อย่ากระโดดข้ามขั้น

FSM คือ finite state machine (เครื่องสถานะจำกัด) พูดง่าย ๆ คือกระบวนการที่ไปขั้นถัดไปไม่ได้ จนกว่าขั้นปัจจุบันจะปิด

ตัวอย่าง:

ห้ามเขียนโค้ดจนกว่าจะตกลง scope กันแล้ว

ห้ามปิดงานจนกว่าจะผ่านการตรวจ

ห้ามปล่อยเวอร์ชันจนกว่าจะเช็ก secret แล้ว

ห้ามเปลี่ยนสถาปัตยกรรมโดยไม่มีการตัดสินใจแยกต่างหาก

แนวทางนี้ป้องกันการกระโดดไปมาระหว่างงานแบบมั่ว ๆ

17. ให้ AI อยู่ในโหมดเดียวต่อครั้ง

ไม่ต้องสั่งให้ AI เป็นทั้งโปรดักต์แมเนเจอร์ สถาปนิก ดีไซเนอร์ นักพัฒนา เทสเตอร์ และผู้เชี่ยวชาญด้านความปลอดภัยไปพร้อมกัน

แยกบทบาทจะดีกว่า

ตัวอย่าง:

ก่อนอื่น: “คุณคือนักวิเคราะห์โปรดักต์ ช่วยเก็บรายละเอียด requirement ให้ชัด”

จากนั้น: “คุณคือสถาปนิก เสนอโครงสร้างมา”

จากนั้น: “คุณคือนักพัฒนา ทำ slice แรก”

จากนั้น: “คุณคือรีวิวเวอร์ ตรวจโค้ดหาความเสี่ยง”

แบบนี้ AI ทำงานได้แม่นกว่า

18. อะไรที่ทำอัตโนมัติได้ อย่าปล่อยให้ AI ตัดสินใจเอง

AI เป็นระบบเชิงความน่าจะเป็น การตรวจที่ต้องเป๊ะใช้เครื่องมือแบบ deterministic จะดีกว่า

ตัวอย่าง:

ไม่ดี: “Claude ช่วยเช็กหน่อยว่ามี type error ไหม”

ดี: รัน npm run typecheck

ไม่ดี: “AI ช่วยดูหน่อยว่าโค้ดจัดฟอร์แมตเรียบร้อยไหม”

ดี: รัน npm run lint

AI มีประโยชน์ตอนวิเคราะห์ข้อผิดพลาด แต่ตัวการตรวจเองควรทำผ่านเทสต์, linter, type-check และสคริปต์

19. ให้ AI อธิบายสิ่งที่เปลี่ยน

หลังพัฒนาเสร็จ AI ต้องอธิบายว่ามันเปลี่ยนอะไร เพราะอะไร และมีความเสี่ยงอะไรเกิดขึ้น

ตัวอย่างคำขอ:

“ขอ changelog: ไฟล์ไหนถูกแก้ เพราะอะไร มีความเสี่ยงอะไรที่อาจเกิดขึ้น และอะไรต้องเช็กด้วยมือ”

วิธีนี้ช่วยให้คุณยังคุมโปรเจกต์ได้

20. จำกัดพื้นที่ที่แก้ได้

AI ไม่ควรเขียนโปรเจกต์ใหม่ครึ่งหนึ่งเพื่องานเล็ก ๆ งานเดียว

ตัวอย่าง:

“แก้โจทย์นี้เฉพาะใน /components/CandidateForm.tsx และ /schemas/candidate.ts เท่านั้น ห้ามแก้ระบบล็อกอิน routing และโครงสร้างฐานข้อมูลโดยไม่ตกลงกันก่อน”

พื้นที่ที่แก้ยิ่งเล็ก ผลลัพธ์ก็ยิ่งตรวจง่าย

21. อย่าให้ AI “refactor ทั้งหมด” โดยไม่มีเหตุผล

การ refactor ต้องแก้ปัญหาที่เจาะจง ไม่อย่างนั้นมันอาจกลายเป็นการเขียนโค้ดที่ใช้งานได้อยู่แล้วใหม่แบบมั่ว ๆ

แบบที่ไม่ดี:

“ปรับปรุงโปรเจกต์ให้ดีขึ้น”

แบบที่ดี:

“เอาโค้ดจัดการข้อผิดพลาดที่ซ้ำกันในเมธอด API สามตัวนี้ออก โดยไม่เปลี่ยนสัญญาสาธารณะ (public contract) ของ API”

การ refactor ต้องมีเป้าหมายและขอบเขต

22. ข้อมูลต้องมีสัญญา (contract)

DTO หรือ Data Transfer Object คือคำอธิบายรูปร่างของข้อมูลที่ส่งไปมาระหว่างส่วนต่าง ๆ ของระบบ

ตัวอย่าง DTO ของผู้สมัคร:

id

name

email

phone

status

source

createdAt

ถ้าไม่ได้เขียนสัญญาไว้ AI อาจตั้งชื่อฟิลด์ที่หนึ่งว่า name อีกที่ว่า fullName และอีกที่ว่า candidateName

สัญญาข้อมูลป้องกันไม่ให้โปรเจกต์ค่อย ๆ เละ

23. ตรวจสอบข้อมูลขาเข้า

ห้ามเชื่อข้อมูลที่มาจากผู้ใช้ จากฟรอนต์เอนด์ หรือจาก API ภายนอก

ตัวอย่าง:

ถ้าผู้ใช้ส่งอีเมลมา เซิร์ฟเวอร์ต้องเช็กว่ามันเป็นอีเมลจริง ๆ

ถ้าสถานะผู้สมัครเป็นได้แค่ new, screening, interview, offer, rejected เซิร์ฟเวอร์ต้องไม่รับข้อความอะไรก็ได้

validation คือการป้องกันพื้นฐานเพื่อคุณภาพของข้อมูล

24. ใช้ zod หรือสคีมาแบบเดียวกัน

Zod ช่วยอธิบายสคีมาข้อมูลและตรวจมันตอนแอปทำงาน

ตัวอย่าง:

ก่อนบันทึกผู้สมัครลงฐานข้อมูล ออบเจ็กต์จะผ่าน candidateSchema ก่อน

ถ้าข้อมูลถูกต้อง ก็บันทึก

ถ้าข้อมูลเพี้ยน ก็ส่งข้อผิดพลาดกลับไป

Zod ทำหน้าที่เหมือนการ์ดหน้าประตูทางเข้าระบบ

25. อย่าเชื่อแม้แต่ฟรอนต์เอนด์ของตัวเอง

ถึงฟอร์มบนเว็บจะตรวจช่องต่าง ๆ แล้ว เซิร์ฟเวอร์ก็ยังต้องตรวจซ้ำอีกรอบ

ทำไม?

ผู้ใช้อาจปลอมคำขอ

ฟรอนต์เอนด์อาจพัง

บอทอาจส่งข้อมูลมาตรง ๆ

บริการภายนอกอาจส่งข้อมูลกลับมาในรูปแบบที่ไม่คาดคิด

ตัวอย่าง:

ฟอร์มฝั่งฟรอนต์เอนด์ไม่ยอมให้ส่งอีเมลว่าง แต่เซิร์ฟเวอร์ก็ยังต้องตรวจอีเมลซ้ำอีกครั้ง

26. secret ต้องไม่อยู่ในโค้ด

API key, token, รหัสผ่าน และข้อมูลส่วนตัว ห้ามเก็บไว้ในโค้ดและห้าม commit ลงรีโพ

ไม่ดี:

const API_KEY = "sk_live_..."

ดี:

process.env.PAYMENT_API_KEY

secret ต้องเก็บไว้ในตัวแปรสภาพแวดล้อม (environment variables) หรือที่เก็บ secret โดยเฉพาะ

27. อย่าส่ง secret จริงเข้าแชท AI

AI ช่วยเรื่องการตั้งค่าได้ แต่มันไม่จำเป็นต้องรู้คีย์ รหัสผ่าน และ token ตัวจริง

ไม่ดี:

“นี่คือ API key จริงของผม ช่วยตั้งค่าระบบชำระเงินหน่อย”

ดี:

PAYMENT_API_KEY=[REDACTED_SECRET]

หรือ

PAYMENT_API_KEY=your_key_here

ให้ AI รู้โครงสร้าง แต่อย่าให้ secret จริง

28. อย่าเขียนระบบเข้ารหัสและระบบล็อกอินเองถ้าไม่จำเป็น

ระบบล็อกอิน รหัสผ่าน token และการเข้ารหัส เป็นโซนที่เสี่ยงสูง

แบบที่ไม่ดี:

“AI ช่วยเขียนระบบเก็บรหัสผ่านขึ้นมาเองให้หน่อย”

แบบที่ดี:

ใช้โซลูชันที่ผ่านการพิสูจน์มาแล้ว: Supabase Auth, Firebase Auth, Clerk, Auth0, OAuth หรือบริการอื่นที่ใช้กันมานานจนเชื่อถือได้

ความปลอดภัยไม่ใช่ที่สำหรับทำเองแบบมือสมัครเล่น

29. เปิดใช้ความปลอดภัยพื้นฐานตั้งแต่ต้น

ความปลอดภัยไม่ควรโผล่มาแค่ตอนก่อนปล่อยเวอร์ชัน

ขั้นต่ำตั้งแต่เริ่ม:

ไม่ commit ไฟล์ .env

เปิด 2FA บน GitHub

ตรวจสอบข้อมูลในฟอร์ม

ไม่เก็บรหัสผ่านเป็นข้อความธรรมดา

จำกัดสิทธิ์การเข้าถึง

ไม่ให้สิทธิ์ AI เกินจำเป็น

ไม่ใช้ dependency ที่ไม่รู้จักโดยไม่ตรวจก่อน

ตัวอย่าง:

ต่อให้เป็น MVP ก็ตาม secret ก็ยังต้องไม่อยู่ในรีโพ

30. ประเมินความเสี่ยงตามสามแกน

ประเมินความเสี่ยงได้ผ่านคำถามสามข้อ:

พื้นผิวการโจมตี (attack surface) กว้างแค่ไหน

ความเสียหายที่อาจเกิดขึ้นมีอะไรบ้าง

โอกาสที่จะถูกโจมตีมีมากแค่ไหน

ตัวอย่าง:

แอปจดโน้ตไว้ใช้เองกับระบบรับชำระเงิน ต้องการการป้องกันคนละระดับ

กรณีแรก ความผิดพลาดแค่น่ารำคาญ

กรณีที่สอง อาจทำให้เสียเงิน ข้อมูลรั่วไหล และมีผลทางกฎหมาย

31. แยก devsec ออกจาก prodsec

devsec คือความปลอดภัยของกระบวนการพัฒนา

prodsec คือความปลอดภัยของโปรดักต์ที่ใช้งานอยู่จริง

ตัวอย่าง devsec:

ไม่เก็บ token ไว้บน GitHub

เปิด 2FA

จำกัดสิทธิ์การเข้าถึง

ตรวจ dependency

ตัวอย่าง prodsec:

ผู้ใช้ต้องไม่เห็นใบสมัครของคนอื่น

ข้อมูลต้องผ่าน validation

ระบบล็อกอินต้องทำงานถูกต้อง

ข้อมูลส่วนบุคคลต้องเก็บอย่างปลอดภัย

สำคัญทั้งสองโซน

32. อย่าปล่อยโปรดักต์ที่สำคัญขึ้นโปรดักชันโดยไม่ผ่านการ audit

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

ตัวอย่าง:

AI ช่วยประกอบ MVP ของฟอร์มชำระเงินได้ แต่ก่อนรับเงินจริงต้องมี audit ทางวิศวกรรม: ความปลอดภัย การเก็บข้อมูล ข้อผิดพลาด สิทธิ์การเข้าถึง และการทำตามข้อกำหนด

ราคาของความผิดพลาดยิ่งสูง ยิ่งพึ่ง “ดูเหมือนจะใช้ได้” ได้น้อยลง

33. ทำ log และ monitoring อย่างน้อยระดับพื้นฐาน

หลังปล่อยเวอร์ชัน ต้องรู้ว่าเกิดอะไรขึ้นในโปรดักต์

ตัวอย่าง:

ผู้ใช้บอกว่า: “ส่งฟอร์มไม่ได้”

ถ้าไม่มี log คุณไม่รู้เลยว่าเกิดอะไรขึ้น

ถ้ามี log ก็จะรู้ได้ว่า:

validation ผิดพลาด

API ใช้งานไม่ได้

ฐานข้อมูลไม่ตอบสนอง

บริการภายนอกส่งข้อผิดพลาดกลับมา

ไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม

monitoring เปลี่ยน “มีอะไรสักอย่างพัง” ให้กลายเป็นงานที่จับต้องได้

34. แยก “เครื่องผมใช้ได้” ออกจาก “พร้อมให้ผู้ใช้ใช้”

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

ตัวอย่าง:

บนเครื่องตัวเองฟอร์มใช้ได้ แต่บนโปรดักชัน:

ไม่มีตัวแปรสภาพแวดล้อม

เวอร์ชันมือถือพัง

ข้อผิดพลาดไม่ถูกบันทึก log

ฐานข้อมูลไม่รับข้อมูลบางส่วน

ผู้ใช้เห็นข้อผิดพลาดทางเทคนิค

ความพร้อมไม่ได้มีแค่การรันบนเครื่องตัวเองได้

35. บันทึกการตัดสินใจไปพร้อมกับการทำงาน

เอกสารไม่ได้มีไว้ให้สวย แต่มีไว้ไม่ให้โปรเจกต์สูญเสียความจำ

ตัวอย่าง:

ถ้าตกลงกันแล้วว่าสถานะผู้สมัครมีได้แค่:

new

screening

interview

offer

rejected

ก็ต้องเขียนไว้ในเอกสารและในสคีมาข้อมูล

ผ่านไปอีกเดือน AI ก็ต้องไม่คิดระบบสถานะขึ้นมาใหม่เอง

36. อัปเดตบริบทของโปรเจกต์หลังทำทุกฟีเจอร์

ถ้าสถาปัตยกรรม API โครงสร้างข้อมูล หรือกฎต่าง ๆ เปลี่ยน ต้องบันทึกไว้

ตัวอย่าง:

เพิ่มฟิลด์ source ให้ผู้สมัคร

ต้องอัปเดต:

สคีมาข้อมูล

เอกสาร API

คำอธิบายโมเดล

ฟอร์ม

validation

เทสต์ ถ้ามี

ไม่อย่างนั้นงานถัดไปจะถูกสร้างบนบริบทเก่า

37. ให้ AI ระบุจุดที่ไม่แน่ใจให้ชัด

AI ไม่ควรกลบความไม่แน่นอนด้วยความมั่นใจ

ตัวอย่าง prompt:

“ถ้าข้อมูลไม่พอสำหรับการแก้โจทย์ อย่าแต่งขึ้นมาเอง แยกรายการคำถาม สมมติฐาน และจุดที่ต้องให้คนตรวจออกมาต่างหาก”

ข้อนี้สำคัญเป็นพิเศษในเรื่องสถาปัตยกรรม ความปลอดภัย และการเชื่อมต่อระบบ

38. อย่าตัดสินใจเรื่องสถาปัตยกรรมเพียงเพราะ AI เสนอมา

AI อาจเสนอทางแก้ที่ฟังดูน่าเชื่อ แต่ไม่เหมาะ

ตัวอย่าง:

AI เสนอ microservices ให้ MVP ตัวเล็ก ๆ

ก่อนจะตกลง ต้องถามว่า:

มันแก้ปัญหาอะไร

ต้นทุนการดูแลเท่าไหร่

ทำให้ง่ายกว่านี้ได้ไหม

เรากำลังสร้างความซับซ้อนเกินจำเป็นหรือเปล่า

ใครจะเป็นคนดูแลมันต่อ

คนเป็นผู้ตัดสินใจ ไม่ใช่โมเดล

39. ใช้ AI เพื่อขยายความสามารถ ไม่ใช่แทนความรับผิดชอบ

AI อธิบาย แนะนำ และช่วยลงมือทำได้ แต่ความรับผิดชอบต่อโปรดักต์ยังอยู่ที่คน

ตัวอย่าง:

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

AI ช่วยคิด แต่ไม่ได้รับผิดชอบผลที่ตามมา

40. คิดไม่ใช่แค่เรื่องการสร้าง แต่รวมถึงการดูแลต่อ

โปรดักต์ไม่ได้จบหลังการสร้างโค้ดครั้งแรก มันต้องถูกซ่อม ขยาย ดูแล และส่งต่อให้คนอื่น

ตัวอย่าง:

ถ้าพรุ่งนี้มีนักพัฒนาเข้ามา เขาต้องเข้าใจได้ว่า:

โปรเจกต์ทำงานยังไง

เอกสารอยู่ที่ไหน

มีสคีมาข้อมูลอะไรบ้าง

ตัดสินใจอะไรไปแล้วบ้าง

รันโปรเจกต์ยังไง

ดูข้อผิดพลาดที่ไหน

ส่วนไหนห้ามแก้ถ้าไม่ระวัง

ถ้าวนกับ AI ไปแล้ว 200 รอบ แต่ไม่มีใครเข้าใจโปรเจกต์ได้ แปลว่ากระบวนการไม่ดี

สูตรสั้น ๆ ของไวบ์โค้ดดิ้งเชิงวิศวกรรม

อย่าสั่ง AI ว่า “ทำโปรดักต์ให้หน่อย”

ก่อนอื่น:

อธิบายโปรดักต์

รวบรวม requirement

บันทึกสเปก

กำหนดสถาปัตยกรรม

แตกโปรดักต์เป็น vertical slice เล็ก ๆ

ใช้ lifecycle กับทุกฟีเจอร์

ไม่เขียนโค้ดก่อนมีแผน

ใช้ Definition of Done

ตรวจผลลัพธ์

คิดเรื่องความปลอดภัย

บันทึกการตัดสินใจ

อัปเดตบริบทของโปรเจกต์

หลังจากนั้นเท่านั้น ถึงจะนับว่างานเสร็จแบบวิศวกรรม

ข้อสรุปหลัก

ไวบ์โค้ดดิ้งไม่ได้อันตรายเพราะ AI ไม่ดี มันอันตรายเมื่อคนโยนงานให้ AI โดยไม่มีกรอบ ไม่มี requirement ไม่มีสถาปัตยกรรม และไม่มีการตรวจ

แนวทางที่เป็นผู้ใหญ่หน้าตาต่างออกไป:

“นี่คือบริบทของโปรดักต์ นี่คือ requirement นี่คือสถาปัตยกรรม นี่คือข้อจำกัด นี่คืองาน นี่คือเกณฑ์ว่าเสร็จ เช็กบริบทก่อน แล้วเสนอแผน แล้วทำ slice ที่ตกลงกันไว้ แล้วตรวจผลลัพธ์และอัปเดตเอกสาร”

แบบนี้ AI จะไม่ใช่เครื่องปั่นโค้ดแบบมั่ว ๆ แต่เป็นผู้ช่วยในกระบวนการทางวิศวกรรม

ส่วนเรื่องการสั่งงานโมเดลยังไงไม่ให้มันต้องเดา อ่านแยกได้ที่ prompt engineering ตามกฎของ OpenAI และ Anthropic

คนกันเองอยู่ใกล้ ๆถามคนกันเอง แชทตอบเร็วกว่าค้นหาเองแชทหลักของไอที ปาร์ตี้ พัทยา: คนสาย IT สายดิจิทัล และผู้ประกอบการ ที่เคยผ่านเรื่องเดียวกันมาแล้ว เริ่มตั้งแต่กรกฎาคม 2566 แชทใช้ภาษารัสเซีย ชาวต่างชาติและคนไทยเข้ามาได้เสมอเข้าแชท (ภาษารัสเซีย)

อ่านเรื่องที่เกี่ยวข้อง