ข้าม​ไป​ยัง​เนื้อหา

Structured-Prompt-Driven Development (SPDD)

เกี่ยว​กับ​บท​แปล​นี้

บทความ​นี้​เป็น บท​แปล​ภาษา​ไทย​อย่าง​ไม่​เป็น​ทางการ ของ “Structured-Prompt-Driven Development (SPDD)” โดย Wei Zhang และ Jessie Jie Xia (Thoughtworks)

เผยแพร่​ครั้ง​แรก​บน martinfowler.com เมื่อ 28 เมษายน 2026 และ​เพิ่ม​ส่วน​ถาม-ตอบ​เมื่อ 4 พฤษภาคม 2026 (Martin Fowler มี​ส่วนร่วม​ใน​การ​ขัดเกลา​โครงเรื่อง​และ​ไดอะแกรม​ของ​ต้นฉบับ)

แปล​และ​เรียบเรียง​เพื่อ​การ​ศึกษา — ไดอะแกรม​เชิง​แนวคิด​วาด​ใหม่​เป็น​ภาษา​ไทย ส่วนภาพ​หน้า​จอของ​เครื่องมือ​มี link ไป​ยัง​ต้นฉบับ และ​ศัพท์​เทคนิค​คง​ไว้​เป็น​ภาษา​อังกฤษ​ตาม​ต้นฉบับ ลิขสิทธิ์​ของ​เนื้อหา​ต้นฉบับ​เป็น​ของ​ผู้​เขียน

วิธี​ทำให้การ​แก้ code ด้วย LLM กำกับ​ดูแล​ได้ ตรวจทาน​ได้ และ​นำ​กลับ​มา​ใช้​ซ้ำ​ได้

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

องค์กร​ไอที​ภายใน​ของ Thoughtworks นำ​เครื่องมือ​เหล่า​นี้​มา​ใช้​กับ​ทีม​ต่าง ๆ และ​ได้​พัฒนา​วิธีการ​และ workflow ขึ้น​มา​ตัว​หนึ่ง​ที่​เรา​เรียก​ว่า Structured Prompt-Driven Development (SPDD) — การ​พัฒนา​ที่​ขับ​เคลื่อน​ด้วย structured prompt บทความ​นี้​อธิบาย​ตัวอย่าง workflow แบบ​เรียบ​ง่าย พร้อม​รายละเอียด​บน GitHub

workflow นี้​ปฏิบัติ​ต่อ prompt ใน​ฐานะชิ้น​งาน​ชั้น​หนึ่ง (first-class artifact) ที่​ถูก​เก็บ​ไว้​คู่​กับ code ใน version control และ​นำ​มา​ใช้​เพื่อ​จัด​แนว​การ​พัฒนา​ให้​ตรง​กับ​ความ​ต้องการ​ทาง​ธุรกิจ

เรา​พบ​ว่า​นัก​พัฒนา​ต้อง​มี​ทักษะ​หลัก​สาม​อย่าง​จึง​จะ​ทำงาน​นี้​ได้​อย่าง​มี​ประสิทธิภาพ ได้แก่:

  • alignment — การ​จัด​แนว​เจตนา
  • abstraction-first — ออกแบบ​นามธรรม​ก่อน
  • iterative review — การ​ตรวจทาน​แบบวน​ซ้ำ

เมื่อ​ทีม​เริ่ม​นำ​ผู้​ช่วย AI สำหรับ​เขียน code มา​ใช้ ผล​ที่​ได้​แรก ๆ มัก​ปรากฏ​ใน​ระดับ​บุคคล กล่าว​คือ นัก​พัฒนา​คน​หนึ่ง​สามารถ​ร่าง แก้ และ refactor code ได้​เร็ว​กว่า​เดิม​มาก

แต่​ความเร็ว​ใน​การ​ส่ง​มอบ (delivery speed) นั้น​แทบ​ไม่​เคย​ถูก​จำกัด​ด้วย​ความเร็ว​ใน​การ​พิมพ์ เมื่อ​มอง​ดู​ตลอด​วงจร​การ​ส่ง​มอบ​ทั้งหมด ตั้งแต่ requirement ไป​จนถึง​การ release จะ​เห็น​แรง​เสียด​ทาน​แบบ​ใหม่​โผล่​ขึ้น​มา:

  • requirement ที่​กำกวม​ถูก​แปลง​เป็น code อย่าง​รวดเร็ว และ​ความ​เข้าใจ​ผิด​ก็​ขยาย​ตัว​ตาม​ไป​ด้วย
  • การ​รีวิว​ต้อง​รับมือ​กับ​การ​เปลี่ยนแปลง​ปริมาณ​ที่​มาก​ขึ้น และ​ความ​ไม่​สอดคล้อง​กัน​ก็​แทรก​เข้า​มา​ได้​ง่าย​ขึ้น
  • ปัญหา​ด้าน​การ integrate และ test โผล่​ขึ้น​มา​มาก​ขึ้น เพราะ​คำ​ว่า “generate ได้​แล้ว” ไม่​ได้​แปล​ว่า “ตรง​เจตนา​แล้ว”
  • ความ​เสี่ยง​บน production ประเมิน​ยาก​ขึ้น เมื่อ​ปริมาณ​การ​เปลี่ยนแปลง​เพิ่ม​สูง​ขึ้น

ดังนั้น ใช่ — ความเร็ว​ใน​ระดับ​ท้องถิ่น​ดี​ขึ้น​จริง แต่​นั่น​ไม่​ได้​แปลง​เป็น throughput ใน​ระดับ​ทั้ง​ระบบ​โดย​อัตโนมัติ

มัน​เหมือน​กับ​การ​ซื้อ​รถ Ferrari มา​ขับ​บน​ถนน​โคลน เครื่องยนต์​ทรง​พลัง​ก็​จริง แต่​เวลา​ที่​ไป​ถึง​จุด​หมาย​ถูก​กำหนด​ด้วย​สภาพ​ถนน​และ​การ​จราจร

จาก​ประสบการณ์​ของ​เรา คำถาม​ที่แท้​จริง​ไม่ใช่ “เรา​จะ generate code ให้​มาก​ขึ้น​ได้​อย่างไร?” แต่​คือ เรา​จะ​ทำให้การ​เปลี่ยนแปลง​ที่ AI สร้าง​ขึ้น​กำกับ​ดูแล​ได้ ตรวจทาน​ได้ และ​นำ​กลับ​มา​ใช้​ซ้ำ​ได้​อย่างไร เพื่อ​ให้​ทีม​ทำงาน​ได้​ทั้ง​เร็ว​ขึ้น​และ​ปลอดภัย​ขึ้น

นั่น​นำพา​ทีม​ไอที​ภายใน​ของ Thoughtworks (Global IT Services) ไป​สู่​วิธีการ​และ workflow ที่​ตอน​นี้​เรา​เรียก​ว่า Structured Prompt-Driven Development (SPDD) เป้าหมาย​ของ SPDD คือ​เปลี่ยน​ความ​ช่วยเหลือ​จาก AI จาก “ประสิทธิภาพ​ส่วน​บุคคล” ให้​กลาย​เป็น “ความ​สามารถ​ระดับ​องค์กร” ที่​ขยาย​ขนาด​ได้ โดย​ไม่​ต้อง​แลก​กับ​คุณภาพ

Prompt ใน​ฐานะ​ชิ้น​งาน​ส่ง​มอบ​ชั้น​หนึ่ง

Structured Prompt-Driven Development (SPDD) คือ​วิธีการ​ทาง​วิศวกรรม​ที่ปฏิบัติ​ต่อ prompt ใน​ฐานะ​ชิ้น​งาน​ส่ง​มอบ​ชั้น​หนึ่ง (first-class delivery artifact)

แทนที่​จะ​พึ่ง​บท​แชต​แบบ​ทำ​ไป​เรื่อย (ad hoc) SPDD เปลี่ยน prompt ให้​เป็น​สินทรัพย์​ที่​สามารถ​ควบคุม version (version control), ตรวจทาน, นำ​กลับ​มา​ใช้​ซ้ำ และ​ปรับปรุง​ให้​ดี​ขึ้น​เมื่อ​เวลา​ผ่าน​ไป​ได้

ทีม​ใช้ structured prompt เพื่อ​เก็บ requirement, ภาษา​ของ domain (domain language), เจตนา​ใน​การ​ออกแบบ, ข้อ​จำกัด และ​การ​แตก​ย่อย​งาน (task breakdown) จาก​นั้น LLM จึง generate code ภายใน​ขอบเขต​ที่​นิยาม​ไว้ ผลลัพธ์​จึง​คาด​เดา​ได้​มาก​ขึ้น​และ​ตรวจสอบ​ได้​ง่าย​ขึ้น

SPDD มี​องค์​ประกอบ​หลัก​สอง​ส่วน คือ REASONS Canvas และ workflow ของ SPDD โดย​มี​ภาพ​รวม​ของ​ทั้ง​วง​รอบ​ดังนี้

flowchart TB
  subgraph ITN["Iteration N"]
    direction TB
    bi1["Business Intent"]
    sp1["Structured Prompt<br/>versioned · reviewable · reusable"]
    ct1["Code & Tests"]
    bi1 -->|"REASONS Canvas"| sp1
    sp1 -->|"code generation"| ct1
    ct1 -.->|"sync"| sp1
  end
  subgraph ITN1["Iteration N+1"]
    direction TB
    bi2["Business Intent"]
    sp2["Structured Prompt<br/>versioned · reviewable · reusable"]
    ct2["Code & Tests"]
    bi2 -->|"REASONS Canvas"| sp2
    sp2 -->|"code generation"| ct2
    ct2 -.->|"sync"| sp2
  end
  sp1 ==>|"accumulated prompt assets"| sp2
  ct1 ==>|"accumulated code assets"| ct2

ภาพ 1 — ภาพ​รวม​ของ SPDD: ใน​แต่ละ iteration เจตนา​ทาง​ธุรกิจ (Business Intent) ถูก​แปลง​ผ่าน REASONS Canvas ไป​เป็น structured prompt (ที่​ควบคุม version-ตรวจทาน-ใช้​ซ้ำ​ได้) แล้ว​จึง generate ออก​มา​เป็น Code & Tests ลูกศร​ประ “sync” สื่อ​ว่าการ​เปลี่ยนแปลง​ฝั่ง code ถูก sync กลับ​เข้าหา prompt ส่วน​ลูกศร​หนา​ระหว่าง iteration คือ สินทรัพย์ prompt และ code ที่​สะสม​ไว้ ซึ่ง​กลาย​เป็น context ตั้งต้น​ของ​รอบ​ถัด​ไป · ดู​ภาพ​ต้นฉบับ ↗

REASONS Canvas คือ​โครงสร้าง​สำหรับ generate prompt มัน​บังคับ​ให้​เกิด​ความ​ชัดเจน​รอบ ๆ ประเด็น​ต่อ​ไป​นี้: requirement, domain model, แนวทาง​แก้​ปัญหา (solution approach), โครงสร้าง​ของ​ระบบ, การ​แตก​ย่อย​งาน, บรรทัดฐาน​ที่​นำ​กลับ​มา​ใช้​ซ้ำ​ได้ (reusable norms), และ​มาตรการ​ป้องกัน (safeguards)

ทั้งหมด​นี้​เพื่อ​ให้ LLM ถูก​นำทาง​ด้วย “เจตนา” ไม่ใช่ “การ​เดา”

REASONS Canvas เป็น​โครงสร้าง​เจ็ด​ส่วน​ที่​นำทาง prompt จาก เจตนา → การ​ออกแบบ → การ​ลงมือ​ทำ → การ​กำกับ​ดูแล (intent → design → execution → governance)

flowchart TB
  subgraph MAIN["Main Area"]
    direction LR
    subgraph ABS["Abstraction Parts — intent & design"]
      direction LR
      R["R — Requirements"]
      E["E — Entities"]
      A["A — Approach"]
      S["S — Structure"]
    end
    subgraph SPE["Specific Parts — execution"]
      O["O — Operations"]
    end
  end
  subgraph STD["Common Standard Parts — governance"]
    direction LR
    N["N — Norms"]
    SG["S — Safeguards"]
  end
  ABS ==> SPE
  MAIN -.-> STD

ภาพ 2 — โครงสร้าง​ของ REASONS Canvas: ส่วน​พื้นที่​หลัก (Main Area) แบ่ง​เป็น ส่วน​นามธรรม (intent & design — R, E, A, S) และ ส่วน​เฉพาะ​เจาะจง (execution — O) ด้าน​ล่าง​คือ ส่วน​มาตรฐาน​ร่วม (governance — N, S) ที่​ใช้​พาด​ผ่าน​ทุก​ส่วน · ดู​ภาพ​ต้นฉบับ ↗

ส่วน​นามธรรม (เจตนา​และ​การ​ออกแบบ)

  • R — Requirements: เรา​กำลัง​แก้​ปัญหา​อะไร และ​อะไร​คือ DoD (Definition of Done — นิยาม​ของ​คำ​ว่า​เสร็จ)?
  • E — Entities: entity ของ domain และ​ความ​สัมพันธ์​ระหว่าง​กัน
  • A — Approach: กลยุทธ์​ว่า​เรา​จะ​ตอบ​โจทย์ requirement ได้​อย่างไร
  • S — Structure: การ​เปลี่ยนแปลง​นี้​อยู่​ตรง​ไหน​ใน​ระบบ มี​คอมโพเนนต์และ dependency อะไร​บ้าง

ส่วน​เฉพาะ​เจาะจง (การ​ลงมือ​ทำ)

  • O — Operations: แตก​กลยุทธ์​นามธรรม​ออก​เป็น​ขั้นตอน​การ implement ที่​เป็น​รูปธรรม​และ​ทดสอบ​ได้

ส่วน​มาตรฐาน​ร่วม (การ​กำกับ​ดูแล)

  • N — Norms: บรรทัดฐาน​ทาง​วิศวกรรม​ที่​พาด​ผ่าน​ทุก​ส่วน (การ​ตั้ง​ชื่อ, observability, defensive coding ฯลฯ)
  • S — Safeguards: ขอบเขต​ที่​ต่อรอง​ไม่​ได้ (invariant, ขีด​จำกัด​ด้าน​ประสิทธิภาพ, กฎ​ความ​ปลอดภัย ฯลฯ)

Canvas จัด​แนว​เจตนา​และ​ขอบเขต​ให้​ตรง​กัน​ก่อน​ที่​จะ generate code เป็นการ “ย้าย​ความ​ไม่​แน่นอน​ไป​ทาง​ซ้าย” (moving uncertainty to the left)

เนื่องจาก structured prompt เก็บ specification ไว้​ครบ​ทั้ง​ชุด ผู้​ตรวจทาน​จึง​ใช้​เหตุผล​กับ​ชิ้น​งาน​ชิ้น​เดียว แทนที่​จะ​ต้อง​ไล่​ดู​บท​แชต​ที่​กระจัดกระจาย​กับ diff ที่​ไม่​ครบ และ​เพราะ​ทุก prompt ใช้​โครงสร้าง​เดียวกัน prompt ทุก​อัน​จึง​กำกับ​ดูแล​ได้​ใน​แบบ​เดียวกัน

ยิ่ง​ความ​รู้​ของ domain และ​การ​ตัดสิน​ใจ​ด้าน​การ​ออกแบบ​สะสม​อยู่​ใน​แต่ละ prompt มาก​ขึ้น มัน​ก็​ยิ่ง​ทบ​ความ​เชี่ยวชาญ​ของ​แต่ละ​คน​เข้า​ด้วย​กัน​ข้าม​รอบ​การ​ทำงาน และ​ลด​ความ​แปรปรวน​ภายใน​ทีม

workflow นำ prompt เข้า​มา​อยู่​ภาย​ใต้​วินัย​เดียว​กับ code ไม่​ว่า​จะ​เป็น commit history, การ​รีวิว, และ quality gate และ​ยัง​บังคับ​ใช้​กฎ​ข้อ​หนึ่ง​ที่​เรียบ​ง่าย​แต่​ทรง​พลัง:

เมื่อ​ความ​เป็น​จริง​เบน​ออก​จาก​กัน ให้​แก้​ที่ prompt ก่อน — แล้ว​ค่อย​อัปเดต code

เมื่อ​เวลา​ผ่าน​ไป สิ่ง​นี้​เปลี่ยน​วิธี​ทำงาน​ของ​ทีม การ​รีวิว​ขยับ​จาก “จับ bug” (spot the bug) ไป​สู่ “ตรวจ​เจตนา” (check the intent) การ​ทำงาน​ซ้ำ (rework) ควบคุม​ได้​มาก​ขึ้น และ pattern ที่​ใช้ได้​ผล​ก็​สะสม​เข้า​เป็น library ของ prompt ที่​นำ​กลับ​มา​ใช้​ซ้ำ​ได้ ซึ่ง​เป็น​รากฐาน​ของ AI-First Software Delivery (AIFSD)

ถ้า​คุณ​รู้จัก Spec-Driven Development มา​ก่อน คุณ​จะ​จำ​จุด​ตั้งต้น​เดียวกัน​นี้​ได้ คือ เขียน spec ให้​ชัดเจน​ก่อน แล้ว​ปล่อย​ให้ model implement ตาม​นั้น

แต่ SPDD มอง​จาก​มุม​ที่​ต่าง​ออก​ไป มัน​ปฏิบัติ​ต่อ structured prompt ใน​ฐานะ​สินทรัพย์​ของ​ทีม​ที่​กำกับ​ดูแล​ได้ นำ​กลับ​มา​ใช้​ซ้ำ​ได้ และ​มี version (REASONS + workflow) ซึ่ง​วิวัฒน์​ไป​พร้อม​กับ code — แนวทาง​ที่ Birgitta Böckeler จัด​ว่า​เป็น​แบบ spec-anchored

SPDD เพิ่ม​อะไร​เข้าไป​จาก spec-driven development

SDD และ SPDD มี​จุด​ตั้งต้น​เดียวกัน คือ generate spec ก่อน generate code แต่ SPDD เพิ่ม “วิธีการ” ว่า spec นั้น​ถูก​ผลิต ตรวจทาน และ​คง​ให้ sync กับ code อย่างไร​เข้า​มา​ด้วย

  • prompt คือ​ชิ้น​งาน​ที่​ถูก​ดูแล ไม่ใช่​ของ​ที่ generate ครั้ง​เดียว​แล้ว​ทิ้ง มัน​ผ่าน workflow ที่​นิยาม​ไว้ และ​ยัง​คง​เป็น​บันทึก​ของ “สิ่ง​ที่​ตั้งใจ​จะ​ทำ”
  • จาก requirement สู่ engineering spec REASONS Canvas ไป​ไกล​กว่า​แค่ “ระบบ​ควร​ทำ​อะไร” มัน​เก็บ​แนวทาง​ที่​เลือก​ใช้ โครงสร้าง​ของ​ระบบ บรรทัดฐาน​ทาง​วิศวกรรม และ​มาตรการ​ป้องกัน — เป็นการ​ให้​ขอบเขต​การ implement แก่ LLM ไม่ใช่​แค่​เป้าหมาย
  • sync ไม่ใช่​ส่ง​ต่อ​แล้ว​จบ (sync, not handoff) prompt และ code ยัง​คง sync กัน​อยู่ การ​เปลี่ยนแปลง​ฝั่ง​ใด​ฝั่ง​หนึ่ง​สะท้อน​กลับ​ไป​อีก​ฝั่ง เพื่อ​ให้​เจตนา​และ​การ implement ไม่​เบน​ออก​จาก​กัน
  • การ​ควบคุม​ระดับ​ทีม​ที่​ทำซ้ำ​ได้ ประเด็น​ไม่ใช่ “spec ที่​ละเอียด​ขึ้น” แต่​คือ​วิธี​ที่​สอดคล้อง​กัน​สำหรับ​ให้​ทีม​กำกับ​ดูแล​ผลลัพธ์​ของ AI และ​พก​พา​สิ่ง​ที่​ตัดสิน​ใจ​ไป​แล้ว​ต่อ​ข้าม​รอบ​การ​ทำงาน ส่วน​การ​วิเคราะห์ trade-off ที่​อยู่​เบื้องหลัง​การ​ตัดสิน​ใจ​เหล่า​นั้น​อยู่​ใน​เฟส analysis ส่วน Canvas บันทึก​เฉพาะ “ผลลัพธ์”

เป้าหมาย​ของ workflow SPDD คือ​เปลี่ยน input ทาง​ธุรกิจ → นามธรรม → การ​ลงมือ​ทำ → การ​ตรวจสอบ → การ release ให้​เป็น “วง​รอบ​ปิด” (closed loop) 1 — และ​ทำให้​แน่ใจ​ว่า​สินทรัพย์ prompt กับ code วิวัฒน์​ไป​ด้วย​กัน ไม่ใช่​แยก​กัน​เดิน

flowchart TB
  s1["Step 1 — create initial requirements"]
  s2["Step 2 — clarify analysis"]
  s3["Step 3 — generate analysis context"]
  s4["Step 4 — generate structured prompt"]
  s5["Step 5 — generate code"]
  s6["Step 6 — generate unit tests"]
  s7["integrate, build, and deploy"]
  ac(["analysis context"])
  sp(["Structured Prompts"])
  cd(["Code → git"])
  s1 --> s2 --> s3 --> s4 --> s5 --> s6 --> s7
  s3 -.-> ac -.-> s4
  s4 -.-> sp -.-> s5
  s5 -.-> cd

ภาพ 3 — workflow ของ SPDD ทั้ง​หก​ขั้น ตั้งแต่​สร้าง requirement ตั้งต้น ไป​จนถึง integrate-build-deploy แต่ละ​ขั้น​กลาง​ทาง​ผลิต​ชิ้น​งาน​ที่​ส่ง​ต่อ​ให้​ขั้น​ถัด​ไป — analysis context, Structured Prompts, และ Code (เก็บ​ใน git) โดย Step 4 อาศัย REASONS Canvas เป็น​โครง · ดู​ภาพ​ต้นฉบับ ↗

จุด​มุ่งหมาย​ของ workflow นี้​คือ​ยึด​การ​ทำงาน​ร่วม​กัน​ไว้​ที่​ตัว prompt เพื่อ​ให้​นัก​พัฒนา​และ product owner หลีก​เลี่ยง​การวน​จัด​แนว​ความ​เข้าใจ​ซ้ำ ๆ

prompt ตั้ง​ขอบเขต​ที่​ชัดเจน​ให้​กับ​การ generate code ลด​ความ​สุ่ม​จาก non-determinism ของ LLM และ​ทำให้​กำกับ​ดูแล​ได้​ง่าย​ขึ้น

เมื่อ​ปฏิบัติ​ต่อ structured prompt ใน​ฐานะ​ชิ้น​งาน​ชั้น​หนึ่ง​ใน version control เรา​ก็​เปลี่ยน​วิธี​ปฏิบัติ​ที่​ได้​ผล​ให้​กลาย​เป็น​สินทรัพย์​ที่​นำ​กลับ​มา​ใช้​ซ้ำ​ได้ เพิ่ม​ความ​สอดคล้อง และ​ลด​การ “คิดค้น​ใหม่” โดย​ไม่​จำเป็น

ใน​ทาง​ปฏิบัติ ขั้นตอน​เหล่า​นี้​ดำเนิน​ผ่าน​คำ​สั่ง​ที่ openspdd มี​ให้ ซึ่ง​เป็น​เครื่องมือ command-line ที่ implement workflow SPDD ตาราง​ด้าน​ล่าง​สรุป​แต่ละ​คำ​สั่ง

คำ​สั่งประเภทจุด​ประสงค์
/spdd-storyเสริม (Optional)แตก requirement ก้อน​ใหญ่​ออก​เป็น user story ที่​ส่ง​มอบ​ได้​อย่าง​เป็น​อิสระ ตาม​หลัก INVEST
/spdd-analysisจำเป็น (Core)ดึง domain keyword จาก requirement สแกน code ที่​เกี่ยวข้อง และ​ผลิต​การ​วิเคราะห์​เชิงกลยุทธ์​ที่​ครอบคลุม​แนวคิด​ของ domain ความ​เสี่ยง และ​ทิศทางการ​ออกแบบ
/spdd-reasons-canvasจำเป็น (Core)generate REASONS Canvas ฉบับ​เต็ม — พิมพ์เขียว​ที่​รัน​ได้ ตั้งแต่​เหตุผล​ระดับ​สูง​ลง​ไป​จนถึง operation ระดับ method
/spdd-generateจำเป็น (Core)อ่าน Canvas แล้ว generate code ทีละ task โดย​ทำ​ตาม operation, norm และ safeguard ที่​นิยาม​ไว้​ใน prompt อย่าง​เคร่งครัด
/spdd-api-testเสริม (Optional)generate script ทดสอบ API ที่​ใช้ cURL พร้อม test case แบบ​มี​โครงสร้าง​ครอบคลุม​กรณี​ปกติ กรณี​ขอบ และ​กรณี​ผิดพลาด
/spdd-prompt-updateจำเป็น (Core)อัปเดต Canvas แบบ​เพิ่ม​ที​ละ​ส่วน​เมื่อ requirement เปลี่ยน (requirement → prompt → code)
/spdd-syncจำเป็น (Core)sync การ​เปลี่ยนแปลง​ฝั่ง code (refactor, fix) กลับ​เข้า Canvas เพื่อ​ให้ prompt ยัง​เป็น​บันทึก​ที่​ตรง​กับ code ปัจจุบัน (code → prompt)

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

อย่างไร​ก็ตาม ตัวอย่าง​นี้​เป็น​ตัวอย่าง​แบบ end-to-end ที่​ครบถ้วน ตั้งแต่​การ​สร้าง requirement ตั้งต้น, การ​วิเคราะห์ requirement ทาง​ธุรกิจ, การ generate และ​รีวิว structured prompt, การ​ผลิต​และ​ตรวจสอบ code ไป​จนถึง​การ​เก็บกวาด​และ​ทดสอบ​ขั้น​สุดท้าย

คุณ​สามารถ​ทำ​ตาม​ตัวอย่าง​นี้​ไป​ด้วย​ได้ โดย​ติดตั้ง openspdd ใน​สภาพ​แวดล้อม​ของ​คุณ​เอง

ระบบ​ปัจจุบัน​เป็น billing engine แบบ​เรียบ​ง่าย​ที่​คำนวณ​บิล​ค่า​ใช้งาน large-language model มัน​รับ record ที่​บันทึก​ว่า​ใช้ token ไป​กี่​ตัว​ใน1 session แล้ว​คำนวณ​เป็น​บิล

codebase ฉบับ​เต็ม​ของ version ตั้งต้น​นี้​ดู​ได้​บน GitHub repository นี้​รวม user story ของ requirement ตั้งต้น และ ชิ้น​งาน SPDD ทั้งหมด ที่​ใช้ generate มัน​ขึ้น​มา

เพื่อ​ความ​กระชับ เรา​จะ​ไม่​อธิบาย​การ generate ตั้งต้น​ใน​ที่​นี้ แต่​มัน​ก็​ทำ​ตาม​ขั้นตอน​เดียว​กับ​การ​ยก​ระดับ​โดย​พื้นฐาน เรา​เลือก​อธิบาย​การ​ยก​ระดับ​เพราะ​งาน​ส่วน​ใหญ่​บน​ระบบ​หนึ่ง ๆ ล้วน​เป็นการ​ยก​ระดับ

ด้วย​ความ​ต้องการ​ทาง​ธุรกิจ​ที่​เปลี่ยน​ไป​และ feedback ตรง​จาก​ผู้​ใช้ เรา​กำลัง​ยก​ระดับ billing engine ให้​เปลี่ยน​จาก model การ​ตั้ง​ราคา​แบบ​ตายตัว (static pricing) ไป​สู่​โครงสร้าง​ที่​ซับซ้อน​และ​ยืดหยุ่น​กว่า

การ​อัปเดต​นี้​มุ่ง​รองรับ​กลยุทธ์​การ​สมัคร​สมาชิก (subscription) ที่​หลากหลาย และ​การ​ตั้ง​ราคา​แบบ​แปรผัน​ตาม model ผ่าน​การ​เปลี่ยนแปลง​สำคัญ​ต่อ​ไป​นี้:

  • ยก​ระดับ API: อัปเดต endpoint POST /api/usage เดิม​ให้​รับ parameter modelId ตัว​ใหม่​ที่​จำเป็น​ต้อง​มี (เช่น “fast-model”, “reasoning-model”)
  • การ​ตั้ง​ราคา​ตาม model (model-aware pricing): เปลี่ยน​จาก​เรต​เดียว​ทั้ง​ระบบ​ไป​สู่​การ​ตั้ง​ราคา​แบบ​ไดนามิก โดย​ค่า​ใช้​จ่าย​จะ​แปรผัน​ตาม model AI ที่​ถูก​เรียก​ใช้
  • ตรรกะ​การ​คิด​บิล​แบบ​หลาย​แพลน (multi-plan billing): เพิ่ม​พฤติกรรมการ​คิด​บิล​ที่​แตก​ต่าง​กัน​ตาม​ระดับ​การ​สมัคร​สมาชิก​ของ​ลูกค้า:
    • แพลน Standard (ปรับ​ให้​เหมาะสม): ยัง​คง​โควตา​ราย​เดือน​แบบ​รวม (global monthly quota) ไว้ แต่​การ​ใช้งาน​ส่วนเกิน (overage) ตอน​นี้​คิด​ด้วย​เรต​เฉพาะ​ของ​แต่ละ model
    • แพลน Premium (ใหม่): ทำงาน​โดย​ไม่มี​ขีด​จำกัด​โควตา มี split billing คือ prompt token และ completion token ถูก​คิด​เงิน​แยก​กัน​ด้วย​เรต​ที่​ต่าง​กัน​ตาม model ที่​ใช้
  • ความ​สามารถ​ใน​การ​ขยาย​เชิง​สถาปัตยกรรม: implement design pattern ที่​ขยาย​ได้ (เช่น Strategy หรือ Factory) เพื่อ​แยก​สูตร​การ​คำนวณ​ของ​แต่ละ​แพลน​ออก​จาก​กัน​อย่าง​สะอาด ทำให้​ระบบ​รองรับ model การ​ตั้ง​ราคา​ใหม่ ๆ ใน​อนาคต​ได้​ง่าย

เนื่องจาก​ส่วน​ใหม่​นี้​ครอบคลุม​ทั้ง requirement ทาง​ธุรกิจ​และ​รายละเอียด​เชิง​เทคนิค โดย​ทั่วไป​มัน​จึง​ถูก​ทำให้​เสร็จ​ร่วม​กัน​ผ่าน session การ pairing ระหว่าง PO (หรือ BA) กับ​นัก​พัฒนา

เพื่อ​เริ่ม​กระบวนการ​อย่าง​รวดเร็ว เรา​ใช้​คำ​สั่ง /spdd-story 2 generate user story จาก​โจทย์​การ​ยก​ระดับ​ได้​โดยตรง

โดย​ทั่วไป user story มา​จาก PO หรือ BA แต่​ใน workflow ของ​เรา เรา​สามารถ​แปลง story รูปแบบ​ใด​ก็ได้​ให้​อยู่​ใน​รูปแบบ​และ​มิติ​ที่​สอดคล้อง​กัน ตราบ​ใด​ที่​มี​การ​จัด​แนวร่วม​กัน​บน acceptance criteria สุดท้าย ขั้น​นี้​จะ​ทำ​โดย PO, BA หรือ​นัก​พัฒนา​ก็ได้ ขึ้น​อยู่​กับ​การ​แบ่ง​งาน​ที่​ยืดหยุ่น​ของ​ทีม

`/spdd-story` ทำงาน​อย่างไร

คำ​สั่ง​นี้​แตก requirement ก้อน​ใหญ่​ออก​เป็น user story ที่​ส่ง​มอบ​ได้​อย่าง​เป็น​อิสระ​ตาม​หลัก INVEST (งาน​ละ 1–5 วัน) แต่ละ story มี acceptance criteria เขียน​ด้วย​ภาษา​ธุรกิจ พร้อม​ใช้​เป็น input ให้ /spdd-analysis

จุด​ประสงค์​ของ​มัน​คือ​ทำให้ requirement ก้อน​ใหญ่​จัดการ​ได้ และ​รับประกัน​รูปแบบ​ที่​เป็น​มาตรฐาน​และ​คาด​เดา​ได้​สำหรับ​ขั้น​ถัด​ไป

คำ​สั่ง:

/spdd-story @idea-of-the-enhancement.md

AI วิเคราะห์​คำ​อธิบาย​โจทย์​การ​ยก​ระดับ​และ​แตกมัน​ออก​เป็น user story สอง​อัน:

story ที่ generate ออก​มา​อัตโนมัติ​นั้น​ละเอียด​พอที่​จะ​ใช้​เป็น​ฐาน​สำหรับ project จริง​ได้ แต่​สำหรับ​การ​เดิน​ตาม​ตัวอย่าง​นี้ เรา​รวบ​มัน​เป็น story เดียว​ที่​ย่อ​ให้​ง่าย​ลง เพื่อ​ให้​ตัวอย่าง​อยู่​ได้​ใน​ตัวเอง

คำ​สั่ง:

รวม2 user story ต่อไปนี้ให้เป็น story เดียวที่ย่อให้ง่ายลง:
@[User-story-1-1-initial]Multi-Plan-Billing-Foundation-&-Standard-Plan-Model-Aware-Pricing.md
@[User-story-1-2-initial]Premium-Plan-Split-Rate-Billing.md
ข้อกำหนด:
1. รวมทั้งสองแพลน (Standard และ Premium) เป็น story เดียวที่ลื่นไหล
2. คงไว้เฉพาะส่วน: Background, Business Value, Scope In, Scope Out และ Acceptance Criteria
3. ตัดรายละเอียดระดับการ implement ออก — เน้นว่าระบบควรทำอะไร ไม่ใช่ทำอย่างไร
4. Acceptance Criteria ต้องใช้รูปแบบ Given/When/Then พร้อมตัวอย่างตัวเลขที่เป็นรูปธรรม
5. คงผลลัพธ์ให้กระชับ — ไม่เกินหนึ่งหน้า
6. เก็บไว้เพียง3 AC ระดับสูง

คำ​สั่ง​ทำนอง​นี้​แทบ​ไม่​เคย​ให้​ข้อความ​เหมือนกันเป๊ะ​ทุก​ครั้ง​ที่​รัน — ตัว model และ​การ​สุ่ม (sampling) ทำให้​เกิด​ความ​ต่าง​เล็กน้อย — เรา​จึง​ยัง​คาด​หวัง​ว่า​จะ​ต้อง​รีวิว​และ​ปรับ​ผลลัพธ์​ก่อน​ถือว่า​เป็น​ฉบับ​สุดท้าย story รวม​ด้าน​ล่าง​คือ version ที่​เรา​ขัดเกลา​มา​เพื่อ​บทความ​นี้ ซึ่ง​เป็นการ​รวบ2 story ตั้งต้น​ให้​ง่าย​ลง​โดย​ตั้งใจ

📄 User Story รวม (ฉบับ​ย่อ)

Background

เมื่อ platform LLM API ของ​เรา​ขยาย​ขนาด​ขึ้น model การ​ตั้ง​ราคา​แบบ​เดียว​ไม่​เพียงพอ​อีก​ต่อ​ไป เรา​ต้อง refactor billing engine ที่​มี​อยู่​ให้​รองรับ​กลยุทธ์ subscription ที่​ต่าง​กัน และ​การ​ตั้ง​ราคา​แบบ​แปรผัน​ตาม model AI ที่​ถูก​เรียก​ใช้ เพื่อ​วาง​รากฐาน​สำหรับ​แพลน​คิด​บิล​ที่​ซับซ้อน​ขึ้น​ใน​อนาคต

Business Value

  • Flexible Monetization: รองรับ​กลยุทธ์​การ​คิด​บิล​ที่​หลากหลาย (Standard, Premium) เพื่อ​จับ​ตลาด​หลาย​กลุ่ม
  • Model-Aware Pricing: คิด​เรต​ต่าง​กัน​ตาม model AI ที่​ใช้
  • Architecture Scalability: implement design ที่​ขยาย​ได้ (เช่น Strategy Pattern) เพื่อ​แยก​ตรรกะ​การ​คำนวณ​และ​เพิ่ม model การ​ตั้ง​ราคา​ใน​อนาคต​ได้​ง่าย

Scope In

  • ยก​ระดับ endpoint POST /api/usage ที่​มี​อยู่
  • field ใหม่​ใน request: เพิ่ม modelId (จำเป็น, string, เช่น “fast-model”, “reasoning-model”)
  • implement กลไก routing (Strategy/Factory Pattern) เพื่อ​จัดการ​สูตร​การ​คำนวณ​ที่​ต่าง​กัน
  • implement Plan Type สอง​แบบ​แรก:
    • Standard Plan (refactor ของ​เดิม): มี​โควตา​ราย​เดือน​แบบ​รวม เรต overage ตอน​นี้​ขึ้น​กับ modelId
    • Premium Plan (ใหม่): ไม่มี​โควตา prompt token และ completion token คิด​เงิน​แยก​กัน และ​เรต​ต่าง​กัน​ตาม modelId

Scope Out

  • ตรรกะ​ส่วนลด​แบบ​ขั้น​บันได/ตาม​ปริมาณ​ที่​ซับซ้อน (เลื่อน​ไป Phase 2)
  • การ​สร้าง​และ​กำหนด​แพลน subscription (CRUD)
  • การ​ออก invoice

Acceptance Criteria (ACs)

  • Base Validations (ทั้ง​ของ​เดิม​และ​ของ​ใหม่)
    • Given request ที่​ไม่​ถูกต้อง (เช่น ขาด modelId, token ติดลบ)
    • When backend ตรวจสอบ request
    • Then คืน HTTP 400 พร้อม​ข้อความ error ที่​เหมาะสม
  • Standard Plan พร้อม overage ตาม model
    • Given ลูกค้า “Standard” ที่​มี​โควตา 100,000 ต่อ​เดือน ใช้​ไป​แล้ว 90,000 และ​เรต overage ของ “fast-model” คือ $0.01/1K
    • When ส่ง 30,000 token สำหรับ “fast-model”
    • Then บิล​แสดง: 10,000 จาก​โควตา, 20,000 ส่วนเกิน, คิด​เงิน $0.20
  • Premium Plan พร้อม​เรต​แยก
    • Given ลูกค้า “Premium” สำหรับ “reasoning-model” เรต Prompt คือ $0.03/1K, Completion คือ $0.06/1K
    • When ส่ง 10,000 prompt token และ 20,000 completion token สำหรับ “reasoning-model”
    • Then บิล​แสดง: 0 จาก​โควตา, ค่า prompt $0.30, ค่า completion $1.20, รวม $1.50

ก่อน​กระโดด​เข้า​สู่​การ implement นัก​พัฒนา​จะ​รีวิว user story เพื่อ​สร้าง​ความ​เข้าใจ​ร่วม​กัน​ว่า​มัน​หมายความ​ว่า​อย่างไร​ใน​ทาง​ปฏิบัติ ถ้า​มี​ประเด็น​ระดับ​ธุรกิจ​ที่​ชัดเจน นี่​คือ​จุด​ที่​จะ​จัด​แนว​กับ BA หรือ PO

ใน​กรณี​นี้ story ชัดเจน​พอ​อยู่​แล้ว เรา​จึง​เดิน​หน้า​แตกมัน​ออก​ตาม​สาม​มิติ ได้แก่ ตรรกะ​แกน​กลาง (core logic), ขอบเขต (scope boundaries) และ​นิยาม​ของ​คำ​ว่า​เสร็จ (definition of done)

ตรรกะ​แกน​กลาง — field ใหม่​ที่​จำเป็น​บน API หนึ่ง​ตัว​คือ modelId ลูกค้า​จะ​บอก​เรา​ว่า​ใช้ model AI ตัว​ไหน ซึ่ง​เป็น​กุญแจ​ไข​ไป​สู่​ราคา​ที่​ถูกต้อง

  • Standard Plan: ลูกค้า​มี​โควตา token ราย​เดือน ใช้​ภายใน​โควตา​ไม่​คิด​เงิน ส่วนเกิน (overage) คิด​ด้วย​เรต​เฉพาะ model (เช่น fast-model $0.01/1K เทียบ​กับ reasoning-model $0.03/1K) ตรรกะ​โควตา​เดิม​คง​ไว้ เปลี่ยน​เฉพาะ​การ lookup เรต
  • Premium Plan: ไม่มี​โควตา ทุก token คิด​เงิน​ตั้งแต่​ตัว​แรก prompt token และ completion token คิด​แยก​กัน แต่ละ​อย่างด้วยเรต​เฉพาะ model บิล = ค่า prompt + ค่า completion แพลน​นี้​เป็น​ของ​ใหม่​ทั้งหมด
  • Routing: ระบบ​ดู​ว่า​ลูกค้า​อยู่​แพลน​ไหน​แล้ว​ส่ง​ต่อ​ไป​ยัง​สูตร​คิด​บิล​ที่​ตรง​กัน design ต้อง​ขยาย​ง่าย เพราะ​แพลน Enterprise (Story 2) เป็น​ลำดับ​ถัด​ไป

ขอบเขต — เรา​คำนวณ​เฉพาะ​บิล​ปัจจุบัน​เท่านั้น เรา​ไม่​ได้​สร้าง CRUD ลูกค้า, ไม่​ได้ query บิล​ย้อนหลัง, ไม่​ได้​จัดการ subscription และ​ไม่​ได้​เพิ่ม/ลบ model

นิยาม​ของ​คำ​ว่า​เสร็จ — ฉาก​ทัศน์​ต่อ​ไป​นี้​เรียบเรียง acceptance criteria ของ story ใหม่​ด้วย​รายละเอียด​การ implement ที่​ทีม​ต้อง​ตรวจสอบ ข้อ​ที่​สี่ (รูปแบบ response) ไม่ใช่ AC ทาง​ธุรกิจ​อัน​ใหม่ แต่​เป็น​สัญญา​เชิง​ไม่​เป็น function (non-functional contract) ที่​นัก​พัฒนา​เพิ่ม​เข้า​มา​เพื่อ​ให้​เกณฑ์​ทดสอบ​ได้​แบบ end-to-end

  • Validation: ขาด modelId → HTTP 400; ลูกค้า​ไม่รู้จัก → HTTP 404; token ติดลบ → HTTP 400; validation เดิม​ทั้งหมด​ยัง​คง​อยู่​ครบ
  • การ​คิด​บิล​แพลน Standard: ลูกค้า​ที่​มี​โควตา 100K ใช้​ไป​แล้ว 90K ส่ง 30K token สำหรับ fast-model ($0.01/1K) ผล​ที่​คาด​หวัง: 10K ครอบคลุม​ด้วย​โควตา, 20K ส่วนเกิน, คิด​เงิน $0.20 — request เดียวกัน​กับ reasoning-model ($0.03/1K) ได้ $0.60 (ตรรกะ​โควตา​เดียวกัน แต่​เรต​ต่าง​กัน)
  • การ​คิด​บิล​แพลน Premium: ลูกค้า​ส่ง 10K prompt token + 20K completion token สำหรับ reasoning-model (prompt $0.03/1K, completion $0.06/1K) ผล​ที่​คาด​หวัง: $0.30 + $1.20 = $1.50 ไม่มี​โควตา ไม่มี overage — prompt และ completion คิด​แยก​กัน
  • รูปแบบ response: HTTP 201 คืน bill ID, customer ID, จำนวน token, timestamp, modelId และ​รายละเอียด​การ​คิด​เงิน​ที่​เหมาะ​กับ​แพลน

ถ้า​ฉาก​ทัศน์​เหล่า​นี้​ผ่าน​ทั้งหมด แปล​ว่า​เรา​พิชิต story นี้​ได้​แล้ว

เมื่อ requirement และ​ขอบเขต​ชัดเจน​แล้ว เรา​ใช้​คำ​สั่ง /spdd-analysis โดย​ป้อน requirement ทาง​ธุรกิจ​เข้าไป เพื่อ​สั่ง​ให้ AI generate context การ​วิเคราะห์​ที่​ครอบคลุม

`/spdd-analysis` ทำงาน​อย่างไร

คำ​สั่ง​นี้​ดึง domain keyword จาก requirement ทาง​ธุรกิจ (เช่น “billing”, “quota”, “plan”) แล้ว​ใช้​มัน​สแกน​เฉพาะ​ส่วน​ของ codebase ที่​เกี่ยวข้อง ไม่ใช่​ทั้งหมด มัน​ระบุ​แนวคิด​ที่​มี​อยู่​เดิม แนวคิด​ใหม่ กฎ​ทาง​ธุรกิจ​หลัก และ​ความ​เสี่ยง​ทาง​เทคนิค

ผลลัพธ์​เป็น​เอกสาร​ที่​อุดม​ไป​ด้วย context ครอบคลุม​การ​รู้​จำ​แนวคิด​ของ domain ทิศทาง​เชิงกลยุทธ์ และ​การ​วิเคราะห์​ความ​เสี่ยง มัน​เป็น input สำหรับ​ขั้น​ถัด​ไป คือ​การ generate REASONS Canvas

คำ​สั่ง:

/spdd-analysis @[User-story-1]Multi-Plan-Billing-Foundation-&-Model-Aware-Pricing.md

ชิ้น​งาน​ที่​ได้: เอกสาร analysis context ตั้งต้น

คำ​สั่ง​นี้​ผลิต​การ​วิเคราะห์​ระดับ​กลยุทธ์​ที่​ตั้ง​อยู่​บน​การ​สำรวจ codebase จริง ผลลัพธ์​มุ่ง​ไป​ที่ “อะไร” และ “ทำไม” ทั้งหมด โดย​ตั้งใจ​หลีก​เลี่ยง​รายละเอียด​การ implement แบบ​ละเอียด​ใน​ขั้น​นี้ โดย​ทั่วไป​จะ​ครอบคลุม:

  • แนวคิด​ของ domain: ของ​เดิม​เทียบ​กับ​ของ​ใหม่, ความ​สัมพันธ์, กฎ​ทาง​ธุรกิจ
  • แนวทาง​เชิงกลยุทธ์: ทิศทางการ​แก้​ปัญหา, การ​ตัดสิน​ใจ​ด้าน​การ​ออกแบบ, trade-off
  • ความ​เสี่ยง​และ​ช่อง​โหว่: ความ​กำกวม, กรณี​ขอบ, ความ​เสี่ยง​ทาง​เทคนิค, ความ​ครอบคลุม​ของ acceptance criteria

รีวิว​และ​ขัดเกลา analysis context — เรา​ใช้​ความ​เข้าใจ requirement ทาง​ธุรกิจ​ของ​เรา​เอง​มา​รีวิว​เอกสาร​ที่ generate ออก​มา โดย​โฟกัส​ที่​จุด​ที่​ทักษะ alignment เน้น​ย้ำ การ​รีวิว​นี้​มี​สอง​จุด​ประสงค์ คือ​ยืนยัน​ว่า​ความ​เข้าใจ​ของ​เรา​ตรง​กับ​การ​ตีความ​ของ AI และ​ค้น​พบ​กรณี​ขอบ​หรือ​ฉาก​ทัศน์​ที่ AI อาจ​เผย​ให้​เห็น​ทั้ง​ที่​เรา​คิด​ไม่​ถึง ใน​กรณี​นี้ การ​รีวิว​โฟกัส​ที่​หลาย​จุด​สำคัญ:

  • Strategy Pattern ถูก​พิจารณา​อย่าง​เหมาะสม​หรือ​ไม่
  • การ​ยึด​ตาม​หลัก OOP ที่​ระบบ​เดิม​วาง​ไว้ โดย​เฉพาะ ISP และ SRP
  • ความ​สม​เหตุ​สม​ผล​ของ​กลยุทธ์​ที่​เสนอ​สำหรับ​การ​เพิ่ม field ใหม่
  • ระบุ​กรณี​ขอบ​ที่​ก่อนหน้า​นี้​คาด​ไม่​ถึง
  • เปิดเผย​ความ​เสี่ยง​ทาง​เทคนิค​ที่​อาจ​เกิด​ขึ้น

เมื่อ​รีวิว​เสร็จ การ​วิเคราะห์​ของ AI ส่วน​ใหญ่​ตรง​กับ​เจตนา​เชิง​สถาปัตยกรรม​ของ​เรา ที่​จริง​ใน​บาง​จุด​ข้อ​พิจารณา​ของ​มัน​ครอบคลุม​ยิ่ง​กว่า​ของ​เรา​เสีย​อีก

📷 ภาพ 4 — รีวิว analysis context ของ Step 3: กรณี​ขอบ​และ​ความ​เสี่ยง​ที่​ดึง​มา​จาก​เอกสาร analysis · ดู​ภาพ​หน้า​จอ​ต้นฉบับ ↗

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

อย่างไร​ก็ตาม นั่น​ไม่​เป็นไร​เลย ทิศทาง​โดย​รวม​จัด​แนว​กัน​แล้ว เรา​เดิน​หน้า​ไป​สู่​ขั้น​ถัด​ไป​ได้ คือ​สังเกต​ว่า AI “จำลอง” รายละเอียด​การ implement ที่​เป็น​รูปธรรม​ภายใน​กรอบ​และ context ที่​เรา​ตั้ง​ไว้​อย่างไร

เมื่อ​มี​รายละเอียด​ที่​จับ​ต้อง​ได้​เหล่า​นี้​แล้ว เรา​จึง​ค้น​พบ​ปัญหา​ที่​ลึก​และ​ซ่อน​อยู่ และ​ตัดสิน​ใจ trade-off บน​สถานการณ์​จริง​ได้ — รับ​เอา​แนวทาง​ที่​ประโยชน์​มากกว่า​ข้อ​เสีย และ​ทิ้ง​ส่วน​ที่​เหลือ

การ​ตัดสิน​ใจ: ยอมรับ​การ​วิเคราะห์​ตาม​ที่​เป็น​และ​เดิน​หน้า​ต่อ

`/spdd-reasons-canvas` ทำงาน​อย่างไร

คำ​สั่ง​นี้​อ่าน context ทาง​ธุรกิจ (ผลลัพธ์​ของ /spdd-analysis หรือ​คำ​อธิบาย requirement โดยตรง) แล้ว​ผสม​กับ​สถานะ​ปัจจุบัน​ของ codebase จาก​นั้น generate specification ด้าน​การ​ออกแบบ​ครบ​ทั้ง​เจ็ด​มิติ​ของ REASONS — ตั้งแต่ “ทำไม​เรา​ถึง​ทำ​สิ่ง​นี้” ไป​จนถึง “อะไร​ที่​เรา​ต้อง​ไม่​ทำ”

ผลลัพธ์​เป็น​พิมพ์เขียว​ที่​รัน​ได้ (executable blueprint) ส่วน Operations แม่นยำ​ลง​ไป​ถึง method signature, ชนิด​ของ parameter และ​ลำดับ​ขั้น​การ​ทำงาน

คำ​สั่ง:

/spdd-reasons-canvas @GGQPA-001-202603191100-[Analysis]-multi-plan-billing-model-aware-pricing.md

ชิ้น​งาน​ที่​ได้: structured prompt ตั้งต้น

มา​ถึง​จุด​นี้ เรา​ผ่าน​กลยุทธ์​ระดับ​สูง​ใน​เฟส analysis มา​แล้ว ดังนั้น​เวลา​รีวิว structured prompt เรา​จึง​ไม่​ได้​เริ่ม​จาก​ศูนย์ แต่​กำลัง​พิจารณา​ว่า AI แปล​ความ​เข้าใจ​ร่วม​ของ​เรา​ไป​สู่​โครงสร้าง REASONS Canvas ได้​อย่างไร ตั้งแต่​กลยุทธ์ ไป​สู่​นามธรรม ไป​สู่​รายละเอียด​ที่​เป็น​รูปธรรม

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

นี่​คือ​การ​จัด​แนว​เจตนา​ใน​ระดับ​ที่​ลึก​ขึ้น — ทำให้​แน่ใจ​ว่า​ก่อน​จะ generate code ใด ๆ AI ได้ “จำลอง” ทั้ง​ทาง​แก้​ปัญหา​ภายใน​กรอบ​ที่​เรา​นิยาม​ไว้​แล้ว​อย่าง​ได้​ผล เรา​ได้​รีวิว​จาก​มุมมอง​ภาพ​รวม แทนที่​จะ​หลง​อยู่​กับ​รายละเอียด​ตั้งแต่​ต้น

ถ้า structured prompt ต้อง​แก้ไข​ล่ะ?

เรา​ไม่​เคย​แก้ file structured prompt ด้วย​มือ แต่​จะ​คง​บทสนทนา​แบบวน​ซ้ำ​ของ SPDD ไว้​แทน:

  • ระบุ​ช่อง​โหว่: มอง​หา​องค์​ประกอบ​ที่​ขาด (เช่น หลัก OO ที่​หาย​ไป หรือ​กฎ​ทาง​ธุรกิจ​ที่​เข้าใจ​ผิด)
  • ป้อน prompt ใหม่: ป้อน​เจตนา​ที่​ขาด​ไป​ให้ AI โดยตรง​ผ่าน interface แบบ​สนทนา
  • AI อัปเดต file: AI ประมวล​เจตนา​ใหม่ และ​ขัดเกลา​เฉพาะ​ส่วน​ของ structured prompt ที่​ต้อง​เปลี่ยน

เรา​จะ​เห็น​ตัวอย่าง​ที่​เป็น​รูปธรรม​ที​ละ​ขั้น​ของ workflow “อัปเดต prompt ก่อน” นี้​ใน​ภายหลัง ตอน​ที่​เรา​แก้ prompt เพื่อ​แก้​ความ​ไม่​ตรง​กัน​ของ​ตรรกะ​ทาง​ธุรกิจ ก่อน​ที่​จะ​แตะ code ใด ๆ

โฟกัส​การ​รีวิว​ที่​จุด​ที่​ทักษะ abstraction-first เน้น​ย้ำ ใน​กรณี​นี้ context พื้นฐาน​นี้​ฝัง​อยู่​ใน codebase และ structured prompt ก่อนหน้า​อยู่​แล้ว ดังนั้น​เมื่อ generate structured prompt สำหรับ iteration นี้ AI จึง​คำนึง​ถึง​แนวทาง​เชิง​สถาปัตยกรรม​และ​หลัก OO เหล่า​นี้​โดย​ธรรมชาติ

ผล​ก็​คือ แม้​เนื้อหา​ที่ generate ออก​มา​จะ​ซับซ้อน​สูง แต่​ก็​มี​ปัญหา​ใหญ่​อยู่​น้อย​อย่าง​น่า​ทึ่ง เรา​เลือก​ที่​จะ​เดิน​หน้า generate code ด้วย structured prompt นี้​ก่อน แล้ว​ค่อย​ทำการ​รีวิว​ที่​ลึก​ขึ้น​ภายหลัง​เพื่อ​หาความ​ผิด​ปกติ​ระดับ code

มา​ถึง​ตอน​นี้ เรา​บรรลุ​ฉันทา​มติ​อย่าง​หนักแน่น​ใน​ระดับ​เจตนา​แล้ว ทั้ง​ปัญหา​แกน​กลาง​และ​เส้น​ทางการ​แก้ไข แม้​อาจ​มี​รายละเอียด​ตกหล่น​เล็กน้อย แต่​นั่น​ไม่ใช่​เรื่อง​น่า​กังวล การ​ได้​จัด​แนว​ขอบเขต​โดย​รวม​กับ AI ทำให้การ​ปรับ​แต่ง​ระดับ​ท้องถิ่น​ควบคุม​ได้​มาก ตอน​นี้​เรา​จึง​เปลี่ยน​เข้า​สู่​เฟส​การ generate code

ขั้น​นี้​มี​รายละเอียด​มากกว่า เพราะ​เรา​กำลัง generate code ของ​ผลิตภัณฑ์ ทดสอบ และ​การ​รีวิว​ของ​เรา​มี​ผลลัพธ์​ที่​เป็น​ไป​ได้​สอง​ทาง

generate code ผลิตภัณฑ์ — เมื่อ structured prompt ของ​เรา​นิ่ง​แล้ว ก็​ใช้​มัน generate code ผลิตภัณฑ์

`/spdd-generate` ทำงาน​อย่างไร

คำ​สั่ง​นี้​อ่าน REASONS Canvas แล้ว generate code ทีละ task ตาม​ลำดับ​ที่​นิยาม​ไว้​ใน Operations มัน​ยึด​ตาม coding standard ใน Norms และ​ข้อ​จำกัด​ใน Safeguards อย่าง​เคร่งครัด — ไม่​ด้น​สด ไม่​เพิ่ม feature เกิน​กว่า​ที่ spec นิยาม​ไว้

หลักการ​แกน​กลาง: prompt เก็บ​เจตนา ส่วน code คือ​การ implement เจตนา​นั้น code ที่ generate ต้อง​สอดคล้อง​แบบ 1:1 กับ specification นี้

คำ​สั่ง:

/spdd-generate @GGQPA-001-202603191105-[Feat]-multi-plan-billing-model-aware-pricing.md

ชิ้น​งาน​ที่​ได้: code ที่ generate จาก structured prompt

ด้วย​การ​อนุมาน​เชิง​ตรรกะ​หลาย​รอบ​ที่​เรา​ทำ​ไว้​ก่อนหน้า​ด้วย structured prompt เรา​เข้า​สู่​การ​รีวิว code ด้วย​โฟกัส​และ​ลำดับ​ความ​สำคัญ​ที่​ชัดเจน:

  • สถาปัตยกรรม: code ทำ​ตาม​สถาปัตยกรรม 3 ชั้น (3-tier) ที่​เรา​คาด​หวัง​อย่าง​เคร่งครัด​หรือ​ไม่
  • ตรรกะ​ทาง​ธุรกิจ: การ implement ใน​ชั้น Service ตรง​กับ​เจตนา​ตั้งต้น​ของ​เรา​อย่าง​สมบูรณ์​หรือ​ไม่
  • ขอบเขต​ของ​การ​เปลี่ยนแปลง: การ​แก้ไข​ถูก​จำกัด​อยู่​ใน​ขอบเขต​ที่ structured prompt นิยาม​ไว้​อย่าง​เคร่งครัด​หรือ​ไม่ มี​การ​เปลี่ยนแปลง​ที่​ไม่​เกี่ยวข้อง​หรือ scope creep หรือ​เปล่า

ใน​กรณี​นี้ ด้วย context ที่​แม่นยำ​สูง code ที่ generate ออก​มา​ส่วน​ใหญ่​ตรง​ตาม​ที่​เรา​คาด​หวัง ยกเว้น “magic number” ไม่​กี่​ตัว เรา​จะ​ปรับ​มัน​ออก​เมื่อ​การ​ตรวจสอบ function เสร็จสิ้น

ประเด็น​สำคัญ​ตรง​นี้​คือ: อย่า​กังวล​ที่​จะ​ทำ​ผิด และ​อย่า​เครียด​ที่​จับ​รายละเอียด​ได้​ไม่​ครบ​ทุก​จุด​อย่าง​สมบูรณ์​ใน​ครั้ง​แรก ตราบ​ใด​ที่​เรา​ยัง​วน​ซ้ำ​และ​เดิน​หน้า​ผ่าน workflow SPDD ต่อ​ไป ก็​ยัง​มี​โอกาส​แก้​ทาง​อีก​มาก code smell เล็กน้อย​ปล่อย​ไว้​ก่อน​ได้ — เรา​ตรวจสอบ function แกน​กลาง​ก่อน แล้ว​ค่อย​วน​กลับ​มา​ปรับ​ให้​เหมาะสม

ตรวจสอบ feature — ระหว่าง​การ​ตรวจสอบ feature workflow SPDD มี​คำ​สั่ง /spdd-api-test สำหรับ generate script ทดสอบ function 3

`/spdd-api-test` ทำงาน​อย่างไร

คำ​สั่ง​นี้​ดึง​ข้อมูล endpoint ของ API จาก​การ implement หรือ​จาก acceptance criteria แล้ว generate script ทดสอบ​ที่​ใช้ cURL script มี​ตาราง​สรุป test case แบบ​มี​โครงสร้าง​ครอบคลุม​กรณี​ปกติ กรณี​ขอบ และ​กรณี​ผิดพลาด เมื่อ​รัน มัน​จะ​แสดง​ผล​การ​เปรียบเทียบ “คาด​หวัง​เทียบ​กับ​จริง”

คำ​สั่ง:

/spdd-api-test

ชิ้น​งาน​ที่​ได้: script ทดสอบ API

ด้วย​กฎ​ที่​นิยาม​ไว้​ใน​คำ​สั่ง AI จึง generate script ที่​สร้าง​ฉาก​ทัศน์​ทดสอบ​ที่​ต้องการ​ด้วย​คำ​สั่ง curl เรา​สามารถ​รีวิว​ฉาก​ทัศน์​ที่ AI generate ได้​ใน​ส่วน “TEST CASE OVERVIEW” ของ script

📷 ภาพ 5 — script ทดสอบ API ที่ generate ขึ้น: ฉาก​ทัศน์​ทดสอบ​ที่ AI สร้าง​ด้วย​คำ​สั่ง curl · ดู​ภาพ​หน้า​จอ​ต้นฉบับ ↗

การ​รัน: เมื่อ generate script เสร็จ​แล้ว ก็​รัน​มัน:

Terminal window
sh scripts/test-api.sh

ผลลัพธ์: การ​ทดสอบ function ทั้งหมด​ผ่าน​เรียบร้อย

📷 ภาพ 6 — ผล​การ​ทดสอบ API: การ​ทดสอบ function ทั้งหมด​ผ่าน · ดู​ภาพ​หน้า​จอ​ต้นฉบับ ↗

รีวิว code และ​ปรับ​ขั้น​สุดท้าย — ด้วย​การ​จัด​แนว​เจตนา​อย่าง​เข้มงวด​ใน​ขั้น​แรก ๆ งาน​หนัก​ก็​เสร็จ​ไป​แล้ว ใน​ขั้น​นี้ ปัญหา​ที่​เหลือ​มัก​เป็น​ความคลาดเคลื่อน​ของ​ตรรกะ​เล็กน้อย หรือ code smell ระดับ​ผิวเผิน

เพื่อ​รักษา​ความ​แม่นยำ​ใน​วิธี​ปฏิบัติ​ทาง​วิศวกรรม เรา​จัด​ประเภท​การ​ปรับ​ขั้น​สุดท้าย​เหล่า​นี้​ออก​เป็น​สอง​ชนิด​ที่​แตก​ต่าง​กัน โดย​อิง​ว่า​มัน​เปลี่ยน​พฤติกรรม​ที่​สังเกต​ได้​ของ​ระบบ​หรือ​ไม่ และ​จัดการ​แต่ละ​ชนิด​ด้วย​กลยุทธ์​ที่​ต่าง​กัน​ภายใน workflow SPDD

flowchart LR
  ev{"evaluate review"}
  ev -->|"logic correction"| up["update prompt"]
  up --> rg["regenerate code"]
  ev -->|"refactoring"| uc["update code"]
  uc --> sy["sync prompts"]

ภาพ 7 — สอง​ทาง​ตอบ​สนอง​ต่อ​การ​เปลี่ยนแปลง​จาก​การ​รีวิว code: ถ้า​เป็น logic correction (เปลี่ยน​พฤติกรรม) ให้​แก้ prompt ก่อน​แล้ว​ค่อย regenerate code (prompt → code) ส่วน​ถ้า​เป็น refactoring (ไม่​เปลี่ยน​พฤติกรรม) ให้​แก้ code ก่อน​แล้ว sync กลับ​เข้า prompt (code → prompt) · ดู​ภาพ​ต้นฉบับ ↗

กลยุทธ์: แก้ prompt ก่อน แล้ว​ค่อย generate code สำหรับ​ประเด็น​ที่​เกี่ยว​กับ​กฎ​ทาง​ธุรกิจ​หรือ​ตรรกะ​ที่​ไม่​ตรง​กัน (ซึ่ง​โดย​เนื้อแท้​เปลี่ยน​พฤติกรรม​ที่​สังเกต​ได้​ของ​ซอฟต์แวร์) ให้​อัปเดต structured prompt เพื่อ​ล็อก​เจตนา​ที่​ถูกต้อง​ไว้​ก่อน​เสมอ ก่อน​จะ​แตะ code นี่​คือ​การ​อัปเดต​หรือ​แก้ bug ไม่ใช่​การ refactor

ยก​ตัวอย่าง ตอน​เก็บ modelId ลง​ใน​บิล ปัจจุบัน​เรา​อนุญาต​ให้ field นี้​เป็น nullable ได้ เหตุผล​เบื้องหลัง​คือ​ความ​จำเป็น​ต้อง​รองรับ backward compatibility กับ​ข้อมูล​ย้อนหลัง ทำให้​ทาง​แก้​ชั่วคราว​นี้​เป็นการ​ตัดสิน​ใจ​เชิง​สถาปัตยกรรม​ที่​สม​เหตุ​สม​ผล

อย่างไร​ก็ตาม ยัง​มี​อีก​ทาง​เลือก ถ้า​ผู้​มี​ส่วน​ได้​ส่วน​เสีย​ทาง​ธุรกิจ​ยืนยัน​ได้​ว่า​ค่า modelId ควร​เป็น​อะไร​ก่อน​การ​เปลี่ยนแปลง​นี้ เรา​ก็​สามารถ​รวม​พฤติกรรม​ของ​ระบบ​ให้​เป็น​หนึ่ง​เดียว​และ​กำจัด technical debt ที่​อาจ​เกิด​ขึ้น​นี้​ได้ สมมติ​ว่า​หลัง​ยืนยัน​กับ​ฝ่าย​ธุรกิจ​แล้ว modelId ของ​บิล​ย้อนหลัง​ทั้งหมด​ควร​ตั้ง​เป็น fast-model

📷 ภาพ 8 — prompt ต้อง​อัปเดต: ด้วย​เจตนา​ที่​ชัดเจน​นี้ เรา​จึง​โต้ตอบ​กับ AI เพื่อ​อัปเดต structured prompt ก่อน · ดู​ภาพ​หน้า​จอ​ต้นฉบับ ↗

`/spdd-prompt-update` ทำงาน​อย่างไร

คำ​สั่ง​นี้​อัปเดต Canvas ที่​มี​อยู่​แบบ​เพิ่ม​ที​ละ​ส่วน มัน​แก้​เฉพาะ​ส่วน​ที่​ได้​รับ​ผลกระทบ​จาก​การ​เปลี่ยนแปลง และ​คง​ทุก​อย่าง​ที่​เหลือ​ไว้ โดย​อิง​ชนิด​ของ​การ​เปลี่ยนแปลง — requirement ใหม่, การ​ปรับ​สถาปัตยกรรม, หรือ​การ​เปลี่ยน​ข้อ​จำกัด — มัน​จะ​กำหนด​เอง​โดย​อัตโนมัติ​ว่า​มิติ​ใด​ของ REASONS ต้อง​อัปเดต

สิ่ง​นี้​ต่าง​จาก /spdd-sync: sync ไหล​จาก code ไป​ยัง spec เมื่อ code เปลี่ยน ส่วน prompt-update ไหล​จาก requirement ไป​ยัง spec เมื่อ requirement เปลี่ยน

คำ​สั่ง:

/spdd-prompt-update @GGQPA-001-202603191105-[Feat]-multi-plan-billing-model-aware-pricing.md
model_id เป็น field ที่จำเป็น และค่า default คือ fast-model
อิงการตัดสินใจนี้ อัปเดตส่วนที่เกี่ยวข้องของ structured prompt

AI อัปเดต structured prompt ตาม​คำ​สั่ง​นี้

ชิ้น​งาน​ที่​อัปเดต: structured prompt ที่​อัปเดต​แล้ว

เมื่อ​ยืนยัน​แล้ว ใช้​คำ​สั่ง /spdd-generate อัปเดต code ที่​สอดคล้อง​ตาม structured prompt ที่​เพิ่ง​อัปเดต:

/spdd-generate @GGQPA-001-202603191105-[Feat]-multi-plan-billing-model-aware-pricing.md

AI ภาย​ใต้​กฎ​ที่​นิยาม​ใน​คำ​สั่ง /spdd-generate เข้าใจ​การ​เปลี่ยนแปลง​ที่​ต้อง​ทำ และ​ทำการ​อัปเดต​แบบ​เจาะจง​เฉพาะ codebase ที่​ได้​รับ​ผลกระทบ

ชิ้น​งาน​ที่​อัปเดต: code ที่​อัปเดต​แล้ว

สิ่ง​สำคัญ​ที่​ต้อง​สังเกต​คือ เรา​ไม่​ได้ regenerate codebase ทั้งหมด​ใหม่ เรา​ยัง​ใช้ structured prompt เดิม และ AI จัดการ diff แบบ​เจาะจง:

  • ระบุ​จุด​ที่​ไม่​ตรง​กัน: สังเกต​ว่า​พฤติกรรม​ของ modelId ตอน persist ไม่​สอดคล้อง​กับ requirement ทาง​ธุรกิจ​ใหม่ (ต้อง​บังคับ​และ​มี​ค่า default)
  • เล็ง​ไป​ที่ snippet ของ prompt: คัด​ลอก​ส่วน​ที่​นิยาม​ตรรกะ​เก่า​ออก​มา​จาก structured prompt
  • อัปเดต prompt: วาง snippet ที่​ดึง​มา​ลง​ใน​แชต​พร้อม​กฎ​ทาง​ธุรกิจ​ที่​แก้​ใหม่ สั่ง​ให้ AI อัปเดต structured prompt ก่อน
  • generate การ​อัปเดต code แบบ​เจาะจง: เมื่อ prompt สะท้อน​ความ​จริง​ใหม่​แล้ว รัน /spdd-generate ชี้​ไป​ยัง file ที่​อัปเดต AI ทำ diff แบบ​เจาะจง​เฉพาะ codebase ที่​ได้​รับ​ผลกระทบ แทนที่​จะ regenerate ทุก​อย่าง​ใหม่​จาก​ศูนย์

“การ​เปลี่ยนแปลง​ที่​ทำ​ต่อ​โครงสร้าง​ภายใน​ของ​ซอฟต์แวร์ เพื่อ​ให้​เข้าใจ​ง่าย​ขึ้น​และ​แก้ไข​ได้​ถูก​ลง โดย​ไม่​เปลี่ยน​พฤติกรรม​ที่​สังเกต​ได้​ของ​มัน”

— Martin Fowler

กลยุทธ์: refactor code ก่อน แล้ว sync กลับ​เข้า prompt สำหรับ​ประเด็น​เชิง​โครงสร้าง​หรือ​สไตล์​ที่​ไม่​เปลี่ยน​พฤติกรรม​ที่​สังเกต​ได้ ให้​สั่ง AI refactor code โดยตรง แล้ว​ใช้​คำ​สั่ง sync อัปเดต​เอกสาร prompt

ยก​ตัวอย่าง class BillingServiceImpl ที่ AI generate มี magic number ที่​ฮาร์ด code อยู่​บาง​ตัว ซึ่ง​ต้อง​ดึง​ออก​มา​เป็น​ค่า​คงที่ (constant) ที่​มี​ความหมาย

private int calculateRemainingQuota(String customerId, PricingPlan plan) {
if (plan.getMonthlyQuota() == null || plan.getMonthlyQuota() == 0) {
return 0;
}
LocalDate currentDate = LocalDate.now(ZoneOffset.UTC);
LocalDateTime monthStart = currentDate.withDayOfMonth(1).atStartOfDay();
LocalDateTime monthEnd = currentDate.plusMonths(1).withDayOfMonth(1).atStartOfDay();
Integer currentMonthUsage = billRepository.sumIncludedTokensUsedForMonth(customerId, monthStart, monthEnd);
return plan.getMonthlyQuota() - currentMonthUsage;
}

คำ​สั่ง​ที่ 1:

@BillingServiceImpl.java ใน method calculateRemainingQuota
มี magic number บางตัวที่ต้องจัดการให้เป็นค่าคงที่

AI ทำการ refactor code ตาม​คำ​สั่ง​นี้ (จำ​กฎ​ทอง​ไว้: refactor เป็น​ก้าว​เล็ก ๆ แบบ​เพิ่ม​ที​ละ​นิด​เสมอ) ถ้า​ผลลัพธ์​ตรง​ตาม​ที่​คาด​หวัง เรา​ใช้​คำ​สั่ง /spdd-sync sync รายละเอียด code ที่​เพิ่ง​อัปเดต​เหล่า​นี้​กลับ​ไป​ยัง​ตำแหน่ง​ที่​สอดคล้อง​กัน​ภายใน structured prompt

คำ​สั่ง​ที่ 2:

`/spdd-sync` ทำงาน​อย่างไร

คำ​สั่ง​นี้​เปรียบเทียบ code ปัจจุบัน​กับ specification ใน Canvas แล้ว sync การ​เปลี่ยนแปลง​ฝั่ง code (refactor, แก้ bug, คอมโพเนนต์ใหม่) กลับ​เข้า Canvas

เป้าหมาย​คือ​คง Canvas ให้​เป็น​เอกสาร​การ​ออกแบบ​ที่​ตรง​กับ code ปัจจุบัน แทนที่​จะ​เป็น​บันทึก​ประวัติศาสตร์​ที่​ล้าสมัย

/spdd-sync

AI สรุป​การ​เปลี่ยนแปลง​ตาม​กฎ​ที่​นิยาม​ใน​คำ​สั่ง /spdd-sync แล้ว​ทำ​ตาม​ข้อ​กำหนด​เชิง​โครงสร้าง​ของ REASONS Canvas เพื่อ​เขียน​รายละเอียด​คำ​อธิบาย code ที่​อัปเดต​กลับ​เข้าไป​ใน​ส่วน​ที่​สอดคล้อง​กัน​ของ structured prompt

เมื่อ​รัน​ทั้ง​สอง​คำ​สั่ง​แล้ว เรา​จะ​เห็นการ​เปลี่ยนแปลง​ทั้ง​ของ prompt และ code ได้ที่​นี่

สำหรับ code smell ที่​ลึก​หรือ​ซ่อน​อยู่ ก็​เพียง​ทำซ้ำ​ขั้นตอน​เหล่า​นี้ กฎ​ทอง​คือ​คง structured prompt ให้ sync กับ codebase ล่าสุด​ของ​คุณ​เสมอ

Regression test — เมื่อ​ปรับ​ให้​เหมาะ​สมเสร็จ​ทั้งหมด​แล้ว ให้ restart service และ​รัน script ทดสอบ API อีก​ครั้ง เพื่อ​ให้​แน่ใจ​ว่า​ไม่มี function แกน​กลาง​ใด​พัง​ระหว่าง​การ​เก็บกวาด

ผลลัพธ์: ผ่าน​ทั้งหมด

📷 ภาพ 9 — ผล regression test: ผ่าน​ทั้งหมด​หลัง​การ​เก็บกวาด · ดู​ภาพ​หน้า​จอ​ต้นฉบับ ↗

การ​ทดสอบ function เพียง​อย่าง​เดียว​ไม่​เพียงพอ​ต่อ​การ​ตรวจสอบ​ที่​หนักแน่น มัน​ทำ​หน้าที่​เป็นการ​ตรวจ​เสริม​เป็น​หลัก และ​ไม่​ถูก​นับ​เข้า​ใน code coverage การ​เซ็น​รับรอง​ขั้น​สุดท้าย​ของ​ตรรกะ​แกน​กลาง​ต้อง​อาศัย unit test ที่​ครอบคลุม

ปัจจุบัน workflow SPDD ยัง​ไม่มี​คำ​สั่ง​ทดสอบ​เฉพาะ​ที่​สรุป​เสร็จ​สมบูรณ์ (จะ​มา​ใน​รอบ​พัฒนา​ถัด​ไป) เป็น​ทางออก​ชั่วคราว เรา​ใช้​แนวทาง​ที่​ขับ​เคลื่อน​ด้วย template (template-driven) generate structured prompt สำหรับ unit test

generate test prompt ตั้งต้น — เรา​เริ่ม​ด้วย​การ​ผสม​รายละเอียด​การ implement เข้า​กับ template ทดสอบ​มาตรฐาน​ของ​เรา เพื่อ generate test prompt ฐาน

คำ​สั่ง:

อิงจาก prompt รายละเอียดการ implement
@GGQPA-001-202603191105-[Feat]-multi-plan-billing-model-aware-pricing.md
ผสมกับ template @TEST-SCENARIOS-TEMPLATE.md
ช่วย generate file test prompt ให้หน่อย

ตัด​ซ้ำ​และ​ขัดเกลา​ฉาก​ทัศน์ — หลัง generate structured test prompt ตั้งต้น ฉาก​ทัศน์​ทดสอบ​ที่​เสนอ​มา​บาง​ส่วน​ซ้ำ​กับ​ที่​เรา​มี​อยู่​แล้ว เพื่อ​แก้​เรื่อง​นี้ เรา​สนทนา​ต่อ สั่ง​ให้ AI เทียบ prompt ที่ generate กับ test suite ที่​มี​อยู่ ระบุ​ฉาก​ทัศน์​ที่​ใหม่​จริง ๆ และ​เอา​ส่วน​ที่​ซ้ำซ้อน​ออก

คำ​สั่ง:

@GGQPA-001-202603191105-[Test]-multi-plan-billing-model-aware-pricing.md
มี test ที่ซ้ำกับของเดิม เปรียบเทียบ test ที่เกี่ยวข้องที่มีอยู่
แล้วเพิ่มเฉพาะ test สำหรับฉากทัศน์ใหม่เท่านั้น

ชิ้น​งาน​ที่​อัปเดต: structured prompt ของ test

generate code unit test — เมื่อ​ฉาก​ทัศน์​ทดสอบ​ที่​ขัดเกลา​แล้ว​ถูก​รีวิว​และ​ยืนยัน ก็​ใช้ test prompt ฉบับ​สุดท้าย​ขับ​เคลื่อน​การ generate code จริง

คำ​สั่ง:

อิงจาก test prompt ที่ generate
@GGQPA-001-202603191105-[Test]-multi-plan-billing-model-aware-pricing.md
ช่วย generate code unit test ที่สอดคล้องกัน

ผลลัพธ์: test ผ่าน​ทั้งหมด commit ของ test

นี่​คือ​บท​สรุป​ของ workflow SPDD ที่​ครบถ้วน ผ่าน​กระบวนการ​มาตรฐาน​นี้ เรา​ส่ง​มอบ​ผลลัพธ์​สำคัญ​ต่อ​ไป​นี้​ได้​สำเร็จ:

  • การ implement ตรรกะ​ทาง​ธุรกิจ​ที่​จัด​แนว​กับ​เจตนา​ได้​สูง​เป็น​พิเศษ (~99%)
  • ความ​โปร่งใส​ทาง​วิศวกรรม​ที่​ครบถ้วน รวม​ถึง​ความ​เข้าใจ​ที่​ชัดเจน​ใน​เส้น​ทางการ implement การ​ตัดสิน​ใจ​ทาง​เทคนิค และ trade-off ที่​ยอมรับ
  • สินทรัพย์ structured prompt ที่ sync แน่น​กับ codebase ปัจจุบัน วาง​รากฐาน​ที่​มั่นคง​สำหรับ​รอบ​พัฒนา​ใน​อนาคต
  • ความ​เชี่ยวชาญ​ของ​คน​ที่​ทบ​ทวีคูณ ส่งเสริม​การ​สะสม​ประสบการณ์​และ model ความคิด​ของ​นัก​พัฒนา​อย่าง​ต่อ​เนื่อง ขณะ​ที่​เรา​วน​ทำงาน​ร่วม​กับ AI

ดู diff ของ code ทั้งหมด​สำหรับ​การ​ยก​ระดับ​นี้​บน GitHub

เรา​ยัง​เตรียม feature ยก​ระดับ​เป็น​โบนัส​ไว้​ด้วย — แพลน Enterprise คิด​บิล​แบบ​ขั้น​บันได​ตาม​ปริมาณ ถ้า​คุณ​สนใจ​ฝึก​มือ เรา​ขอ​แนะนำ​อย่าง​ยิ่ง​ให้​ลอง​จัดการ​มัน​ด้วย workflow SPDD ที่​กล่าว​ถึง​ข้าง​ต้น

SPDD เป็นการ​เปลี่ยนแปลง​เชิง​เนื้อหา​ใน​วิธี​ที่​นัก​พัฒนา​สร้าง​ซอฟต์แวร์ ใน​งาน​ของ​เรา เรา​ระบุ​ทักษะ​หลัก​สาม​อย่าง​ที่​พวก​เขา​จำเป็น​ต้อง​มี​จึง​จะ​ทำงาน​ได้​อย่าง​มี​ประสิทธิภาพ ทักษะ​เหล่า​นี้​สะท้อน​ทิศทาง​ที่​คุณค่า​ของ​นัก​พัฒนา​กำลัง​ขยับ​ไป​ใน​โลก​ที่​มี AI ช่วย

ก่อน generate code ใด ๆ คุณ​ต้อง​ชัดเจน​ว่า​มี object อะไร​บ้าง มัน​ทำงาน​ร่วม​กัน​อย่างไร และ​ขอบเขต​อยู่​ตรง​ไหน

หาก​ขาด​สิ่ง​นี้ AI มัก​จะ​วิ่ง​ไป​กับ​รายละเอียด​การ implement ใน​ขณะ​ที่​โครงสร้าง​พัง​ทลาย ความ​รับผิดชอบ​ที่​ไม่​ชัด ตรรกะ​ที่​ซ้ำซ้อน interface ที่​ไม่​สอดคล้อง​กัน — และ​ต้นทุน​ก็​มา​ปรากฏ​ทีหลัง​ใน​การ​รีวิว​และ​การ​ทำงาน​ซ้ำ อ่าน​เพิ่มเติม ↗

ก่อน​การ implement คุณ​ต้อง​ทำให้ “เรา​จะ​ทำ​อะไร / เรา​จะ​ไม่​ทำ​อะไร” ชัดเจน และ​ตกลง​กัน​เรื่อง​มาตรฐาน​และ​ข้อ​จำกัด​เด็ดขาด​ล่วงหน้า มิ​ฉะนั้น​คุณ​จะ​ลงเอย​ด้วย​ผลลัพธ์​ที่​ออก​เร็ว​แต่​ทำงาน​ซ้ำ​ช้า อ่าน​เพิ่มเติม ↗

Iterative Review — เปลี่ยน​ผลลัพธ์​ให้​เป็น​วง​รอบ​ที่​ควบคุม​ได้

หัวข้อ​ที่​มีชื่อ​ว่า “Iterative Review — เปลี่ยน​ผลลัพธ์​ให้​เป็น​วง​รอบ​ที่​ควบคุม​ได้”

คุณ​ต้องการ​ให้​ความ​ช่วยเหลือ​จาก AI ทำตัว​เหมือน​กระบวนการ​ทาง​วิศวกรรม ไม่ใช่​ร่าง​ที​เดียว​จบ

หาก​ขาดวง​รอบ​รีวิว-แล้ว-วน​ซ้ำ​ที่​มี​วินัย ทีม​จะ​ลงเอย​ด้วย​การ​บังคับ​ให้ model ปะ​แก้​ไป​เรื่อย ๆ จน​ทาง​แก้​เบน​ออก​ไป หรือ​ไม่​ก็​เริ่ม​ใหม่​ซ้ำ​แล้ว​ซ้ำ​เล่า​จน​คุม​ต้นทุน​และ​เวลา​ไม่​ได้ อ่าน​เพิ่มเติม ↗

SPDD เป็นการ​ลงทุน​ทาง​วิศวกรรม ตาราง​ด้าน​ล่าง​ให้​คะแนน​ว่า​มัน​คุ้ม​ค่า​แค่​ไหน​ใน​แต่ละ​สถานการณ์ ตั้งแต่​แนะนำ​อย่าง​ยิ่ง (5 ดาว) ไป​จนถึง​ไม่​เหมาะสม (1 ดาว)

คะแนนสถานการณ์หมายเหตุ
★★★★★การ​ส่ง​มอบ​ที่​ขยาย​ขนาด​และ​เป็น​มาตรฐานตรรกะ​ทาง​ธุรกิจ​ที่​ซ้ำ​สูง​และ​ต้อง​ดูแล​รักษา​ระยะ​ยาว (เช่น สร้าง API ที่​คล้าย​กัน​หลาย​ตัว, ทำ workflow ธุรกิจ​หลัก​ให้​อัตโนมัติ)
★★★★★ต้อง compliance สูง​และ​มี​ข้อ​จำกัด​เด็ดขาดสภาพ​แวดล้อม​ที่​ต้อง​ทำ​ตาม​กฎ​ระเบียบ มาตรฐาน​ความ​ปลอดภัย หรือ​กฎ​สถาปัตยกรรม​เข้มงวด (เช่น ระบบ​แกน​กลาง​ทางการเงิน, การ deploy หลาย​ช่อง​ทาง/หลาย client)
★★★★☆การ​ทำงาน​ร่วม​ใน​ทีม​และ​การ​ตรวจสอบ​ย้อน​กลับ​ได้การ​ส่ง​มอบ​แบบ​หลาย​คน​ที่​ต้อง​ติดตาม​และ​รีวิว​การ​เปลี่ยนแปลง​ได้​แบบ end-to-end
★★★★☆งาน​คง​ความ​สอดคล้อง​ที่​พาด​ข้าม​หลาย​ส่วนการ refactor ซับซ้อน​ที่​ตรรกะ​ต้อง sync กัน​แน่น​ข้าม​หลาย microservice หรือ​ต่าง​ภาษา
★★☆☆☆hotfix ดับ​ไฟการ​แก้ production แบบ “หยุด​เลือด​ไหล” ที่​ความเร็ว​สำคัญ​กว่า​วินัย​เชิง​สถาปัตยกรรม
★★☆☆☆spike เชิง​สำรวจเมื่อ​เป้าหมาย​คือ​พิสูจน์​ไอเดีย​เร็ว ๆ ไม่ใช่​ส่ง​มอบ​ซอฟต์แวร์​คุณภาพ production ภาระ​การ​กำกับ​ดูแล​ของ SPDD จะ​ไม่​คุ้ม
★★☆☆☆script ใช้​ครั้ง​เดียวการ​ล้าง​ข้อมูล​แบบ​ใช้​แล้ว​ทิ้ง​หรือ script ชั่วคราว ที่​ต้นทุน​เริ่มต้น​ของ SPDD สูง​เกิน​เทียบ​กับ​คุณค่า
★☆☆☆☆หลุม​ดำ​ของ contextเมื่อ domain นิยาม​ได้​แย่​และ​กฎ​ทาง​ธุรกิจ​ไม่​ชัด คุณ​ตั้ง​ขอบเขต​ที่​มี​ความหมาย​ให้ model ไม่​ได้
★☆☆☆☆งาน​สร้างสรรค์/เชิง​ภาพ​ล้วน ๆงาน​ที่​ขับ​เคลื่อน​ด้วย​รสนิยม​และ​ความ​สวยงาม​มากกว่า​ตรรกะ (เช่น การ​สำรวจ UI เชิง​ภาพ, copywriting การ​ตลาด)

ผล​ตอบแทน​จาก​การ​ลงทุน (Return on investment)

ประโยชน์ผลกระทบความเร็วสิ่ง​ที่​ได้
Determinismสูงทันทีเข้า​รหัส​ตรรกะ​เป็น spec ที่​แม่นยำ ลด hallucination และ​การ​ตีความ​แบบ “สร้างสรรค์” ลง​อย่าง​มาก
Traceabilityสูงทันทีทุก​การ​เปลี่ยนแปลง​ที่​มี​นัย​สำคัญ​ย้อน​กลับ​ไป​ยัง structured prompt ได้ ปิด​วง​รอบ​การ​ตรวจสอบ
รีวิว​เร็ว​ขึ้นสูงระยะ​สั้นcode “มา​ถึง” ใกล้​มาตรฐาน​ทีม​มาก​ขึ้น การ​รีวิว​จึง​โฟกัส​ที่​ตรรกะ​และ​การ​ออกแบบ ไม่ใช่​การ​จัด​รูปแบบ​และ​เก็บกวาด
Explainabilityปานกลาง-สูงค่อย​เป็น​ค่อย​ไปเจตนา​และ​พฤติกรรม​มอง​เห็น​ได้​ใน​ระดับ​ภาษา​คน ลด​ภาระ​ทาง​ความคิด​ใน​การ​ทำความ​เข้าใจ​และ​ดูแล​รักษา
วิวัฒน์​อย่าง​ปลอดภัย​ขึ้นสูงระยะ​ยาวขอบเขต​ที่​นิยาม​ชัด​และ​การ implement แบบ​ที​ละ​ขั้น​ทำให้การ​เปลี่ยนแปลง​แบบ​เจาะจง​เสี่ยง​น้อย​ลง​และ​วน​ปรับ​ได้​ง่าย​ขึ้น

การ​ลงทุน​เริ่มต้น (Upfront investment)

ด้านกำแพงลักษณะสิ่ง​ที่​ต้อง​ใช้
การ​เปลี่ยน mindsetสูงต้อง​ฝึก​อย่าง​ต่อ​เนื่องทีม​ต้อง​ปรับ​ตัว​สู่ “ออกแบบ​ก่อน” แทน “เขียน code ก่อน”
ความ​เชี่ยวชาญ​ระดับ​สูง​ตั้งแต่​ต้นปานกลาง-สูงต่อ featureวิศวกร​ที่​แปล​กฎ​ทาง​ธุรกิจ​ให้​เป็น​นามธรรม​ที่​สะอาด​และ​ข้อ​จำกัด​ด้าน​การ​ออกแบบ​ได้
เครื่องมือ automationปานกลางตั้ง​ค่า infrastructureหาก​ไม่มี automation SPDD จะชน throughput เพดาน​และ​คง prompt ให้​สอดคล้อง​ได้​ยาก openspdd รัน workflow ใน​บทความ​นี้ — ตั้งแต่ analysis และ structured REASONS prompt ไป​จนถึง code และ​การ​รองรับ test เสริม — เป็น​ขั้น CLI ที่​ทำซ้ำ​ได้ ชิ้น​งาน​จึง​มี version และ​รีวิว​ได้ แทนที่​จะ​ติด​อยู่​ใน​แชต องค์กร​ขนาด​ใหญ่​อาจ​ยัง​ต้อง​วาง platform ความ​รู้​ทับ​อีก​ชั้น​เพื่อ​จัดการ​และ​ใช้​ซ้ำ​สินทรัพย์​ใน​สเกล​ใหญ่
ยัง​มี​ต่อ: ทลาย​กำแพง “เฉพาะ​ผู้เชี่ยวชาญ”

ด้วย trade-off ใน​วัน​นี้ SPDD อาจ​ดูเหมือน​เป็น​วิธีการ​ที่​สงวน​ไว้​สำหรับ​สถาปนิก​อาวุโส เพราะ​มัน​ตั้ง​มาตรฐาน​สูง​ด้าน​นามธรรม​และ​การ​สร้าง model แต่​นั่น​ไม่ใช่​เป้าหมาย​ปลายทาง​ของ​เรา

เรา​กำลัง​พยายาม​ลด​กำแพง​นั้น​ลง เพื่อ​จัดการ​คอ​ขวด​ใน​การ​ขยาย​ขนาด เรา​กำลัง​สำรวจ​วิธี​นำ​สินทรัพย์ SPDD ที่​มี​อยู่​กลับ​มา​ใช้​ซ้ำ และ​ทำให้​กฎ​ทาง​ธุรกิจ​ที่​ซับซ้อน​และ​ข้อ​จำกัด​ด้าน​การ​ออกแบบ “เครื่อง​อ่าน​ได้” และ “ฉลาด” มาก​ขึ้น เพื่อ​ให้​นำ​ไป​ใช้​อย่าง​สอดคล้อง​ได้​โดย​ไม่​ต้อง​พึ่ง​สัญชาตญาณ​ของ​แต่ละ​คน

ทิศทาง​ของ​เรา​ชัดเจน: SPDD ควร​พึ่ง​ฝีมือ​ส่วนตัว​ให้​น้อย​ลง และ​พึ่ง​ระบบ​สินทรัพย์​ระดับ​องค์กร​ที่​สุกงอม​มาก​ขึ้น ไม่​ว่า​คุณ​จะ​เป็น​ผู้เชี่ยวชาญ​ที่​ช่ำชอง​หรือ​เพิ่ง​เริ่มต้น คุณ​ก็​ควร​ส่ง​มอบ​ผลลัพธ์​คุณภาพ​สูง​และ​เป็น​มาตรฐาน​ได้ โดย​ใช้ “เวลา​ของ​ผู้เชี่ยวชาญ” ตอน​ต้น​น้อย​ลง​มาก

แนวทาง​เพิ่มเติม​ที่​จะ​ทำให้ SPDD นำ​ไป​ใช้ได้​ง่าย​ขึ้น​กำลัง​ตาม​มา

ด้วย​การ​ใช้ REASONS Canvas, การ​ทำ​เจตนา​ให้​กระจ่าง, การ​วาง​นามธรรม​ที่​ถูกต้อง, การ​แตก​งาน​เป็น task ที่​เป็น​รูปธรรม และ​การ​ล็อก​ขอบเขต เรา​ได้​มอบ​พื้นที่​ที่​นิยาม​ชัดเจน​ให้ AI ทำงาน

ภายใน​พื้นที่​นั้น SPDD อาจ​ไม่ใช่​เส้นทาง​ที่​สั้น​ที่สุด​สู่ “generate code เร็ว ๆ” แต่​มัน​เป็น​หนึ่ง​ใน​วิธี​ที่​เชื่อถือ​ได้​มาก​ที่สุด​ใน​การ​ส่ง​มอบ “การ​เปลี่ยนแปลง​ที่​ถูกต้อง” อย่าง​มั่นใจ

พูด​กัน​ตาม​ตรง SPDD เปล่ง​ประกาย​ที่สุด​ใน domain ที่​หนัก​ด้าน​ตรรกะ ส่วน​ใน​ด้าน​ที่​ขับ​เคลื่อน​ด้วย​การ​ตัดสิน​เชิง​สุนทรียะ — เช่น การ​จัด​สไตล์ frontend — เรา​ยัง​คง​สำรวจ pattern ทาง​วิศวกรรม​ที่​จะ​มั่นคง​ได้​เท่ากับ​การ​สร้าง​เชิง​ตรรกะ​ล้วน

กรอบ​ใน​บทความ​นี้​เป็น​เพียง “ท่า” คุณค่า​ที่แท้​จริง​มา​จาก​การ​ลับ meta-skill ที่​อยู่​เบื้องหลัง ได้แก่ นามธรรม​และ​การ​สร้าง model, การ​วิเคราะห์​อย่าง​เป็น​ระบบ และ​ความ​เข้าใจ​ธุรกิจ​ใน​ภาพ​รวม​อย่าง​ลึกซึ้ง นี่​คือ​จุด​แข็ง​ของ​มนุษย์​ที่​ท้าย​ที่สุด​เป็น​ตัว​กำหนด​ว่า​เรา​จะ​ได้​คุณค่า​จาก AI มาก​แค่​ไหน

ใน​ยุค AI การ​พัฒนา​ซอฟต์แวร์​ไม่ใช่​การ​ประลอง IQ ของ model แต่​เป็นการ​ประลอง bandwidth ทาง​ความคิด​ของ​วิศวกร — ว่า​เรา​คิด​ได้​ชัดเจน ตี​กรอบ​ปัญหา และ​ตัดสิน​ใจ​ได้​ดี​เพียง​ใด

เรา​ขอ​ปิด​ท้าย​ด้วย​คำ​พูด​ที่​จับ​วิญญาณ​ของ SPDD ไว้​ได้:

“ใน​วิทยาศาสตร์ ถ้า​คุณ​รู้​ว่า​กำลัง​ทำ​อะไร​อยู่ คุณ​ก็​ไม่​ควร​ทำ​มัน ใน​วิศวกรรม ถ้า​คุณ​ไม่รู้​ว่า​กำลัง​ทำ​อะไร​อยู่ คุณ​ก็​ไม่​ควร​ทำ​มัน”

— Richard W. Hamming

เรา​ขอ​ขอบคุณ Martin Fowler อย่าง​จริงใจ แม้​ตาราง​งาน​จะ​รัดตัว เขา​ก็​ทุ่มเท​อย่าง​ลึกซึ้ง​ให้​บทความ​นี้ ตั้งแต่​การ​ลับ​โครงเรื่อง การ​ทำให้​แนวคิด​สำคัญ​กระจ่าง ไป​จนถึง​การ​ยก​ระดับ​การ​เล่า​เรื่อง​ด้วย​ภาพ​ด้วย​ไดอะแกรม​ที่​ปรับปรุง​และ​สร้าง​ใหม่

สายตา​ที่​เฉียบ​คม​ต่อ​รายละเอียด​และ​ความ​ใส่ใจ​ใน​ความ​แม่นยำ​ของ​เขา​หล่อหลอม​ผลลัพธ์​สุดท้าย​อย่าง​ลึกซึ้ง

เรา​ขอบคุณ​อย่าง​ยิ่ง​ต่อ Eric (Ke) Zhou, Wei Sun, Sara Michelazzo, Rebecca Parsons, Matteo Vaccari, May (Ping) Xu, Zhi Wang, Feng Chen และ Da Cheng สำหรับ​คำ​วิจารณ์​และ​ข้อคิด​ที่​ลึกซึ้ง ความเห็น​ของ​พวก​คุณ​ช่วย​ให้​เรา​ทำ​หลาย​แนวคิด​สำคัญ​ที่​เป็น​ราก​ของ​วิธีการ​นี้​ให้​กระจ่าง​ขึ้น

เรา​ขอ​ชื่นชม​ผู้​ปฏิบัติ​ยุค​แรก​ด้วย: Jie Wang, Jian Gao, Yixuan Feng, Siyuan Li, Yixuan Li, Biao Tian, Wei Cheng, Qi Huang และ Yulong Li ขอบคุณ​ที่​พิสูจน์ SPDD ใน project จริง และ​สำหรับ​ความ​อดทน​ขณะ​ที่​แนวทาง​ค่อย ๆ สุกงอม feedback จาก​แนวหน้า​ของ​พวก​คุณ​เป็น​รากฐาน​สำคัญ​ที่​ทำให้ SPDD ใช้งาน​ได้​จริง​และ​ทนทาน

ท้าย​สุด ใน​จิต​วิญญาณ​ของ​การ​ลงมือ​ทำ​ตาม​ที่​เรา​สอน บทความ​นี้​เอง​ก็​ถูก​หล่อหลอม​ขึ้น​ด้วย​ความ​ช่วยเหลือ​ของ large language model — Claude 4.5 Sonnet, Claude 4.6 Opus, Gemini 3.1 Pro และ ChatGPT 5.4

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

หลัง​เผยแพร่​บทความ​นี้ เรา​ได้​รับคำ​ถาม​มากมาย นี่​คือ​คำ​ตอบ​บาง​ส่วน

ใน​เมื่อ rules, นิยาม workflow และ execution hook ก็​กำกับ​ผลลัพธ์​ของ AI อยู่​แล้ว SPDD เติม​เต็ม​ช่องว่าง​อะไร​กัน​แน่ — การ​จับ​คู่​ที่​แน่น​ขึ้น​ระหว่าง prompt กับ code, การ​ทำ version ที่​กัน​การ drift ตาม​เวลา, หรือ​ทั้ง​สอง​อย่าง?

ทั้ง​สอง​อย่าง และ​มัน​เสริม​กัน global rule และ hook เป็น​ตาข่าย​นิรภัย​ระดับ​สูง​ที่​มี​คุณค่า แต่​ใน​งาน​วิศวกรรม​ประจำ​วัน มัน​อยู่​ใน​ระดับ​นามธรรม​ที่​ทำให้​ขั้น generate จริง​ยัง​ทึบ​อยู่ นี่​คือ​วิธี​ที่ SPDD เติม​เต็ม​ช่องว่าง​ที่ guardrail ระดับ​สูง​เพียง​อย่าง​เดียว​ปิด​ไม่​ได้:

  • ควบคุม​เจตนา​ได้​ละเอียด​ขึ้น กฎ​ระดับ​สูง​อธิบาย​กลยุทธ์​และ​ขอบเขต​กว้าง ๆ แต่​ปล่อย​ให้ code ที่ generate เป็นกล่อง​ดำ SPDD ทำให้​ขั้นตอน​การ​แก้​ปัญหา​ชัดเจน​ผ่าน REASONS Canvas — เจตนา, การ​ออกแบบ, การ​ลงมือ​ทำ, การ​กำกับ​ดูแล — ผู้​รีวิว​จึง​ใช้​เหตุผล​กับ​แผน​ได้​ก่อน code และ​คน​ยัง​อยู่​ใน​วง​รอบ​ใน​จุด​ที่​สำคัญ
  • สินทรัพย์​เจตนา​ที่​ใช้​ซ้ำ​ได้ prompt แบบ​ทำ​ไป​เรื่อย​ใช้ได้​ครั้ง​เดียว SPDD เปลี่ยน structured prompt ให้​เป็น​ชิ้น​งาน​ที่​ควบคุม version และ​เดินทาง​ไป​พร้อม code เก็บ​เจตนา​ทาง​ธุรกิจ การ​ตัดสิน​ใจ​ด้าน​การ​ออกแบบ และ​ข้อ​จำกัด นั่น​คือ​สิ่ง​ที่​ปิด​วง​รอบ​ระหว่าง prompt กับ code ตาม​เวลา และ​กัน drift ช้า ๆ ที่​เกิด​ขึ้น​เมื่อ​ดูแล​แต่ code เพียง​อย่าง​เดียว
  • กรอบ​สำหรับ​การ​เรียนรู้​ของ​มนุษย์ ถ้า​เรา​ปล่อย​ให้ model ผลิต code โดย​ไม่​กำกับ ทักษะ​การ​สร้าง model และ​นามธรรม​ของ​เรา​เอง​จะ​อ่อน​ลง​ตาม​เวลา SPDD บังคับ​ให้​นัก​พัฒนา​ใช้​เหตุผล​กับ​ปัญหา​เคียง​ข้าง​เครื่องมือ ความ​รู้​ของ domain และ​วิจารณญาณ​การ​ออกแบบ​จึง​ทบ​ทวี​ข้าม​รอบ แทนที่​จะ​สูญ​ไป​หลัง​จบ​แต่ละ​แชต

สิ่ง​นี้​ต่าง​จาก​ชุด​คำ​สั่ง (instruction set) แบบ​ดั้งเดิม​ที่​วาง​ไว้​ใน project/โซลูชัน​ด้วย progressive disclosure (การ​เปิดเผย​ข้อมูล​ที​ละ​ขั้น) อย่างไร?

ความ​ต่าง​แกน​กลาง​คือ SPDD ปฏิบัติ​ต่อ structured prompt ใน​ฐานะ file ที่​ถูก​ดูแล​และ​ควบคุม version:

  • โครงสร้าง​ตายตัว แทน​กฎ free-text แทนที่​จะ​ป้อน​คำ​สั่ง​ปลาย​เปิด​ให้ model เรา​ใช้ REASONS Canvas — template เจ็ด​ส่วน​ตายตัว​ครอบคลุม​เจตนา การ​ออกแบบ การ​ลงมือ​ทำ และ​การ​กำกับ​ดูแล AI ต้อง​วางแผน​ภายใน​รูปทรง​นั้น ทำให้​แผน​อ่าน​และ​รีวิว​ได้​อย่าง​สอดคล้อง​กัน​ทั้ง​ทีม
  • เจตนา​ก่อน code คำ​สั่ง​ทำให้ requirement, domain และ​แนวทาง​กระจ่าง​ก่อน generate อะไร — ย้าย​ความ​ไม่​แน่นอน​ไป​ทาง​ซ้าย ข้อ​ขัดแย้ง​ถูก​แก้​ใน​ระดับ prompt ที่​แก้​ได้​ถูก แทนที่​จะ​โผล่​มา​ทีหลัง​ใน code
  • แตก​งาน​ผ่าน Operations มิติ O — Operations ของ Canvas แตก​กลยุทธ์​นามธรรม​เป็น​ขั้น implement ที่​เป็น​รูปธรรม​และ​ทดสอบ​ได้ ลง​ไป​ถึง method signature และ​ลำดับ​การ​ทำงาน ผู้​รีวิว​ตรวจ​ขั้น​เหล่า​นี้​ก่อน​เขียน code ใด ๆ การ generate จึง​เป็นการ​แปล​แผนที่​ตกลง​กัน​แล้ว​อย่าง​ซื่อตรง
  • sync สอง​ทาง ไม่ใช่​ส่ง​ต่อ​แล้ว​จบ instruction และ​เอกสาร​ออกแบบ​ใน project แบบ​ดั้งเดิม​ล้าสมัย​ทันที​ที่ code เดิน​หน้า ใน SPDD prompt และ code ผูก​กัน: เมื่อ​กฎ​ธุรกิจ​เปลี่ยน /spdd-prompt-update ไหล requirement → prompt → code เมื่อ code ถูก refactor /spdd-sync ไหล code → prompt spec จึง​เป็น​บันทึก​ที่​ตรง​กับ​ระบบ​ปัจจุบัน ไม่ใช่​ภาพถ่าย​ใน​อดีต

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

ขึ้น​อยู่​กับ​ว่า​เรา​หมาย​ถึง​อะไร​ด้วย​คำ​ว่า “ปิด​วง​รอบ” ถ้า​คำถาม​คือ SPDD มี​วง​รอบ​การ​เรียนรู้​แบบ​ปิด​ของ AI ไหม — ที่​ทุก​แชต​สอน model เงียบ ๆ และ​ระบบ​ฉลาด​ขึ้น​เอง​หรือ​ไม่ — คำ​ตอบ​ตรง ๆ คือ​ยัง และ​เรา​ตั้งใจ​เช่น​นั้น openspdd รัน​เป็นกรอบ​กึ่ง​อัตโนมัติ​ที่​นำ​โดย​มนุษย์ และ​มนุษย์​ยัง​เป็น​ผู้​เฝ้า​ประตู​สำหรับ​การ​ตัดสิน​ใจ​หลัก​ทั้งหมด

แต่​ตัว “ทำไม” เอง​ไม่​ได้​ติด​อยู่​ใน​หัว​มนุษย์​หรือ​กระจัดกระจาย​ใน​บท​แชต มัน​ถูก​เก็บ​ไว้​ใน structured prompt ใน​ฐานะ​ชิ้น​งาน​ชั้น​หนึ่ง:

  • Canvas เข้า​รหัส​เหตุผล R (Requirements พร้อม DoD), A (Approach) และ context การ​วิเคราะห์​ใน Step 3 บันทึก​ชัด​ว่า​เรา​กำลัง​แก้​อะไร ทำไม และ​ยอมรับ trade-off ไหน — ไม่ใช่​แค่ “สร้าง​อะไร”
  • version control ทำให้​คงทน เพราะ prompt ถูก commit คู่​กับ code “ทำไม” จึง​เดินทาง​ไป​กับ​ระบบ​ข้าม​คน​และ​เวลา แทนที่​จะ​หาย​ไป​เมื่อ​ปิด​หน้าต่าง​แชต​หรือ​นัก​พัฒนา​ออก​จาก​ทีม
  • sync สอง​ทาง​ทำให้​ทันสมัย /spdd-prompt-update ไหล requirement → prompt → code เมื่อ​เจตนา​เปลี่ยน /spdd-sync ไหล code → prompt เมื่อ​การ implement เปลี่ยน ชิ้น​งาน​จึง​เป็น​บันทึก​ที่​ตรง​กับ​ระบบ​ปัจจุบัน ไม่ใช่​ภาพถ่าย​ใน​อดีต
  • แต่ละ iteration เริ่ม​จาก​สินทรัพย์​ที่​สะสม การ​พัฒนา​ต่อยอด​ครั้ง​ถัด​ไป​เริ่ม​ด้วย Canvas ที่​มี​อยู่​เป็น context ความ​รู้​ของ domain และ​การ​ตัดสิน​ใจ​ด้าน​การ​ออกแบบ​จึง​ทบ​ทวีคูณ แทนที่​จะ​ถูก​ค้น​พบ​ใหม่​ทุกรอบ

ดังนั้น วง​รอบ​ถูก​ปิด​ด้วย workflow และ​ตัว​ชิ้น​งาน ไม่ใช่​ด้วย​กลไก​การ​เรียนรู้​อัตโนมัติ ผู้​รีวิว​ขยับ​จาก “จับ bug” สู่ “ตรวจ​เจตนา” เพราะ​ตอน​นี้​เจตนา​อยู่​ใน​ที่​ที่​ตรวจสอบ​ได้

นี่​คือ design ที่​นำ​โดย​มนุษย์​โดย​ตั้งใจ และ​เรา​คิด​ว่า​มัน​ถูกต้อง​สำหรับ​ตอน​นี้ — จนกว่า​การ​ตรวจสอบ​อัตโนมัติ​ใน​ชั้น​สินทรัพย์​จะ​สุกงอม​พอ​จะ​รับ​ภาระ​มาก​ขึ้น

ถ้า​นัก​พัฒนา​สอง​คน​เขียน Canvas เดียวกัน​แล้ว​ได้ spec ต่าง​กัน — และ​ไม่มี​นิยาม​ที่​เป็น​ทางการ​ของ​คำ​ว่า “ดี” — SPDD ก็​แค่​ดัน​ปัญหา​ความ​แปรปรวน​ขึ้น​ไป​อีก​ชั้น แทนที่​จะ​แก้​มัน​ไม่ใช่​หรือ?

พูด​ตรง ๆ นั่น​เป็นการ​อธิบาย​จุด​ที่​เรา​อยู่​วัน​นี้​ได้​อย่าง​เป็น​ธรรม Canvas บีบ​แถบ​ความ​แปรปรวน​ให้​แคบ​ลง​เมื่อ​เทียบ​กับ prompt แบบ​อิสระ แต่​ไม่​ได้​กำจัด​มัน

นัก​พัฒนา​สอง​คน​ที่​เขียน​ต่อ requirement เดียวกัน​ยัง​ผลิต Canvas ที่​ต่าง​กัน​ได้ และ​นัก​พัฒนา​คน​เดิม​ก็​อาจ​ผลิต​อัน​ที่​บาง​กว่า​ใน​วัน​อื่น เรา​ยัง​ไม่มี​มาตรฐาน​ที่​ตกผลึก​และ​เป็น​ภววิสัย​ว่า Canvas ที่ “ดี” หน้าตา​เป็น​อย่างไร

สิ่ง​ที่​กรอบ​นี้​พึ่ง​ตอน​นี้​คือ​ชุด​เกณฑ์​พื้นฐาน — โครงสร้าง, ความ​ละเอียด (granularity), ระดับ​นามธรรม และ​การ​แตก​งาน — ที่​ถูก​เข้า​รหัส​ไว้​ใน​คำ​สั่ง openspdd

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

การ​ปิด​ช่องว่าง​ที่​เหลือ​นั้น​คือ​ทิศทาง​ต่อ​ไป​ของ​การ​กำกับ​ดูแล: การ​ตรวจสอบ​อัตโนมัติ​ใน​ชั้น​สินทรัพย์ (analysis, Canvas, ชิ้น​งาน prompt) เพื่อ​ให้​กรอบ​เอง​จับ​กรณี​ที่ Canvas ครบ​โครงสร้าง​แต่​ระบุ​รายละเอียด​ไม่​พอ​ใน​เชิง​เนื้อหา จนกว่า​จะ​มี​สิ่ง​นั้น คำ​ตอบ​ที่​ซื่อตรง​คือ​วิจารณญาณ​ของ​มนุษย์​ยัง​เป็น​ตัว​รับ​น้ำหนัก

SPDD ทนทาน​แค่​ไหน​เมื่อ​ขยาย​ข้าม​งาน​หลาย project หลาย​สาขา​วิชา หลาย domain — และ​เพดาน​ที่แท้​จริง​อยู่​ตรง​ไหน: ที่​ความ​สามารถ​ของ AI หรือ​ที่​ว่า​ตัว​ปัญหา​เอง​ตี​กรอบ​ได้​สะอาด​แค่​ไหน?

ขีด​จำกัด​ส่วน​ใหญ่​อยู่​ที่​ฝั่ง​ปัญหา ไม่ใช่​ฝั่ง model แม้​มี model ที่​แข็งแกร่ง​กว่า​หรือ​วง​รอบ​การ​เรียนรู้​ที่​ดี​กว่า เรา​ก็​ไม่​แนะนำ​ให้​ยก​ขอบเขต​ขนาด​มหึมา​ที่​ข้าม​หลาย project-หลาย domain ให้ AI ใน​ครั้ง​เดียว

สิ่ง​ที่​สำคัญ​กว่า​คือ​ปัญหา​ถูก​ตี​กรอบ​ชัด​แค่​ไหน และ​ทีม​สะสม context ไว้​มาก​เท่าไร ความ​สามารถ​ดิบ​ของ model แทบ​ไม่​เคย​เป็น​คอ​ขวด ด้วย​เหตุผล​สาม​ข้อ:

  • ต้อง​แตก​ย่อย ขอบเขต​ที่​ใหญ่​หรือ​ข้าม domain ควร​ถูก​แตก​เป็น​หน่วย​เล็ก ๆ ที่​อยู่​ใน​ตัวเอง ซึ่ง​สร้าง model ได้​แม่นที​ละ​หน่วย หาก​ขาด​วินัย​นี้ แม้ model ที่​แข็งแกร่ง​ก็​เสีย​ความ​สอดคล้อง​เมื่อ​ขอบเขต​กว้าง​ขึ้น
  • ขอบเขต​ที่​ไม่​ชัด​จำกัด​อัตรา​ความ​สำเร็จ ใน “หลุม​ดำ​ของ context” — domain ที่​กฎ​ธุรกิจ​ไม่​ชัด​และ​ขอบเขต​อ่อนแอ — อัตรา​ความ​สำเร็จ​ของ SPDD ตกลง เพราะ model ไม่มี​อะไร​ที่​มี​ความหมาย​มา​คอย​จำกัด​มัน AI ที่​ทรง​พลัง​กว่า​ไม่​ได้​แก้​เรื่อง​นี้ มัน​แค่​ล้มเหลว​อย่าง​มั่นใจ​กว่า​เดิม
  • สินทรัพย์​การ​ตัดสิน​ใจ​ช่วย​ตาม​เวลา งาน​สเกล portfolio แบบ end-to-end ไม่ใช่​สิ่ง​ที่​เรา​จะ​ยก​ให้​ทำ​เอง​โดย​อัตโนมัติ​วัน​นี้ มัน​จะ​เปลี่ยน​ไป​เมื่อ “สินทรัพย์​การ​ตัดสิน​ใจ” — context ใน​อดีต, ทาง​เลือก​สถาปัตยกรรม, pattern เชิง​บรรทัดฐาน — สะสม​มาก​พอ​จะ​ยก​อัตรา​ความ​สำเร็จ​ขึ้น​ถึง​ระดับ​ที่​ยอมรับ​ได้ จนกว่า​จะ​ถึง​ตอน​นั้น แนวทาง​ที่​นำ​โดย​มนุษย์​ที​ละ​หน่วย​คือ​ค่า​เริ่มต้น

SPDD เป็น model-agnostic ไหม? prompt ที่​สะสม​ไว้​ทำงาน​เทียบเท่า​กัน​ข้าม Claude, GPT และ Gemini หรือ​ไม่ หรือ​การ​เปลี่ยน model ระหว่าง iteration — สลับ​ผู้​ให้​บริการ, ออฟไลน์-เครื่อง​เอง​เทียบ​กับ​ออนไลน์-ระยะ​ไกล, หรือ​ผู้​ให้​บริการ​อัปเดต​จน​เปลี่ยน​พฤติกรรมการ​ให้​เหตุผล — จะ​ทำให้ prompt drift หรือ code เบน​ได้? ชิ้น​งาน​ที่แท้​จริง​คือ prompt-as-spec หรือ prompt + การ​ตั้ง​ค่า model?

SPDD ตั้งใจ​ให้​เป็น model-agnostic และ​เรา​ใช้​มัน​ข้าม​รุ่น model มา​ตั้งแต่​ยุค Claude 3.5 Sonnet workflow ไม่​ขึ้น​กับ model ตัว​ใด​ตัว​หนึ่ง อย่างไร​ก็ตาม ความ​สามารถ​ดิบ​ยัง​สำคัญ: model ที่​ให้​เหตุผล​แข็งแกร่ง​กว่า​ก็​ผลิต canvas ที่​ดี​กว่า

จาก​ประสบการณ์​ลงมือ สำหรับ​ขั้น analysis และ generate REASONS Canvas ที่​เป็น​งาน​หนัก Claude (โดย​เฉพาะ Opus) มัก​นำ ตาม​ด้วย GPT Codex และ Gemini 3.x Pro

แต่​เมื่อ​ล็อก​เจตนา​ไว้​ใน structured prompt แล้ว เฟส​ถัด​ไป​เป็นการ​ทำ​ตาม​คำ​สั่ง​เป็น​ส่วน​ใหญ่ การ​สลับ​ไป​ใช้ model ที่​เก่ง​น้อย​กว่า​เล็กน้อย​จึง​มี​ความ​เสี่ยง​เจตนา drift ที่​จัดการ​ได้ มอง​แบบ​นี้ ชิ้น​งาน​คือ spec ส่วน model คือ​ผู้​ลงมือ​ทำ​ตาม spec นั้น

เรื่อง​ออฟไลน์-เครื่อง​เอง​เทียบ​กับ​ออนไลน์-ระยะ​ไกล: วัน​นี้​เรา​ไม่​แนะนำ LLM แบบ​ออฟไลน์-เครื่อง​เอง​สำหรับ SPDD model เล็ก​ที่​ใส่​ลง​ฮาร์ดแวร์​เครื่อง​เอง​ได้​ยัง​ขาด​ความ​สามารถ​ที่​จำเป็น​สำหรับ​ขั้น analysis และ generate canvas และ​การ deploy model ใหญ่​ที่​เก่ง​พอ​บน​เครื่อง​เอง​ก็​แทบ​ไม่​คุ้ม​ค่า

ดังนั้น SPDD ไม่​รับประกัน determinism สัมบูรณ์ และ​เรา​ไม่​ได้​อ้าง​เช่น​นั้น สิ่ง​ที่​มัน​ทำ​คือ​คง​ความ​สุ่ม​จาก non-determinism ของ LLM ไว้​ใน​ขอบเขต​ที่​ควบคุม​ได้

ส่วน​คุณ​จะ​มอง​ชิ้น​งาน​เป็น prompt-as-spec หรือ prompt + การ​ตั้ง​ค่า model เป็นการ​ตัดสิน​ใจ​เชิงกลยุทธ์​ที่​ผูก​กับ​ข้อ​จำกัด​ด้าน​ต้นทุน compute และ compliance ของ​คุณ — และ​ทีม​ควร​ตัดสิน​ใจ​อย่าง​มี​สติ

เมื่อ​ความ​สามารถ​ของ LLM ก้าวหน้า​ขึ้น ตัว​วิธีการ SPDD เปลี่ยน​ไป​ด้วย​หรือ​ไม่ หรือ​เปลี่ยน​แค่​ความ​เป็น​ไป​ได้​ใน​ทาง​ปฏิบัติ​ที่​จะ​นำ​มัน​ไป​ใช้?

วิธีการ​ไม่​ได้​เปลี่ยน​ใน​เชิง​พื้นฐาน วง​รอบ​แกน​กลาง​ยัง​เหมือน​เดิม: ยึด​ทุก​อย่าง​ไว้​ที่ structured prompt และ​ใช้​มัน​ค่อย ๆ ทำ​เจตนา​ให้​กระจ่าง​ขึ้น

สิ่ง​ที่​เปลี่ยน​คือ​เรา​โอน​ภาระ​งาน​ด้วย​มือ​ไป​ให้​เครื่องมือ​ที่​ทำซ้ำ​ได้​บน LLM ได้​มาก​แค่​ไหน

เมื่อ model ทำ​ตาม structured prompt และ​ให้​เหตุผล​กับ context ที่​อุดม​ขึ้น​ได้​ดี​ขึ้น เรา​ก็​กลั่น​แต่ละ​ขั้น​ของ workflow ให้​เป็น​กลยุทธ์​การ​คิด​ที่​นำ​กลับ​มา​ใช้​ซ้ำ​ได้ — คำ​สั่ง​อย่าง /spdd-analysis, /spdd-reasons-canvas, /spdd-generate และ /spdd-sync สาม​สิ่ง​เกิด​ขึ้น​จาก​ตรง​นั้น:

  • จาก​ขับ​เคลื่อน​ด้วย template สู่​ขับ​เคลื่อน​ด้วย​กลยุทธ์ ช่วง​แรก SPDD พึ่ง template โซลูชัน​อย่าง​หนัก หาก​ไม่มี template ที่​สรุป​มา​ดี​ตั้งแต่​ต้น คุณภาพ​ผลลัพธ์​ก็​ตก ทำให้​เริ่ม​ใน domain ใหม่​ได้​ยาก ตอน​นี้​แต่ละ​คำ​สั่ง​เข้า​รหัส​ตัว​กลยุทธ์​การ​คิด​เอง แม้​ไม่มี template LLM ก็​ทำ​ตาม​กลยุทธ์​ผลิต​ร่าง​แรก​ที่​สม​เหตุ​สม​ผล​ได้ เรา​ขัดเกลา​ต่อ​จาก​นั้น และ​เมื่อ​เคส​มาก​พอ​ผ่าน​กลยุทธ์​เดียวกัน template ก็​ปรากฏ​เป็น​ผลพลอยได้ — สินทรัพย์​จึง​ถูก​สร้าง​ขึ้น​ด้วย​การ​ใช้งาน แทนที่​จะ​เป็น​เงื่อนไข​ก่อน​เริ่ม​งาน
  • automation สูง​ขึ้น ขั้น​ที่​เคย​ขับ​ด้วย​มือ​ด้วย prompt ทำ​ไป​เรื่อย ตอน​นี้​เรียก​ใช้​เป็น​คำ​สั่ง workflow จึง​รัน​โดย​ต้อง​ประคอง​น้อย​ลง​มาก
  • ผลลัพธ์​เสถียร​ขึ้น เพราะ​แต่ละ​คำ​สั่ง​เข้า​รหัส​กลยุทธ์​การ​คิด​เดียวกัน​ทุก​ครั้ง ชิ้น​งาน​ที่​มัน​ผลิต — analysis, REASONS Canvas, code ที่ generate — จึง​สอดคล้อง​กัน​มาก​ขึ้น​จากรอบ​สู่​รอบ และ​กำกับ​ดูแล​กับ​รีวิว​ได้​ง่าย​ขึ้น

ใน​ฐานะ “ผู้นำ” ที่​เป็น​มนุษย์ คุณ​ตัดสิน​อย่างไร​ว่า​เมื่อไร​ต้อง​ทำ prompt engineering เพิ่ม​ใน​ขอบเขต portfolio เดียวกัน?

ผม​พึ่ง​ตัว​กระตุ้น​ที่​เป็น​รูปธรรม​สาม​อย่าง ซึ่ง map ตรง​กับ​ขั้น​รีวิว​ใน workflow SPDD:

  • พฤติกรรม​ไม่​ตรง​กัน ระหว่าง​การ​ทดสอบ function (มัก​ด้วย /spdd-api-test) ผม​โฟกัส​ที่​พฤติกรรม​ระบบ​มากกว่า​รายละเอียด​การ implement ถ้า​ผลลัพธ์​เบน​จาก acceptance criteria ที่​นิยาม​ไว้ นั่น​เป็น​สัญญาณ​ว่า prompt ยัง​จับ​เจตนา​ได้​ไม่​แม่น​พอ — เคส​แก้​ตรรกะ​คลาสสิก​ที่​เรา​อัปเดต prompt ก่อน แล้ว​ค่อย​อัปเดต code
  • ตรรกะ​ซับซ้อน​เกิน​เหตุ เมื่อ​รีวิว code สำคัญ ถ้า AI สร้าง​ทาง​แก้​ที่​วิจิตร​เกิน​กว่า​ที่​ปัญหา​ควร​เป็น มัก​เป็น​เพราะ​ส่วน Approach หรือ Operations ของ prompt ระบุ​ไม่​พอ การ​รัด​ข้อ​จำกัด​เหล่า​นั้น​ให้​แน่น​มัก​ทำให้การ generate รอบ​ถัด​ไป​เรียบ​ง่าย​ลง
  • ทำ​ตาม​คำ​สั่ง​ไม่​สำเร็จ เมื่อ AI ไม่​ทำ​ตาม​คำ​สั่ง​ชัด ๆ หรือ​ละเมิด Norm หรือ Safeguard จาก canvas ผม​ถือ​เป็น​สัญญาณ​ว่า​ต้อง​ทำ​ข้อ​จำกัด​นั้น​ให้​เด่น​หรือ​ชัดเจน​ขึ้น​ใน prompt เอง แทนที่​จะ​สู้​ศึก​เดิม​ซ้ำ​ใน​แชต

ทำไม workflow ของ SPDD มี​หก​ขั้น แทนที่​จะ​เป็น pattern วางแผน-แล้ว-เขียน code ที่​ง่าย​กว่า? ยืนยัน​เจตนา​ครั้ง​เดียว​ใน​การ​รีวิว​เดียว​หลัง generate แผน​ไม่​ได้​หรือ?

คำ​ตอบ​สั้น ๆ คือ​ภาระ​ทาง​ความคิด (cognitive load) การ​ยืนยัน​เจตนา​ต้อง​กระจาย​ไป​ตลอด workflow เพราะ​การ​อัด​มัน​เป็นการ​รีวิว​เดียว​หลัง generate แผน​วาง​ของ​มาก​เกิน​ไป​ต่อ​หน้า​ผู้​รีวิว​ใน​คราว​เดียว

ใน​ทาง​ปฏิบัติ คน​คง​สมาธิ​ระดับ​นั้น​ไม่​ไหว — พวก​เขา​กวาดตา เลื่อน​ไว้​ทีหลัง หรือ​อนุมัติ​ตาม​ค่า​เริ่มต้น และ​เจตนา drift ก็​เลี่ยง​ไม่​ได้ แม้​ทุก​อย่าง​จะ​ดูถูกต้อง​บน​กระดาษ

หก​ขั้น​มี​อยู่​เพื่อ​ให้​แต่ละ​จุด​ตรวจ​เล็ก​พอที่​จะ​มี​ส่วนร่วม​กับ​มัน​ได้​จริง:

  • Step 1 หล่อ​ไอเดีย​ดิบ​ให้​เป็น user story (อาจ​มี AI ช่วย) และ Step 2 คือ​จุด​ที่​มนุษย์​รีวิว​และ​ทำให้​กระจ่าง​ว่า story นั้น​หมายความ​ว่า​อย่างไร​ใน​เชิง​ธุรกิจ — ยึด​ที่​ปัญหา​ที่​ถูกต้อง​ก่อน​งาน​ออกแบบ​ใด ๆ จะ​เริ่ม
  • Step 3 ยืนยัน​ความ​เข้าใจ domain ความ​เสี่ยง และ​ทิศทาง​เชิงกลยุทธ์ — “ทำไม” และ “อะไร”
  • Step 4 ยืนยัน structured prompt — การ​ออกแบบ​และ operation — หลัง​จาก​ตกลง​เรื่อง analysis แล้ว​เท่านั้น
  • Step 5 ยืนยัน​พฤติกรรม​และ code หลัง​ล็อก​เจตนา​แล้ว​เท่านั้น
  • Step 6 generate unit test เป็น​ลำดับ​สุดท้าย เมื่อ​การ implement เสถียร​แล้ว

พอ​ถึง​เวลา​ที่​ผู้​รีวิว​มอง code requirement, domain model และ​การ​ออกแบบ​ก็​ถูก​เซ็น​รับรอง​ไป​แล้ว ความ​สนใจ​จึง​ไป​อยู่​กับ​การ​ตัดสิน​ใจ​ที่​สำคัญ​ใน​ขั้น​นั้น ประเด็น​ไม่ใช่​ขั้น​ที่​มาก​ขึ้น​เพื่อ​ตัว​มัน​เอง แต่​คือ​การ​ตัดสิน​ใจ​ที่​แคบ​ลง​ต่อ​ขั้น เพื่อ​ให้​มนุษย์​อยู่​ใน​วง​รอบ​ได้

SPDD รัน API test ก่อน​รีวิว code แต่ unit test ทีหลัง — แทบ​จะ​กลับ​ด้าน​กับ TDD ทำไม​จึง​เรียง​ลำดับ​แบบ​นั้น?

การ​เรียง​ลำดับ​นี้​ตั้งใจ TDD แบบ​คลาสสิก​ใช้ test เพื่อ​ทำให้​พฤติกรรม​กระจ่าง ป้องกัน regression และ​หล่อหลอม​การ​ออกแบบ​ผ่าน feedback ที่​เร็ว SPDD ยัง​ต้องการ​ผลลัพธ์​ทั้ง​สาม​อย่าง — เพียง​กระจาย​มัน​ต่าง​กัน​ไป​ทั่ว workflow:

  • API test มา​ก่อน​เพราะ code ที่ generate มี​ต้นทุน​ต่ำ การ​รีวิว code อย่าง​ลึก​ที่​อาจ​ไม่​ตอบ​โจทย์​พฤติกรรม​ทาง​ธุรกิจ​ที่​ตั้งใจ​ไว้​ด้วย​ซ้ำ​นั้น​มี​คุณค่า​น้อย /spdd-api-test ตรวจ “อะไร” ที่​ขอบ​ระบบ​อย่าง​รวดเร็ว เรา​จึง​รู้​ว่า​กำลัง​รีวิว​สิ่ง​ที่​ทำงาน​ได้​จริง ก่อน​ลงแรง​รีวิว​ด้วย​มนุษย์
  • การ​รีวิว code จึง​โฟกัส​ที่​สิ่ง​ที่​มี​แต่​มนุษย์​ตัดสิน​ได้ เมื่อ API test ผ่าน การ​รีวิว​ก็​เพ่ง​ไป​ที่​ตรรกะ สถาปัตยกรรม trade-off และ​ข้อ​กังวล​เชิง​ไม่​เป็น function — ไม่ใช่​ว่า​พฤติกรรม​พื้นฐาน​ถูก​หรือ​ไม่
  • unit test มา​สุดท้าย​เป็น​ตาข่าย​นิรภัย​กัน regression พอ​ถึง unit test เจตนา​ถูก​ทำให้​ชัด​ผ่าน structured prompt แล้ว และ​การ implement ก็​เสถียร​ขึ้น​ผ่าน​การ​ตรวจ API และ​การ​รีวิว การ generate unit test ตอน​นี้​จึง​เลี่ยง​การ​เขียน​ใหม่​หลัง​การ​เปลี่ยนแปลง​ใหญ่​ที่​ขับ​ด้วย​การ​รีวิว

ดังนั้น test ไม่​ได้​สำคัญ​น้อย​ลง​ใน SPDD สิ่ง​ที่​เปลี่ยน​คือ​เจตนา​ถูก​ทำให้​ชัด​เร็ว​ขึ้น — ผ่าน structured prompt — และ test ถูก​นำ​มา​ใช้​ใน​ขั้น​ที่​มัน​สร้าง​แรง​งัด​ได้​มาก​ที่สุด

ถ้า hotfix ถูก​จัด​ว่า​เข้า​กัน​ได้​แย่​กับ SPDD feedback ที่​สัญญาณ​แรง​ที่สุด​จาก production — bug กรณี​ขอบ และ​โหมด​ความ​ล้มเหลว​ที่​จุด​ชนวน​การ​แก้ — ก็​จะ​ข้าม spec ไป​ถาวร​และ​ไม่​เคย​กลับ​เข้า​สู่​วิธีการ​ไม่ใช่​หรือ?

มัน​จะ​เป็น​เช่น​นั้น ถ้า workflow หยุด​ที่​การ​แก้ คะแนน 1 ดาว​ใน​ตาราง​ความ​เหมาะสม​พูด​ถึง​ความ​เข้า​กัน​ตอน​ต้น​ระหว่าง​เหตุการณ์​เอง: ระหว่าง production incident ที่​กำลัง​เกิด การ​กู้​ระบบ​ต้อง​มา​ก่อน และ​การ​หยุด​เขียน Canvas เป็นการ​ตัดสิน​ใจ​ที่​ผิด

แต่​การ​กำกับ​ดูแล​ไม่​ได้​ถูก​ข้าม — มัน​ถูก​เลื่อน​ไป​หนึ่ง​ขั้น ใน​ทาง​ปฏิบัติ​เรา​แยก hotfix เป็น​สอง​ฉาก​ทัศน์:

  • ฉาก​ทัศน์ A — มี context อยู่​แล้ว ถ้า bug ตก​อยู่​ใน​พื้นที่​ที่ structured prompt ครอบคลุม​อยู่​แล้ว เรา​ใช้ AI วิเคราะห์​ความ​ล้มเหลว ระบุ​ต้นเหตุ แล้ว​ใช้​วง​รอบ SPDD มาตรฐาน​ใน​รูปแบบ​บีบ​อัด: อัปเดต prompt ก่อน แล้ว​ค่อย​อัปเดต code สิ่ง​นี้​คง spec และ​การ implement ให้​เดิน​คู่​กัน และ​การ​แก้​ก็​กลาย​เป็น​ส่วน​ถาวร​ของ​สินทรัพย์​ที่​กำกับ​ดูแล
  • ฉาก​ทัศน์ B — code เก่า​หรือ​ไม่มี context ก่อนหน้า สำหรับ​การ​แก้​เร่งด่วน​ใน code ที่​ไม่​เคย​ถูก​นำ​เข้า SPDD ทาง​ที่​ปฏิบัติ​ได้​คือ​ปล่อย​ให้ AI วิเคราะห์ log และ​แก้​ปัญหา​โดยตรง ขั้น​ปิด​ท้าย​คือ​การ​ทำ post-mortem โดย​ตั้งใจ: สังเคราะห์​การ​แก้ โหมด​ความ​ล้มเหลว และ context ที่​เกี่ยวข้อง​เป็น​สินทรัพย์​ที่​จัด​ทำ​เอกสาร​ใหม่ นั่น​คือ​ที่​ที่​วง​รอบ​การ​กำกับ​ดูแล​ปิด​สำหรับ code เก่า และ​เป็น​วิธี​ที่​ความ​ครอบคลุม​ของ SPDD ค่อย ๆ ขยาย​ทั่ว codebase อย่าง​เป็น​ธรรมชาติ

ประเด็น​สำคัญ​คือ​สัญญาณ​จาก production ป้อน​กลับ​ได้ — แต่​ต้อง​อาศัย​ขั้น​จัด​ทำ​เอกสาร​ที่​ชัดเจน​และ​นำ​โดย​มนุษย์ ไม่ใช่​เกิด​ขึ้น​อัตโนมัติ การ​ข้าม​ขั้น​นั้น​คือ​สิ่ง​ที่​สร้าง​ส่วน​ต่าง spec/code ตาม​ที่​คำถาม​อธิบาย ส่วน​การ​ถือ​มัน​เป็น​ส่วน​หนึ่ง​ของ workflow คือ​สิ่ง​ที่​กัน​มัน​ได้

เคย​คิด​ให้ agent ทำการ​รีวิว prompt/spec เอง​ไหม — ไม่ใช่​มนุษย์​รีวิว Canvas แต่​เป็น agent ที่​อ่าน REASONS Canvas เคียง​ข้าง code diff แล้ว​ตรวจสอบ​การ​จัด​แนว?

เคย — นั่น​คือ​สิ่ง​ที่​คำ​สั่ง /spdd-code-review ทำ​อยู่​แล้ว​โดย​พื้นฐาน มัน​อ่าน REASONS Canvas และ code diff พร้อม​กัน และ​ชี้​จุด​ที่ code drift จาก​เจตนา​ที่​ระบุ​ไว้ คุณ​จึง​โอน​การ​ตรวจการ​จัด​แนว​ให้​คำ​สั่ง​ได้​ทุกเมื่อ​ที่​ต้องการ

trade-off คือ​สิ่ง​ที่​คุณ​ยอม​สละ​ด้วย​การ​ทำ​เช่น​นั้น คำ​สั่ง​ตรวจการ​จัด​แนว​ได้ แต่​มี​สอง​สิ่ง​ที่​มนุษย์​นำ​มา​สู่​การ​รีวิว​ซึ่ง agent แทน​ไม่​ได้:

  • จับ intent drift agent ตรวจ​ได้​ว่า code ตรง​กับ Canvas ไหม แต่​มี​แต่​มนุษย์​ที่​บอก​ได้​ว่า Canvas เอง​ยัง​ตรง​กับ​เจตนา​ทาง​ธุรกิจ​จริง​หรือ​ไม่ หาก​ขาด​การ​ตรวจ​นั้น การ​รีวิว​ที่​ขับ​ด้วย agent ล้วน​อาจ​ดูถูกต้อง​ใน​เงื่อนไข​ของ​มัน​เอง แต่​ยัง​พลาด​เป้าหมาย​จริง
  • ให้​มนุษย์​ได้​เรียนรู้ การ​รีวิว​ยัง​เป็น​ที่​ที่​มนุษย์​เรียนรู้​จาก​ทาง​เลือก​ของ AI — pattern, trade-off, ตัว​เลือก​ที่​ไม่​เคย​คิดถึง การ​ตัด​มนุษย์​ออก​ทำให้​เร็ว​ขึ้น แต่​ปิด​กั้น​การ​เติบโต​ของ​ทักษะ​ระยะ​ยาว​ที่ SPDD ออกแบบ​มา​เพื่อ​ปกป้อง

ดังนั้น​คำ​สั่ง​อยู่​ตรง​นั้น​เมื่อ​คุณ​อยาก​ใช้ แต่​มัน​ถูก​สร้าง​มา​เพื่อ​จัดการ​ส่วน​กลไก​ของ​การ​รีวิว ไม่ใช่​ยึด​มัน​ไป​ทั้งหมด ใน​ตอน​นี้​มนุษย์​อยู่​ใน​วง​รอบ​โดย design เมื่อ​กฎ​การ​ตัดสิน​ใจ​สะสม​มาก​พอ​จะ​ให้​ความ​มั่นใจ​จริง เรา​อาจ​ขยับ​การ​รีวิว​ไป​ฝั่ง agent ที​ละ​ขั้น — แต่​ส่วน​ที่​มนุษย์​เรียนรู้​จาก AI เป็น​สิ่ง​ที่​เรา​ตั้งใจ​จะ​รักษา​ไว้

อะไร​คือ​ก้าว​ต่อ​ไป​ของ SPDD — และ roadmap จะ​ลด​การ​พึ่ง​ความ​เชี่ยวชาญ​ของ​ปัจเจก​ได้​อย่างไร?

สี่​ทิศทาง​กำลัง​กำหนด​วิวัฒนาการ​ของ​วิธี​ปฏิบัติ​นี้ และ​ทั้งหมด​ดึง​ไป​ทาง​เดียวกัน: พึ่ง​ฝีมือ​ส่วนตัว​น้อย​ลง พึ่ง​ความ​สามารถ​ระดับ​องค์กร​ที่​ทำซ้ำ​ได้​มาก​ขึ้น

  • จับ workflow ที่​เกิด​ซ้ำ​ให้​เป็น​คำ​สั่ง​มาก​ขึ้น pattern ที่​เริ่ม​ด้วย /spdd-analysis, /spdd-reasons-canvas และ /spdd-generate ยัง​ห่าง​ไกล​จาก​จุดจบ เมื่อ​เรา​เจอ pattern ที่​เกิด​ซ้ำ​ใน project จริง เรา​ก็​ดึง​มัน​ออก​เป็น​คำ​สั่ง​ใหม่ workflow ที่​สำเร็จ​แต่ละ​อัน​จึง​นำ​กลับ​มา​ใช้​ซ้ำ​ได้ แทนที่​จะ​เป็น​ความ​รู้​ที่​ปัจเจก​ถือ​ไว้
  • การ​ตรวจสอบ​อัตโนมัติ​ใน​ชั้น​สินทรัพย์ เรา​กำลัง​สำรวจ​การ​ตรวจสอบ​อัตโนมัติ​ไม่ใช่​ที่​ระดับ code แต่​ที่​ตัว​สินทรัพย์ SPDD เอง — analysis, REASONS Canvas และ​ชิ้น​งาน prompt เป้าหมาย​คือ​ซ้อน​การ​ตรวจ​อัตโนมัติ และ​เมื่อ​เวลา​ผ่าน​ไป​ก็​ซ้อน​การ​ตัดสิน​ใจ​อัตโนมัติ​บาง​ส่วน ทับ​บน​สินทรัพย์​ชั้น​เจตนา​เหล่า​นี้ เพื่อ​ให้​กรอบ​จับ​ช่อง​โหว่ ความ​ไม่​สอดคล้อง และ​การ​ตัดสิน​รู​ทีนที่​วัน​นี้​พึ่ง​การ​รีวิว​ของ​มนุษย์​ทั้งหมด
  • ค่อย ๆ ยก​อัตรา automation ตัว SPDD เอง​ก็​เป็น harness อยู่​แล้ว — เพียง​เป็น​แบบ​กึ่ง​อัตโนมัติ ที่​มี​มนุษย์​อยู่​ใน​วง​รอบ​บน​การ​ตัดสิน​ใจ​ที่​สำคัญ ทิศทาง​คือ​ยก​อัตรา automation ภายใน harness นั้น​ที​ละ​ขั้น โดย​ให้​จังหวะ​ตาม​สิ่ง​ที่ AI รับมือ​ได้​อย่าง​เชื่อถือ​ได้​ใน​ทาง​ปฏิบัติ ส่วน​งาน workflow จะ​รัน​โดย​ไม่​ต้อง​ประคอง​มาก​ขึ้น​เฉพาะ​เมื่อ model พิสูจน์​ตัว​ว่า​ไว้ใจ​ได้​ใน​งาน​แต่ละ​ชนิด
  • กลไก​ความ​จำ​สำหรับ “ความ​จำ​การ​ตัดสิน​ใจ” เป้าหมาย​คือ​ให้การ​ตัดสิน​ใจ​ใน​อดีต — canvas เก่า, trade-off และ pattern ที่​ยอมรับ — ทำ​หน้าที่​เป็น context ที่​คง​อยู่ เพื่อ​ให้ agent ดึง​การ​ให้​เหตุผล​ใน​อดีต​ที่​ถูกต้อง​มา​ใน​สถานการณ์​หนึ่ง ๆ แทนที่​จะ​ค้น​พบ​ใหม่​ทุก​ครั้ง รายละเอียด​จะ​ถูก​หล่อหลอม​ด้วย feedback จริง

รวม​กัน​แล้ว ทิศทาง​เหล่า​นี้​ขยับ SPDD จาก​วิธีการ​ที่​ให้​รางวัล​ผู้​ปฏิบัติ​ที่​มี​ฝีมือ ไป​สู่​ระบบ​ที่​ตัว​กรอบ​เอง​แบก​น้ำหนัก​มาก​ขึ้น

ทั้งหมด​นี้​สะท้อน​ความ​เข้าใจ​และ​ประสบการณ์​ปัจจุบัน​ของ​เรา และ​มี​แนวโน้ม​จะ​ถูก​ปรับ​เมื่อ​เรา​เรียนรู้​และ​ลงมือ​ปฏิบัติ​ต่อ​ไป


📄 อ่าน​ต้นฉบับ​ภาษา​อังกฤษ: Structured-Prompt-Driven Development (SPDD) — Wei Zhang และ Jessie Jie Xia, martinfowler.com (28 เมษายน 2026)

  1. ใน pipeline ทาง​เดียว requirement ผลิต code ออก​มา​แล้วกระบวนการ​ก็​จบ การ​ปรับ​ใด ๆ หลัง​จาก​นั้น​เกิด​ขึ้น​ที่ code เพียง​อย่าง​เดียว และ​เจตนา​ดั้งเดิม​ก็​ค่อย ๆ คลาดเคลื่อน​ไป​จาก​ความ​เป็น​จริง

    ใน SPDD วง​รอบ​ปิด​ใน​สอง​สเกล — ภายใน1 iteration feedback ไหล​ย้อน​กลับ คือ​การ​แก้​ตรรกะ​อัปเดต prompt ก่อน code ส่วน​การ refactor sync จาก code กลับ​ไป​ยัง prompt ทั้ง​สอง​ฝั่ง​จึง​ไม่​เบน​ออก​จาก​กัน​แบบ​เงียบ ๆ

    ข้าม iteration สินทรัพย์ prompt ที่​สะสม​ไว้ — domain model, การ​ตัดสิน​ใจ​ด้าน​การ​ออกแบบ, บรรทัดฐาน ฯลฯ — กลาย​เป็น context ตั้งต้น​ของ​การ​พัฒนา​ต่อยอด​ครั้ง​ถัด​ไป แต่ละ​รอบ​จึง​ต่อยอด​จาก​ฐาน​ที่​กำกับ​ดูแล​แล้ว แทนที่​จะ​เริ่ม​จาก​ศูนย์

  2. เนื่องจาก​นี่​เป็น​คำ​สั่ง​แบบ​เสริม หาก​ยัง​ไม่มี​ใน​สภาพ​แวดล้อม​เครื่อง​ของ​คุณ คุณ​สามารถ generate มัน​ขึ้น​มา​ได้​ด้วย openspdd generate spdd-story

  3. เนื่องจาก​นี่​เป็น​คำ​สั่ง​แบบ​เสริม หาก​ยัง​ไม่มี​ใน​สภาพ​แวดล้อม​เครื่อง​ของ​คุณ คุณ​สามารถ generate มัน​ขึ้น​มา​ได้​ด้วย openspdd generate spdd-api-test